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

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