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

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