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; }
function insertsmstoinbox($sms_datetime, $sms_sender, $target_user, $message, $sms_receiver = "") { global $core_config, $web_title, $email_service, $email_footer; // sms to inbox will be handled by plugin/tools/* first $ret_intercept = interceptsmstoinbox($sms_datetime, $sms_sender, $target_user, $message, $sms_receiver); if ($ret_intercept['param_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; $target_user = $ret_intercept['param']['target_user'] ? $ret_intercept['param']['target_user'] : $target_user; $message = $ret_intercept['param']['message'] ? $ret_intercept['param']['message'] : $message; $sms_receiver = $ret_intercept['param']['sms_receiver'] ? $ret_intercept['param']['sms_receiver'] : $sms_receiver; } $ok = false; if ($sms_sender && $target_user && $message) { $user = user_getdatabyusername($target_user); if ($uid = $user['uid']) { // forward to Inbox if ($fwd_to_inbox = $user['fwd_to_inbox']) { $db_query = "\n\t\t INSERT INTO " . _DB_PREF_ . "_tblUserInbox\n\t\t (in_sender,in_receiver,in_uid,in_msg,in_datetime) \n\t\t VALUES ('{$sms_sender}','{$sms_receiver}','{$uid}','{$message}','{$sms_datetime}')\n\t\t"; logger_print("saving sender:" . $sms_sender . " receiver:" . $sms_receiver . " target:" . $target_user, 3, "insertsmstoinbox"); if ($cek_ok = @dba_insert_id($db_query)) { logger_print("saved sender:" . $sms_sender . " receiver:" . $sms_receiver . " target:" . $target_user, 3, "insertsmstoinbox"); } } // forward to email if ($fwd_to_email = $user['fwd_to_email']) { if ($email = $user['email']) { // make sure sms_datetime is in supported format and in user's timezone $sms_datetime = core_display_datetime($sms_datetime); // get name from target_user's phonebook $c_name = phonebook_number2name($sms_sender, $target_user); $sender = $c_name ? $c_name . ' <' . $sms_sender . '>' : $sms_sender; $subject = "[SMSGW-PV] " . _('from') . " {$sms_sender}"; $body = _('Forward Private WebSMS') . " ({$web_title})\n\n"; $body .= _('Date time') . ": {$sms_datetime}\n"; $body .= _('Sender') . ": {$sender}\n"; $body .= _('Receiver') . ": {$sms_receiver}\n\n"; $body .= _('Message') . ":\n{$message}\n\n"; $body .= $email_footer . "\n\n"; logger_print("send email from:" . $email_service . " to:" . $email, 3, "insertsmstoinbox"); sendmail($email_service, $email, $subject, $body); logger_print("sent email from:" . $email_service . " to:" . $email, 3, "insertsmstoinbox"); } $ok = true; } // forward to mobile if ($fwd_to_mobile = $user['fwd_to_mobile']) { if ($mobile = $user['mobile']) { $unicode = 0; if (function_exists('mb_detect_encoding')) { $encoding = mb_detect_encoding($message, 'auto'); if ($encoding != 'ASCII') { $unicode = 1; } } $c_uid = mobile2uid($sms_sender); $c_user = user_getdatabyuid($c_uid); $c_username = $c_user['username']; $c_sender = $c_username ? $c_username : $sms_sender; $message = '@' . $c_sender . ' ' . $message; // list($ok,$to,$smslog_id) = sendsms_pv($target_user,$mobile,$message,'text',$unicode); $ret = sendsms($core_config['main']['cfg_gateway_number'], '', $mobile, $message, $c_uid, 0, 'text', $unicode); logger_print("send to sender:" . $c_sender . " receiver:" . $sms_receiver . " target:" . $target_user, 3, "insertsmstoinbox"); if ($cek_ok = $ok[0]) { logger_print("sent to sender:" . $c_sender . " receiver:" . $sms_receiver . " target:" . $target_user, 3, "insertsmstoinbox"); } } } } } return $ok; }