Example #1
0
function inboxgroup_forwardcatchall($data, $log_in_id, $sms_sender, $message)
{
    global $core_config;
    logger_print("forwardcatchall id:" . $data['id'] . " s:" . $sms_sender . " r:" . $data['in_receiver'] . " m:" . $message, 3, "inboxgroup");
    if ($username = uid2username($data['uid'])) {
        $users = inboxgroup_getcatchall($data['id']);
        $continue = false;
        if ($data['exclusive']) {
            for ($i = 0; $i < count($users); $i++) {
                if ($sms_sender == $users[$i]['mobile']) {
                    $continue = true;
                }
            }
        } else {
            $continue = true;
        }
        if ($continue) {
            for ($i = 0; $i < count($users); $i++) {
                if (($sms_to = $users[$i]['mobile']) && $sms_to != $sms_sender) {
                    //list($ok, $to, $smslog_id) = sendsms_pv($username, $sms_to, $message, 'text', 0);
                    //logger_print("forwardcatchall sendsms smslog_id:".$smslog_id[0]." to:".$sms_to, 3, "inboxgroup");
                    //inboxgroup_saveoutlog($log_in_id, $smslog_id[0], 1, $users[$i]['uid']);
                    $c_username = uid2username($users[$i]['uid']);
                    insertsmstoinbox($core_config['datetime']['now'], $sms_sender, $c_username, $message, $data['in_receiver']);
                }
            }
        }
    }
}
Example #2
0
function setsmsincomingaction($sms_datetime, $sms_sender, $message, $sms_receiver = "")
{
    global $gateway_module, $core_config;
    // make sure sms_datetime is in supported format and in GMT+0
    $sms_datetime = core_adjust_datetime($sms_datetime);
    // incoming sms will be handled by plugin/tools/* first
    $ret_intercept = interceptincomingsms($sms_datetime, $sms_sender, $message, $sms_receiver);
    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;
    }
    // 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, 3, "setsmsincomingaction");
        return false;
    }
    $c_uid = 0;
    $c_feature = "";
    $ok = false;
    $array_target_keyword = explode(" ", $message);
    $target_keyword = strtoupper(trim($array_target_keyword[0]));
    $message_full = $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 = mobile2uid($sms_sender);
            $c_username = uid2username($c_uid);
            $c_feature = 'core';
            $array_target_group = explode(" ", $message);
            $target_group = strtoupper(trim($array_target_group[0]));
            $c_gpid = phonebook_groupcode2id($c_uid, $target_group);
            $message = $array_target_group[1];
            for ($i = 2; $i < count($array_target_group); $i++) {
                $message .= " " . $array_target_group[$i];
            }
            logger_print("username:"******" gpid:" . $c_gpid . " sender:" . $sms_sender . " receiver:" . $sms_receiver . " message:" . $message, 3, "setsmsincomingaction bc");
            list($ok, $to, $queue) = sendsms_bc($c_username, $c_gpid, $message);
            $ok = true;
            break;
        case "PV":
            $c_feature = 'core';
            $array_target_user = explode(" ", $message);
            $target_user = strtoupper(trim($array_target_user[0]));
            $c_uid = username2uid($target_user);
            $message = $array_target_user[1];
            for ($i = 2; $i < count($array_target_user); $i++) {
                $message .= " " . $array_target_user[$i];
            }
            logger_print("datetime:" . $sms_datetime . " sender:" . $sms_sender . " receiver:" . $sms_receiver . " target:" . $target_user . " message:" . $message, 3, "setsmsincomingaction pv");
            if (insertsmstoinbox($sms_datetime, $sms_sender, $target_user, $message, $sms_receiver)) {
                $ok = true;
            }
            break;
        default:
            for ($c = 0; $c < count($core_config['featurelist']); $c++) {
                $c_feature = $core_config['featurelist'][$c];
                $ret = x_hook($c_feature, 'setsmsincomingaction', array($sms_datetime, $sms_sender, $target_keyword, $message, $sms_receiver));
                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, 3, "setsmsincomingaction");
                    break;
                }
            }
    }
    $c_status = $ok ? 1 : 0;
    if ($c_status == 0) {
        $c_feature = '';
        $target_keyword = '';
        $message = $message_full;
        // from interceptincomingsms(), force status as 'handled'
        if ($ret_intercept['hooked']) {
            $c_status = 1;
            logger_print("intercepted datetime:" . $sms_datetime . " sender:" . $sms_sender . " receiver:" . $sms_receiver . " message:" . $message, 3, "setsmsincomingaction");
        } else {
            logger_print("unhandled datetime:" . $sms_datetime . " sender:" . $sms_sender . " receiver:" . $sms_receiver . " message:" . $message, 3, "setsmsincomingaction");
        }
    }
    $db_query = "\n        INSERT INTO " . _DB_PREF_ . "_tblSMSIncoming \n        (in_uid,in_feature,in_gateway,in_sender,in_receiver,in_keyword,in_message,in_datetime,in_status)\n        VALUES\n        ('{$c_uid}','{$c_feature}','{$gateway_module}','{$sms_sender}','{$sms_receiver}','{$target_keyword}','{$message}','{$sms_datetime}','{$c_status}')\n    ";
    $db_result = dba_query($db_query);
    return $ok;
}
Example #3
0
function setsmsincomingaction($sms_datetime, $sms_sender, $message)
{
    global $system_from;
    $ok = false;
    $keywords = explode(' ', $message);
    $target_code = strtoupper($keywords[0]);
    switch ($target_code) {
        case 'BC':
            $array_target_group = explode(" ", $message);
            $target_group = strtoupper(trim($array_target_group[0]));
            $message = $array_target_group[1];
            for ($i = 2; $i < count($array_target_group); $i++) {
                $message .= " " . $array_target_group[$i];
            }
            if (send2group($sms_sender, $target_group, $message)) {
                $ok = true;
            }
            break;
        case 'PV':
            $array_target_user = explode(" ", $message);
            $target_user = strtoupper(trim($array_target_user[0]));
            $message = $array_target_user[1];
            for ($i = 2; $i < count($array_target_user); $i++) {
                $message .= " " . $array_target_user[$i];
            }
            if (insertsmstoinbox($sms_datetime, $sms_sender, $target_user, $message)) {
                $ok = true;
            }
            break;
        default:
            // try as autoreply
            $ok = processAutoreply($sms_datetime, $sms_sender, $message);
            // maybe its for sms poll
            if (!$ok) {
                $db_query = "SELECT poll_id FROM playsms_featPoll WHERE poll_code='{$target_code}'";
                if ($db_result = dba_num_rows($db_query)) {
                    $ok = savepoll($sms_sender, $target_code, $message);
                }
            }
            // or maybe its for sms command
            if (!$ok) {
                $db_query = "SELECT command_id FROM playsms_featCommand WHERE command_code='{$target_code}'";
                if ($db_result = dba_num_rows($db_query)) {
                    $ok = execcommand($sms_datetime, $sms_sender, $target_code, $message);
                }
            }
            // or maybe its for sms custom
            if (!$ok) {
                $db_query = "SELECT custom_id FROM playsms_featCustom WHERE custom_code='{$target_code}'";
                if ($db_result = dba_num_rows($db_query)) {
                    $ok = processcustom($sms_datetime, $sms_sender, $target_code, $message);
                }
            }
            // its for sms board
            if (!$ok) {
                $db_query = "SELECT board_id FROM playsms_featBoard WHERE board_code='{$target_code}'";
                if ($db_result = dba_num_rows($db_query)) {
                    $ok = insertsmstodb($sms_datetime, $sms_sender, $target_code, $message);
                }
            }
            // if its from the known system messsage sender,
            // then process it as a system message
            $syssenders = explode(',', $system_from);
            foreach ($syssenders as $syssender) {
                if (0 == strcasecmp($sms_sender, $syssender)) {
                    $saveToInbox = true;
                    $ok = processSystemMessage($sms_sender, "{$target_code} {$message}");
                }
            }
            break;
    }
    if (!$ok) {
        $saveToInbox = true;
        // If all else failed, then check the autoreplies again,
        // this time with a more sophisticated match.
        //
        // Note that since this can result in autoreply error messages,
        // we only do this if its a regular number, not a shortcode or
        // some special cell provider number
        // (if we don't check we can get into an infinite loop, us
        // sending an error message to another autmoated system, which
        // sends us an error message...)
        if (strlen($sms_sender) > 4 && ereg('^\\+?[0-9]+$', $sms_sender)) {
            $ok = processAutoreply($sms_datetime, $sms_sender, $message, false);
            $saveToInbox = !$ok;
        }
    }
    if ($saveToInbox) {
        error_log("saving to inbox...");
        if (insertsmstoinbox($sms_datetime, $sms_sender, "admin", $message)) {
            $ok = true;
        }
    }
    return $ok;
}