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

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