source: pro-violet-viettel/sourcecode/application/modules/collaborator/models/collaborator_model.php

Last change on this file was 906, checked in by namnd, 10 years ago
File size: 16.6 KB
Line 
1<?php
2
3if (! defined ( 'BASEPATH' ))
4        exit ( 'No direct script access allowed' );
5
6if ( ! defined('_SBG_REGISTER_FOR'))                                    define('_SBG_REGISTER_FOR',                             'DK');
7if ( ! defined('_SBG_REGISTER_VIP_FOR'))                                define('_SBG_REGISTER_VIP_FOR',                                 'VIP');
8if ( ! defined('_SBG_CHARGING_FOR'))                                    define('_SBG_CHARGING_FOR',                             'NAP');
9if ( ! defined('_SBG_SYNTAX_ERR'))                                              define('_SBG_SYNTAX_ERR',                       'SYNTAX_ERR');
10
11if ( ! defined('_SBG_CHARGING_SUCCESS'))                                define('_SBG_CHARGING_SUCCESS', 1);
12if ( ! defined('_SBG_CHARGING_FAIL'))                                   define('_SBG_CHARGING_FAIL', -1);
13if ( ! defined('_SBG_CHARGING_FAIL_NOT_ENOUGH'))                define('_SBG_CHARGING_FAIL_NOT_ENOUGH', 401);
14if ( ! defined('_SBG_CHARGING_FAIL_NOT_VIETTEL'))               define('_SBG_CHARGING_FAIL_NOT_VIETTEL', 402);
15if ( ! defined('_SBG_CHARGING_NUMBER_NOT_EXISTED'))     define('_SBG_CHARGING_NUMBER_NOT_EXISTED', 403);
16if ( ! defined('_SBG_CHARGING_NUMBER_NOT_AVAILABLE'))   define('_SBG_CHARGING_NUMBER_NOT_AVAILABLE', 404);
17if ( ! defined('_SBG_CHARGING_NUMBER_CHANGED_OWNER'))   define('_SBG_CHARGING_NUMBER_CHANGED_OWNER', 405);
18if ( ! defined('_SBG_CHARGING_FAIL_MORETHAN_LIMIT'))    define('_SBG_CHARGING_FAIL_MORETHAN_LIMIT', 406);
19if ( ! defined('_SBG_CHARGING_GENERAL_ERROR'))                  define('_SBG_CHARGING_GENERAL_ERROR', 440);
20if ( ! defined('_SBG_CHARGING_NUMBER_NOT_REGISTED'))    define('_SBG_CHARGING_NUMBER_NOT_REGISTED', 501);
21if ( ! defined('_SBG_CHARGING_MAX_VALUE'))                              define('_SBG_CHARGING_MAX_VALUE', 50000);
22
23if ( ! defined('_SBG_PAIDTYPE_SMS')) define('_SBG_PAIDTYPE_SMS', 1);
24if ( ! defined('_SBG_PAIDTYPE_CARD')) define('_SBG_PAIDTYPE_CARD', 2);
25
26if ( ! defined('_SBG_MO_PROCCESS_ERR'))                                 define('_SBG_MO_PROCCESS_ERR', 0);
27
28class Collaborator_model extends CI_Model {
29       
30        const TOKENPW = 'violet';
31        const SRC = 'SBG';
32        private $arrServicesPattern = array(
33                                                                        _SBG_REGISTER_FOR => array('pattern' => '/^(DK)$/'),
34                                                                        _SBG_REGISTER_VIP_FOR => array('pattern' => '/^(VIP)([[:blank:]])([a-zA-Z0-9]{1,})$/'),
35                                                                        _SBG_CHARGING_FOR => array('pattern' => '/^(NAP)$/')
36                                                                );
37       
38        public function __construct() {
39                parent::__construct ();
40                $this->vservices->setApiUrl ( $this->config->item ( 'api_url' ) );
41                $this->vservices->setConnection ( $this->curl );
42                $this->load->helper('language');
43                $this->lang->load('messages', 'message');
44        }
45       
46        public function serviceAnalys($service){
47               
48                $aryMatched = array(); 
49                $aryContent = array();
50                $result = FALSE;
51                foreach ($this->arrServicesPattern as $case => $pattern)
52                {
53                        $result = preg_match($pattern['pattern'], strtoupper(trim($service)));
54                        if ((bool)$result) {
55                                $aryMatched = explode(' ', trim($service));
56                                break;
57                        }
58                }
59               
60                $case = (bool)$result ? $case:_SBG_SYNTAX_ERR;
61               
62                foreach($aryMatched as $k => $val) {
63                        if ($k > 0) $aryContent[] = $val;
64                }
65               
66               
67                return array('case' => $case, 'content' => $aryContent);
68        }
69       
70        public function isExistUser($cellphone)
71        {
72                $sql = "SELECT * FROM tbluser WHERE cellphone = ?";
73                $this->db->query($sql, array('cellphone'=>$cellphone));
74                if ($this->db->affected_rows() >0){
75                        return true;
76                }else{
77                        return false;
78                }
79        }
80       
81        public function processUser($user, $sentNumber)
82        {
83                $this->load->model('frontend/user_model');
84                $data = array();
85                $data['charging'] = array();
86                $data['register-vip'] = array();
87                $data['register'] = array();
88                $username = $user['username'];
89                $service = $user['service'];
90                $amount = $user['amount'];
91                $isExist = $this->isExistUser($username);
92                //$isExist = false;
93                if (!$isExist){
94                        $data['register']['data'] = $this->registerUser($user, $sentNumber);
95                        $user['service'] = "Đăng kÜ";
96                        $user['amount'] = null;
97                        $data['register']['user'] = $user;
98                        $data['register']['date'] = date('d-m-Y H:i:s');
99                }else{
100                        $data['register']['data']['success'] = 0;
101                        $data['register']['data']['error'] = "Người dùng đã tồn tại";
102                        $user['service'] = "Đăng kÜ";
103                        $user['amount'] = null;
104                        $data['register']['user'] = $user;
105                        $data['register']['date'] = date('d-m-Y H:i:s');
106                }
107               
108                // NAP
109                if ($amount){
110                        $user['amount'] = $amount;
111                        $data['charging']['data'] = $this->chargingForUser($user, $sentNumber);
112                        $user['service'] = "Nạp tiền";
113                        $data['charging']['user'] = $user;
114                        $data['charging']['date'] = date('d-m-Y H:i:s');
115                }
116                if ($service){
117                        // ĐK VIP
118                       
119                        $aryMatched = explode(' ', trim($service));
120                        $p_code = $aryMatched[1];
121                        $package = $package = $this->user_model->get_package ( $p_code );
122                        $amount = $package['p_price'];
123                        $user['amount'] = $amount;
124                        $data['chargingvip']['data'] = $this->chargingForUser($user, $sentNumber);
125                        $user['service'] = "Nạp tiền";
126                        $data['chargingvip']['user'] = $user;
127                        $data['chargingvip']['date'] = date('d-m-Y H:i:s');
128                       
129                        if ($data['chargingvip']['data']['success'] == 1){
130                       
131                                $data['register-vip']['data'] = $this->registerVipUser($user, $p_code);
132                                $user['service'] = "Đăng kÜ ".trim($service);
133                                $user['amount'] = -$amount;
134                                $data['register-vip']['user'] = $user;
135                                $data['register-vip']['date'] = date('d-m-Y H:i:s');
136                        }else{
137                                $data['register-vip']['data']['success'] = 0;
138                                $data['register-vip']['data']['error'] = "Tài khoản chính cá»§a thuê bao ".$sentNumber. " khÃŽng đủ để thá»±c hiện giao dịch này";
139                                $user['service'] = "Đăng kÜ ".trim($service);
140                                $user['amount'] = -$amount;
141                                $data['register-vip']['user'] = $user;
142                                $data['register-vip']['date'] = date('d-m-Y H:i:s');
143                        }
144                       
145                }
146                /*     
147                }elseif ($service){
148                        // ĐK VIP
149                        $aryMatched = explode(' ', trim($service));
150                        $p_code = $aryMatched[1];
151                        $data['register-vip']['data'] = $this->registerVipUser($user, $p_code);
152                        $user['service'] = "Đăng kÜ ".trim($service);
153                        $data['register-vip']['user'] = $user;
154                        $data['register-vip']['date'] = date('d-m-Y H:i:s');
155                }else{
156                        // DK
157                        $data['register']['data'] = $this->registerUser($user, $sentNumber);
158                        $user['service'] = "Đăng kÜ";
159                        $data['register']['user'] = $user;
160                        $data['register']['date'] = date('d-m-Y H:i:s');
161                }*/
162                return $data;
163        }
164        /*
165        public function processUser($user, $sentNumber)
166        {
167                $data = array();       
168                $serviceAnalys = $this->serviceAnalys($user['service']);
169               
170                $case = $serviceAnalys['case'];
171                $aryContents = isset($serviceAn
172                alys['content']) ? $serviceAnalys['content']: null;
173               
174                switch($case){
175                        case _SBG_REGISTER_FOR:
176                                $data = $this->registerUser($user, $sentNumber);
177                                break;
178                        case _SBG_REGISTER_VIP_FOR:
179                                $p_code = $aryContents[0];
180                                $data = $this->registerVipUser($user, $p_code);
181                                break;
182                        case _SBG_CHARGING_FOR:
183                                $data = $this->chargingForUser($user, $sentNumber);
184                                break;
185                        case _SBG_SYNTAX_ERR:
186                        default:
187                                $data['success'] = 0;
188                                $data['user'] = $user;
189                                $data['error'] = lang('_SBG_MO_SYNTAX_ERR_MSG');
190                                break;
191                }
192               
193                return $data;
194               
195        }
196*/
197        public function registerUser($user, $sentNumber)
198        {
199
200                $data = array();
201                //$data['user'] = $user;
202                $this->load->model('frontend/user_model');
203                $this->load->model('services/services_model');
204                $src = self::SRC;
205                $token = md5($user['username'] . self::TOKENPW);
206                $sms = '';
207                $collboratorId = $user['collboratorId'];
208                $username = $user['username'];
209                $password = $this->createRandomPassword();
210                $fullname = $user['fullname'];
211                $school = $user['school'];
212                $province = $user['province'];
213                $district = $user['district'];
214               
215                $strResult = $this->vservices->actionExecute ( 'update', array (
216                                'token' => $token,
217                                'src' => $src,
218                                'username' => $username,
219                                'fullname' => $fullname,
220                                'phone' => $username,
221                                'password' => $password,
222                                'school' => $school,
223                                'province' => $province
224                        ), 'user' );
225               
226                $arrUser = array();
227                $arrResult = array();
228                parse_str($strResult, $arrResult);
229                $status = (int)$arrResult['status'];
230
231                switch ($status){
232                        case 0 :
233                                $this->load->model('frontend/servicepackage_model');
234                                $trialpackage=$this->servicepackage_model->getTrialPackage();
235                                $us_id = $arrResult['id'];
236                                $arrUser['us_id'] = $us_id;
237                                $arrUser['cellphone'] = $username;
238                                $arrUser['collaborator'] = $sentNumber;
239                                $arrUser['acc_balanced'] = 0;
240                                $arrUser['p_id'] = $trialpackage['p_id'];
241                                $arrUser['expire_date'] = date('Y-m-d', strtotime("+" . $this->config->item("trial_period") . " days", time()));
242                                $arrUser['province'] = $province;
243                                $arrUser['district'] = $district;
244                                $arrUser['created_time'] = date ( 'Y-m-d H:i:s' );
245                                $arrUser ['updated_time'] = date ( 'Y-m-d H:i:s' );
246                                $this->db->insert ( 'tbluser', $arrUser );
247                                $aryPatterns = array ('/:trialdays:/', '/:username:/', '/:password:/');
248                                $trialdays = $this->config->item('trial_period');
249                                $trialdays = strlen($trialdays) < 2 ? '0'. $trialdays : $trialdays;
250                                if ($this->user_model->isViettel($username)){
251                                        $sms = preg_replace($aryPatterns, array($trialdays. ' ngay', $username, $password), lang('_SBG_MO_USER_VIETTEL_REGISTER_SUCCESS_MSG'));
252                                }else{
253                                        $aryPatterns = array ('/:username:/', '/:password:/');
254                                        $sms = preg_replace($aryPatterns, array($username, $password), lang('_SBG_MO_USER_NOT_VIETTEL_REGISTER_SUCCESS_MSG'));
255                                }
256                                $sendMT = $this->services_model->sendMT($username, $sms);
257                                $data['success'] = 1;
258                                break;
259                        case 2:
260                        case 4:
261                                $sms = lang('_SBG_MO_USER_REGISTER_DUPLICATE_MSG');
262                                $sendMT = $this->services_model->sendMT($username, $sms);
263                                $aryPatterns = array('/:username:/');
264                                $error = preg_replace($aryPatterns, array($username), lang('_SBG_MO_COLLABOLATOR_REGISTER_DUPLICATE_MSG'));
265                                $data['success'] = 0;
266                                $data['error'] = $error;
267                                break;
268                        default:
269                                $data['success'] = 0;
270                                $data['error'] = $arrUser['errMsg'];
271                                break;
272                }
273       
274                return $data;
275        }
276       
277        public function registerVipUser($arrUser, $p_code)
278        {
279                $data = array();
280                //$data['user'] = $arrUser;
281                $this->load->model('frontend/user_model');
282                $username = $arrUser['username'];
283                $result = $this->user_model->get_user_by_cellphone ( $username );
284                $package = $this->user_model->get_package ( ( int ) $p_code );
285                if (!$package)
286                {
287                        $data['success'] = 0;
288                        $data['error'] = lang('_SBG_MO_USER_REGISTER_VIP_NOT_FOUND_MSG');
289                        $data['user'] = $arrUser;
290                        return $data;
291                }
292                if ($result) {
293                        if ($result ['acc_balanced'] >= $package ['p_price']) {
294                                $us_id = $result ['us_id'];
295                                $user ['acc_balanced'] = $result ['acc_balanced'] - $package ['p_price'];
296                                if ($this->user_model->checkLicense ( $us_id )) {
297                                        $user ['expire_date'] = date ( 'Y-m-d', strtotime ( $result ['expire_date'] . ' + ' . $package ['p_period'] . ' month' ) );
298                                } else {
299                                        $user ['expire_date'] = date ( 'Y-m-d', strtotime ( 'now + ' . $package ['p_period'] . ' month' ) );
300                                }
301                               
302                                $user ['p_id'] = $package ['p_id'];
303                                $user ['updated_time'] = date ( 'Y-m-d H:i:s' );
304                               
305                                $this->user_model->updateUser ( $us_id, $user );
306                                $aryPatterns = array('/:period:/');
307                                $sms = preg_replace($aryPatterns, array(date ( 'd/m/Y', strtotime ( $user ['expire_date'] ) )), lang('_SBG_MO_USER_REGISTER_VIP_SUCCESS_MSG'));
308                                $sendMT = $this->services_model->sendMT($username, $sms);
309               
310                               
311                                $data['success'] = 1;
312                                $this->user_model->insertRegisterVipLog($username, $package['p_id'], $true);
313                        } else {
314                                $sms = lang('_SBG_MO_USER_REGISTER_VIP_FAIL_NOT_ENOUGH_MSG');
315                                $sendMT = $this->services_model->sendMT($username, $sms);
316                               
317                                $data['success'] = 0;
318                                $data['error'] = $sms;
319                        }
320                } else {
321                        $aryPatterns = array('/:username:/');
322                        $sms = preg_replace($aryPatterns, array($username), lang('_SBG_MO_ACCOUNT_NOT_FOUND_MSG'));
323                        $sendMT = $this->services_model->sendMT($username, $sms);
324                       
325                        $data['success'] = 0;
326                        $data['error'] = $sms;
327                }
328       
329                return $data;
330        }
331       
332        public function chargingForUser($user, $sentNumber)
333        {
334
335                $this->load->model('services/services_model');
336                $this->load->model('frontend/user_model');
337                $data = array();
338                //$data['user'] = $user;
339                $username = $user['username'];
340                $amount = $user['amount'];
341               
342                if (!preg_match('/^[0-9]{3,}$/', $amount)) {
343                        $smsReturn = lang('_SBG_MO_AMOUNT_WRONG_FORMAT_MSG');
344                        $data['success'] = 0;
345                        $data['error'] = $smsReturn;
346                }
347       
348                $result =$this->services_model->chargeRootAccountProcess($sentNumber, $amount, $sentNumber.' paid for SBG');
349
350                if ($result == _SBG_CHARGING_SUCCESS) {
351                        $smsReturn = $this->user_model->rechargeAccount($username, $amount);
352                       
353                        $arySmsReturn = explode ('|', $smsReturn);
354                        $aryPatterns = array('/:amount:/', '/:sentNumber:/');
355                        $smsMT = preg_replace($aryPatterns, array($amount, $sentNumber), lang('_SBG_MO_PAY_TO_ACCOUNT_FOR_MSG'));
356                       
357                        $sendMT = $this->services_model->sendMT($this->services_model->formatPhoneNumber($username, -1), $smsMT);
358                        $data['success'] = 1;
359                       
360                        //write to paid log
361                        $paidTime = date('Y-m-d H:i:s');
362                        $this->user_model->insertPaidlog($sentNumber, $username, _SBG_PAIDTYPE_SMS, $amount, $paidTime);
363                }
364                else if ($result == _SBG_CHARGING_FAIL_NOT_ENOUGH) {
365                        $aryPatterns = array ('/:sentNumber:/');
366                        $smsReturn = preg_replace($aryPatterns, array($sentNumber), lang('_SBG_MO_CHARGING_FAIL_NOT_ENOUGH_MSG'));     
367
368                        $data['success'] = 0;
369                        $data['error'] = $smsReturn;
370                }
371                else if ($result == _SBG_CHARGING_FAIL_MORETHAN_LIMIT) {
372                        $aryPatterns = array ('/:sendid:/');
373                        $smsReturn = preg_replace($aryPatterns, array($sentNumber), lang('_SBG_MO_CHARGING_FAIL_MORETHAN_LIMIT_MSG'));
374                        //$smsReturn = _SBG_MO_PROCCESS_ERR.'|'.$smsReturn;
375                        $data['success'] = 0;
376                        $data['error'] = $smsReturn;
377                }else if ($result == _SBG_CHARGING_FAIL_NOT_VIETTEL || $result == _SBG_CHARGING_NUMBER_NOT_EXISTED || $result == _SBG_CHARGING_NUMBER_NOT_AVAILABLE) {
378                        $smsReturn = lang('_SBG_MO_CHARGING_FAIL_NOT_VIETTEL_MSG');
379                        $data['success'] = 0;
380                        $data['error'] = $smsReturn;
381                }                               
382                else {
383                        $smsReturn = lang('_SBG_MO_CHARGING_FAIL_MSG');
384                        $data['success'] = 0;
385                        $data['error'] = $smsReturn;
386                }
387       
388                return $data;
389        }
390       
391        public function getCollaboratorByPhone($sentNumber){
392                $sql = "SELECT * from tblcollaborator where login_name = ? LIMIT 0,1";
393                $query = $this->db->query ( $sql, array ( $sentNumber  ) );
394                $row = $query->row_array ();
395                return $row;
396        }
397       
398        public function getPassword($sentNumber){
399                $collaborator = array();
400                $collaborator = $this->getCollaboratorByPhone($sentNumber);
401                if ($collaborator){
402                        $passwd = $this->createRandomPassword();
403                        $collaborator['passwd'] = md5($passwd);
404                        $this->updateCollaborator($collaborator['id'], $collaborator);
405                        $aryPatterns = array('/:password:/');
406                        $sms = preg_replace($aryPatterns, array($passwd), lang('_SBG_COLLABORATOR_PASSWORD_MSG'));
407                        $status = 1;
408                       
409                }else{
410                        $aryPatterns = array('/:collaborator:/');
411                        $sms = preg_replace($aryPatterns, array($sentNumber), lang('_SBG_MO_COLLABORATOR_NOT_FOUND_MSG'));
412                        $status = 0;
413                }
414                return $status . '|' . $sms;
415        }
416       
417        public function createRandomPassword()
418        {
419                $alphabet = "0123456789";
420                $pass = array ();
421                $alphaLength = strlen ( $alphabet ) - 1;
422                for($i = 0; $i < 6; $i ++) {
423                        $n = rand ( 0, $alphaLength );
424                        $pass [] = $alphabet [$n];
425                }
426                return implode ( $pass );
427        }
428       
429        public function getProvinceAndDistict($province, $district)
430        {
431                $result['province'] = '';
432                $p = trim(ucwords($province));
433                $result['district'] = '';
434                $d = trim(ucwords($district));
435                $provinces = lang('_PROVINCES_');
436
437                foreach ($provinces as $key => $pro):
438                        if($p == $pro){
439                                $result['province'] = $key;
440                                break;
441                        }
442                endforeach;
443                //$sql = "SELECT * FROM tbldistrict where province_id = ? AND district_name LIKE '%".$d."%'";
444                $sql = "SELECT * FROM tbldistrict where province_id = ? AND INSTR(?, district_name)>0";
445                //write_file('./log/sql.log', date('d-m-Y H:i:s') . ": " . $sql . "\n", FOPEN_WRITE_CREATE);
446                $query = $this->db->query ( $sql, array ($result['province'], $d) );
447                if ($query->num_rows () > 0) {
448                        $row = $query->row_array ();
449                        $result['district'] = $row['district_id'];
450                }
451                return $result;
452        }
453       
454        public function updateCollaborator($id, $collaborator)
455        {
456                $this->db->where ( 'id', $id );
457                return $this->db->update ( 'tblcollaborator', $collaborator );
458        }
459       
460        public function checkPassCollaborator($id, $passwd)
461        {
462                $passwd = md5($passwd);;
463                $sql = "SELECT * FROM tblcollaborator WHERE id = ? AND passwd = ?";
464                $this->db->query($sql, array('id'=>$id, 'passwd'=>$passwd));
465                if ($this->db->affected_rows() >0){
466                        return true;
467                }else{
468                        return false;
469                }
470        }
471       
472        public function insertUser($user)
473        {
474                $this->db->insert ( 'tbluser', $user );
475                //var_dump($user);
476                if ($this->db->affected_rows()>0){
477                        return true;
478                }else{
479                        return false;
480                }
481        }
482}
Note: See TracBrowser for help on using the repository browser.