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

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