source: pro-violet-viettel/sourcecode/application/modules/frontend/models/user_model.php @ 657

Last change on this file since 657 was 654, checked in by quyenla, 10 years ago

Trail Message

File size: 17.5 KB
Line 
1<?php
2
3if (! defined ( 'BASEPATH' ))
4        exit ( 'No direct script access allowed' );
5
6if ( ! defined('_SBG_PAIDTYPE_SMS')) define('_SBG_PAIDTYPE_SMS', 1);
7if ( ! defined('_SBG_PAIDTYPE_CARD')) define('_SBG_PAIDTYPE_CARD', 2);
8
9class User_model extends CI_Model {
10        const TOKENPW = 'violet';
11       
12        public function __construct() {
13                parent::__construct ();
14                $this->vservices->setApiUrl ( $this->config->item ( 'api_url' ) );
15                $this->vservices->setConnection ( $this->curl );
16                $this->load->helper('language');
17                $this->lang->load('messages', 'message');
18        }
19       
20        public function checkLogin($src, $token, $username, $password) {
21                $data = $this->vservices->actionExecute ( 'login', array (
22                                'src' => $src,
23                                'token' => $token,
24                                'username' => $username,
25                                'password' => $password
26                ), 'user' );
27                if(!($data) || is_null($data)) return array('success'=>-1, 'data'=>$data);
28                parse_str ( $data );
29                if ($status == 0 || $status == 4) {
30                        $us_id = ( int ) $id;
31                        $query = "SELECT * FROM tbluser WHERE us_id = ?";
32                        $result = $this->db->query ( $query, array (
33                                        $us_id
34                        ) );
35                        if ($result->num_rows () == 1) {
36                                return array('success'=>1, 'data'=>$data);
37                        } else {
38                                return array('success'=>0, 'data'=>$data);
39                        }
40                } else {
41                        return array('success'=>0, 'data'=>$data);
42                }
43        }
44       
45        public function register($username, $collaborator, &$collaboratorMsg = '') {
46                $user = array ();
47                $password = $this->create_random_password ();
48                $src = 'SBG';
49                $sms = '';
50                $id = 0;
51                $errMsg = '';
52                $token = md5 ( $username . self::TOKENPW );
53                $phone = $username;
54                $status = 0;
55               
56                if (! is_null ( $collaborator ) || $collaborator != '') {
57                        if (! $this->isExistcollaborator ( $collaborator )) {
58                                $aryPatterns = array('/:collaborator:/');
59                                $sms = preg_replace($aryPatterns, array($collaborator), lang('_SBG_MO_COLLABORATOR_NOT_FOUND_MSG'));
60                                $collaboratorMsg = $status . '|'.$sms;
61                                return $status . '|' . $sms;
62                        }
63                }
64               
65                $data = $this->vservices->actionExecute ( 'update', array (
66                                'src' => $src,
67                                'username' => $username,
68                                'password' => $password,
69                                'fullname' => null,
70                                'phone' => $username,
71                                'token' => $token
72                ), 'user' );
73               
74                if(!($data) || is_null($data))
75                {
76                        $sms = lang('_SBG_MO_REGISTER_DISCONTINUE_MSG');
77                        $collaboratorMsg = $status . '|'.$sms;
78                        return $status . '|' . $sms;
79                }
80               
81                parse_str ( $data );
82
83                switch (( int ) $status) {
84                        case 0 :
85                                $us_id = $id;
86                                $user ['created_time'] = date ( 'Y-m-d H:i:s' );
87                                $user ['us_id'] = $us_id;
88                                $user ['p_id'] = 5;
89                                $user['expire_date'] = date('Y-m-d', strtotime("+" . $this->config->item("trial_period") . " days", time()));
90                                $user ['cellphone'] = $username;
91                                if (! is_null ( $collaborator ) || $collaborator != '') {
92                                        $user ['collaborator'] = $collaborator;
93                                }
94                                $this->db->query ( 'UNLOCK TABLES' );
95                                $this->db->insert ( 'tbluser', $user );
96                                $aryPatterns = array ('/:username:/', '/:password:/');
97                                $sms = preg_replace($aryPatterns, array($collaborator), lang('_SBG_MO_USER_REGISTER_SUCCESS_MSG'));
98                                $status = 1;
99                                $aryPatterns = array('/:collaborator:/');
100                                $collaboratorMsg = $status . '|'. preg_replace($aryPatterns, array($collaborator), lang('_SBG_MO_COLLABOLATOR_REGISTER_SUCCESS_MSG'));
101                                break;
102                        case 2 :
103                        case 4 :
104                                $sms = lang('_SBG_MO_USER_REGISTER_DUPLICATE_MSG');
105                                $status = 0;
106                                $aryPatterns = array('/:username:/');
107                                $collaboratorMsg = $status . '|'. preg_replace($aryPatterns, array($username), lang('_SBG_MO_COLLABOLATOR_REGISTER_DUPLICATE_MSG'));
108                                break;
109                        default :
110                                $status = 0;
111                                $sms = $errMsg;
112                                $collaboratorMsg = $status . '|'. $sms;
113                                break;
114                }
115               
116                return $status . '|' . $sms;
117        }
118       
119        public function create_random_password() {
120                // $alphabet = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789";
121                $alphabet = "0123456789";
122                $pass = array ();
123                $alphaLength = strlen ( $alphabet ) - 1;
124                for($i = 0; $i < 6; $i ++) {
125                        $n = rand ( 0, $alphaLength );
126                        $pass [] = $alphabet [$n];
127                }
128                return implode ( $pass );
129        }
130       
131        public function get_user_by_id($us_id) {
132                $this->db->query ( 'UNLOCK TABLES' );
133                $this->db->select ( '*' )->from ( 'tbluser' )->where ( 'us_id', $us_id );
134                $query = $this->db->get ();
135                if ($query->num_rows () > 0) {
136                        $row = $query->row_array ();
137                        return $row;
138                }
139        }
140       
141        public function get_user_info($src, $token, $us_id) {
142                $data = $this->vservices->actionExecute ( 'getinfo', array (
143                                'src' => $src,
144                                'us_id' => $us_id,
145                                'token' => $token
146                ), 'user' );
147                return $data;
148        }
149       
150        public function update_user($src, $token, $user, $us_id) {
151                $data = $this->vservices->actionExecute ( 'update', array (
152                                'src' => $src,
153                                'token' => $token,
154                                'us_id' => $us_id,
155                                'password' => $user ['password'],
156                                'fullname' => $user ['fullname'],
157                                'school' => $user ['school'],
158                                'province' => $user ['province'],
159                                'oldpass' => $user ['oldpass']
160                ), 'user' );
161                return $data;
162        }
163       
164        public function changeProfile($sentNumber, $username, $password, &$status = '') {
165                $user = array ();
166                $src = 'SBG';
167                $errMsg = '';
168                $sms = '';
169                $checkSentNumber = $this->get_user_by_cellphone ( $sentNumber );
170               
171                if ($checkSentNumber) {
172                        $aryPatterns = array('/:sentNumber:/');
173                        $sms =  preg_replace($aryPatterns, array($sentNumber), lang('_SBG_MO_USER_PHONENUM_CHANGE_DUPLICATE_MSG'));
174                        $status = 0;
175                        return $status . '|' . $sms;
176                }
177               
178                $result = $this->get_user_by_cellphone ( $username );
179               
180                if ($result) {
181                       
182                        $us_id = $result ['us_id'];
183                        $token = md5 ( $us_id . self::TOKENPW );
184                        $isCorrectPassword = $this->checkPassword($src, $us_id, $token, $password);
185                        if(!$isCorrectPassword) return '0|'.lang('_SBG_MO_USER_PHONENUM_CHANGE_INCORRECT_PASSWORD_MSG');
186
187                        $data = $this->vservices->actionExecute ( 'update', array (
188                                        'src' => $src,
189                                        'token' => $token,
190                                        'us_id' => $us_id,
191                                        'username' => $sentNumber,
192                                        "password" => $password,
193                                        'oldpass' => $password,
194                                        'phone' => $sentNumber
195                        ), 'user' );
196
197                        if(!($data) || is_null($data))
198                        {
199                                $sms = lang('_SBG_MO_PHONENUM_CHANGE_DISCONTINUE_MSG');
200                                $status = 0;
201                                return $status . '|' . $sms;
202                        }
203                        parse_str ( $data );
204                        switch (( int ) $status) {
205                                case 0 :
206                                        $us_id = $id;
207                                        $user ['updated_time'] = date ( 'Y-m-d H:i:s' );
208                                        $user ['us_id'] = $us_id;
209                                        $user ['cellphone'] = $sentNumber;
210                                        $this->updateUser ( $us_id, $user );
211                                        $aryPatterns = array('/:username:/', '/:sentNumber:/');
212                                        $sms =  preg_replace($aryPatterns, array($username, $sentNumber), lang('_SBG_MO_USER_NEW_PHONENUM_CHANGE_SUCCESS_MSG'));
213                                        $status = 1;
214                                        break;
215                                case 2:
216                                        $aryPatterns = array('/:sentNumber:/');
217                                        $sms = preg_replace($aryPatterns, array($sentNumber), lang('_SBG_MO_USER_PHONENUM_CHANGE_DUPLICATE_MSG'));
218                                        $status = 0;
219                                        break;
220                                case 5 :
221                                        $aryPatterns = array('/:username:/');
222                                        $sms = preg_replace($aryPatterns, array($username), lang('_SBG_MO_USER_PHONENUM_NOT_REGISTER_MSG'));
223                                        $status = 0;
224                                        break;
225                                default :
226                                        $status = 0;
227                                        $sms = $errMsg;
228                                        break;
229                        }
230                } else {
231                        $aryPatterns = array('/:username:/');
232                        $sms = preg_replace($aryPatterns, array($username), lang('_SBG_MO_USER_PHONENUM_NOT_REGISTER_MSG'));
233                        $status = 0;
234                }
235                return $status . '|' . $sms;
236        }
237       
238        public function changePassword($username, $password, &$status = '') {
239                $user = array ();
240                $src = 'SBG';
241                $errMsg = '';
242                $sms = '';
243                $isForgotPassword = false;
244                $pass = $password;
245               
246                if (is_null ( $password ) || $password == '') {
247                        $pass = $this->create_random_password ();
248                        $isForgotPassword = true;
249                }
250               
251                $result = $this->get_user_by_cellphone ( $username );
252               
253                if ($result) {
254                        $us_id = $result ['us_id'];
255                        $token = md5 ( $us_id . self::TOKENPW );
256                        $data = $this->vservices->actionExecute ( 'update', array (
257                                        'src' => $src,
258                                        'token' => $token,
259                                        'us_id' => $us_id,
260                                        "password" => $pass
261                        ), 'user' );
262                       
263                        if(!($data) || is_null($data))
264                        {
265                                $sms = lang('_SBG_MO_PASSWORD_CHANGE_DISCONTINUE_MSG');
266                                $status = 0;
267                                return $status . '|' . $sms;
268                        }
269                        parse_str ( $data );
270                        switch (( int ) $status) {
271                                case 0 :
272                                        $us_id = $id;
273                                        $user ['updated_time'] = date ( 'Y-m-d H:i:s' );
274                                        $this->updateUser ( $us_id, $user );
275                                        if ($isForgotPassword) {
276                                                $aryPatterns = array('/:pass:/');
277                                                $sms = preg_replace($aryPatterns, array($pass), lang('_SBG_MO_USER_PASSWORD_RECOVERY_MSG'));
278                                        } else {
279                                                $aryPatterns = array('/:password:/');
280                                                $sms = preg_replace($aryPatterns, array($pass), lang('_SBG_MO_USER_PASSWORD_CHANGE_SUCCESS_MSG'));
281                                        }
282                                        $status = 1;
283                                        break;
284                                case 5 :
285                                        $aryPatterns = array('/:username:/');
286                                        $sms = preg_replace($aryPatterns, array($username), lang('_SBG_MO_USER_PHONENUM_NOT_REGISTER_MSG'));
287                                        $status = 0;
288                                        break;
289                                default :
290                                        $status = 0;
291                                        $sms = $errMsg;
292                                        break;
293                        }
294                } else {
295                        $aryPatterns = array('/:username:/');
296                        $sms = preg_replace($aryPatterns, array($username), lang('_SBG_MO_USER_PHONENUM_NOT_REGISTER_MSG'));
297                        $status = 0;
298                }
299                return $status . '|' . $sms;
300        }
301       
302        public function checkLicense($userId) {
303                $isNotExpired = false;
304                $userInfo = array ();
305                $userInfo = $this->get_user_by_id ( $userId );
306               
307                $expireDate = $userInfo ['expire_date'];
308               
309                if ((trim ( $expireDate ) == ''))
310                        return $isNotExpired;
311               
312                $today = mktime ();
313                $expireTime = strtotime ( $expireDate . ' 23:59:59' );
314                $isNotExpired = ($today < $expireTime);
315                return $isNotExpired;
316        }
317       
318        public function registerVip($username, $p_code) {
319                $user = array ();
320                $sms = '';
321               
322                $result = $this->get_user_by_cellphone ( $username );
323                $package = $this->get_package ( ( int ) $p_code );
324                if (!$package)
325                {
326                        $sms = lang('_SBG_MO_USER_REGISTER_VIP_NOT_FOUND_MSG');
327                        $status = 0;
328                        return $status . '|' . $sms;
329                }
330                if ($result) {
331                       
332                        if ($result ['acc_balanced'] >= $package ['p_price']) {
333                                $us_id = $result ['us_id'];
334                                $user ['acc_balanced'] = $result ['acc_balanced'] - $package ['p_price'];
335                                if ($this->checkLicense ( $us_id )) {
336                                        $user ['expire_date'] = date ( 'Y-m-d', strtotime ( $result ['expire_date'] . ' + ' . $package ['p_period'] . ' month' ) );
337                                } else {
338                                        $user ['expire_date'] = date ( 'Y-m-d', strtotime ( 'now + ' . $package ['p_period'] . ' month' ) );
339                                }
340                               
341                                $user ['p_id'] = $package ['p_id'];
342                                $user ['updated_time'] = date ( 'Y-m-d H:i:s' );
343                               
344                                $this->updateUser ( $us_id, $user );
345                                $aryPatterns = array('/:period:/');
346                                $sms = preg_replace($aryPatterns, array(date ( 'd/m/Y', strtotime ( $user ['expire_date'] ) )), lang('_SBG_MO_USER_REGISTER_VIP_SUCCESS_MSG'));
347                                $status = 1;
348                        } else {
349                                $sms = lang('_SBG_MO_USER_REGISTER_VIP_FAIL_NOT_ENOUGH_MSG');
350                                $status = 0;
351                        }
352                } else {
353                        $aryPatterns = array('/:username:/');
354                        $sms = preg_replace($aryPatterns, array($username), lang('_SBG_MO_ACCOUNT_NOT_FOUND_MSG'));
355                        $status = 0;
356                }
357                return $status . '|' . $sms;
358        }
359       
360        public function rechargeAccount($username, $amount) {
361                $user = array ();
362                $sms = '';
363                $result = $this->get_user_by_cellphone ( $username );
364                if ($result) {
365                        $us_id = $result ['us_id'];
366                        $user ['acc_balanced'] = $result ['acc_balanced'] + $amount;
367                        $user ['updated_time'] = date ( 'Y-m-d H:i:s' );
368                        $this->updateUser ( $us_id, $user );
369                        $aryPatterns = array('/:amount:/', '/:username:/');
370                        $sms = preg_replace($aryPatterns, array($amount, $username), lang('_SBG_MO_PAY_TO_ACCOUNT_SUCCESS_MSG'));
371                        $status = 1;
372                } else {
373                        $aryPatterns = array('/:username:/');
374                        $sms = preg_replace($aryPatterns, array($username), lang('_SBG_MO_ACCOUNT_NOT_FOUND_MSG'));
375                        $status = 0;
376                }
377                return $status . '|' . $sms;
378        }
379       
380        public function get_user_by_cellphone($cellphone) {
381                $this->db->query ( 'UNLOCK TABLES' );
382                $sql = 'SELECT * FROM tbluser where cellphone = ? LIMIT 0,1';
383                $query = $this->db->query ( $sql, array (
384                                $cellphone
385                ) );
386                $row = $query->row_array ();
387                return $row;
388        }
389       
390        public function isExistcollaborator($collaborator) {
391                $this->db->query ( 'UNLOCK TABLES' );
392                $this->db->select ( '*' )->from ( 'tblcollaborator' )->where ( 'login_name', $collaborator )->limit ( 1 );
393                $result = $this->db->get ()->row_array ();
394                if ($result)
395                        return true;
396                else
397                        return false;
398        }
399       
400        public function updateUser($us_id, $data) {
401                $this->db->query ( 'UNLOCK TABLES' );
402                $this->db->where ( 'us_id', $us_id );
403                $this->db->update ( 'tbluser', $data );
404        }
405       
406        public function get_package($p_code) {
407                $this->db->query ( 'UNLOCK TABLES' );
408                $sql = 'SELECT * FROM tblservicepackage where p_code = ? LIMIT 0,1';
409                $query = $this->db->query ( $sql, array (
410                                $p_code
411                ) );
412                $row = $query->row_array ();
413                return $row;
414        }
415       
416        public function insertSmslog($sentNumber, $serviceID, $commandcode, $info, $receiveTime) {
417                if (preg_match ( '/^(84)([0-9]{9,10})$/', $sentNumber, $aryMatch ) == 1) {
418                        $sentNumber = '0' . $aryMatch [2];
419                }
420               
421                try {
422                        $user = $this->get_user_by_cellphone ( $sentNumber );
423                } catch ( Exception $e ) {
424                }
425               
426                $smslog = array ();
427                $smslog ['sender'] = $sentNumber;
428                $smslog ['us_id'] = isset ( $user ['us_id'] ) ? $user ['us_id'] : NULL;
429                $smslog ['service_id'] = $serviceID;
430                $smslog ['commandcode'] = $commandcode;
431                $smslog ['info'] = $info;
432                $smslog ['created_time'] = $receiveTime;
433                $this->db->query ( 'UNLOCK TABLES' );
434                $sql = 'INSERT INTO tblsmslog(sender, us_id, service_id, commandcode, info, created_time) VALUES(?,?,?,?,?,?)';
435                $query = $this->db->query($sql, $smslog);
436        }
437       
438        public function insertPaidlog($sentNumber, $receiveID, $paidType, $amount, $paidTime) {
439                if (preg_match ( '/^(84)([0-9]{9,10})$/', $sentNumber, $aryMatch ) == 1) {
440                        $sentNumber = '0' . $aryMatch [2];
441                }
442               
443                try {
444                        $user = $this->get_user_by_cellphone ( $receiveID );
445                } catch ( Exception $e ) {
446                }
447                $paidlog = array ();
448                $paidlog ['us_id'] = isset ( $user ['us_id'] ) ? $user ['us_id'] : NULL;
449                $paidlog ['paidType'] = $paidType;
450                $paidlog ['amount'] = $amount;
451                $paidlog['source'] = "";
452                if ($paidType == 1)
453                {
454                        $paidlog['source'] = $sentNumber;
455                       
456                }else
457                {
458                        $paidlog['source'] = null;
459                }
460                $paidlog ['paidTime'] = $paidTime;
461                $this->db->query ( 'UNLOCK TABLES' );
462                $sql = 'INSERT INTO tblpaidlog(us_id, paid_type, amount, source, paid_time) VALUES (?,?,?,?,?)';
463                $query = $this->db->query ( $sql, $paidlog );
464        }
465       
466        public function insertCardlog($username, $pinCode, $serialNum, $cardValue, $receiveTime)
467        {
468                try {
469                        $user = $this->get_user_by_cellphone ( $username );
470                } catch ( Exception $e ) {
471                }
472               
473                $cardlog = array();
474                $cardlog['sender'] = $username;
475                $cardlog['us_id'] = isset ( $user ['us_id'] ) ? $user ['us_id'] : NULL;
476                $cardlog['pin_code'] = $pinCode;
477                $cardlog['serial_num'] = $serialNum;
478                $cardlog['card_value'] = $cardValue;
479                $cardlog['created_time'] = $receiveTime;
480                $this->db->query ( 'UNLOCK TABLES' );
481                $sql = 'INSERT INTO tblcardlog(sender, us_id, pin_code, serial_num, card_value, created_time) VALUES(?,?,?,?,?,?)';
482                $query = $this->db->query ($sql, $cardlog);
483        }
484       
485        public function getPaidlog($data)
486        {
487                $us_id = $data['us_id'];
488                $this->db->query ( 'UNLOCK TABLES' );
489                $sql = "SELECT * FROM tblpaidlog where us_id = ? ORDER BY paid_time DESC LIMIT ".$data['start'].", ".$data['perpage']." ";
490                $query = $this->db->query ( $sql, array (
491                                $us_id
492                ) );
493                $row = $query->result_array();
494                return $row;
495        }
496       
497        public function countPaiglogs($us_id)
498        {
499                $this->db->query ( 'UNLOCK TABLES' );
500                $sql="SELECT COUNT(paid_id) AS total FROM tblpaidlog WHERE us_id = ?";
501                $query = $this->db->query ( $sql, array (
502                                $us_id
503                ) );
504                $result = $query->row_array();
505                return $result['total'];
506        }
507       
508        public function checkPassword($src, $us_id, $token, $password)
509        {
510                $data = $this->vservices->actionExecute ( 'getinfo', array (
511                                'src' => $src,
512                                'us_id' => $us_id,
513                                'token' => $token,
514                                'ponly'=>1
515                ), 'user' );
516               
517                parse_str($data);
518                if(md5($password) == $pencrypted) return true; else return false;
519        }
520       
521        public function insertRegisterVipLog($username, $p_code, $isSms=true)
522        {
523                if ($isSms) $source = 'SMS'; else $source = 'Web';
524                $createdTime = date('Y-m-d H:i:s');
525                $this->db->query ( 'UNLOCK TABLES' );
526                $sql = 'INSERT INTO tblregisterpackagelog (username, source, p_code, created_time) VALUES (?,?,?,?)';
527                $query = $this->db->query ( $sql,  array (
528                                'username'=>$username,
529                                'source'=>$source,
530                                'p_code'=>$p_code,
531                                'created_time'=>$createdTime
532                ) );
533        }
534       
535        public function getPackagelog($data)
536        {
537                $username = $data['username'];
538                $this->db->query ( 'UNLOCK TABLES' );
539                $sql = "SELECT * FROM tblregisterpackagelog INNER JOIN tblservicepackage ON tblservicepackage.p_code = tblregisterpackagelog.p_code where username = ? ORDER BY created_time DESC LIMIT ".$data['start'].", ".$data['perpage']." ";
540                $query = $this->db->query ( $sql, array (
541                                $username
542                ) );
543                $row = $query->result_array();
544                return $row;
545        }
546       
547        public function countPackagelogs($username)
548        {
549                $this->db->query ( 'UNLOCK TABLES' );
550                $sql="SELECT COUNT(id) AS total FROM tblregisterpackagelog WHERE username = ?";
551                $query = $this->db->query ( $sql, array (
552                                $username
553                ) );
554                $result = $query->row_array();
555                return $result['total'];
556        }
557}
Note: See TracBrowser for help on using the repository browser.