Example #1
0
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;
}
Example #2
0
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);
        }
    }
}
Example #3
0
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;
}
Example #4
0
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;
}
Example #5
0
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;
}
Example #6
0
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;
}
Example #8
0
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;
}
Example #9
0
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;
}
Example #10
0
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));
    }
}
Example #11
0
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;
}
Example #12
0
/**
 * 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}");
    }
}
Example #13
0
/**
 * 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 . '}');
    }
}
Example #14
0
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;
}
Example #15
0
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;
}
Example #16
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;
}
Example #17
0
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;
}
Example #18
0
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;
}
Example #19
0
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);
                }
            }
        }
    }
}
Example #20
0
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;
}
Example #21
0
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;
}
Example #22
0
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;
}
Example #23
0
 }
 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})";
Example #24
0
/**
 * 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;
}
Example #25
0
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;
}
Example #26
0
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;
}
Example #27
0
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;
}
Example #28
0
 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>";
 }
Example #29
0
/**
 * 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;
}
Example #30
0
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;
    }
}