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

Last change on this file since 706 was 706, checked in by namnd, 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('/:collaborator:/');
106                                $collaboratorMsg = $status . '|'. preg_replace($aryPatterns, array($collaborator), 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) {
330                $user = array ();
331                $sms = '';
332               
333                $result = $this->get_user_by_cellphone ( $username );
334                $package = $this->get_package ( ( int ) $p_code );
335                if (!$package)
336                {
337                        $sms = lang('_SBG_MO_USER_REGISTER_VIP_NOT_FOUND_MSG');
338                        $status = 0;
339                        return $status . '|' . $sms;
340                }
341                if ($result) {
342                       
343                        if ($result ['acc_balanced'] >= $package ['p_price']) {
344                                $us_id = $result ['us_id'];
345                                $user ['acc_balanced'] = $result ['acc_balanced'] - $package ['p_price'];
346                                if ($this->checkLicense ( $us_id )) {
347                                        $user ['expire_date'] = date ( 'Y-m-d', strtotime ( $result ['expire_date'] . ' + ' . $package ['p_period'] . ' month' ) );
348                                } else {
349                                        $user ['expire_date'] = date ( 'Y-m-d', strtotime ( 'now + ' . $package ['p_period'] . ' month' ) );
350                                }
351                               
352                                $user ['p_id'] = $package ['p_id'];
353                                $user ['updated_time'] = date ( 'Y-m-d H:i:s' );
354                               
355                                $this->updateUser ( $us_id, $user );
356                                $aryPatterns = array('/:period:/');
357                                $sms = preg_replace($aryPatterns, array(date ( 'd/m/Y', strtotime ( $user ['expire_date'] ) )), lang('_SBG_MO_USER_REGISTER_VIP_SUCCESS_MSG'));
358                                $status = 1;
359                        } else {
360                                $sms = lang('_SBG_MO_USER_REGISTER_VIP_FAIL_NOT_ENOUGH_MSG');
361                                $status = 0;
362                        }
363                } else {
364                        $aryPatterns = array('/:username:/');
365                        $sms = preg_replace($aryPatterns, array($username), lang('_SBG_MO_ACCOUNT_NOT_FOUND_MSG'));
366                        $status = 0;
367                }
368                return $status . '|' . $sms;
369        }
370       
371        public function rechargeAccount($username, $amount) {
372                $user = array ();
373                $sms = '';
374                $result = $this->get_user_by_cellphone ( $username );
375                if ($result) {
376                        $us_id = $result ['us_id'];
377                        $user ['acc_balanced'] = $result ['acc_balanced'] + $amount;
378                        $user ['updated_time'] = date ( 'Y-m-d H:i:s' );
379                        $this->updateUser ( $us_id, $user );
380                        $aryPatterns = array('/:amount:/', '/:username:/');
381                        $sms = preg_replace($aryPatterns, array($amount, $username), lang('_SBG_MO_PAY_TO_ACCOUNT_SUCCESS_MSG'));
382                        $status = 1;
383                } else {
384                        $aryPatterns = array('/:username:/');
385                        $sms = preg_replace($aryPatterns, array($username), lang('_SBG_MO_ACCOUNT_NOT_FOUND_MSG'));
386                        $status = 0;
387                }
388                return $status . '|' . $sms;
389        }
390       
391        public function get_user_by_cellphone($cellphone) {
392                $this->db->query ( 'UNLOCK TABLES' );
393                $sql = 'SELECT * FROM tbluser where cellphone = ? LIMIT 0,1';
394                $query = $this->db->query ( $sql, array (
395                                $cellphone
396                ) );
397                $row = $query->row_array ();
398                return $row;
399        }
400       
401        public function isExistcollaborator($collaborator) {
402                $this->db->query ( 'UNLOCK TABLES' );
403                $this->db->select ( '*' )->from ( 'tblcollaborator' )->where ( 'login_name', $collaborator )->limit ( 1 );
404                $result = $this->db->get ()->row_array ();
405                if ($result)
406                        return true;
407                else
408                        return false;
409        }
410       
411        public function updateUser($us_id, $data) {
412                //$this->db->query ( 'UNLOCK TABLES' );
413                $this->db->where ( 'us_id', $us_id );
414                return $this->db->update ( 'tbluser', $data );
415                //write_file('./log/test.log', $this->db->update('tbluser', $data), FOPEN_WRITE_CREATE);
416        }
417       
418        public function get_package($p_code) {
419                $this->db->query ( 'UNLOCK TABLES' );
420                $sql = 'SELECT * FROM tblservicepackage where p_code = ? LIMIT 0,1';
421                $query = $this->db->query ( $sql, array (
422                                $p_code
423                ) );
424                $row = $query->row_array ();
425                return $row;
426        }
427       
428        public function insertSmslog($sentNumber, $serviceID, $commandcode, $info, $receiveTime) {
429                if (preg_match ( '/^(84)([0-9]{9,10})$/', $sentNumber, $aryMatch ) == 1) {
430                        $sentNumber = '0' . $aryMatch [2];
431                }
432               
433                try {
434                        $user = $this->get_user_by_cellphone ( $sentNumber );
435                } catch ( Exception $e ) {
436                }
437               
438                $smslog = array ();
439                $smslog ['sender'] = $sentNumber;
440                $smslog ['us_id'] = isset ( $user ['us_id'] ) ? $user ['us_id'] : NULL;
441                $smslog ['service_id'] = $serviceID;
442                $smslog ['commandcode'] = $commandcode;
443                $smslog ['info'] = $info;
444                $smslog ['created_time'] = $receiveTime;
445                $this->db->query ( 'UNLOCK TABLES' );
446                $sql = 'INSERT INTO tblsmslog(sender, us_id, service_id, commandcode, info, created_time) VALUES(?,?,?,?,?,?)';
447                $query = $this->db->query($sql, $smslog);
448        }
449       
450        public function insertPaidlog($sentNumber, $receiveID, $paidType, $amount, $paidTime) {
451                if (preg_match ( '/^(84)([0-9]{9,10})$/', $sentNumber, $aryMatch ) == 1) {
452                        $sentNumber = '0' . $aryMatch [2];
453                }
454               
455                try {
456                        $user = $this->get_user_by_cellphone ( $receiveID );
457                } catch ( Exception $e ) {
458                }
459                $paidlog = array ();
460                $paidlog ['us_id'] = isset ( $user ['us_id'] ) ? $user ['us_id'] : NULL;
461                $paidlog ['paid_type'] = $paidType;
462                $paidlog ['amount'] = $amount;
463                $paidlog['source'] = "";
464                if ($paidType == 1)
465                {
466                        $paidlog['source'] = $sentNumber;
467                }
468                elseif ($paidType == 2)
469                {
470                        $paidlog['source'] = 'Thẻ cào';
471                }
472                else
473                {
474                        $paidlog['source'] = '';
475                }
476                $paidlog ['paid_time'] = $paidTime;
477                $sql = 'INSERT INTO tblpaidlog(us_id, paid_type, amount, source, paid_time) VALUES (?,?,?,?,?)';
478
479                return $this->db->query ( $sql, $paidlog );
480        }
481       
482        public function insertCardlog($username, $us_id, $status, $pinCode, $serialNum, $cardValue, $receiveTime)
483        {
484                try {
485                        $user = $this->get_user_by_cellphone ( $username );
486                } catch ( Exception $e ) {
487                }
488               
489                $cardlog = array();
490                $cardlog['sender'] = $username;
491                $cardlog['us_id'] = $us_id;
492                $cardlog['status'] = $status;
493                $cardlog['pin_code'] = $pinCode;
494                $cardlog['serial_num'] = $serialNum;
495                $cardlog['card_value'] = $cardValue;
496                $cardlog['created_time'] = $receiveTime;
497                $this->db->query ( 'UNLOCK TABLES' );
498                $sql = 'INSERT INTO tblcardlog(sender, us_id, status, pin_code, serial_num, card_value, created_time) VALUES(?,?,?,?,?,?,?)';
499                $query = $this->db->query ($sql, $cardlog);
500        }
501       
502        public function getPaidlog($data)
503        {
504                $us_id = $data['us_id'];
505                $this->db->query ( 'UNLOCK TABLES' );
506                $sql = "SELECT * FROM tblpaidlog where us_id = ? ORDER BY paid_time DESC LIMIT ".$data['start'].", ".$data['perpage']." ";
507                $query = $this->db->query ( $sql, array (
508                                $us_id
509                ) );
510                $row = $query->result_array();
511                return $row;
512        }
513       
514        public function countPaiglogs($us_id)
515        {
516                $this->db->query ( 'UNLOCK TABLES' );
517                $sql="SELECT COUNT(paid_id) AS total FROM tblpaidlog WHERE us_id = ?";
518                $query = $this->db->query ( $sql, array (
519                                $us_id
520                ) );
521                $result = $query->row_array();
522                return $result['total'];
523        }
524       
525        public function checkPassword($src, $us_id, $token, $password)
526        {
527                $data = $this->vservices->actionExecute ( 'getinfo', array (
528                                'src' => $src,
529                                'us_id' => $us_id,
530                                'token' => $token,
531                                'ponly'=>1
532                ), 'user' );
533               
534                parse_str($data);
535                if(md5($password) == $pencrypted) return true; else return false;
536        }
537       
538        public function insertRegisterVipLog($username, $p_code, $isSms=true)
539        {
540                if ($isSms) $source = 'SMS'; else $source = 'Web';
541                $createdTime = date('Y-m-d H:i:s');
542                $this->db->query ( 'UNLOCK TABLES' );
543                $sql = 'INSERT INTO tblregisterpackagelog (username, source, p_code, created_time) VALUES (?,?,?,?)';
544                $query = $this->db->query ( $sql,  array (
545                                'username'=>$username,
546                                'source'=>$source,
547                                'p_code'=>$p_code,
548                                'created_time'=>$createdTime
549                ) );
550        }
551       
552        public function getPackagelog($data)
553        {
554                $username = $data['username'];
555                $this->db->query ( 'UNLOCK TABLES' );
556                $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']." ";
557                $query = $this->db->query ( $sql, array (
558                                $username
559                ) );
560                $row = $query->result_array();
561                return $row;
562        }
563       
564        public function countPackagelogs($username)
565        {
566                $this->db->query ( 'UNLOCK TABLES' );
567                $sql="SELECT COUNT(id) AS total FROM tblregisterpackagelog WHERE username = ?";
568                $query = $this->db->query ( $sql, array (
569                                $username
570                ) );
571                $result = $query->row_array();
572                return $result['total'];
573        }
574       
575        public function getUserById($us_id) {
576                $this->db->query ( 'UNLOCK TABLES' );
577                $this->db->select ( '*' )->from ( 'tbluser' )->where ( 'tbluser.us_id', $us_id );
578                $query = $this->db->get ();
579                if ($query->num_rows () > 0) {
580                        $row = $query->row_array ();
581                        return $row;
582                }
583        }
584}
Note: See TracBrowser for help on using the repository browser.