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;
}
Esempio n. 2
0
/**
 * 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;
}
Esempio n. 3
0
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;
}
Esempio n. 4
0
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;
}
Esempio n. 5
0
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;
}