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; }
/** * Implementations of hook recvsms_process() * * @param $sms_datetime date * and time when incoming sms inserted to playsms * @param $sms_sender sender * on incoming sms * @param $autoreply_keyword check * if keyword is for sms_autoreply * @param $autoreply_param get * parameters from incoming sms * @param $sms_receiver receiver * number that is receiving incoming sms * @return $ret array of keyword owner uid and status, TRUE if incoming sms handled */ function sms_autoreply_hook_recvsms_process($sms_datetime, $sms_sender, $autoreply_keyword, $autoreply_param = '', $sms_receiver = '', $smsc = '', $raw_message = '') { $ok = false; $db_query = "SELECT * FROM " . _DB_PREF_ . "_featureAutoreply WHERE autoreply_keyword='{$autoreply_keyword}'"; $db_result = dba_query($db_query); if ($db_row = dba_fetch_array($db_result)) { $c_uid = $db_row['uid']; $autoreply_id = $db_row['autoreply_id']; $smsc = gateway_decide_smsc($smsc, $db_row['smsc']); if (sms_autoreply_handle($c_uid, $sms_datetime, $sms_sender, $sms_receiver, $autoreply_id, $autoreply_keyword, $autoreply_param, $smsc, $raw_message)) { $ok = true; } } $ret['uid'] = $c_uid; $ret['status'] = $ok; return $ret; }
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_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 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; }