function sms_command_handle($sms_datetime, $sms_sender, $command_keyword, $command_param = '') { global $datetime_now, $plugin_config; $ok = false; $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']; $sms_datetime = core_display_datetime($sms_datetime); $command_exec = str_replace("{SMSDATETIME}", "\"{$sms_datetime}\"", $command_exec); $command_exec = str_replace("{SMSSENDER}", "\"{$sms_sender}\"", $command_exec); $command_exec = str_replace("{COMMANDKEYWORD}", "\"{$command_keyword}\"", $command_exec); $command_exec = str_replace("{COMMANDPARAM}", "\"{$command_param}\"", $command_exec); $command_exec = $plugin_config['feature']['sms_command']['bin'] . "/" . $command_exec; $command_output = shell_exec(stripslashes($command_exec)); $username = uid2username($db_row['uid']); if ($db_row['command_return_as_reply'] == 1) { sendsms_pv($username, $sms_sender, $command_output, 'text', 0); } $db_query = "\n\tINSERT INTO " . _DB_PREF_ . "_featureCommand_log\n\t(sms_sender,command_log_datetime,command_log_keyword,command_log_exec) \n\tVALUES\n\t('{$sms_sender}','{$datetime_now}','{$command_keyword}','{$command_exec}')\n "; if ($new_id = @dba_insert_id($db_query)) { $ok = true; } return $ok; }
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 = 0; if (function_exists('mb_detect_encoding')) { $encoding = mb_detect_encoding($message, 'auto'); if ($encoding != 'ASCII') { $unicode = 1; } } list($ok, $to, $smslog_id) = sendsms_pv($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($sms_datetime, $sms_sender, $custom_keyword, $custom_param = '') { global $datetime_now; $ok = false; $db_query = "SELECT custom_url 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']; $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); $url = parse_url($custom_url); if (!$url['port']) { $url['port'] = 80; } // fixme anton -deprecated when using PHP5 //$connection = fsockopen($url['host'],$url['port'],&$error_number,&$error_description,60); $connection = fsockopen($url['host'], $url['port'], $error_number, $error_description, 60); if ($connection) { socket_set_blocking($connection, false); fputs($connection, "GET {$custom_url} HTTP/1.0\r\n\r\n"); $db_query = "\n\t INSERT INTO " . _DB_PREF_ . "_featureCustom_log\n\t (sms_sender,custom_log_datetime,custom_log_keyword,custom_log_url) \n\t VALUES\n\t ('{$sms_sender}','{$datetime_now}','{$custom_keyword}','{$custom_url}')\n\t"; if ($new_id = @dba_insert_id($db_query)) { $ok = true; } } return $ok; }
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 outgoing_prefix2smsc($prefix, $uid = 0) { $prefix = (string) substr($prefix, 0, 8); $uid = (int) $uid ? (int) $uid : 0; $db_query = "SELECT smsc FROM " . _DB_PREF_ . "_featureOutgoing WHERE prefix='{$prefix}' AND uid='{$uid}'"; $db_result = dba_query($db_query); while ($db_row = dba_fetch_array($db_result)) { $smsc[] = $db_row['smsc']; } // _log('prefix: ' . $prefix . ' uid:' . $uid . ' debug:' . print_r($smsc, 1), 3, 'outgoing_hook_sendsms_intercept'); return $smsc; }
function msgtemplate_hook_sendsms_get_template() { $ret = array(); $db_query = "SELECT * FROM " . _DB_PREF_ . "_featureMsgtemplate WHERE uid='" . $_SESSION['uid'] . "' ORDER BY t_title ASC"; $db_result = dba_query($db_query); $i = 0; while ($db_row = dba_fetch_array($db_result)) { $ret[$i]['text'] = $db_row['t_text']; $ret[$i]['title'] = $db_row['t_title']; $i++; } return $ret; }
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 queuelog_countall() { global $user_config; $ret = 0; if ($user_config['status'] != 2) { $user_query = "AND uid='" . $user_config['uid'] . "'"; } $db_query = "SELECT count(*) AS count FROM " . _DB_PREF_ . "_tblSMSOutgoing_queue WHERE (flag='0' OR flag='3') " . $user_query; $db_result = dba_query($db_query); if ($db_row = dba_fetch_array($db_result)) { $ret = $db_row['count']; } return $ret; }
function logger_get_error_string($id, $nodel = false) { $ret_string = ""; $db_query = "SELECT error_string FROM " . _DB_PREF_ . "_tblErrorString WHERE id='{$id}'"; $db_result = dba_query($db_query); if ($db_row = dba_fetch_array($db_result)) { $ret_string = $db_row['error_string']; if (!$nodel) { $db_query = "DELETE FROM " . _DB_PREF_ . "_tblErrorString WHERE id='{$id}'"; $db_result = @dba_affected_rows($db_query); } } return $ret_string; }
function getsmsstatus() { $smsc = core_smsc_get(); $smsc_data = gateway_get_smscbyname($smsc); $gateway = $smsc_data['gateway']; $db_query = "SELECT * FROM " . _DB_PREF_ . "_tblSMSOutgoing WHERE p_status='0' AND p_gateway='{$smsc}'"; $db_result = dba_query($db_query); while ($db_row = dba_fetch_array($db_result)) { $uid = $db_row['uid']; $smslog_id = $db_row['smslog_id']; $p_datetime = $db_row['p_datetime']; $p_update = $db_row['p_update']; $gpid = $db_row['p_gpid']; core_hook($gateway, 'getsmsstatus', array($gpid, $uid, $smslog_id, $p_datetime, $p_update)); } }
function simplebilling_hook_billing_getdata($smslog_id) { $ret = array(); logger_print("smslog_id:" . $smslog_id, 3, "simplebilling getdata"); $db_query = "SELECT id,rate,credit,status FROM " . _DB_PREF_ . "_tblBilling WHERE smslog_id='{$smslog_id}'"; $db_result = dba_query($db_query); if ($db_row = dba_fetch_array($db_result)) { $id = $db_row['id']; $post_datetime = $db_row['post_datetime']; $rate = $db_row['rate']; $credit = $db_row['credit']; $status = $db_row['status']; $ret = array('id' => $id, 'smslog_id' => $smslog_id, 'post_datetime' => $post_datetime, 'status' => $status, 'rate' => $rate, 'credit' => $credit); } return $ret; }
/** * Set the language for the user, if it's no defined just leave it with the default * @param string $var_username Username * @return boolean TRUE if valid */ function setuserlang($username = "") { global $language_module; $db_query = "SELECT `language_module` FROM " . _DB_PREF_ . "_tblUser WHERE username='******'"; $db_result = dba_query($db_query); $db_row = dba_fetch_array($db_result); if (isset($db_row['language_module'])) { $language_module = $db_row['language_module']; } if (defined('LC_MESSAGES')) { // linux setlocale(LC_MESSAGES, $language_module, $language_module . '.utf8', $language_module . '.utf-8', $language_module . '.UTF8', $language_module . '.UTF-8'); } else { // windows putenv("LC_ALL={$language_module}"); } }
/** * Set the language for the user, if it's no defined just leave it with the default * @param string $var_username Username * @return boolean TRUE if valid */ function core_setuserlang($username = "") { global $core_config; $c_lang_module = core_lang_get(); $db_query = "SELECT language_module FROM " . _DB_PREF_ . "_tblUser WHERE username='******'"; $db_result = dba_query($db_query); $db_row = dba_fetch_array($db_result); if (trim($db_row['language_module'])) { $c_lang_module = $db_row['language_module']; } if (defined('LC_MESSAGES')) { // linux setlocale(LC_MESSAGES, $c_lang_module, $c_lang_module . '.utf8', $c_lang_module . '.utf-8', $c_lang_module . '.UTF8', $c_lang_module . '.UTF-8'); } else { // windows putenv('LC_ALL={' . $c_lang_module . '}'); } }
function simplebilling_hook_billing_getdata_by_uid($uid) { $ret = array(); // logger_print("uid:".$uid, 2, "simplebilling summary"); $db_query = "SELECT * FROM " . _DB_PREF_ . "_tblBilling AS A, " . _DB_PREF_ . "_tblUser AS B, " . _DB_PREF_ . "_tblSMSOutgoing AS C " . "WHERE B.flag_deleted='0' AND A.smslog_id=C.smslog_id AND B.uid=C.uid AND A.status='1' AND B.uid='{$uid}'"; $db_result = dba_query($db_query); while ($db_row = dba_fetch_array($db_result)) { $id = $db_row['id']; $smslog_id = $db_row['smslog_id']; $post_datetime = $db_row['post_datetime']; $rate = $db_row['rate']; $credit = $db_row['credit']; $count = $db_row['count']; $charge = $db_row['charge']; $ret[] = array('id' => $id, 'smslog_id' => $smslog_id, 'post_datetime' => $post_datetime, 'rate' => $rate, 'credit' => $credit, 'count' => $count, 'charge' => $charge); } return $ret; }
function sms_quiz_handle($c_uid, $sms_datetime, $sms_sender, $quiz_keyword, $quiz_param = '') { global $core_config, $datetime_now; $ok = false; $username = uid2username($c_uid); $sms_to = $sms_sender; // we are replying to this sender $db_query = "SELECT * FROM " . _DB_PREF_ . "_featureQuiz WHERE quiz_keyword='{$quiz_keyword}'"; $db_result = dba_query($db_query); $db_row = dba_fetch_array($db_result); if ($db_row['quiz_enable'] == 1) { if ($db_row['quiz_answer'] == strtoupper($quiz_param)) { $message = $db_row['quiz_msg_correct']; } else { $message = $db_row['quiz_msg_incorrect']; } $quiz_id = $db_row['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}','{$datetime_now}')"; if ($logged = @dba_insert_id($db_query)) { //list($ok,$to,$smslog_id) = sendsms_pv($username, $sms_to, $message); $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 = $ok[0]; $ok = $ret['status']; } } else { if ($db_row['quiz_keyword'] == $quiz_keyword) { // returns true even if its logged as correct/incorrect answer // this situation happens when user answers a disabled quiz // returning false will make this SMS as unhandled SMS $ok = true; } } return $ok; }
function sms_quiz_hook_recvsms_process($sms_datetime, $sms_sender, $quiz_keyword, $quiz_param = '', $sms_receiver = '', $smsc = '', $raw_message = '') { $ok = false; $db_query = "SELECT * FROM " . _DB_PREF_ . "_featureQuiz WHERE quiz_keyword='{$quiz_keyword}'"; $db_result = dba_query($db_query); if ($db_row = dba_fetch_array($db_result)) { if ($db_row['uid'] && $db_row['quiz_enable']) { $smsc = gateway_decide_smsc($smsc, $db_row['smsc']); logger_print('begin k:' . $quiz_keyword . ' c:' . $quiz_param, 2, 'sms_quiz'); if (sms_quiz_handle($db_row, $sms_datetime, $sms_sender, $quiz_keyword, $quiz_param, $sms_receiver, $smsc, $raw_message)) { $ok = true; } $status = $ok ? 'handled' : 'unhandled'; logger_print('end k:' . $quiz_keyword . ' c:' . $quiz_param . ' s:' . $status, 2, 'sms_quiz'); } } $ret['uid'] = $db_row['uid']; $ret['status'] = $ok; return $ret; }
function sms_autoreply_handle($sms_datetime, $sms_sender, $c_uid, $autoreply_id, $autoreply_keyword, $autoreply_param = '') { global $datetime_now; $ok = false; $autoreply_request = $autoreply_keyword . " " . $autoreply_param; $array_autoreply_request = explode(" ", $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\tSELECT autoreply_scenario_result FROM " . _DB_PREF_ . "_featureAutoreply_scenario \n\tWHERE autoreply_id='{$autoreply_id}' AND {$autoreply_scenario_param_list} 1=1\n "; $db_result = dba_query($db_query); $db_row = dba_fetch_array($db_result); if ($autoreply_scenario_result = $db_row['autoreply_scenario_result']) { $db_query = "\n\t INSERT INTO " . _DB_PREF_ . "_featureAutoreply_log\n\t (sms_sender,autoreply_log_datetime,autoreply_log_keyword,autoreply_log_request) \n\t VALUES\n\t ('{$sms_sender}','{$datetime_now}','{$autoreply_keyword}','{$autoreply_request}')\n\t"; if ($new_id = @dba_insert_id($db_query)) { $ok = true; } } if ($ok) { $ok = false; $c_username = uid2username($c_uid); //list($ok,$to,$smslog_id) = sendsms_pv($c_username,$sms_sender,$autoreply_scenario_result); //$ok = $ok[0]; $unicode = 0; if (function_exists('mb_detect_encoding')) { $encoding = mb_detect_encoding($message, 'auto'); if ($encoding != 'ASCII') { $unicode = 1; } } list($ok, $to, $smslog_id) = sendsms_pv($c_username, $sms_sender, $autoreply_scenario_result, 'text', $unicode); $ok = $ok[0]; } return $ok; }
function webservices_ds_count($c_username, $c = 100, $last = false) { $ret = "ERR 101"; $uid = username2uid($c_username); if ($c) { $query_limit = " LIMIT 0,{$c}"; } else { $query_limit = " LIMIT 0,100"; } if ($last) { $query_last = "AND smslog_id>{$last}"; } $content_xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; $content_csv = ""; $db_query = "SELECT * FROM " . _DB_PREF_ . "_tblSMSOutgoing WHERE uid='{$uid}' {$query_last} ORDER BY p_datetime DESC {$query_limit}"; $db_result = dba_query($db_query); while ($db_row = dba_fetch_array($db_result)) { $smslog_id = $db_row['smslog_id']; $p_src = $db_row['p_src']; $p_dst = $db_row['p_dst']; $p_datetime = $db_row['p_datetime']; $p_update = $db_row['p_update']; $p_status = $db_row['p_status']; $content_xml .= "<ds id=\"" . $smslog_id . "\" src=\"" . $p_src . "\" dst=\"" . $p_dst . "\" datetime=\"" . $p_datetime . "\" update=\"" . $p_update . "\" status=\"" . $p_status . "\"></ds>\n"; $content_csv .= "\"{$smslog_id}\";\"{$p_src}\";\"{$p_dst}\";\"{$p_datetime}\";\"{$p_update}\";\"{$p_status}\";\n"; } // if DS available by checking content_csv if ($content_csv) { if ($form == "XML") { header("Content-Type: text/xml"); $ret = $content_xml; } else { $ret = $content_csv; } } else { $ret = "ERR 400"; } return $ret; }
function uplink_hook_getsmsstatus($gpid = 0, $uid = "", $smslog_id = "", $p_datetime = "", $p_update = "") { // global $plugin_config; // p_status : // 0 = pending // 1 = delivered // 2 = failed // dlr($smslog_id,$uid,$p_status); global $plugin_config; $db_query = "SELECT * FROM " . _DB_PREF_ . "_gatewayUplink WHERE up_local_smslog_id='{$smslog_id}'"; $db_result = dba_query($db_query); if ($db_row = dba_fetch_array($db_result)) { $local_smslog_id = $db_row['up_local_smslog_id']; $remote_smslog_id = $db_row['up_remote_smslog_id']; $remote_queue_code = $db_row['up_remote_queue_code']; $dst = $db_row['up_dst']; if ($local_smslog_id && ($remote_smslog_id || $remote_queue_code && $dst)) { $ws = new Playsms\Webservices(); $ws->url = $plugin_config['uplink']['master'] . '/index.php?app=ws'; $ws->username = $plugin_config['uplink']['username']; $ws->token = $plugin_config['uplink']['token']; $ws->smslog_id = $remote_smslog_id; $ws->queue = $remote_queue_code; $ws->count = 1; $ws->getOutgoing(); // _log('url:'.$ws->getWebservicesUrl(), 3, 'uplink getsmsstatus'); $response = $ws->getData()->data[0]; if ($response->status == 2) { $p_status = 2; dlr($local_smslog_id, $uid, $p_status); } else { if ($p_status = (int) $response->status) { dlr($local_smslog_id, $uid, $p_status); } } } } }
function sms_custom_handle($sms_datetime, $sms_sender, $custom_keyword, $custom_param = '') { global $datetime_now; $ok = false; $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']; $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); $username = uid2username($db_row['uid']); $debug = dba_query("INSERT INTO " . _DB_PREF_ . "_toolsDebug (value)VALUES('{$username}')"); $url = parse_url($custom_url); if (!$url['port']) { $url['port'] = 80; } // fixme anton -deprecated when using PHP5 //$connection = fsockopen($url['host'],$url['port'],&$error_number,&$error_description,60); //fixme Edward, change to file_get_contents $returns = file_get_contents($custom_url); if ($returns) { //fixme Edward, change to file_get_contents //socket_set_blocking($connection, false); //fputs($connection, "GET $custom_url HTTP/1.0\r\n\r\n"); $username = uid2username($db_row['uid']); if ($db_row['custom_return_as_reply'] == 1) { sendsms_pv($username, $sms_sender, $returns, 'text', 0); } $db_query = "\n\t INSERT INTO " . _DB_PREF_ . "_featureCustom_log\n\t (sms_sender,custom_log_datetime,custom_log_keyword,custom_log_url) \n\t VALUES\n\t ('{$sms_sender}','{$datetime_now}','{$custom_keyword}','{$custom_url}')\n\t"; if ($new_id = @dba_insert_id($db_query)) { $ok = true; } } return $ok; }
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; }
} if (!$nav) { $nav = 1; } $line_per_page = 50; $max_nav = 15; $db_query = "SELECT count(*) as count FROM " . _DB_PREF_ . "_tblSMSOutgoing WHERE flag_deleted='0'"; $db_result = dba_query($db_query); $db_row = dba_fetch_array($db_result); $num_rows = $db_row['count']; $pages = ceil($num_rows / $line_per_page); $nav_pages = themes_navbar($pages, $nav, $max_nav, "index.php?app=menu&inc=all_outgoing&op=all_outgoing", $page); $limit = ($page - 1) * $line_per_page; $content = "\n\t <h2>" . _('All outgoing SMS') . "</h2>\n\t <p>{$nav_pages}</p>\n\t <form name=\"fm_outgoing\" action=\"index.php?app=menu&inc=all_outgoing&op=act_del\" method=post onSubmit=\"return SureConfirm()\">\n\t <table width=100% cellpadding=1 cellspacing=2 border=0 class=\"sortable\">\n <thead>\n\t <tr>\n\t <th align=center width=4>*</th>\n\t <th align=center width=10%>" . _('User') . "</th>\n\t <th align=center width=20%>" . _('Time') . "</th>\n\t <th align=center width=10%>" . _('Gateway') . "</th>\n\t <th align=center width=10%>" . _('Receiver') . "</th>\n\t <th align=center width=40%>" . _('Message') . "</th>\n\t <th align=center width=10%>" . _('Status') . "</th>\n\t <th align=center width=4>" . _('Group') . "</th>\n\t <th align=center width=4 class=\"sorttable_nosort\">" . _('Action') . "</th>\n\t <th width=4 class=\"sorttable_nosort\"><input type=checkbox onclick=CheckUncheckAll(document.fm_outgoing)></td>\n\t </tr>\n </thead>\n <tbody>\n\t"; $db_query = "SELECT * FROM " . _DB_PREF_ . "_tblSMSOutgoing WHERE flag_deleted='0' ORDER BY smslog_id DESC LIMIT {$limit},{$line_per_page}"; $db_result = dba_query($db_query); $i = $num_rows - $line_per_page * ($page - 1) + 1; $j = 0; while ($db_row = dba_fetch_array($db_result)) { $j++; $current_slid = $db_row['smslog_id']; $p_username = uid2username($db_row['uid']); $p_dst = $db_row['p_dst']; $p_desc = phonebook_number2name($p_dst); $current_p_dst = $p_dst; if ($p_desc) { $current_p_dst = "{$p_dst}<br>({$p_desc})"; } $hide_p_dst = $p_dst; if ($p_desc) { $hide_p_dst = "{$p_dst} ({$p_desc})";
/** * Process register an account * */ function auth_register() { global $core_config; $ok = false; if ($core_config['main']['cfg_enable_register']) { $username = trim($_REQUEST['username']); $email = trim($_REQUEST['email']); $name = trim($_REQUEST['name']); $mobile = trim($_REQUEST['mobile']); $error_string = _('Fail to register an account'); if ($username && $email && $name && $mobile) { $db_query = "SELECT * FROM " . _DB_PREF_ . "_tblUser WHERE username='******'"; $db_result = dba_query($db_query); if ($db_row = dba_fetch_array($db_result)) { $error_string = _('User is already exists') . " (" . _('username') . ": `" . $username . "`)"; } else { $password = substr(md5(time()), 0, 6); $sender = ' - ' . $username; if (ereg("^(.+)(.+)\\.(.+)\$", $email, $arr)) { // by default the status is 3 (normal user) $db_query = "\n\t\t\tINSERT INTO " . _DB_PREF_ . "_tblUser (status,username,password,name,mobile,email,sender,credit)\n\t\t\tVALUES ('3','{$username}','{$password}','{$name}','{$mobile}','{$email}','{$sender}','" . $core_config['main']['cfg_default_credit'] . "')\n\t\t "; if ($new_uid = @dba_insert_id($db_query)) { $ok = true; } } } if ($ok) { logger_print("u:" . $username . " email:" . $email . " ip:" . $_SERVER['REMOTE_ADDR'], 3, "register"); $subject = "[SMSGW] " . _('New account registration'); $body = $core_config['main']['cfg_web_title'] . "\n"; $body .= $core_config['http_path']['base'] . "\n\n"; $body .= _('Username') . "\t: {$username}\n"; $body .= _('Password') . "\t: {$password}\n\n"; $body .= $core_config['main']['cfg_email_footer'] . "\n\n"; $error_string = _('User has been added') . " (" . _('username') . ": `" . $username . "`)"; $error_string .= "<br />"; if (sendmail($core_config['main']['cfg_email_service'], $email, $subject, $body)) { $error_string .= _('Password has been sent to your email'); } else { $error_string .= _('Fail to send email'); } } } } else { $error_string = _('Public registration disabled'); } $errid = logger_set_error_string($error_string); header("Location: " . $core_config['http_path']['base'] . "?errid=" . $errid); exit; }
function recvsms_process($sms_datetime, $sms_sender, $message, $sms_receiver = '', $smsc = '') { global $core_config; // blacklist if (blacklist_mobile_isexists(0, $sms_sender)) { logger_print("incoming SMS discarded sender is in the blacklist datetime:" . $sms_datetime . " sender:" . $sms_sender . " receiver:" . $sms_receiver . " message:[" . $message . "] smsc:" . $smsc, 3, "recvsms_process"); return false; } // incoming sms will be handled by plugins first $ret_intercept = recvsms_intercept($sms_datetime, $sms_sender, $message, $sms_receiver, $smsc); if ($ret_intercept['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; $message = $ret_intercept['param']['message'] ? $ret_intercept['param']['message'] : $message; $sms_receiver = $ret_intercept['param']['sms_receiver'] ? $ret_intercept['param']['sms_receiver'] : $sms_receiver; $smsc = $ret_intercept['param']['smsc'] ? $ret_intercept['param']['smsc'] : $smsc; } // set active gateway module as default gateway // if (!$smsc) { // $smsc = core_smsc_get(); // } // log it logger_print("dt:" . $sms_datetime . " sender:" . $sms_sender . " m:" . $message . " receiver:" . $sms_receiver . ' smsc:' . $smsc, 3, "recvsms_process"); // if hooked function returns cancel=true then stop the processing incoming sms, return false if ($ret_intercept['cancel']) { logger_print("cancelled datetime:" . $sms_datetime . " sender:" . $sms_sender . " receiver:" . $sms_receiver . " message:[" . $message . "] smsc:" . $smsc, 3, "recvsms_process"); return false; } $c_uid = 0; $c_feature = ""; $ok = false; $keyword_separator = $core_config['main']['keyword_separator'] ? $core_config['main']['keyword_separator'] : ' '; $array_target_keyword = explode($keyword_separator, $message); $target_keyword = strtoupper(trim($array_target_keyword[0])); $raw_message = $message; $message = $array_target_keyword[1]; for ($i = 2; $i < count($array_target_keyword); $i++) { $message .= " " . $array_target_keyword[$i]; } switch ($target_keyword) { case "BC": $c_uid = user_mobile2uid($sms_sender); $c_username = user_uid2username($c_uid); $c_feature = 'core'; $array_target_group = explode(" ", $message); $target_group = strtoupper(trim($array_target_group[0])); $list = phonebook_search_group($c_uid, $target_group, '', TRUE); $c_gpid = $list[0]['gpid']; $message = $array_target_group[1]; for ($i = 2; $i < count($array_target_group); $i++) { $message .= " " . $array_target_group[$i]; } logger_print("bc username:"******" gpid:" . $c_gpid . " sender:" . $sms_sender . " receiver:" . $sms_receiver . " message:" . $message . " raw:" . $raw_message, 3, "recvsms_process"); if ($c_username && $c_gpid && $message) { list($ok, $to, $smslog_id, $queue) = sendsms_bc($c_username, $c_gpid, $message); $ok = true; } else { _log('bc has failed due to missing option u:' . $c_username . ' gpid:' . $c_gpid . ' m:[' . $message . ']', 3, 'recvsms_process'); } break; default: for ($c = 0; $c < count($core_config['plugins']['list']['feature']); $c++) { $c_feature = $core_config['plugins']['list']['feature'][$c]; $ret = core_hook($c_feature, 'recvsms_process', array($sms_datetime, $sms_sender, $target_keyword, $message, $sms_receiver, $smsc, $raw_message)); if ($ok = $ret['status']) { $c_uid = $ret['uid']; logger_print("feature:" . $c_feature . " datetime:" . $sms_datetime . " sender:" . $sms_sender . " receiver:" . $sms_receiver . " keyword:" . $target_keyword . " message:" . $message . " raw:" . $raw_message . " smsc:" . $smsc, 3, "recvsms_process"); break; } } } $c_status = $ok ? 1 : 0; if ($c_status == 0) { $c_feature = ''; $target_keyword = ''; $message = $raw_message; // from recvsms_intercept(), force status as 'handled' if ($ret_intercept['hooked']) { $c_status = 1; if ($ret_intercept['uid']) { $c_uid = $ret_intercept['uid']; } logger_print("intercepted datetime:" . $sms_datetime . " sender:" . $sms_sender . " receiver:" . $sms_receiver . " message:" . $message, 3, "recvsms_process"); } else { logger_print("unhandled datetime:" . $sms_datetime . " sender:" . $sms_sender . " receiver:" . $sms_receiver . " message:" . $message, 3, "recvsms_process"); } } // incoming sms intercept after unset($ret_intercept); $ret_intercept = recvsms_intercept_after($sms_datetime, $sms_sender, $message, $sms_receiver, $c_feature, $c_status, $c_uid, $smsc); if ($ret_intercept['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; $message = $ret_intercept['param']['message'] ? $ret_intercept['param']['message'] : $message; $sms_receiver = $ret_intercept['param']['sms_receiver'] ? $ret_intercept['param']['sms_receiver'] : $sms_receiver; $c_feature = $ret_intercept['param']['feature'] ? $ret_intercept['param']['feature'] : $c_feature; $c_status = $ret_intercept['param']['status'] ? $ret_intercept['param']['status'] : $c_status; $c_uid = $ret_intercept['param']['uid'] ? $ret_intercept['param']['uid'] : $c_uid; $smsc = $ret_intercept['param']['smsc'] ? $ret_intercept['param']['smsc'] : $smsc; } // fixme anton - all incoming messages set to user with uid=1 if no one owns it $c_uid = $c_uid ? $c_uid : 1; $db_query = "\n\t\tINSERT INTO " . _DB_PREF_ . "_tblSMSIncoming\n\t\t(in_uid,in_feature,in_gateway,in_sender,in_receiver,in_keyword,in_message,in_datetime,in_status)\n\t\tVALUES\n\t\t('{$c_uid}','{$c_feature}','{$smsc}','{$sms_sender}','{$sms_receiver}','{$target_keyword}','{$message}','" . core_adjust_datetime($sms_datetime) . "','{$c_status}')"; $db_result = dba_query($db_query); return $ok; }
function phonebook_hook_phonebook_search_group($uid, $keyword = "", $count = 0) { $ret = array(); $db_query = "\n\t\tSELECT DISTINCT id AS gpid, name AS group_name, code, flag_sender\n\t\tFROM " . _DB_PREF_ . "_featurePhonebook_group\n\t\tWHERE (\n\t\t\tuid='{$uid}' OR\n\t\t\tid in (\n\t\t\t\tSELECT B.id AS id FROM " . _DB_PREF_ . "_featurePhonebook AS A\n\t\t\t\tLEFT JOIN " . _DB_PREF_ . "_featurePhonebook_group_contacts AS C ON A.id=C.pid\n\t\t\t\tLEFT JOIN " . _DB_PREF_ . "_featurePhonebook_group AS B ON B.id=C.gpid\n\t\t\t\tWHERE A.mobile='" . user_getfieldbyuid($uid, 'mobile') . "' AND B.flag_sender='1'\n\t\t\t) OR (\n\t\t\tuid <>'{$uid}' AND flag_sender>'1'\n\t\t\t)\n\t\t)"; if ($keyword) { $db_query .= " AND (\n\t\t\t\t\tname LIKE '%" . $keyword . "%' OR\n\t\t\t\t\tcode LIKE '%" . $keyword . "%'\n\t\t\t\t\t)"; } if ($count > 0) { $db_query .= " LIMIT " . $count; } $db_result = dba_query($db_query); while ($db_row = dba_fetch_array($db_result)) { $ret[] = $db_row; } return $ret; }
function credit_hook_rate_getusercredit($username) { $balance = 0; if ($username) { $db_query = "SELECT credit FROM " . _DB_PREF_ . "_tblUser WHERE username='******'"; $db_result = dba_query($db_query); $db_row = dba_fetch_array($db_result); $balance = $db_row['credit']; } $balance = (double) ($balance ? $balance : 0); $balance = number_format($balance, 3, '.', ''); return $balance; }
foreach ($rows as $key => $db_row) { $c_uid = $db_row['uid']; $c_username = uid2username($c_uid); $c_count = phonebook_getmembercountbyid($db_row['gpid']); $list_of_group .= "<option value=\"" . $db_row['gpid'] . "\" {$selected}>" . $db_row['gp_name'] . " (" . $db_row['gp_code'] . ")(" . $c_count . ") - " . _('shared by') . " " . $c_username . "</option>"; } $sms_from = sendsms_get_sender($username); $max_length = $core_config['smsmaxlength']; if ($sms_footer = username2footer($username)) { $max_length = $max_length - strlen($sms_footer); } else { $sms_footer = "<i>" . _('not set') . "</i>"; } // WWW $db_query2 = "SELECT * FROM " . _DB_PREF_ . "_tblSMSTemplate WHERE uid='{$uid}'"; $db_result2 = dba_query($db_query2); $j = 0; $option_values = "<option value=\"\" default>--" . _('Please select') . "--</option>"; while ($db_row = dba_fetch_array($db_result2)) { $j++; $option_values .= "<option value=\"" . $db_row['t_text'] . "\">" . $db_row['t_title'] . "</option>"; $input_values .= "<input type=\"hidden\" name=\"content_{$j}\" value=\"" . $db_row['t_text'] . "\">"; } // document.fm_sendsms.message.value = document.fm_smstemplate.content_num.value; // New function introduce for long sms count and another field (SMS character) added to send sms broadcast if ($errid) { $err = logger_get_error_string($errid); } if ($err) { $content = "<div class=error_string>{$err}</div>"; }
/** * Get SMS data from $smslog_id * * @param integer $smslog_id * @return array */ function sendsms_get_sms($smslog_id) { $data = array(); $db_query = "SELECT * FROM " . _DB_PREF_ . "_tblSMSOutgoing WHERE smslog_id='{$smslog_id}'"; $db_result = dba_query($db_query); if ($db_row = dba_fetch_array($db_result)) { $data = $db_row; } return $data; }
function sms_board_output_html($keyword, $line = "10", $pref_bodybgcolor = "#E0D0C0", $pref_oddbgcolor = "#EEDDCC", $pref_evenbgcolor = "#FFEEDD") { global $apps_path, $web_title; $keyword = strtoupper($keyword); if (!$line) { $line = "10"; } if (!$pref_bodybgcolor) { $pref_bodybgcolor = "#E0D0C0"; } if (!$pref_oddbgcolor) { $pref_oddbgcolor = "#EEDDCC"; } if (!$pref_evenbgcolor) { $pref_evenbgcolor = "#FFEEDD"; } $db_query = "SELECT board_pref_template FROM " . _DB_PREF_ . "_featureBoard WHERE board_keyword='{$keyword}'"; $db_result = dba_query($db_query); if ($db_row = dba_fetch_array($db_result)) { $template = $db_row['board_pref_template']; $db_query1 = "SELECT * FROM " . _DB_PREF_ . "_featureBoard_log WHERE in_keyword='{$keyword}' ORDER BY in_datetime DESC LIMIT 0,{$line}"; $db_result1 = dba_query($db_query1); $content = "<html>\n<head>\n<title>{$web_title} - " . _('Keyword') . ": {$keyword}</title>\n<meta name=\"author\" content=\"http://playsms.org\">\n</head>\n<body bgcolor=\"{$pref_bodybgcolor}\" topmargin=\"0\" leftmargin=\"0\">\n<table width=100% cellpadding=2 cellspacing=2>\n"; $i = 0; while ($db_row1 = dba_fetch_array($db_result1)) { $i++; $sender = $db_row1['in_masked']; $datetime = $db_row1['in_datetime']; $message = $db_row1['in_msg']; $tmp_template = $template; $tmp_template = str_replace("{SENDER}", $sender, $tmp_template); $tmp_template = str_replace("{DATETIME}", $datetime, $tmp_template); $tmp_template = str_replace("{MESSAGE}", $message, $tmp_template); if ($i % 2 == 0) { $pref_zigzagcolor = "{$pref_evenbgcolor}"; } else { $pref_zigzagcolor = "{$pref_oddbgcolor}"; } $content .= "\n<tr><td width=100% bgcolor=\"{$pref_zigzagcolor}\">\n{$tmp_template}</td></tr>\n\n"; } $content .= "</table>\n</body>\n</html>\n"; return $content; } }