コード例 #1
0
ファイル: fn.php プロジェクト: 10corp/playSMS
/**
 * Intercept on before-process stage for incoming SMS
 *
 * @param $sms_datetime incoming
 *        SMS date/time
 * @param $sms_sender incoming
 *        SMS sender
 * @param $message incoming
 *        SMS message before interepted
 * @param $sms_receiver receiver
 *        number that is receiving incoming SMS
 * @param $reference_id reference_id
 *        data
 * @return array $ret
 */
function incoming_hook_recvsms_intercept($sms_datetime, $sms_sender, $message, $sms_receiver, $reference_id)
{
    $ret = array();
    $found_bc = FALSE;
    $found_pv = FALSE;
    // continue only when keyword does not exists
    $m = explode(' ', $message);
    if (!keyword_isavail($m[0])) {
        return $ret;
    }
    // get settings
    $settings = incoming_settings_get();
    // get post rules
    $pre_rules = incoming_pre_rules_get();
    // scan for #<sender's phonebook group code> and @<username> according to pre rules
    $msg = explode(' ', $message);
    if (count($msg) > 0) {
        $bc = array();
        $pv = array();
        for ($i = 0; $i < count($msg); $i++) {
            $c_text = trim($msg[$i]);
            // scan message for @username
            if ($pre_rules['match_username']) {
                if (substr($c_text, 0, 1) === '@') {
                    $pv[] = strtolower(substr($c_text, 1));
                    $found_pv = TRUE;
                }
            }
            // scan message for #groupcode
            if ($pre_rules['match_groupcode']) {
                if (substr($c_text, 0, 1) === '#') {
                    $bc[] = strtoupper(substr($c_text, 1));
                    $found_bc = TRUE;
                }
            }
        }
    }
    if ($found_bc || $found_pv) {
        _log("recvsms_intercept dt:" . $sms_datetime . " s:" . $sms_sender . " r:" . $sms_receiver . " m:" . $message, 3, 'incoming recvsms_intercept');
    }
    if ($found_bc) {
        $groups = array_unique($bc);
        foreach ($groups as $key => $c_group_code) {
            $c_uid = user_mobile2uid($sms_sender);
            $list = phonebook_search_group($c_uid, $c_group_code, '', TRUE);
            $c_gpid = $list[0]['gpid'];
            if ($c_uid && $c_gpid) {
                $c_username = user_uid2username($c_uid);
                _log("bc g:" . phonebook_code_clean($c_group_code) . " gpid:" . $c_gpid . " uid:" . $c_uid . " dt:" . $sms_datetime . " s:" . $sms_sender . " r:" . $sms_receiver . " m:" . $message, 3, 'incoming recvsms_intercept');
                sendsms_bc($c_username, $c_gpid, $message);
                _log("bc end", 3, 'incoming recvsms_intercept');
                $ret['uid'] = $c_uid;
                $ret['hooked'] = true;
            }
        }
    }
    if ($found_pv) {
        $users = array_unique($pv);
        foreach ($users as $key => $c_username) {
            $c_username = core_sanitize_username($c_username);
            if ($c_uid = user_username2uid($c_username)) {
                _log("pv u:" . $c_username . " uid:" . $c_uid . " dt:" . $sms_datetime . " s:" . $sms_sender . " r:" . $sms_receiver . " m:[" . $message . "] reference_id:" . $reference_id, 3, 'incoming recvsms_intercept');
                recvsms_inbox_add($sms_datetime, $sms_sender, $c_username, $message, $sms_receiver, $reference_id);
                _log("pv end", 3, 'incoming recvsms_intercept');
                $ret['uid'] = $c_uid;
                $ret['hooked'] = true;
            }
        }
    }
    return $ret;
}
コード例 #2
0
ファイル: fn.php プロジェクト: 10corp/playSMS
/**
 * Add new user
 *
 * @param array $data
 *        User data
 * @param boolean $forced
 *        Forced addition
 * @param boolean $send_email
 *        Send email after successful user addition
 * @return array $ret['error_string', 'status', 'uid', 'data']
 */
function user_add($data = array(), $forced = FALSE, $send_email = TRUE)
{
    global $core_config, $user_config;
    // default return values
    $ret['error_string'] = _('Unknown error has occurred');
    $ret['status'] = FALSE;
    $ret['uid'] = 0;
    $ret['data'] = array();
    $data = trim($data['username']) ? $data : $_REQUEST;
    if ($forced || auth_isadmin() || $user_config['status'] == 3 || !auth_isvalid() && $core_config['main']['enable_register']) {
        foreach ($data as $key => $val) {
            $data[$key] = trim($val);
        }
        // set valid status
        $data['status'] = (int) $data['status'];
        if (!($data['status'] == 2 || $data['status'] == 3)) {
            $data['status'] = 4;
        }
        // ACL exception for admins
        $data['acl_id'] = (int) $data['acl_id'] ? (int) $data['acl_id'] : $core_config['main']['default_acl'];
        if ($data['status'] == 2) {
            $data['acl_id'] = 0;
        }
        // default parent_id
        $data['parent_uid'] = (int) $data['parent_uid'] ? (int) $data['parent_uid'] : $core_config['main']['default_parent'];
        if ($parent_status = user_getfieldbyuid($data['parent_uid'], 'status')) {
            // logic for parent_uid, parent uid by default is 0
            if ($data['status'] == 4) {
                if (!($parent_status == 2 || $parent_status == 3)) {
                    $data['parent_uid'] = $core_config['main']['default_parent'];
                }
            } else {
                $data['parent_uid'] = $core_config['main']['default_parent'];
            }
        } else {
            $data['parent_uid'] = $core_config['main']['default_parent'];
        }
        $data['username'] = core_sanitize_username($data['username']);
        $data['password'] = trim($data['password']) ? trim($data['password']) : core_get_random_string(10);
        $register_password = $data['password'];
        $data['password'] = md5($register_password);
        $data['token'] = md5(uniqid($data['username'] . $data['password'], true));
        // default credit
        $supplied_credit = (double) $data['credit'];
        $data['credit'] = 0;
        // sender set to empty by default
        // $data['sender'] = ($data['sender'] ? core_sanitize_sender($data['sender']) : '');
        $data['sender'] = '';
        $dt = core_get_datetime();
        $data['register_datetime'] = $dt;
        $data['lastupdate_datetime'] = $dt;
        // fixme anton - these should be configurable on main config
        $data['footer'] = '@' . $data['username'];
        $data['enable_webservices'] = 1;
        // $data['webservices_ip'] = (trim($data['webservices_ip']) ? trim($data['webservices_ip']) : '127.0.0.1, 192.168.*.*');
        $data['webservices_ip'] = '*.*.*.*';
        $v = user_add_validate($data);
        if ($v['status']) {
            _log('attempt to register status:' . $data['status'] . ' u:' . $data['username'] . ' email:' . $data['email'], 3, 'user_add');
            if ($data['username'] && $data['email'] && $data['name']) {
                if ($new_uid = dba_add(_DB_PREF_ . '_tblUser', $data)) {
                    $ret['status'] = TRUE;
                    $ret['uid'] = $new_uid;
                    // set credit upon registration
                    $default_credit = $supplied_credit ? $supplied_credit : (double) $core_config['main']['default_credit'];
                    rate_addusercredit($ret['uid'], $default_credit);
                } else {
                    $ret['error_string'] = _('Fail to register an account');
                }
                if ($ret['status']) {
                    $data['credit'] = user_getfieldbyuid($new_uid, 'credit');
                    $data['register_password'] = $register_password;
                    _log('registered status:' . $data['status'] . ' u:' . $data['username'] . ' uid:' . $ret['uid'] . ' email:' . $data['email'] . ' ip:' . $_SERVER['REMOTE_ADDR'] . ' mobile:' . $data['mobile'] . ' credit:' . $data['credit'], 2, 'user_add');
                    // save $data on returns
                    $ret['data'] = $data;
                    // default is TRUE, always send email from this function
                    if ($send_email) {
                        // injected variables must be global, need to work on this later
                        global $reg_data;
                        $reg_data = $ret['data'];
                        // send email
                        $tpl = array('name' => 'user_add_email', 'vars' => array('Name' => _('Name'), 'Username' => _('Username'), 'Password' => _('Password'), 'Mobile' => _('Mobile'), 'Credit' => _('Credit'), 'Email' => _('Email')), 'injects' => array('core_config', 'reg_data'));
                        $email_body = tpl_apply($tpl);
                        $email_subject = _('New account registration');
                        $mail_data = array('mail_from_name' => $core_config['main']['web_title'], 'mail_from' => $core_config['main']['email_service'], 'mail_to' => $data['email'], 'mail_subject' => $email_subject, 'mail_body' => $email_body);
                        if (sendmail($mail_data)) {
                            $ret['error_string'] = _('Account has been added and password has been emailed') . " (" . _('username') . ": " . $data['username'] . ")";
                        } else {
                            $ret['error_string'] = _('Account has been added but failed to send email') . " (" . _('username') . ": " . $data['username'] . ")";
                        }
                    }
                }
            } else {
                $ret['error_string'] = _('You must fill all required fields');
            }
        } else {
            $ret['error_string'] = $v['error_string'];
        }
    } else {
        $ret['error_string'] = _('Account registration is not available');
    }
    return $ret;
}
コード例 #3
0
ファイル: fn.php プロジェクト: 10corp/playSMS
/**
 * Resolve sender number or name to contact name or account's name
 *
 * @param integer $uid
 * @param string $sender
 * @return string
 */
function report_resolve_sender($uid, $sender)
{
    $final_sender = "<div class='report_sender'>" . $sender . "</div>";
    if (substr($sender, 0, 1) == '@') {
        $sender = core_sanitize_username($sender);
        $desc = user_getfieldbyusername($sender, 'name');
    } else {
        $desc = phonebook_number2name($uid, $sender);
    }
    if ($desc) {
        $final_sender .= "<div class='report_sender_description'>" . $desc . "</div>";
    }
    return $final_sender;
}
コード例 #4
0
ファイル: fn.php プロジェクト: yrahman/playSMS
/**
 * Add new user
 *
 * @param array $data
 *        	User data
 * @param boolean $forced
 *        	Forced addition
 * @return array $ret('error_string', 'status', 'uid')
 */
function user_add($data = array(), $forced = FALSE)
{
    global $core_config, $user_config;
    $ret['error_string'] = _('Unknown error has occurred');
    $ret['status'] = FALSE;
    $ret['uid'] = 0;
    $data = trim($data['username']) ? $data : $_REQUEST;
    if ($forced || auth_isadmin() || $user_config['status'] == 3 || !auth_isvalid() && $core_config['main']['enable_register']) {
        foreach ($data as $key => $val) {
            $data[$key] = trim($val);
        }
        // set valid status
        $data['status'] = (int) $data['status'];
        if (!($data['status'] == 2 || $data['status'] == 3)) {
            $data['status'] = 4;
        }
        // logic for parent_uid, parent uid by default is 0
        if ($data['status'] == 4) {
            $parent_status = user_getfieldbyuid($data['parent_uid'], 'status');
            if (!($parent_status == 2 || $parent_status == 3)) {
                $data['parent_uid'] = 0;
            }
        } else {
            $data['parent_uid'] = 0;
        }
        $data['username'] = core_sanitize_username($data['username']);
        $data['password'] = $data['password'] ? $data['password'] : core_get_random_string(10);
        $new_password = $data['password'];
        $data['password'] = md5($new_password);
        $data['token'] = md5(uniqid($data['username'] . $data['password'], true));
        // credit set to 0 by default
        // $data['credit'] = ( $data['credit'] ? $data['credit'] : $core_config['main']['default_credit'] );
        $data['credit'] = 0;
        // sender set to empty by default
        // $data['sender'] = ($data['sender'] ? core_sanitize_sender($data['sender']) : '');
        $data['sender'] = '';
        $dt = core_get_datetime();
        $data['register_datetime'] = $dt;
        $data['lastupdate_datetime'] = $dt;
        $data['webservices_ip'] = trim($data['webservices_ip']) ? trim($data['webservices_ip']) : '127.0.0.1, 192.168.*.*';
        $v = user_add_validate($data);
        if ($v['status']) {
            _log('attempt to register status:' . $data['status'] . ' u:' . $data['username'] . ' email:' . $data['email'], 3, 'user_add');
            if ($data['username'] && $data['email'] && $data['name']) {
                if ($new_uid = dba_add(_DB_PREF_ . '_tblUser', $data)) {
                    $ret['status'] = TRUE;
                    $ret['uid'] = $new_uid;
                } else {
                    $ret['error_string'] = _('Fail to register an account');
                }
                if ($ret['status']) {
                    _log('registered status:' . $data['status'] . ' u:' . $data['username'] . ' uid:' . $ret['uid'] . ' email:' . $data['email'] . ' ip:' . $_SERVER['REMOTE_ADDR'] . ' mobile:' . $data['mobile'] . ' credit:' . $data['credit'], 2, 'user_add');
                    $subject = _('New account registration');
                    $body = $core_config['main']['web_title'] . "\n";
                    $body .= $core_config['http_path']['base'] . "\n\n";
                    $body .= _('Username') . ": " . $data['username'] . "\n";
                    $body .= _('Password') . ": " . $new_password . "\n";
                    $body .= _('Mobile') . ": " . $data['mobile'] . "\n";
                    $body .= _('Credit') . ": " . $data['credit'] . "\n\n";
                    $body .= $core_config['main']['email_footer'] . "\n\n";
                    $ret['error_string'] = _('Account has been added and password has been emailed') . " (" . _('username') . ": " . $data['username'] . ")";
                    $mail_data = array('mail_from_name' => $core_config['main']['web_title'], 'mail_from' => $core_config['main']['email_service'], 'mail_to' => $data['email'], 'mail_subject' => $subject, 'mail_body' => $body);
                    if (!sendmail($mail_data)) {
                        $ret['error_string'] = _('Account has been added but failed to send email') . " (" . _('username') . ": " . $data['username'] . ")";
                    }
                }
            } else {
                $ret['error_string'] = _('You must fill all required fields');
            }
        } else {
            $ret['error_string'] = $v['error_string'];
        }
    } else {
        $ret['error_string'] = _('Account registration is not available');
    }
    return $ret;
}
コード例 #5
0
ファイル: fn.php プロジェクト: yrahman/playSMS
/**
 * Intercept on before-process stage for incoming SMS
 *
 * @param $sms_datetime incoming
 *        	SMS date/time
 * @param $sms_sender incoming
 *        	SMS sender
 * @param $message incoming
 *        	SMS message before interepted
 * @param $sms_receiver receiver
 *        	number that is receiving incoming SMS
 * @param $reference_id reference_id
 *        	data
 * @return array $ret
 */
function incoming_hook_recvsms_intercept($sms_datetime, $sms_sender, $message, $sms_receiver, $reference_id)
{
    $ret = array();
    $found_bc = FALSE;
    $found_pv = FALSE;
    // continue only when keyword does not exists
    $m = explode(' ', $message);
    if (!checkavailablekeyword($m[0])) {
        return $ret;
    }
    // get settings
    $settings = incoming_settings_get();
    // get post rules
    $pre_rules = incoming_pre_rules_get();
    // scan for #<sender's phonebook group code> and @<username> according to pre rules
    $msg = explode(' ', $message);
    if (count($msg) > 0) {
        $bc = array();
        $pv = array();
        for ($i = 0; $i < count($msg); $i++) {
            $c_text = trim($msg[$i]);
            // scan message for @username
            if ($pre_rules['match_username']) {
                if (substr($c_text, 0, 1) === '@') {
                    $pv[] = strtolower(substr($c_text, 1));
                    $found_pv = TRUE;
                }
            }
            // scan message for #groupcode
            if ($pre_rules['match_groupcode']) {
                if (substr($c_text, 0, 1) === '#') {
                    $bc[] = strtoupper(substr($c_text, 1));
                    $found_bc = TRUE;
                }
            }
        }
    }
    if ($found_bc || $found_pv) {
        _log("recvsms_intercept dt:" . $sms_datetime . " s:" . $sms_sender . " r:" . $sms_receiver . " m:" . $message, 3, 'incoming recvsms_intercept');
    }
    if ($found_bc) {
        $groups = array_unique($bc);
        foreach ($groups as $key => $c_group_code) {
            $c_group_code = strtoupper($c_group_code);
            $c_group_code = core_sanitize_alphanumeric($c_group_code);
            $c_uid = user_mobile2uid($sms_sender);
            if ($c_uid && ($c_gpid = phonebook_groupcode2id($c_uid, $c_group_code))) {
                $c_username = user_uid2username($c_uid);
                _log("bc g:" . $c_group_code . " gpid:" . $c_gpid . " uid:" . $c_uid . " dt:" . $sms_datetime . " s:" . $sms_sender . " r:" . $sms_receiver . " m:" . $message, 3, 'incoming recvsms_intercept');
                sendsms_bc($c_username, $c_gpid, $message);
                _log("bc end", 3, 'incoming recvsms_intercept');
                $ret['uid'] = $c_uid;
                $ret['hooked'] = true;
            } else {
                // check the group_code for flag_sender<>0
                $db_query = "SELECT id,uid,flag_sender FROM " . _DB_PREF_ . "_featurePhonebook_group WHERE code='{$c_group_code}' AND flag_sender<>0";
                $db_result = dba_query($db_query);
                if ($db_row = dba_fetch_array($db_result)) {
                    $c_gpid = $db_row['id'];
                    $c_uid = $db_row['uid'];
                    $c_flag_sender = $db_row['flag_sender'];
                    if ($c_flag_sender == 2) {
                        $c_username = user_uid2username($c_uid);
                        _log("bc mobile flag_sender:" . $c_flag_sender . " username:"******" uid:" . $c_uid . " g:" . $c_group_code . " gpid:" . $c_gpid . " uid:" . $c_uid . " dt:" . $sms_datetime . " s:" . $sms_sender . " r:" . $sms_receiver . " m:" . $message, 3, 'incoming recvsms_intercept');
                        $sender = trim(phonebook_number2name($sms_sender, $c_username));
                        $sender = $sender ? $sender : $sms_sender;
                        sendsms_bc($c_username, $c_gpid, $sender . ":" . $message);
                        _log("bc mobile end", 3, 'incoming recvsms_intercept');
                        $ret['uid'] = $c_uid;
                        $ret['hooked'] = true;
                    } else {
                        if ($c_flag_sender == 1) {
                            // check whether sms_sender belongs to c_group_code
                            $db_query = "SELECT B.id AS id FROM " . _DB_PREF_ . "_featurePhonebook AS A\n\t\t\t\t\t\t\t\tLEFT JOIN playsms.playsms_featurePhonebook_group_contacts AS C ON A.id=C.pid\n\t\t\t\t\t\t\t\tLEFT JOIN playsms.playsms_featurePhonebook_group AS B ON B.id=C.gpid\n\t\t\t\t\t\t\t\tWHERE A.mobile LIKE '%" . substr($sms_sender, 3) . "' AND B.code='" . $c_group_code . "'";
                            $db_result = dba_query($db_query);
                            if ($db_row = dba_fetch_array($db_result)) {
                                $c_username = user_uid2username($c_uid);
                                _log("bc mobile flag_sender:" . $c_flag_sender . " username:"******" uid:" . $c_uid . " g:" . $c_group_code . " gpid:" . $c_gpid . " uid:" . $c_uid . " dt:" . $sms_datetime . " s:" . $sms_sender . " r:" . $sms_receiver . " m:" . $message, 3, 'incoming recvsms_intercept');
                                $sender = trim(phonebook_number2name($sms_sender, $c_username));
                                $sender = $sender ? $sender : $sms_sender;
                                sendsms_bc($c_username, $c_gpid, $sender . ":" . $message);
                                _log("bc mobile end", 3, 'incoming recvsms_intercept');
                                $ret['uid'] = $c_uid;
                                $ret['hooked'] = true;
                            }
                        }
                    }
                }
            }
        }
    }
    if ($found_pv) {
        $users = array_unique($pv);
        foreach ($users as $key => $c_username) {
            $c_username = core_sanitize_username($c_username);
            if ($c_uid = user_username2uid($c_username)) {
                _log("pv u:" . $c_username . " uid:" . $c_uid . " dt:" . $sms_datetime . " s:" . $sms_sender . " r:" . $sms_receiver . " m:[" . $message . "] reference_id:" . $reference_id, 3, 'incoming recvsms_intercept');
                recvsms_inbox_add($sms_datetime, $sms_sender, $c_username, $message, $sms_receiver, $reference_id);
                _log("pv end", 3, 'incoming recvsms_intercept');
                $ret['uid'] = $c_uid;
                $ret['hooked'] = true;
            }
        }
    }
    return $ret;
}