function teltree_handle($c_uid, $sms_datetime, $sms_sender, $sms_receiver, $teltree_keyword, $teltree_param = '', $smsc = '', $raw_message = '') { $ps = explode(" ", $raw_message, 2); $kk = strtoupper($ps[0]); $username = "******"; if ($teltree_keyword == 'DAFTAR') { $pecah = preg_split("/#/", $ps[1], null, PREG_SPLIT_NO_EMPTY); $data = array(); $data['name'] = trim($pecah[0]); $data['username'] = trim($pecah[0]); $data['mobile'] = $sms_sender; $data['email'] = str_replace(' ', '', $data['name']) . "@noreply.org"; $data['parent_uid'] = 1; //----- ini parentnya admin $data['status'] = 4; //---ini artinya ditambahkan ke sub user $ret = user_add($data); $ok = $ret['status'] ? TRUE : FALSE; if ($ok) { echo "okee"; $items = array('uid' => 1, 'name' => $data['name'], 'mobile' => $data['mobile'], 'email' => $data['email'], 'tags' => $tags); if ($c_pid = dba_add(_DB_PREF_ . '_featurePhonebook', $items)) { $save_to_group = TRUE; _log('Success to add contact pid:' . $c_pid . ' m:' . $data['mobile'] . ' n:' . $data['name'] . ' e:' . $data['email'] . ' tags:[' . $data['tags'] . ']', 2, 'teltree'); } else { _log('Fail to add contact pid:' . $c_pid . ' m:' . $data['mobile'] . ' n:' . $data['name'] . ' e:' . $data['email'] . ' tags:[' . $data['tags'] . ']', 2, 'teltree'); } $balasan = "Selamat anda telah terdaftar di Telephone Tree"; $gagal = "Maaf Sistem sedang mengalami gangguan, silahkan coba beberapa saat lagi"; if ($save_to_group) { $unicode = core_detect_unicode($balasan); $balasan = addslashes($balasan); // $username = "******"; //$smsc = "dev"; _log("returns:" . $balasan, 2, "teltree"); sendsms_helper($username, $sms_sender, $balasan, 'text', $unicode, $smsc); } else { $unicode = core_detect_unicode($gagal); $balasan = addslashes($gagal); _log("returns:" . $gagal, 2, "teltree"); sendsms_helper($username, $sms_sender, $balasan, 'text', $unicode, $smsc); _log_print("returns empty", 2, "teltree"); } } else { echo "gagal"; } return $ret; //$ok = true; } elseif ($kk == 'GABUNG') { /*$gpids = dba_search(_DB_PREF_ . '_featurePhonebook_group','code',array( ));*/ $uid = user_mobile2uid($sms_sender); $group_code = strtoupper($ps[1]); $list = dba_search(_DB_PREF_ . '_featurePhonebook', 'id', array('uid' => 1, 'mobile' => $sms_sender)); if ($group_code && $sms_sender) { /*--dummy code--*/ $c_pid = dba_search(_DB_PREF_ . '_featurePhonebook', 'id', array('uid' => 1, 'mobile' => $sms_sender)); $gpids = dba_search(_DB_PREF_ . '_featurePhonebook_group', 'id', array('uid' => 1, 'code' => $group_code)); foreach ($gpids as $gpid) { foreach ($gpid as $key => $val) { $items = array('gpid' => $val, 'pid' => $c_pid[0]['id']); if (dba_isavail(_DB_PREF_ . '_featurePhonebook_group_contacts', $items, 'AND')) { if (dba_add(_DB_PREF_ . '_featurePhonebook_group_contacts', $items)) { $list = dba_search(_DB_PREF_ . '_featurePhonebook_group', 'code', array('uid' => 1)); _log('contact added to group gpid:' . $gpid . ' pid:' . $c_pid . ' m:' . $mobile . ' n:' . $name . ' e:' . $email, 2, 'phonebook_edit'); if ($iid = $c_pid[0]['id']) { $bal_grup = "selamat anda telah tergabung di grup" . $list[$iid]['code']; $unicode = core_detect_unicode($bal_grup); $bal_grup = addslashes($bal_grup); _log("returns:" . $bal_grup, 2, "telek"); sendsms_helper($username, $sms_sender, $bal_grup, 'text', $unicode, $smsc); _log("returns empty", 2, "sms custom"); } } else { _log('contact edited but fail to save in group gpid:' . $gpid . ' pid:' . $c_pid . ' m:' . $mobile . ' n:' . $name . ' e:' . $email, 2, 'phonebook_edit'); } } } } } //$ok = true; } elseif ($kk == 'KELUAR') { $uid = user_mobile2uid($sms_sender); $group_code = strtoupper($ps[1]); //_log($sms_sender . ' '. $group_code, 2 , 'test'); if ($group_code && $sms_sender) { // _log($sms_sender . ' '. $group_code, 2 , 'test'); $c_pid = dba_search(_DB_PREF_ . '_featurePhonebook', 'id', array('uid' => 1, 'mobile' => $sms_sender)); $gpids = dba_search(_DB_PREF_ . '_featurePhonebook_group', 'id', array('uid' => 1, 'code' => $group_code)); foreach ($gpids as $gpid) { foreach ($gpid as $key => $val) { $items = array('gpid' => $val, 'pid' => $c_pid[0]['id']); // _log($sms_sender . ' '. $group_code, 2 , 'test'); if (!dba_isavail(_DB_PREF_ . '_featurePhonebook_group_contacts', $items, 'AND')) { if (dba_remove(_DB_PREF_ . '_featurePhonebook_group_contacts', $items)) { if ($iid = $c_pid[0]['id']) { $bal_grup = "anda telah keluar dari grup" . $list[$iid]['code']; $unicode = core_detect_unicode($bal_grup); $bal_grup = addslashes($bal_grup); _log("returns:" . $bal_grup, 2, "telek"); sendsms_helper($username, $sms_sender, $bal_grup, 'text', $unicode, $smsc); _log("returns empty", 2, "sms custom"); } _log('contact removed from group gpid:' . $gpid . ' pid:' . $c_pid . ' m:' . $mobile . ' n:' . $name . ' e:' . $email, 2, 'teltree_phonebook_edit'); } else { _log('contact fail to remove from group gpid:' . $gpid . ' pid:' . $c_pid . ' m:' . $mobile . ' n:' . $name . ' e:' . $email, 2, 'teltree_phonebook_edit'); } } else { _log('failed ' . $val . ' ' . $c_pid[0]['id'], 2, 'test'); } } } } } }
function sms_survey_hook_playsmsd() { global $core_config; // get enabled and started survey, but not running yet $db_query = "SELECT * FROM " . _DB_PREF_ . "_featureSurvey WHERE deleted='0' AND status='1' AND started='1' AND running='0'"; $db_result = dba_query($db_query); while ($db_row = dba_fetch_array($db_result)) { $c_sid = $db_row['id']; // set survey as running survey $session = md5($c_sid . mktime()); $db_query1 = "UPDATE " . _DB_PREF_ . "_featureSurvey SET session='{$session}',running='1' WHERE id='{$c_sid}'"; if ($db_result1 = dba_affected_rows($db_query1)) { // get current survey data $s = sms_survey_getdatabyid($c_sid); $c_uid = $s['uid']; $c_username = uid2username($c_uid); $c_keyword = $s['keyword']; // get current survey questions, focus only on first question, index 0 $q = sms_survey_getquestions($c_sid); $c_message = $q[0]['question']; $c_sms_msg = $c_keyword . " " . $c_message; // get current survey members $m = sms_survey_getmembers($c_sid); for ($i = 0; $i < count($m); $i++) { // if member's mobile exists if ($c_sms_to = $m[$i]['mobile']) { logger_print("playsmsd send start qn:1 sid:" . $c_sid . " username:"******" to:" . $c_sms_to . " msg:" . $c_sms_msg, 3, "sms_survey"); // if member's mobile, question and username owned the survey exists if ($c_sms_to && $c_sms_msg && $c_username) { $type = 'text'; // $unicode = '0'; // send message to member // list($ok,$to,$smslog_id,$queue) = sendsms($c_username,$c_sms_to,$c_sms_msg,$type,$unicode); $unicode = core_detect_unicode($message); list($ok, $to, $smslog_id, $queue) = sendsms($c_username, $c_sms_to, $c_sms_msg, 'text', $unicode); $ok[0] = $ok[0] ? "true" : "false"; logger_print("playsmsd send finish sid:" . $c_sid . " smslog_id:" . $smslog_id[0] . " ok:" . $ok[0], 2, "sms_survey"); // save the log $log = ""; $log['survey_id'] = $c_sid; $log['question_id'] = $q[0]['id']; $log['member_id'] = $m[$i]['id']; $log['link_id'] = sms_survey_getlinkid($session, $c_sid, $m[$i]['id']); $log['smslog_id'] = $smslog_id[0]; $log['name'] = $m[$i]['name']; $log['mobile'] = $m[$i]['mobile']; $log['question'] = $q[0]['question']; $log['question_number'] = 1; $log['creation_datetime'] = $core_config['datetime']['now']; $log['session'] = $session; sms_survey_savelog($log); } } } } // set survey as completed $db_query2 = "UPDATE " . _DB_PREF_ . "_featureSurvey SET status='1',started='0',running='2' WHERE id='{$c_sid}'"; $db_result2 = dba_affected_rows($db_query2); } }
function sms_quiz_handle($list, $sms_datetime, $sms_sender, $quiz_keyword, $quiz_param = '', $sms_receiver = '', $smsc = '', $raw_message = '') { global $core_config; $ok = false; $sms_to = $sms_sender; // we are replying to this sender $quiz_keyword = strtoupper(trim($quiz_keyword)); $quiz_param = strtoupper(trim($quiz_param)); if (($quiz_enable = $list['quiz_enable']) && $quiz_param) { if (strtoupper($list['quiz_answer']) == $quiz_param) { $message = $list['quiz_msg_correct']; } else { $message = $list['quiz_msg_incorrect']; } $quiz_id = $list['quiz_id']; $answer = strtoupper($quiz_param); $db_query = "INSERT INTO " . _DB_PREF_ . "_featureQuiz_log (quiz_id,quiz_answer,quiz_sender,in_datetime) VALUES ('{$quiz_id}','{$answer}','{$sms_to}','" . core_get_datetime() . "')"; if ($logged = @dba_insert_id($db_query)) { if ($message && ($username = user_uid2username($list['uid']))) { $unicode = core_detect_unicode($message); $message = addslashes($message); list($ok, $to, $smslog_id, $queue) = sendsms_helper($username, $sms_to, $message, 'text', $unicode, $smsc); } $ok = true; } } return $ok; }
function xlate_hook_recvsms_intercept($sms_datetime, $sms_sender, $message, $sms_receiver) { global $core_config; $msg = explode(" ", $message); $ret = array(); if (count($msg) > 1) { $keyword = trim($msg[0]); if (substr($keyword, 0, 1) == '@') { $xlate = substr($keyword, 1); $xlate = explode('2', $xlate); $xlate_from = $xlate[0]; $xlate_to = $xlate[1]; if ($xlate_from && $xlate_to && strlen($xlate_from) == 2 && strlen($xlate_to) == 2) { for ($i = 1; $i < count($msg); $i++) { $words .= $msg[$i] . " "; } $words = trim($words); // contact google $lib = $core_config['apps_path']['plug'] . '/feature/xlate/lib/GoogleTranslate'; // load JSON.php for PHP version lower than 5.2.x require_once $lib . '/JSON.php'; require_once $lib . '/googleTranslate.class.php'; if ($gt = new GoogleTranslateWrapper()) { /* Translate */ $xlate_words = $gt->translate($words, $xlate_to, $xlate_from); // incoming sms is handled $ret['hooked'] = true; /* Was translation successful */ $sms_datetime = core_display_datetime($sms_datetime); if ($gt->isSuccess()) { $reply = '@' . $xlate_from . '2' . $xlate_to . ' ' . $words . ' => ' . $xlate_words; logger_print("success dt:" . $sms_datetime . " s:" . $sms_sender . " r:" . $sms_receiver . " w:" . $words . " from:" . $xlate_from . " to:" . $xlate_to . " xlate:" . $xlate_words, 2, "xlate"); } else { $reply = '@' . $xlate_from . '2' . $xlate_to . ' ' . _("unable to translate") . ': ' . $words; logger_print("failed dt:" . $sms_datetime . " s:" . $sms_sender . " r:" . $sms_receiver . " w:" . $words . " from:" . $xlate_from . " to:" . $xlate_to, 2, "xlate"); } // detect reply message, set unicode if not ASCII $unicode = core_detect_unicode($reply); // send reply SMS using admin account // should add a web menu in xlate.php to choose which account will be used to send reply SMS // usualy we inspect the result of sendsms, but not this time logger_print("send reply encoding:" . $encoding, 2, "xlate"); $reply = addslashes($reply); list($ok, $to, $smslog_id, $queue) = sendsms_helper('admin', $sms_sender, $reply, 'text', $unicode); // do not forget to tell parent that this SMS has been hooked $ret['hooked'] = true; } else { // unable to load the class, set incoming sms unhandled $ret['hooked'] = false; logger_print("class not exists or fail to load", 2, "xlate"); } } } } return $ret; }
function myauto_hook_interceptincomingsms($sms_datetime, $sms_sender, $message, $sms_receiver) { global $core_config; // reply message $reply = 'Thank you for your message'; // detect reply message, set unicode if not ASCII $unicode = core_detect_unicode($reply); // send reply list($ok, $to, $smslog_id, $queue) = sendsms('admin', $sms_sender, $reply, 'text', $unicode); // log it $sms_datetime = core_display_datetime($sms_datetime); logger_print("dt:" . $sms_datetime . " s:" . $sms_sender . " r:" . $sms_receiver . " autorespon:" . $reply, 2, "myauto"); }
function autorespond_hook_recvsms_intercept_after($sms_datetime, $sms_sender, $message, $sms_receiver, $feature, $status, $uid, $smsc) { $ret = array(); $hooked = FALSE; // process only when the previous feature is not 'incoming' if ($feature != 'incoming' && $status) { return $ret; } if ($message) { $db_query = "SELECT * FROM " . _DB_PREF_ . "_featureAutorespond WHERE flag_deleted='0'"; $db_result = dba_query($db_query); while ($db_row = dba_fetch_array($db_result)) { $continue = TRUE; // only check sms receiver if set if ($db_row['sms_receiver']) { if ($sms_receiver != $db_row['sms_receiver']) { $continue = FALSE; } } if ($continue) { // match SMS with regex if (preg_match($db_row['regex'], $message)) { // match found, send respond $c_uid = $db_row['uid']; $c_username = user_uid2username($c_uid); $c_message = $db_row['message']; if (core_detect_unicode($c_message)) { $unicode = 1; } $smsc = gateway_decide_smsc($smsc, $db_row['smsc']); _log("match found dt:" . $sms_datetime . " s:" . $sms_sender . " r:" . $sms_receiver . " uid:" . $c_uid . " username:"******" service:[" . $db_row['service_name'] . "] regex:[" . $db_row['regex'] . "] m:[" . $message . "] smsc:" . $smsc, 3, "autorespond"); sendsms_helper($c_username, $sms_sender, $c_message, 'text', $unicode, $smsc); // log it $hooked = TRUE; // found then stop break; } } } } if ($c_uid && $hooked) { _log("hooked dt:" . $sms_datetime . " s:" . $sms_sender . " r:" . $sms_receiver . " uid:" . $c_uid . " username:"******" service:[" . $db_row['service_name'] . "] regex:[" . $db_row['regex'] . "] m:[" . $message . "] smsc:" . $smsc, 3, "autorespond"); $ret['modified'] = TRUE; $ret['param']['feature'] = 'autorespond'; $ret['param']['status'] = 1; $ret['uid'] = $c_uid; $ret['hooked'] = $hooked; } return $ret; }
function sms_autosend_hook_playsmsd() { global $core_config; $timenow = mktime(); $db_query = "SELECT uid,time_id," . _DB_PREF_ . "_featureAutosend.autosend_id, autosend_message,autosend_number,autosend_time\n\t\t\t\t\t\t\tFROM " . _DB_PREF_ . "_featureAutosend\n\t\t\t\t\t\t\tINNER JOIN " . _DB_PREF_ . "_featureAutosend_time\n\t\t\t\t\t\t\tON " . _DB_PREF_ . "_featureAutosend.autosend_id = " . _DB_PREF_ . "_featureAutosend_time.autosend_id\n\t\t\t\t\t\t\tWHERE UNIX_TIMESTAMP(" . _DB_PREF_ . "_featureAutosend_time.autosend_time) <= '{$timenow}'\n\t\t\t\t\t\t\tAND " . _DB_PREF_ . "_featureAutosend_time.sent='0'\n\t\t\t\t\t\t\tAND autosend_time != ''\n\t\t\t\t\t\t\tAND " . _DB_PREF_ . "_featureAutosend.autosend_enable='1'"; $db_result = dba_query($db_query); while ($db_row = dba_fetch_array($db_result)) { $message = $db_row['autosend_message']; $c_uid = $db_row['uid']; $username = uid2username($c_uid); $sms_to = $db_row['autosend_number']; // we are sending to this number $autosend_id = $db_row['autosend_id']; $time_id = $db_row['time_id']; $unicode = core_detect_unicode($message); list($ok, $to, $smslog_id, $queue) = sendsms($username, $sms_to, $message, 'text', $unicode); if ($ok[0]) { $db_query = "UPDATE " . _DB_PREF_ . "_featureAutosend_time SET sent='1' WHERE time_id = '{$time_id}'"; $db_result = @dba_affected_rows($db_query); } } }
function sms_custom_handle($c_uid, $sms_datetime, $sms_sender, $sms_receiver, $custom_keyword, $custom_param = '', $smsc = '', $raw_message = '') { $ok = false; $custom_keyword = strtoupper(trim($custom_keyword)); $custom_param = trim($custom_param); $db_query = "SELECT custom_url,uid,custom_return_as_reply FROM " . _DB_PREF_ . "_featureCustom WHERE custom_keyword='{$custom_keyword}'"; $db_result = dba_query($db_query); $db_row = dba_fetch_array($db_result); $custom_url = $db_row['custom_url']; $username = user_uid2username($db_row['uid']); $custom_return_as_reply = $db_row['custom_return_as_reply']; if ($custom_keyword && $custom_url && $username) { $sms_datetime = core_display_datetime($sms_datetime); $custom_url = str_replace("{SMSDATETIME}", urlencode($sms_datetime), $custom_url); $custom_url = str_replace("{SMSSENDER}", urlencode($sms_sender), $custom_url); $custom_url = str_replace("{CUSTOMKEYWORD}", urlencode($custom_keyword), $custom_url); $custom_url = str_replace("{CUSTOMPARAM}", urlencode($custom_param), $custom_url); $custom_url = str_replace("{CUSTOMRAW}", urlencode($raw_message), $custom_url); logger_print("custom_url:" . $custom_url, 3, "sms custom"); $parsed_url = parse_url($custom_url); $opts = array('http' => array('method' => 'POST', 'header' => "Content-type: application/x-www-form-urlencoded\r\n", 'content' => $parsed_url['query'])); $context = stream_context_create($opts); $server_url = explode('?', $custom_url); $returns = file_get_contents($server_url[0], false, $context); if ($custom_return_as_reply == 1) { if ($returns = trim($returns)) { $unicode = core_detect_unicode($returns); $returns = addslashes($returns); logger_print("returns:" . $returns, 3, "sms custom"); sendsms_helper($username, $sms_sender, $returns, 'text', $unicode, $smsc); } else { logger_print("returns empty", 3, "sms custom"); } } $ok = true; } return $ok; }
function sms_command_handle($c_uid, $sms_datetime, $sms_sender, $sms_receiver, $command_keyword, $command_param = '', $smsc = '', $raw_message = '') { global $plugin_config; $ok = false; $command_keyword = strtoupper(trim($command_keyword)); $command_param = trim($command_param); $db_query = "SELECT command_exec,uid,command_return_as_reply FROM " . _DB_PREF_ . "_featureCommand WHERE command_keyword='{$command_keyword}'"; $db_result = dba_query($db_query); $db_row = dba_fetch_array($db_result); $command_exec = $db_row['command_exec']; $command_return_as_reply = $db_row['command_return_as_reply']; $username = user_uid2username($db_row['uid']); if ($command_keyword && $command_exec && $username) { $sms_datetime = core_display_datetime($sms_datetime); $command_exec = str_replace("{SMSDATETIME}", "\"{$sms_datetime}\"", $command_exec); $command_exec = str_replace("{SMSSENDER}", escapeshellarg($sms_sender), $command_exec); $command_exec = str_replace("{COMMANDKEYWORD}", escapeshellarg($command_keyword), $command_exec); $command_exec = str_replace("{COMMANDPARAM}", escapeshellarg($command_param), $command_exec); $command_exec = str_replace("{COMMANDRAW}", escapeshellarg($raw_message), $command_exec); $command_exec = str_replace("/", "", $command_exec); $command_exec = $plugin_config['sms_command']['bin'] . "/" . $db_row['uid'] . "/" . $command_exec; $command_exec = escapeshellcmd($command_exec); logger_print("command_exec:" . addslashes($command_exec), 3, "sms command"); $command_output = shell_exec($command_exec); if ($command_return_as_reply == 1) { $unicode = core_detect_unicode($command_output); if ($command_output = addslashes(trim($command_output))) { logger_print("command_output:" . $command_output, 3, "sms command"); sendsms_helper($username, $sms_sender, $command_output, 'text', $unicode, $smsc); } else { logger_print("command_output is empty", 3, "sms command"); } } $ok = true; } return $ok; }
function recvsms_inbox_add($sms_datetime, $sms_sender, $target_user, $message, $sms_receiver = "", $reference_id = '') { global $core_config; // sms to inbox will be handled by plugins first $ret_intercept = recvsms_inbox_add_intercept($sms_datetime, $sms_sender, $target_user, $message, $sms_receiver, $reference_id); if ($ret_intercept['param_modified']) { $sms_datetime = $ret_intercept['param']['sms_datetime'] ? $ret_intercept['param']['sms_datetime'] : $sms_datetime; $sms_sender = $ret_intercept['param']['sms_sender'] ? $ret_intercept['param']['sms_sender'] : $sms_sender; $target_user = $ret_intercept['param']['target_user'] ? $ret_intercept['param']['target_user'] : $target_user; $message = $ret_intercept['param']['message'] ? $ret_intercept['param']['message'] : $message; $sms_receiver = $ret_intercept['param']['sms_receiver'] ? $ret_intercept['param']['sms_receiver'] : $sms_receiver; $reference_id = $ret_intercept['param']['reference_id'] ? $ret_intercept['param']['reference_id'] : $reference_id; } $ok = FALSE; if ($sms_sender && $target_user && $message) { $user = user_getdatabyusername($target_user); if ($uid = $user['uid']) { // discard if banned if (user_banned_get($uid)) { logger_print("user banned, message ignored uid:" . $uid, 2, "recvsms_inbox_add"); return FALSE; } // get name from target_user's phonebook $c_name = ''; if (substr($sms_sender, 0, 1) == '@') { $c_username = str_replace('@', '', $sms_sender); $c_name = user_getfieldbyusername($c_username, 'name'); } else { $c_name = phonebook_number2name($uid, $sms_sender); } $sender = $c_name ? $c_name . ' (' . $sms_sender . ')' : $sms_sender; // forward to Inbox if ($fwd_to_inbox = $user['fwd_to_inbox']) { $db_query = "\n\t\t\t\t\tINSERT INTO " . _DB_PREF_ . "_tblSMSInbox\n\t\t\t\t\t(in_sender,in_receiver,in_uid,in_msg,in_datetime,reference_id)\n\t\t\t\t\tVALUES ('{$sms_sender}','{$sms_receiver}','{$uid}','{$message}','" . core_adjust_datetime($sms_datetime) . "','{$reference_id}')\n\t\t\t\t"; logger_print("saving sender:" . $sms_sender . " receiver:" . $sms_receiver . " target:" . $target_user . " reference_id:" . $reference_id, 2, "recvsms_inbox_add"); if ($inbox_id = @dba_insert_id($db_query)) { logger_print("saved id:" . $inbox_id . " sender:" . $sms_sender . " receiver:" . $sms_receiver . " target:" . $target_user, 2, "recvsms_inbox_add"); $ok = TRUE; } } // forward to email, consider site config too if ($parent_uid = user_getparentbyuid($uid)) { $site_config = site_config_get($parent_uid); } $web_title = $site_config['web_title'] ? $site_config['web_title'] : $core_config['main']['web_title']; $email_service = $site_config['email_service'] ? $site_config['email_service'] : $core_config['main']['email_service']; $email_footer = $site_config['email_footer'] ? $site_config['email_footer'] : $core_config['main']['email_footer']; $sms_receiver = $sms_receiver ? $sms_receiver : '-'; if ($fwd_to_email = $user['fwd_to_email']) { if ($email = $user['email']) { $subject = _('Message from') . " " . $sender; $body = $web_title . "\n\n"; $body .= _('Message received at') . " " . $sms_receiver . " " . _('on') . " " . $sms_datetime . "\n\n"; $body .= _('From') . " " . $sender . "\n\n"; $body .= $message . "\n\n--\n"; $body .= $email_footer . "\n\n"; $body = stripslashes($body); logger_print("send email from:" . $email_service . " to:" . $email . " message:[" . $message . "]", 3, "recvsms_inbox_add"); $data = array('mail_from_name' => $web_title, 'mail_from' => $email_service, 'mail_to' => $email, 'mail_subject' => $subject, 'mail_body' => $body); sendmail($data); logger_print("sent email from:" . $email_service . " to:" . $email, 3, "recvsms_inbox_add"); } } // forward to mobile if ($fwd_to_mobile = $user['fwd_to_mobile']) { if ($mobile = $user['mobile']) { // fixme anton $c_message = $message . ' ' . $sender; if ($sender_uid = user_mobile2uid($sms_sender)) { if ($sender_username = user_uid2username($sender_uid)) { $c_message = $message . ' ' . '@' . $sender_username; } } $message = $c_message; $unicode = core_detect_unicode($message); $nofooter = TRUE; logger_print("send to mobile:" . $mobile . " from:" . $sms_sender . " user:"******" message:" . $message, 3, "recvsms_inbox_add"); list($ok, $to, $smslog_id, $queue) = sendsms($target_user, $mobile, $message, 'text', $unicode, '', $nofooter); if ($ok[0] == 1) { logger_print("sent to mobile:" . $mobile . " from:" . $sms_sender . " user:"******"recvsms_inbox_add"); } } } } } return $ok; }
/** * SMS strlen() based on unicode status * * @param string $text * @param string $encoding * @return integer Length of text */ function core_smslen($text, $encoding = "") { if (function_exists('mb_strlen') && core_detect_unicode($text)) { if ($encoding = trim($encoding)) { $len = mb_strlen($text, $encoding); } else { $len = mb_strlen($text, "UTF-8"); } } else { if (core_detect_unicode($text)) { $len = strlen(utf8_decode($text)); } else { $len = strlen($text); } } return (int) $len; }
$db_query = "SELECT msg FROM " . _DB_PREF_ . "_featureSubscribe_msg WHERE subscribe_id='{$subscribe_id}' AND msg_id='{$msg_id}'"; $db_result = dba_query($db_query); $db_row = dba_fetch_array($db_result); $message = addslashes($db_row['msg']); $counter = $db_row['counter']; $db_query = "SELECT member_number FROM " . _DB_PREF_ . "_featureSubscribe_member WHERE subscribe_id='{$subscribe_id}'"; $db_result = dba_query($db_query); $sms_to = ''; if ($message && $subscribe_id) { while ($db_row = dba_fetch_array($db_result)) { if ($member_number = $db_row['member_number']) { $sms_to[] = $member_number; } } if ($sms_to[0]) { $unicode = core_detect_unicode($message); $message = addslashes($message); list($ok, $to, $smslog_id, $queue) = sendsms_helper($username, $sms_to, $message, 'text', $unicode, $smsc); if ($ok[0]) { $counter++; dba_update(_DB_PREF_ . '_featureSubscribe_msg', array('counter' => $counter), array('subscribe_id' => $subscribe_id, 'msg_id' => $msg_id)); $_SESSION['error_string'] .= _('Your SMS has been delivered to queue') . "<br>"; } else { $_SESSION['error_string'] .= _('Fail to send SMS') . "<br>"; } } else { $_SESSION['error_string'] = _('You have no member'); } } else { $_SESSION['error_string'] = _('You must fill all fields'); }
function playnet_hook_playsmsd() { global $core_config, $plugin_config; if (!core_playsmsd_timer($plugin_config['playnet']['poll_interval'])) { return; } $smscs = gateway_getall_smsc_names('playnet'); foreach ($smscs as $smsc) { $c_plugin_config = gateway_apply_smsc_config($smsc, $plugin_config); $is_master = (bool) ($c_plugin_config['playnet']['local_playnet_username'] && $c_plugin_config['playnet']['local_playnet_password']); if ((int) $c_plugin_config['playnet']['remote_on'] && !$is_master) { // fetch from remote $ws = $c_plugin_config['playnet']['remote_playsms_url'] . '/index.php?app=ws&op=playnet'; $ws .= '&go=get_outgoing'; $ws .= '&s=' . $c_plugin_config['playnet']['remote_playnet_smsc']; $ws .= '&u=' . $c_plugin_config['playnet']['remote_playnet_username']; $ws .= '&p=' . $c_plugin_config['playnet']['remote_playnet_password']; $response_raw = @file_get_contents($ws); $response = json_decode($response_raw, 1); // validate response if (strtoupper($response['status']) == 'OK') { if (is_array($response['data'])) { foreach ($response['data'] as $data) { $remote_smsc = $data['smsc']; $remote_smslog_id = $data['smslog_id']; $remote_uid = $data['uid']; $username = $c_plugin_config['playnet']['sendsms_username']; $sms_to = $data['sms_to']; $message = $data['message']; $unicode = core_detect_unicode($message); $sms_type = $data['sms_type']; $sms_sender = $data['sender_id']; _log('sendsms remote_smsc:' . $remote_smsc . ' remote_smslog_id:' . $remote_smslog_id . ' remote_uid:' . $remote_uid . ' u:' . $username . ' sender_id:' . $sms_sender . ' to:' . $sms_to . ' m:[' . $message . '] unicode:' . $unicode, 3, 'playnet_hook_playsmsd'); sendsms_helper($username, $sms_to, $message, $sms_type, $unicode, '', 1, '', $sms_sender); } } } } } }
function gammu_hook_getsmsinbox() { // filename // IN20101017_091747_00_+628123423141312345_00.txt global $plugin_config; $handle = @opendir($plugin_config['gammu']['path'] . "/inbox"); $messages = array(); $files = array(); while ($sms_in_file = @readdir($handle)) { if ($sms_in_file != "." && $sms_in_file != "..") { $files[] = $sms_in_file; } } sort($files); foreach ($files as $sms_in_file) { $fn = $plugin_config['gammu']['path'] . "/inbox/{$sms_in_file}"; $matches = array(); preg_match('/IN(\\d{4})(\\d{2})(\\d{2})_(\\d{2})(\\d{2})(\\d{2})_(\\d+)_([+]*\\w+)_(\\d+)/', basename($fn), $matches); list($s, $year, $month, $date, $hour, $minute, $second, $serial, $sms_sender, $seq) = $matches; $sms_datetime = $year . "-" . $month . "-" . $date . " " . $hour . ":" . $minute . ":" . $second; // message is in UTF-16, need to convert it to UTF-8 $message = file_get_contents($fn); // if the message is unicode then convert it to UTF-8 if (core_detect_unicode($message)) { $message = mb_convert_encoding($message, "UTF-8", "UTF-16"); } @unlink($fn); // continue process only when incoming sms file can be deleted if (!file_exists($fn)) { if ($sms_sender && $sms_datetime) { // adding message parts to existing array if (array_key_exists($sms_sender, $messages) && (int) $seq > 0) { $messages[$sms_sender][] = array("fn" => $fn, "message" => $message, "msg_datetime" => $sms_datetime); } else { if (!array_key_exists($sms_sender, $messages) || array_key_exists($sms_sender, $messages) && (int) $seq == 0) { if (count($messages) > 0) { // saving concatenated message parts $parts_sender = 0; foreach ($messages as $sender => $message_parts) { $parts_message = ""; $parts_sender = $sender; foreach ($message_parts as $part) { $parts_message .= $part['message']; } } $parts_datetime = $messages[$parts_sender][0]['msg_datetime']; recvsms($parts_datetime, $parts_sender, $parts_message, $sms_receiver, 'gammu'); logger_print("sender:" . $parts_sender . " receiver:" . $sms_receiver . " dt:" . $parts_datetime . " msg:" . $parts_message, 3, "gammu incoming"); unset($messages); } // new message parts array $messages[$sms_sender] = array(array("fn" => $fn, "message" => $message, "msg_datetime" => $sms_datetime)); } } } } } if (count($messages) > 0) { // saving last concatenated message parts $parts_sender = 0; foreach ($messages as $sender => $message_parts) { $parts_message = ""; $parts_sender = $sender; foreach ($message_parts as $part) { $parts_message .= $part['message']; } } $parts_datetime = $messages[$parts_sender][0]['msg_datetime']; recvsms($parts_datetime, $parts_sender, $parts_message, $sms_receiver, $smsc); logger_print("sender:" . $parts_sender . " receiver:" . $sms_receiver . " dt:" . $parts_datetime . " msg:" . $_parts_message, 3, "gammu incoming"); unset($messages); } @closedir($handle); }
function sms_autoreply_handle($c_uid, $sms_datetime, $sms_sender, $sms_receiver, $autoreply_id, $autoreply_keyword, $autoreply_param = '', $smsc = '', $raw_message = '') { $ok = false; $autoreply_keyword = strtoupper(trim($autoreply_keyword)); $autoreply_param = strtoupper(trim($autoreply_param)); $autoreply_request = $autoreply_keyword . " " . $autoreply_param; $array_autoreply_request = preg_split('/[\\s]+/', $autoreply_request); for ($i = 0; $i < count($array_autoreply_request); $i++) { $autoreply_part[$i] = trim($array_autoreply_request[$i]); $tmp_autoreply_request .= trim($array_autoreply_request[$i]) . " "; } $autoreply_request = trim($tmp_autoreply_request); for ($i = 1; $i < 7; $i++) { $autoreply_scenario_param_list .= "autoreply_scenario_param{$i}='" . $autoreply_part[$i] . "' AND "; } $db_query = "\n\t\tSELECT autoreply_scenario_result FROM " . _DB_PREF_ . "_featureAutoreply_scenario \n\t\tWHERE autoreply_id='{$autoreply_id}' AND {$autoreply_scenario_param_list} 1=1"; $db_result = dba_query($db_query); $db_row = dba_fetch_array($db_result); if ($autoreply_scenario_result = $db_row['autoreply_scenario_result']) { $ok = false; $c_username = user_uid2username($c_uid); $unicode = core_detect_unicode($autoreply_scenario_result); $autoreply_scenario_result = addslashes($autoreply_scenario_result); list($ok, $to, $smslog_id, $queue) = sendsms_helper($c_username, $sms_sender, $autoreply_scenario_result, 'text', $unicode, $smsc); $ok = $ok[0]; } return $ok; }
function sms_collect_handle($c_uid, $sms_datetime, $sms_sender, $collect_keyword, $collect_param = '', $sms_receiver) { global $core_config; global $web_title, $email_service, $email_footer, $gateway_module; $ok = false; $collect_keyword = strtoupper($collect_keyword); $username = uid2username($c_uid); $sms_to = $sms_sender; // we are replying to this sender $db_query = "SELECT * FROM " . _DB_PREF_ . "_featureCollect WHERE collect_keyword='{$collect_keyword}'"; $db_result = dba_query($db_query); if ($db_row = dba_fetch_array($db_result)) { if (!$db_row['collect_enable']) { $message = _('Collect service inactive'); //list($ok,$to,$smslog_id) = sendsms_pv($username, $sms_to, $message); //$ok = $ok[0]; $unicode = 0; if (function_exists('mb_detect_encoding')) { $encoding = mb_detect_encoding($message, 'auto'); if ($encoding != 'ASCII') { $unicode = 1; } } $ret = sendsms($core_config['main']['cfg_gateway_number'], '', $sms_to, $message, $c_uid, 0, 'text', $unicode); $ok = $ret['status']; return $ok; } } $c_uid = $db_row['uid']; $collect_id = $db_row['collect_id']; $num_rows = dba_num_rows($db_query); if ($num_rows) { $msg1 = $db_row['collect_msg']; $db_query = "INSERT INTO " . _DB_PREF_ . "_featureCollect_member (collect_id,collect_msg,member_number,member_since) VALUES ('{$collect_id}','{$collect_param}','{$sms_to}',now())"; $message = $msg1; $logged = dba_query($db_query); $ok = true; $unicode = core_detect_unicode($message); logger_print('to:' . $sms_to . ' m:' . $message, 3, "sms_collect_handle"); list($ok, $to, $smslog_id, $queue) = sendsms($username, $sms_to, $message, 'text', $unicode); $ok = $ok[0]; // Forward to email as well if enable $db_query = "SELECT collect_fwd_email FROM " . _DB_PREF_ . "_featureCollect WHERE collect_keyword='{$collect_keyword}'"; $db_result = dba_query($db_query); $db_row = dba_fetch_array($db_result); if ($email = $db_row['collect_fwd_email']) { // get name from c_uid's phonebook $c_username = uid2username($c_uid); $c_name = phonebook_number2name($sms_sender, $c_username); $sms_sender = $c_name ? $c_name . ' <' . $sms_sender . '>' : $sms_sender; $subject = "[SMSGW-" . $collect_keyword . "] " . _('from') . " {$sms_sender}"; $body = _('Forward WebSMS') . " ({$web_title})\n\n"; $body .= _('Date and time') . ": {$sms_datetime}\n"; $body .= _('Sender') . ": {$sms_sender}\n"; $body .= _('Receiver') . ": {$sms_receiver}\n"; $body .= _('Keyword') . ": {$collect_keyword}\n\n"; $body .= _('Message') . ":\n{$collect_param}\n\n"; $body .= $email_footer . "\n\n"; sendmail($email_service, $email, $subject, $body); logger_print("fwd email to:" . $email, "3", "sms_collect_handle"); } //$ok = true; } else { $ok = false; } return $ok; }
function kannel_hook_sendsms($smsc, $sms_sender, $sms_footer, $sms_to, $sms_msg, $uid = '', $gpid = 0, $smslog_id = 0, $sms_type = 'text', $unicode = 0) { global $core_config, $plugin_config; _log("enter smsc:" . $smsc . " smslog_id:" . $smslog_id . " uid:" . $uid . " to:" . $sms_to, 3, "kannel_hook_sendsms"); // override plugin gateway configuration by smsc configuration $plugin_config = gateway_apply_smsc_config($smsc, $plugin_config); $sms_sender = stripslashes($sms_sender); if ($plugin_config['kannel']['module_sender']) { $sms_sender = $plugin_config['kannel']['module_sender']; } $sms_footer = stripslashes(htmlspecialchars_decode($sms_footer)); $sms_msg = stripslashes(htmlspecialchars_decode($sms_msg)); $ok = false; $account = user_uid2username($uid); $msg_type = 1; if ($sms_footer) { $sms_msg = $sms_msg . $sms_footer; } if ($sms_type == 'flash') { $msg_type = 0; // flash } else { $msg_type = 1; // text, default } // this doesn't work properly if kannel is not on the same server with playSMS // $dlr_url = $core_config['http_path']['base'] . "/plugin/gateway/kannel/dlr.php?type=%d&smslog_id=$smslog_id&uid=$uid"; // prior to 0.9.5.1 // $dlr_url = $plugin_config['kannel']['playsms_web'] . "/plugin/gateway/kannel/dlr.php?type=%d&smslog_id=".$smslog_id."&uid=".$uid; // since 0.9.5.1 $dlr_url = $plugin_config['kannel']['playsms_web'] . "/index.php?app=call&cat=gateway&plugin=kannel&access=dlr&type=%d&smslog_id=" . $smslog_id . "&uid=" . $uid; $URL = "/cgi-bin/sendsms?username="******"&password="******"&from=" . urlencode($sms_sender) . "&to=" . urlencode($sms_to); // Handle DLR options config (emmanuel) // $URL .= "&dlr-mask=31&dlr-url=".urlencode($dlr_url); $URL .= "&dlr-mask=" . $plugin_config['kannel']['dlr'] . "&dlr-url=" . urlencode($dlr_url); // end of Handle DLR options config (emmanuel) if ($sms_type == 'flash') { $URL .= "&mclass=" . $msg_type; } // Automatically setting the unicode flag if necessary if (!$unicode) { $unicode = core_detect_unicode($sms_msg); } if ($unicode) { if (function_exists('mb_convert_encoding')) { $sms_msg = mb_convert_encoding($sms_msg, "UCS-2BE", "auto"); $URL .= "&charset=UTF-16BE"; } $URL .= "&coding=2"; } $URL .= "&account=" . $account; $URL .= "&text=" . urlencode($sms_msg); // fixme anton - patch 1.4.3, dlr requries smsc-id, you should add at least smsc=<your smsc-id in kannel.conf> from web if ($additional_param = htmlspecialchars_decode($plugin_config['kannel']['additional_param'])) { $additional_param = "&" . $additional_param; } $URL .= $additional_param; $URL = str_replace("&&", "&", $URL); logger_print("URL: http://" . $plugin_config['kannel']['sendsms_host'] . ":" . $plugin_config['kannel']['sendsms_port'] . $URL, 3, "kannel_hook_sendsms"); // srosa 20100531: Due to improper http response from Kannel, file_get_contents cannot be used. // One issue is that Kannel responds with HTTP 202 whereas file_get_contents expect HTTP 200 // The other is that a missing CRLF at the end of Kannel's message forces file_get_contents to wait forever. // reverting to previous way of doing things which works fine. /* * if ($rv = trim(file_get_contents("$URL"))) { // old kannel responsed with Sent. // new kannel with the other 2 if (($rv == "Sent.") || ($rv == "0: Accepted for delivery") || ($rv == "3: Queued for later delivery")) { $ok = true; // set pending $p_status = 0; dlr($smslog_id, $uid, $p_status); } } */ // fixme anton - deprecated when using PHP5 // $connection = fsockopen($plugin_config['kannel']['sendsms_host'],$plugin_config['kannel']['sendsms_port'],&$error_number,&$error_description,60); $connection = fsockopen($plugin_config['kannel']['sendsms_host'], $plugin_config['kannel']['sendsms_port'], $error_number, $error_description, 60); if ($connection) { socket_set_blocking($connection, false); fputs($connection, "GET " . $URL . " HTTP/1.0\r\n\r\n"); while (!feof($connection)) { $rv = fgets($connection, 128); if ($rv == "Sent." || $rv == "0: Accepted for delivery" || $rv == "3: Queued for later delivery") { logger_print("smslog_id:" . $smslog_id . " response:" . $rv, 3, "kannel outgoing"); // set pending $p_status = 0; $ok = true; } } fclose($connection); } if (!$ok) { // set failed $p_status = 2; $ok = true; // return true eventhough failed } dlr($smslog_id, $uid, $p_status); logger_print("end smslog_id:" . $smslog_id . " p_status:" . $p_status, 3, "kannel outgoing"); // good or bad, print it on the log return $ok; }
function sms_poll_handle($list, $sms_datetime, $sms_sender, $poll_keyword, $poll_param = '', $sms_receiver = '', $smsc = '', $raw_message = '') { $ok = false; $smsc = gateway_decide_smsc($smsc, $list['smsc']); $poll_keyword = strtoupper(trim($poll_keyword)); $poll_param = strtoupper(trim($poll_param)); $choice_keyword = $poll_param; if ($sms_sender && $poll_keyword && $choice_keyword) { $poll_id = $list['poll_id']; // if poll disabled then immediately return, just ignore the vote if (!$list['poll_enable']) { logger_print('vote s:' . $sms_sender . ' k:' . $poll_keyword . ' c:' . $choice_keyword . ' poll disabled', 2, 'sms_poll'); return TRUE; } $db_query = "SELECT choice_id FROM " . _DB_PREF_ . "_featurePoll_choice WHERE choice_keyword='{$choice_keyword}' AND poll_id='{$poll_id}'"; $db_result = dba_query($db_query); $db_row = dba_fetch_array($db_result); $choice_id = (int) $db_row['choice_id']; $db_table = _DB_PREF_ . "_featurePoll_log"; $items = array('poll_id' => $poll_id, 'choice_id' => $choice_id, 'poll_sender' => $sms_sender, 'in_datetime' => core_get_datetime(), 'status' => 0); // status 0 = failed/unknown // status 1 = valid // status 2 = out of vote option // status 3 = invalid $log_id = dba_add($db_table, $items); if ($poll_id && $choice_id) { $continue = sms_poll_check_option_vote($list, $sms_sender, $poll_keyword, $choice_keyword); if ($continue) { // send message valid if (dba_update($db_table, array('status' => 1), array('log_id' => $log_id))) { logger_print('vote s:' . $sms_sender . ' k:' . $poll_keyword . ' c:' . $choice_keyword . ' log_id:' . $log_id . ' valid vote', 2, 'sms_poll'); if (($poll_message_valid = trim($list['poll_message_valid'])) && ($c_username = user_uid2username($list['uid']))) { $unicode = core_detect_unicode($poll_message_valid); $poll_message_valid = addslashes($poll_message_valid); list($ok, $to, $smslog_id, $queue_code) = sendsms_helper($c_username, $sms_sender, $poll_message_valid, 'text', $unicode, $smsc); } } } else { // send message out of vote option if (dba_update($db_table, array('status' => 2), array('log_id' => $log_id))) { logger_print('vote s:' . $sms_sender . ' k:' . $poll_keyword . ' c:' . $choice_keyword . ' log_id:' . $log_id . ' out of vote option', 2, 'sms_poll'); if (($poll_message_option = trim($list['poll_message_option'])) && ($c_username = user_uid2username($list['uid']))) { $unicode = core_detect_unicode($poll_message_option); $poll_message_option = addslashes($poll_message_option); list($ok, $to, $smslog_id, $queue_code) = sendsms_helper($c_username, $sms_sender, $poll_message_option, 'text', $unicode, $smsc); } } } $ok = true; } else { // send message invalid if (dba_update($db_table, array('status' => 3), array('log_id' => $log_id))) { logger_print('vote s:' . $sms_sender . ' k:' . $poll_keyword . ' c:' . $choice_keyword . ' log_id:' . $log_id . ' invalid vote', 2, 'sms_poll'); if (($poll_message_invalid = trim($list['poll_message_invalid'])) && ($c_username = user_uid2username($list['uid']))) { $unicode = core_detect_unicode($poll_message_invalid); $poll_message_invalid = addslashes($poll_message_invalid); list($ok, $to, $smslog_id, $queue_code) = sendsms_helper($c_username, $sms_sender, $poll_message_invalid, 'text', $unicode, $smsc); } } } } return $ok; }
function bulksms_hook_sendsms($smsc, $sms_sender, $sms_footer, $sms_to, $sms_msg, $uid = '', $gpid = 0, $smslog_id = 0, $sms_type = 'text', $unicode = 0) { // Based on http://www.bulksms.com/int/docs/eapi/submission/send_sms/ global $plugin_config; _log("enter smsc:" . $smsc . " smslog_id:" . $smslog_id . " uid:" . $uid . " to:" . $sms_to, 3, "bulksms_hook_sendsms"); // override plugin gateway configuration by smsc configuration $plugin_config = gateway_apply_smsc_config($smsc, $plugin_config); $sms_sender = stripslashes($sms_sender); if ($plugin_config['bulksms']['module_sender']) { $sms_sender = $plugin_config['bulksms']['module_sender']; } $sms_footer = stripslashes($sms_footer); $sms_msg = stripslashes($sms_msg); $sms_from = $sms_sender; $sms_dca = "7bit"; $sms_class = "2"; if ($sms_footer) { $sms_msg = $sms_msg . $sms_footer; } switch ($sms_type) { case "flash": $sms_class = "0"; break; case "logo": case "picture": case "ringtone": case "rtttl": $sms_dca = "8bit"; break; default: $sms_dca = "7bit"; $sms_class = "2"; } // Automatically setting the unicode flag if necessary if (!$unicode) { $unicode = core_detect_unicode($sms_msg); } if ($unicode) { $unicode = 1; $sms_dca = "16bit"; } // fixme anton - if sms_from is not set in gateway_number and global number, we cannot pass it to bulksms $set_sms_from = $sms_from == $sms_sender ? '' : "&sender=" . urlencode($sms_from); // $query_string = "submission/send_sms/2/2.0?username="******"&password="******"&msisdn=" . urlencode($sms_to) . "&msg_class=$sms_class&message=" . urlencode($sms_msg) . "&dca=" . $sms_dca . $set_sms_from; // $url = $plugin_config['bulksms']['send_url'] . "/" . $query_string; // if ($additional_param = $plugin_config['bulksms']['additional_param']) { // $additional_param = "&" . $additional_param; // } else { // $additional_param = "routing_group=1&repliable=0"; // } // $url .= $additional_param; // $url = str_replace("&&", "&", $url); // logger_print("url:" . $url, 3, "bulksms outgoing"); // $fd = @implode('', file($url)); $fd = buklsms_multiple_sms($sms_to, $sms_class, $sms_msg, $sms_dca, $set_sms_from, $unicode); $ok = false; // failed $p_status = 2; if ($fd) { $response = explode("|", $fd); if (count($response) == 3) { $status_code = trim($response[0]); $apimsgid = trim($response[2]); bulksms_setsmsapimsgid($smslog_id, $apimsgid); if ($status_code == '1') { list($c_sms_credit, $c_sms_status) = bulksms_getsmsstatus($smslog_id); // pending $p_status = 0; if ($c_sms_status) { $p_status = $c_sms_status; } } else { // sent $p_status = 1; } logger_print("smslog_id:" . $smslog_id . " charge:" . $c_sms_credit . " sms_status:" . $p_status . " response:" . $response[0] . " " . $response[1] . " " . $response[2], 2, "bulksms outgoing"); } else { // even when the response is not what we expected we still print it out for debug purposes $fd = str_replace("\n", " ", $fd); $fd = str_replace("\r", " ", $fd); logger_print("smslog_id:" . $smslog_id . " response:" . $fd, 2, "bulksms outgoing"); } $ok = true; } dlr($smslog_id, $uid, $p_status); return $ok; }
function sms_subscribe_handle($list, $sms_datetime, $sms_sender, $subscribe_keyword, $subscribe_param = '', $sms_receiver = '', $smsc = '', $raw_message = '') { global $core_config; $c_uid = $list['uid']; $subscribe_keyword = strtoupper(trim($subscribe_keyword)); $subscribe_param = trim($subscribe_param); $username = user_uid2username($c_uid); _log("username:"******" sender:" . $sms_sender . " keyword:" . $subscribe_keyword . " param:" . $subscribe_param, 3, "sms_subscribe"); $subscribe_accept_param = $list['subscribe_param']; $subscribe_reject_param = $list['unsubscribe_param']; $forward_param = $list['forward_param']; $smsc = gateway_decide_smsc($smsc, $list['smsc']); // for later use $subscribe_param_array = explode(" ", $subscribe_param); $forward_sms = ''; for ($i = 1; $i < sizeof($subscribe_param_array); $i++) { $forward_sms .= $subscribe_param_array[$i] . ' '; } $forward_sms = substr($forward_sms, 0, -1); // check for BC sub-keyword $subscribe_id = $list['subscribe_id']; $c_arr = explode(' ', $subscribe_param); // check for BC/forward param $bc = trim(strtoupper($c_arr[0])); if (($bc == 'BC' || $forward_param && $bc == $forward_param) && $c_uid == user_mobile2uid($sms_sender)) { for ($i = 1; $i < count($c_arr); $i++) { $msg0 .= $c_arr[$i] . ' '; } $message = trim($msg0); $bc_to = ''; $db_query1 = "SELECT member_number FROM " . _DB_PREF_ . "_featureSubscribe_member WHERE subscribe_id = '{$subscribe_id}'"; $db_result1 = dba_query($db_query1); while ($db_row1 = dba_fetch_array($db_result1)) { $bc_to[] = $db_row1['member_number']; } if (is_array($bc_to) && count($bc_to) > 0) { $unicode = core_detect_unicode($message); _log('BC sender:' . $sms_sender . ' keyword:' . $subscribe_keyword . ' count:' . count($bc_to) . ' m:' . $message, 3, "sms_subscribe"); $message = addslashes($message); list($ok, $to, $smslog_id, $queue) = sendsms_helper($username, $bc_to, $message, 'text', $unicode, $smsc, TRUE); return true; } else { return false; } } // check for subscribe/unsubscribe sub-keyword $ok = false; $subscribe_param = trim(strtoupper($subscribe_param)); if ($sms_to = $sms_sender) { $msg1 = addslashes($list['subscribe_msg']); $msg2 = addslashes($list['unsubscribe_msg']); $unknown_format_msg = addslashes($list['unknown_format_msg']); $already_member_msg = addslashes($list['already_member_msg']); $db_query = "SELECT * FROM " . _DB_PREF_ . "_featureSubscribe_member WHERE member_number='{$sms_to}' AND subscribe_id='{$subscribe_id}'"; $db_result = dba_query($db_query); $db_row = dba_fetch_array($db_result); $num_rows = dba_num_rows($db_query) ? 1 : 0; if ($num_rows == 0) { $member = false; switch ($subscribe_param) { case "ON": case "IN": case "REG": case $subscribe_accept_param: $message = $msg1; $db_query = "INSERT INTO " . _DB_PREF_ . "_featureSubscribe_member (subscribe_id,member_number,member_since) VALUES ('{$subscribe_id}','{$sms_to}','" . core_get_datetime() . "')"; $logged = dba_query($db_query); _log('REG SUCCESS sender:' . $sms_sender . ' keyword:' . $subscribe_keyword . ' mobile:' . $sms_to . ' m:[' . $message . ']', 2, "sms_subscribe"); $ok = true; break; default: $message = $unknown_format_msg; _log('Unknown format sender:' . $sms_sender . ' keyword:' . $subscribe_keyword . ' mobile:' . $sms_to, 2, "sms_subscribe"); $ok = true; break; } } else { $member = true; switch ($subscribe_param) { case "OFF": case "OUT": case "UNREG": case $subscribe_reject_param: $message = $msg2; $success = 'fail to delete member'; $db_query = "DELETE FROM " . _DB_PREF_ . "_featureSubscribe_member WHERE member_number='{$sms_to}' AND subscribe_id='{$subscribe_id}'"; $deleted = dba_query($db_query); $success = 'FAILED'; if ($deleted) { $success = 'SUCCESS'; $ok = true; } _log('UNREG ' . $success . ' sender:' . $sms_sender . ' keyword:' . $subscribe_keyword . ' mobile:' . $sms_to . ' m:[' . $message . ']', 2, "sms_subscribe"); break; case "ON": case "IN": case "REG": case $subscribe_accept_param: $message = $already_member_msg; _log('REG fail already a member sender:' . $sms_sender . ' keyword:' . $subscribe_keyword . ' mobile:' . $sms_to . ' m:[' . $message . ']', 2, "sms_subscribe"); $ok = true; break; default: $message = $unknown_format_msg; _log('Unknown format sender:' . $sms_sender . ' keyword:' . $subscribe_keyword . ' mobile:' . $sms_to, 2, "sms_subscribe"); $ok = true; break; } } if ($message) { $message = addslashes($message); _log('sending reply u:' . $username . ' to:' . $sms_to . ' m:[' . $message . '] smsc:[' . $smsc . ']', 3, 'sms_subscribe_handle'); sendsms_helper($username, $sms_to, $message, 'text', '', $smsc, TRUE); } } return $ok; }
function clickatell_hook_sendsms($smsc, $sms_sender, $sms_footer, $sms_to, $sms_msg, $uid = '', $gpid = 0, $smslog_id = 0, $sms_type = 'text', $unicode = 0) { global $plugin_config; _log("enter smsc:" . $smsc . " smslog_id:" . $smslog_id . " uid:" . $uid . " to:" . $sms_to, 3, "clickatell_hook_sendsms"); // override plugin gateway configuration by smsc configuration $plugin_config = gateway_apply_smsc_config($smsc, $plugin_config); $sms_sender = stripslashes($sms_sender); if ($plugin_config['clickatell']['module_sender']) { $sms_sender = $plugin_config['clickatell']['module_sender']; } $sms_footer = stripslashes($sms_footer); $sms_msg = stripslashes($sms_msg); $sms_from = $sms_sender; if ($sms_footer) { $sms_msg = $sms_msg . $sms_footer; } switch ($sms_type) { case "flash": $sms_type = "SMS_FLASH"; break; case "logo": $sms_type = "SMS_NOKIA_OLOGO"; break; case "picture": $sms_type = "SMS_NOKIA_PICTURE"; break; case "ringtone": case "rtttl": $sms_type = "SMS_NOKIA_RTTTL"; break; case "text": default: $sms_type = "SMS_TEXT"; } // Automatically setting the unicode flag if necessary if (!$unicode) { $unicode = core_detect_unicode($sms_msg); } if ($unicode) { if (function_exists('mb_convert_encoding')) { $sms_msg = mb_convert_encoding($sms_msg, "UCS-2BE", "auto"); } $sms_msg = core_str2hex($sms_msg); $unicode = 1; } // fixme anton - if sms_from is not set in gateway_number and global number, we cannot pass it to clickatell $set_sms_from = $sms_from ? "&from=" . urlencode($sms_from) : ''; // fixme anton - temporary solution #385 Unable to send messages when clickatell password contains & $password = urlencode(htmlspecialchars_decode($plugin_config['clickatell']['password'])); $query_string = "sendmsg?api_id=" . $plugin_config['clickatell']['api_id'] . "&user="******"&password="******"&to=" . urlencode($sms_to) . "&msg_type={$sms_type}&text=" . urlencode($sms_msg) . "&unicode=" . $unicode . $set_sms_from; $url = $plugin_config['clickatell']['send_url'] . "/" . $query_string; if ($additional_param = $plugin_config['clickatell']['additional_param']) { $additional_param = "&" . htmlspecialchars_decode($additional_param); } else { $additional_param = "&deliv_ack=1&callback=3"; } $url .= $additional_param; $url = str_replace("&&", "&", $url); logger_print("url:" . $url, 3, "clickatell outgoing"); $fd = @implode('', file($url)); $ok = false; // failed $p_status = 2; if ($fd) { $response = explode(":", $fd); $err_code = trim($response[1]); if (strtoupper($response[0]) == "ID") { if ($apimsgid = trim($response[1])) { clickatell_setsmsapimsgid($smslog_id, $apimsgid); list($c_sms_credit, $c_sms_status) = clickatell_getsmsstatus($smslog_id); // pending $p_status = 0; if ($c_sms_status) { $p_status = $c_sms_status; } } else { // sent $p_status = 1; } logger_print("smslog_id:" . $smslog_id . " charge:" . $c_sms_credit . " sms_status:" . $p_status . " response:" . $response[0] . " " . $response[1], 2, "clickatell outgoing"); } else { // even when the response is not what we expected we still print it out for debug purposes $fd = str_replace("\n", " ", $fd); $fd = str_replace("\r", " ", $fd); logger_print("smslog_id:" . $smslog_id . " response:" . $fd, 2, "clickatell outgoing"); } $ok = true; } dlr($smslog_id, $uid, $p_status); return $ok; }