source: pro-violet-viettel/sourcecode/application/modules/services/models/services_model.php @ 914

Last change on this file since 914 was 909, checked in by dungnv, 10 years ago
File size: 20.7 KB
Line 
1<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
2
3if ( ! defined('_SBG_MO_REGISTER'))                                             define('_SBG_MO_REGISTER',                                              'SUBSCR');
4if ( ! defined('_SBG_MO_REGISTER_FOR'))                                         define('_SBG_MO_REGISTER_FOR',                                  'SUBSCR_FOR');
5if ( ! defined('_SBG_MO_PHONENUM_CHANGE'))                                      define('_SBG_MO_PHONENUM_CHANGE',                               'PHONE_CHANGE');
6if ( ! defined('_SBG_MO_PASSWORD_RECOVERY'))                            define('_SBG_MO_PASSWORD_RECOVERY',                     'PWD_RECOVER');
7if ( ! defined('_SBG_MO_VIP_REGISTER'))                                         define('_SBG_MO_VIP_REGISTER',                                  'REG_VIP');
8if ( ! defined('_SBG_MO_PAY_TO_ACCOUNT'))                                       define('_SBG_MO_PAY_TO_ACCOUNT',                                'PAY');
9if ( ! defined('_SBG_MO_PAY_TO_ACCOUNT_FOR'))                           define('_SBG_MO_PAY_TO_ACCOUNT_FOR',                    'PAY_FOR');
10if ( ! defined('_SBG_MO_UNSUBSCRIBE_SERVICE'))                          define('_SBG_MO_UNSUBSCRIBE_SERVICE',                   'UNSUBSCR');
11if ( ! defined('_SBG_MO_SUPPOR_SERVICE'))                                       define('_SBG_MO_SUPPOR_SERVICE',                                'SUPPORT');
12if ( ! defined('_SBG_MO_SYNTAX_ERR'))                                           define('_SBG_MO_SYNTAX_ERR',                                    'SYNTAX_ERR');
13if ( ! defined('_SBG_MO_PASSWORD_COLLABORATOR_SERVICE'))        define('_SBG_MO_PASSWORD_COLLABORATOR_SERVICE', 'PWD_COLLABORATOR');
14
15if ( ! defined('_SBG_CARD_PAY_FAIL'))                                           define('_SBG_CARD_PAY_FAIL',                    -1);
16if ( ! defined('_SBG_CARD_PAY_SUCCESS'))                                        define('_SBG_CARD_PAY_SUCCESS',                 1);
17
18if ( ! defined('_SBG_CHARGING_FAIL'))                                           define('_SBG_CHARGING_FAIL', -1);
19if ( ! defined('_SBG_CHARGING_SUCCESS'))                                        define('_SBG_CHARGING_SUCCESS', 1);
20if ( ! defined('_SBG_CHARGING_FAIL_NOT_ENOUGH'))                        define('_SBG_CHARGING_FAIL_NOT_ENOUGH', 401);
21if ( ! defined('_SBG_CHARGING_FAIL_NOT_VIETTEL'))                       define('_SBG_CHARGING_FAIL_NOT_VIETTEL', 402);
22if ( ! defined('_SBG_CHARGING_NUMBER_NOT_EXISTED'))             define('_SBG_CHARGING_NUMBER_NOT_EXISTED', 403);
23if ( ! defined('_SBG_CHARGING_NUMBER_NOT_AVAILABLE'))           define('_SBG_CHARGING_NUMBER_NOT_AVAILABLE', 404);
24if ( ! defined('_SBG_CHARGING_NUMBER_CHANGED_OWNER'))           define('_SBG_CHARGING_NUMBER_CHANGED_OWNER', 405);
25if ( ! defined('_SBG_CHARGING_FAIL_MORETHAN_LIMIT'))            define('_SBG_CHARGING_FAIL_MORETHAN_LIMIT', 406);
26if ( ! defined('_SBG_CHARGING_GENERAL_ERROR'))                          define('_SBG_CHARGING_GENERAL_ERROR', 440);
27if ( ! defined('_SBG_CHARGING_NUMBER_NOT_REGISTED'))            define('_SBG_CHARGING_NUMBER_NOT_REGISTED', 501);
28if ( ! defined('_SBG_CHARGING_MAX_VALUE'))                                      define('_SBG_CHARGING_MAX_VALUE', 50000);
29if ( ! defined('_SBG_CHARGING_MIN_VALUE'))                                      define('_SBG_CHARGING_MIN_VALUE', 5000);
30
31
32if ( ! defined('_SBG_SEND_MT_FAIL'))                                            define('_SBG_SEND_MT_FAIL', -1);
33if ( ! defined('_SBG_SEND_MT_SUCCESS'))                                         define('_SBG_SEND_MT_SUCCESS', 1);
34if ( ! defined('_SBG_MT_SEND_NUMBER'))                                          define('_SBG_MT_SEND_NUMBER', '841662860000');
35if ( ! defined('_SBG_MT_CP_CODE'))                                                      define('_SBG_MT_CP_CODE', '601');
36
37if ( ! defined('_SBG_SERVICE_COMMAND_CODE'))                            define('_SBG_SERVICE_COMMAND_CODE', 'SBG');
38if ( ! defined('_SBG_SERVICE_SERVICEID'))                                       define('_SBG_SERVICE_SERVICEID', '8062');
39
40if ( ! defined('_SBG_MO_PROCCESS_ERR'))                                         define('_SBG_MO_PROCCESS_ERR', 0);
41
42if ( ! defined('_SBG_GET_COLLABORATOR_FAIL'))                           define('_SBG_GET_COLLABORATOR_FAIL', -1);
43
44Class Services_model extends CI_Model
45{
46        private $_arySmsMO = array(
47                _SBG_MO_REGISTER                                                => array('pattern' => '/^(SBG)([[:blank:]])(DK)$/'),
48                _SBG_MO_REGISTER_FOR                                    => array('pattern' => '/^(SBG)([[:blank:]])(DK)([[:blank:]])([0-9]{10,11})$/'),
49                //_SBG_MO_PHONENUM_CHANGE                               => array('pattern' => '/^(SBG)([[:blank:]])(DDT)([[:blank:]])([0-9]{10,11})([[:blank:]])([a-zA-Z0-9]{1,})$/'),
50                _SBG_MO_PASSWORD_RECOVERY                               => array('pattern' => '/^(SBG)([[:blank:]])(MK)$/'),
51                _SBG_MO_VIP_REGISTER                                    => array('pattern' => '/^(SBG)([[:blank:]])(VIP)([[:blank:]])([a-zA-Z0-9]{1,})$/'),
52                _SBG_MO_PAY_TO_ACCOUNT                                  => array('pattern' => '/^(SBG)([[:blank:]])(NAP)([[:blank:]])([0-9]{3,})$/'),
53                _SBG_MO_PAY_TO_ACCOUNT_FOR                              => array('pattern' => '/^(SBG)([[:blank:]])(NAP)([[:blank:]])([0-9]{3,})([[:blank:]])([0-9]{10,11})$/'),
54                _SBG_MO_SUPPOR_SERVICE                                  => array('pattern' => '/^(SBG)([[:blank:]])(HD)$/'),
55                _SBG_MO_UNSUBSCRIBE_SERVICE                     => array('pattern' => '/^(SBG)([[:blank:]])(HUY)$/'),
56                _SBG_MO_PASSWORD_COLLABORATOR_SERVICE   => array('pattern' => '/^(SBG)([[:blank:]])(CTV)$/')
57        );
58
59        public function __construct(){
60                parent::__construct();
61                $this->load->helper('language');
62                $this->lang->load('messages', 'message');
63        }
64
65        /**
66         * messageAnalys
67         *
68         * @todo Analysis content of incoming message
69         *
70         * @param String $message - coming SMS
71         * @return multitype:Ambigous <string, multitype> multitype:multitype
72         */
73        public function messageAnalys ($message)
74        {
75                $aryMatched = array();
76                $aryContent = array();
77                $result = FALSE;
78
79                foreach ($this->_arySmsMO as $case => $pattern)
80                {
81                        $result = preg_match($pattern['pattern'], strtoupper(trim($message)));
82                        if ((bool)$result) {
83                                $aryMatched = explode(' ', trim($message));
84                                break;
85                        }
86                }
87
88                $case = (bool)$result ? $case:_SBG_MO_SYNTAX_ERR;
89
90                foreach($aryMatched as $k => $val) {
91                        if ($k > 1) $aryContent[] = $val;
92                }
93
94                return array('case' => $case, 'content' => $aryContent);
95        }
96
97        /**
98         * processMORequest
99         *
100         * @todo process action analysed from messageAnalys
101         *
102         * @param unknown $sentNumber
103         * @param unknown $message
104         * @return string
105         */
106        public function processMORequest ($sentNumber, $message, &$mtBody = null)
107        {
108                $debugMsg = $message."\n";
109
110                $sentNumber = $this->formatPhoneNumber($sentNumber);
111
112                $smsReturn = '';
113                $aryMOAnalys = $this->messageAnalys($message);
114                $case = $aryMOAnalys['case'];
115                $aryContents = isset($aryMOAnalys['content']) ? $aryMOAnalys['content']: null;
116                $this->load->model('frontend/user_model', 'objUserModel');
117                $this->load->model('collaborator/collaborator_model', 'objCollaboratorModel');
118                $debugMsg .= $case;
119
120                switch ($case) {
121                        case _SBG_MO_REGISTER:
122                        case _SBG_MO_REGISTER_FOR:
123                                if ($case == _SBG_MO_REGISTER_FOR) {
124                                        if (!preg_match('/^([0-9]{10,11}$)$/', $aryContents[0])) {
125                                                $smsReturn = _SBG_MO_PROCCESS_ERR.'|'.lang('_SBG_MO_PHONENUM_WRONG_FORMAT_MSG');
126                                                break;
127                                        }
128                                }
129
130                                $userName = isset($aryContents[0]) ? $this->formatPhoneNumber($aryContents[0]) : $sentNumber;
131                                $collaborator = isset($aryContents[0]) ? $sentNumber:null;
132                                $collaboratorMsg = '';
133
134                                $sms = $this->objUserModel->register($userName, $collaborator, $collaboratorMsg);
135
136                                if ($case == _SBG_MO_REGISTER_FOR) {
137                                        $smsReturn = $collaboratorMsg;
138                                        $arySMS = explode ('|', $sms);
139                                        if ((int)$arySMS[0] == 1 ) {
140                                                $mtBody = $arySMS[1];
141                                                $sendMT = $this->sendMT($this->formatPhoneNumber($userName, -1), $mtBody);
142                                        }
143
144                                }
145                                else {
146                                        $smsReturn = $sms;
147                                }
148
149                                break;
150                        /* case _SBG_MO_PHONENUM_CHANGE:
151                                if (!preg_match('/^(09\d{8}|01\d{9})$/', $aryContents[0])) {
152                                        $smsReturn = _SBG_MO_PROCCESS_ERR.'|'.lang('_SBG_MO_PHONENUM_WRONG_FORMAT_MSG');
153                                        break;
154                                }
155
156                                $oldPhoneNumber = $this->formatPhoneNumber($aryContents[0]);
157                                $password = $aryContents[1];
158                                $smsReturn = $this->objUserModel->changeProfile($sentNumber, $oldPhoneNumber, $password);
159
160                                $arySMS = explode('|', $smsReturn);
161                                $changeResult = (int)$arySMS[0];
162
163                                $aryPatterns = array('/:sentNumber:/');
164                                $sms = preg_replace($aryPatterns, array($sentNumber), lang('_SBG_MO_USER_OLD_PHONENUM_CHANGE_SUCCESS_MSG'));
165                                $sendMT = $changeResult == 1 ? $this->sendMT($this->formatPhoneNumber($oldPhoneNumber, -1), $sms) : '';
166                                break; */
167                        case _SBG_MO_PASSWORD_RECOVERY:
168                                $smsReturn = $this->objUserModel->changePassword($sentNumber);
169                                break;
170                        case _SBG_MO_VIP_REGISTER:
171                                $packageData = array();
172                                $p_code = $aryContents[0];
173                                $smsReturn = $this->objUserModel->registerVip($sentNumber, $p_code, $packageData);
174
175                                $arySmsReturn = explode('|', $smsReturn);
176                                $result = $arySmsReturn[0];
177
178                                if (trim($arySmsReturn[1]) == trim(lang('_SBG_MO_USER_REGISTER_VIP_FAIL_NOT_ENOUGH_MSG'))) {
179                                        $amount = $packageData ['p_price'];
180                                        $result = $this->chargeRootAccountProcess($sentNumber, $amount, $sentNumber.' paid for SBG');
181
182                                        if ($result == _SBG_CHARGING_SUCCESS) {
183                                                $amount = $packageData ['p_price'];
184                                                $this->objUserModel->rechargeAccount($sentNumber, $amount);
185                                                $smsReturn = $this->objUserModel->registerVip($sentNumber, $p_code, $packageData);
186                                                $paidTime = date('Y-m-d H:i:s');
187                                                $this->objUserModel->insertPaidlog($sentNumber, $sentNumber, _SBG_PAIDTYPE_SMS, $amount, $paidTime);
188                                                $result = 1;
189                                        }
190                                }
191
192                                if ((int)$result == 1) $this->objUserModel->insertRegisterVipLog($sentNumber, $p_code, true);
193                                break;
194
195                        case _SBG_MO_PAY_TO_ACCOUNT:
196                        case _SBG_MO_PAY_TO_ACCOUNT_FOR:
197                                error_log(date('Y-m-d H:i:s').' -- DATA: '. var_export($aryContents, TRUE).' -- CASE: '. $case . "\n", 3, '/srv/www/sbg/log/pay.log');
198
199                                $userName = isset($aryContents[1]) ? $this->formatPhoneNumber($aryContents[1]) : $sentNumber;
200                                if ($case == _SBG_MO_PAY_TO_ACCOUNT_FOR && !preg_match('/^(09\d{8}|01\d{9})$/', $userName)) {
201                                        $smsReturn = _SBG_MO_PROCCESS_ERR.'|'.lang('_SBG_MO_PHONENUM_WRONG_FORMAT_MSG');
202                                        break;
203                                }
204
205                                $amount = $aryContents[0];
206                                if (!preg_match('/^[0-9]{3,}$/', $amount)) {
207                                        $smsReturn = _SBG_MO_PROCCESS_ERR.'|'.lang('_SBG_MO_AMOUNT_WRONG_FORMAT_MSG');
208                                        break;
209                                }
210
211                                if ((int)$amount < _SBG_CHARGING_MIN_VALUE) {
212                                        $smsReturn = _SBG_MO_PROCCESS_ERR.'|'.lang('_SBG_MO_AMOUNT_LESS_THAN_MIN_VALUE_MSG');
213                                        break;
214                                }
215
216                                $result =$this->chargeRootAccountProcess($sentNumber, $amount, $sentNumber.' paid for SBG');
217
218                                if ($result == _SBG_CHARGING_SUCCESS) {
219                                        $smsReturn = $this->objUserModel->rechargeAccount($userName, $amount);
220                                        if ($case == _SBG_MO_PAY_TO_ACCOUNT_FOR) {
221                                                $arySmsReturn = explode ('|', $smsReturn);
222                                                $aryPatterns = array('/:amount:/', '/:sentNumber:/');
223                                                $smsMT = preg_replace($aryPatterns, array($amount, $sentNumber), lang('_SBG_MO_PAY_TO_ACCOUNT_FOR_MSG'));
224                                                $mtBody = $smsMT;
225                                                $sendMT = $this->sendMT($this->formatPhoneNumber($userName, -1), $smsMT);
226                                                $smsReturn = $arySmsReturn[0].'|'.preg_replace(array('/:amount:/','/:username:/'), array($amount, $userName), lang('_SBG_MO_PAY_TO_ACCOUNT_FOR_OTHER_SUCCESS_MSG'));
227                                        }
228                                        //write to paid log
229                                        $paidTime = date('Y-m-d H:i:s');
230                                        $this->objUserModel->insertPaidlog($sentNumber, $userName, _SBG_PAIDTYPE_SMS, $amount, $paidTime);
231                                }
232                                else if ($result == _SBG_CHARGING_FAIL_NOT_ENOUGH) {
233                                        $aryPatterns = array ('/:sentNumber:/');
234                                        $smsReturn = preg_replace($aryPatterns, array($sentNumber), lang('_SBG_MO_CHARGING_FAIL_NOT_ENOUGH_MSG'));
235                                        $smsReturn = _SBG_MO_PROCCESS_ERR.'|'.$smsReturn;
236                                }
237                                else if ($result == _SBG_CHARGING_FAIL_MORETHAN_LIMIT) {
238                                        $aryPatterns = array ('/:sendid:/');
239                                        $smsReturn = preg_replace($aryPatterns, array($sentNumber), lang('_SBG_MO_CHARGING_FAIL_MORETHAN_LIMIT_MSG'));
240                                        $smsReturn = _SBG_MO_PROCCESS_ERR.'|'.$smsReturn;
241                                }else if ($result == _SBG_CHARGING_FAIL_NOT_VIETTEL || $result == _SBG_CHARGING_NUMBER_NOT_EXISTED || $result == _SBG_CHARGING_NUMBER_NOT_AVAILABLE) {
242                                        $smsReturn = _SBG_MO_PROCCESS_ERR.'|'.lang('_SBG_MO_CHARGING_FAIL_NOT_VIETTEL_MSG');
243                                }
244                                else {
245                                        $smsReturn = _SBG_MO_PROCCESS_ERR.'|'.lang('_SBG_MO_CHARGING_FAIL_MSG');
246                                }
247                                break;
248
249                        case _SBG_MO_SUPPOR_SERVICE:
250                                if ($this->isViettel($sentNumber)){
251                                        $smsReturn = '1|'.lang('_SBG_MO_SUPPORT_VIETTEL_MSG');
252                                }else{
253                                        $smsReturn = '1|'.lang('_SBG_MO_SUPPORT_NOT_VIETTEL_MSG');
254                                }
255                                break;
256
257                        case _SBG_MO_PASSWORD_COLLABORATOR_SERVICE:
258                                $smsReturn = $this->objCollaboratorModel->getPassword($sentNumber);
259                                break;
260
261                        case _SBG_MO_UNSUBSCRIBE_SERVICE:
262                        case _SBG_MO_SYNTAX_ERR:
263                        default:
264                                $smsReturn = _SBG_MO_PROCCESS_ERR.'|'.lang('_SBG_MO_SYNTAX_ERR_MSG');
265                                break;
266                }
267
268                $aryTmp = explode('|', $smsReturn);
269                $mtBody = $aryTmp[1] . "\n" . $mtBody;
270
271                return $smsReturn.'|'.$case;
272        }
273
274
275        /**
276         * cardPaidProcess
277         *
278         * @todo Call Topup webservice to check and lock prepaid-card
279         * @param Array $aryCardInfo
280         * @param Array $aryTopupResult
281         * @return string
282         */
283        public function cardPaidProcess ($aryCardInfo, &$aryTopupResult = array())
284        {
285                $url = $this->config->item('topup_service_url');
286                $action = 'http://tempuri.org/ITopupService/TopUp';
287                $xml = $this->load->view('topup', $aryCardInfo, true);
288
289                $client = new nusoap_client($url);
290                $client->useHTTPPersistentConnection();
291                $client->soap_defencoding = 'UTF-8';
292                $client->operation = $action;
293
294                $result = $client->send($xml, $action);
295
296                if ($client->fault) {
297                        return _SBG_CARD_PAY_FAIL;
298                }
299
300                $keys = array_keys($result);
301
302                $aryTopupResult = $result[$keys[0]];
303
304                $debugMsg = 'Logged time: '. date('Y-m-d H:i:s') ."\n";
305                $debugMsg .=  'Send:'."\n" .$xml ."\n\n";
306                $debugMsg .= 'Result:'."\n". var_export($result, TRUE);
307                write_file('./log/topup_log', $debugMsg);
308
309                if ($aryTopupResult['Success'] == 'false') {
310                        return _SBG_CARD_PAY_FAIL;
311                }
312
313                return _SBG_CARD_PAY_SUCCESS;
314        }
315
316        /**
317         * chargeRootAccountProcess
318         *
319         * @todo Call charging webservice to charged fee from phone root account
320         * @param String $sentID
321         * @param Integer $amount
322         * @param String $contents
323         * @return string|number
324         */
325        public function chargeRootAccountProcess ($sentID, $amount = 0, $contents = '')
326        {
327                $url = $this->config->item('charging_service_url');
328                $username = $this->config->item('charging_username');
329                $password = $this->config->item('charging_password');
330                $action = 'http://tempuri.org/Charge';
331
332                $aryParams = array(
333                                'user' => $username,
334                                'pass' => $password,
335                                'MSISDN' => $sentID,
336                                'Charging' => $amount,
337                                'Contents' => $contents
338                );
339
340                $xml = $this->load->view('services/charging', $aryParams, true);
341                $client = new nusoap_client($url);
342                $client->useHTTPPersistentConnection();
343                $client->soap_defencoding = 'UTF-8';
344                $client->operation = $action;
345                $result = $client->send($xml, $action);
346
347                error_log(date('Y-m-d H:i:s').' -- DATA: '. var_export($xml, TRUE).' -- CASE: '. $case . "\n", 3, '/srv/www/sbg/log/chargeresult.log');
348                error_log(date('Y-m-d H:i:s').' -- DATA: '. var_export($result, TRUE).' -- CASE: '. $case . "\n", 3, '/srv/www/sbg/log/chargeresult.log');
349
350                if ($client->fault) {
351                        return _SBG_CHARGING_FAIL;
352                }
353
354                $aryErrs = array (      _SBG_CHARGING_FAIL_NOT_ENOUGH,
355                                                        _SBG_CHARGING_FAIL_NOT_VIETTEL,
356                                                        _SBG_CHARGING_FAIL_MORETHAN_LIMIT,
357                                                        _SBG_CHARGING_NUMBER_NOT_EXISTED,
358                                                        _SBG_CHARGING_NUMBER_NOT_AVAILABLE,
359                                                        _SBG_CHARGING_NUMBER_CHANGED_OWNER,
360                                                        _SBG_CHARGING_GENERAL_ERROR,
361                                                        _SBG_CHARGING_NUMBER_NOT_REGISTED);
362
363                if (in_array((int)$result['processChargingResult'], $aryErrs))
364                        return (int)$result['processChargingResult'];
365
366                return _SBG_CHARGING_SUCCESS;
367        }
368
369        /**
370         * sendMT
371         *
372         * @todo Calling MT webservice to send a SMS to a phone number
373         * @param String $receiverID
374         * @param String $message
375         * @return string
376         */
377        public function sendMT ($receiverID, $message)
378        {
379                $aryMatch = array();
380
381                if (preg_match('/^(0)([0-9]{9,10})$/', $receiverID, $aryMatch) == 1) {
382                        $receiverID = '84'. $aryMatch[2];
383                }
384
385                $username = $this->config->item('mt_username');
386                $password = $this->config->item('mt_password');
387                $action = 'http://tempuri.org/InsertMT';
388
389                $aryParams = array(
390                                'User' => $username,
391                                'Pass' => $password,
392                                'CPCode' => _SBG_MT_CP_CODE,
393                                'UserID' => _SBG_MT_SEND_NUMBER,
394                                'RequestID' => '4',
395                                'ReceiverID' => $receiverID,
396                                'ServiceID' => _SBG_SERVICE_SERVICEID,
397                                'CommandCode' => _SBG_SERVICE_COMMAND_CODE,
398                                'ContentType' => '0',
399                                'Info' => $message
400                );
401
402                $xml = $this->load->view('services/mt', $aryParams, true);
403                $url = $this->config->item('mt_service_url');
404                $client = new nusoap_client($url);
405                $client->useHTTPPersistentConnection();
406                $client->soap_defencoding = 'UTF-8';
407                $client->operation = $action;
408                $result = $client->send($xml, $action);
409
410                if ($client->fault || (int)$result['InsertMTResult'] != 1) {
411                        return _SBG_SEND_MT_FAIL;
412                }
413
414                return _SBG_SEND_MT_SUCCESS;
415        }
416
417        public function getCollaborator ($type = 2, $page = 10, $displaypage = 1) {
418                $action = 'http://tempuri.org/InsertMT';
419                $url = $this->config->item('bccs_service_url');
420                $username = $this->config->item('bccs_username');
421                $password = $this->config->item('bccs_password');
422                $wscode = 'getListShopAndStaftInfo';
423                $aryParams = array(
424                                'user' => $username,
425                                'pass' => $password,
426                                'wscode' => $wscode,
427                                'type' => $type,
428                                'page' => $page,
429                                'displaypage' => $displaypage
430                );
431
432                $xml = $this->load->view('bscc', $aryParams, true);
433
434                $client = new nusoap_client($url);
435                $client->useHTTPPersistentConnection();
436                $client->soap_defencoding = 'UTF-8';
437                $client->decode_utf8 = false;
438
439                $client->operation = $action;
440                $result = $client->send($xml, $action);
441                if ($client->fault || (int)$result['Result']['error'] != 0) {
442                        return _SBG_GET_COLLABORATOR_FAIL;
443                }
444
445                return $result['Result']['original'];
446        }
447
448        /**
449         * formatPhoneNumber
450         *
451         * @todo format phone number to prefix 0 or 84
452         * @param String $phoneNumber
453         * @param Integer $direction
454         * @return String
455         */
456        public function formatPhoneNumber ($phoneNumber, $direction = 1) {
457                $result = $phoneNumber;
458                $aryMatch = array();
459                if (preg_match('/^(84)([0-9]{9,10})$/', $phoneNumber, $aryMatch) == 1 && $direction == 1) {
460                        $result = '0'. $aryMatch[2];
461                }
462                else if (preg_match('/^(0)([0-9]{9,10})$/', $phoneNumber) == 1 && $direction == 1) {
463                        $result = $phoneNumber;
464                }
465                else if (preg_match('/^(84)([0-9]{9,10})$/', $phoneNumber) == 1 && $direction == -1) {
466                        $result = $phoneNumber;
467                }
468                else if (preg_match('/^(0)([0-9]{9,10})$/', $phoneNumber, $aryMatch) == 1 && $direction == -1) {
469                        $result = '84'. $aryMatch[2];
470                }
471                else if (preg_match('/^[1,9]([0-9]{8,9})$/', $phoneNumber, $aryMatch) == 1 && $direction = 2) {
472                        $result = '0'. $phoneNumber;
473                }
474
475                return $result;
476        }
477
478
479        public function syncCollaborator($data){
480                if ($data){
481                        $sql = $this->db->insert_string('tblcollaborator', $data) . ' ON DUPLICATE KEY UPDATE address = "'.$data['address'].'",
482                                                                                                                                                                                                code = "'.$data['code'].'",
483                                                                                                                                                                                                district = "'.$data['district'].'",
484                                                                                                                                                                                                email = "'.$data['email'].'",
485                                                                                                                                                                                                full_name = "'.$data['full_name'].'",
486                                                                                                                                                                                                passwd = "'.$data['passwd'].'",
487                                                                                                                                                                                                cellphone = "'.$data['cellphone'].'",
488                                                                                                                                                                                                precinct = "'.$data['precinct'].'",
489                                                                                                                                                                                                province = "'.$data['province'].'",
490                                                                                                                                                                                                created_time = "'.$data['created_time'].'",
491                                                                                                                                                                                                updated_time = "'.$data['updated_time'].'"';
492                        $this->db->query($sql);
493                        $id = $this->db->insert_id();
494                        if ($this->db->affected_rows()){
495                                //echo "Collaborator ID: ".$id.". Sync Success !<br/>";
496                                $logMsg = date('Y-m-d H:i:s') . " Collaborator ID: ".$id.". Sync Success !\n";
497                                write_file('./log/sync_collaborator.log', $logMsg, FOPEN_WRITE_CREATE);
498                        }else{
499                                //echo "Collaborator ID: ".$id.". Sync fail!. Sql = ".$sql."<br/>";
500                                $logMsg = date('Y-m-d H:i:s') . " Collaborator ID: ".$id.". Sync fail!. Sql = ".$sql."\n";
501                                write_file('./log/sync_collaborator.log', $logMsg, FOPEN_WRITE_CREATE);
502                        }
503                }else {
504                        $logMsg = date('Y-m-d H:i:s') . " Data is null \n";
505                        write_file('./log/sync_collaborator.log', $logMsg, FOPEN_WRITE_CREATE);
506                }
507        }
508
509        public function deleteCollaborator($id){
510                $sql = "DELETE FROM tblcollaborator WHERE id = ". $id. " AND author is null";
511                $this->db->query($sql);
512                if ($this->db->affected_rows()){
513                        $logMsg = date('Y-m-d H:i:s') . " Collaborator ID: ".$id.". Delete success!\n";
514                        write_file('./log/delete_collaborator.log', $logMsg, FOPEN_WRITE_CREATE);
515                }else{
516                        $logMsg = date('Y-m-d H:i:s') . " Collaborator ID: ".$id.". Delete fail!. Sql = ".$sql."\n";
517                        write_file('./log/delete_collaborator.log', $logMsg, FOPEN_WRITE_CREATE);
518                }
519        }
520
521        public function getAllCollaboratorID(){
522                $sql = "Select id from tblcollaborator";
523                $query = $this->db->query($sql);
524                if ($this->db->affected_rows()){
525                        return $query->result();
526                }else
527                {
528                        return array();
529                }
530        }
531
532        public function isViettel($number) {
533                $prefixViettel = array (
534                                        '96', '97', '98',
535                                        '096', '097', '098', '162', '163', '164', '165', '166', '167', '168', '169',
536                                        '8496', '8497', '8498', '0162', '0163', '0164', '0165', '0166', '0167', '0168', '0169',
537                                        '84162', '84163', '84164', '84165', '84166', '84167', '84168', '84169'
538                );
539                foreach ( $prefixViettel as $value ) {
540                        if (strpos ( $number, $value ) === 0) {
541                                return 1;
542                        }
543                }
544                return 0;
545        }
546}
Note: See TracBrowser for help on using the repository browser.