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

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

trial

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