Exemple #1
0
function WriteDataFile($data_file)
{
    global $node;
    $save_struct = serialize($node);
    @($datafilep = fopen($data_file, 'w'));
    if (!$datafilep) {
        gs_script_error("Cannot open {$data_file} for writing!");
    }
    fwrite($datafilep, $save_struct);
    fclose($datafilep);
}
Exemple #2
0
function gs_group_members_get_names($group, $includes = true)
{
    $members = gs_group_members_get(array($group), $includes);
    if (isGsError($members)) {
        gs_script_error($members->getMsg());
    }
    if (!$members) {
        return array();
    }
    $db_slave = gs_db_slave_connect();
    if (!$db_slave) {
        return new GsError('Could not connect to database.');
    }
    if (!$members) {
        return array();
    }
    $type = $db_slave->executeGetOne('SELECT `type` FROM `groups` WHERE `id` = ' . $group . ' LIMIT 1');
    switch ($type) {
        case 'user':
            $sql_query = 'SELECT `user` AS `member` FROM `users` WHERE `id` IN (' . implode(',', $members) . ')';
            break;
        case 'queue':
            $sql_query = 'SELECT `name` AS `member` FROM `ast_queues` WHERE `_id` IN (' . implode(',', $members) . ')';
            break;
        case 'host':
            $sql_query = 'SELECT `host` AS `member` FROM `hosts` WHERE `id` IN (' . implode(',', $members) . ')';
            break;
        default:
            $sql_query = false;
            break;
    }
    $members_a = array();
    if ($sql_query === false) {
        foreach ($members as $member) {
            $r = array();
            $r['type'] = $type;
            $r['member'] = $member;
            $members_a[] = $r;
        }
    } else {
        $rs = $db_slave->execute($sql_query);
        if ($rs) {
            while ($r = $rs->fetchRow()) {
                $r['type'] = $type;
                $members_a[] = $r;
            }
        }
    }
    return $members_a;
}
Exemple #3
0
function gs_user_logout($user, $reboot = true)
{
    $ret = gs_user_is_valid_name($user);
    if (isGsError($ret)) {
        return $ret;
    } elseif (!$ret) {
        return new GsError('Invalid username.');
    }
    # connect to db
    #
    $db = gs_db_master_connect();
    if (!$db) {
        return new GsError('Could not connect to database.');
    }
    # get user_id
    #
    $user_id = $db->executeGetOne('SELECT `id` FROM `users` WHERE `user`=\'' . $db->escape($user) . '\'');
    if ($user_id < 1) {
        return new GsError('Unknown user.');
    }
    $ip_addr = $db->executeGetOne('SELECT `current_ip` FROM `users` WHERE `id`=' . $user_id);
    $rs = $db->execute('SELECT `id`, `mac_addr`, `nobody_index` FROM `phones` WHERE `user_id`=' . $user_id);
    while ($phone = $rs->fetchRow()) {
        # assign the default nobody
        #
        $phone['nobody_index'] = (int) $phone['nobody_index'];
        if ($phone['nobody_index'] < 1) {
            $new_user_id = null;
        } else {
            $new_user_id = (int) $db->executeGetOne('SELECT `id` FROM `users` WHERE `nobody_index`=' . $phone['nobody_index']);
            if ($new_user_id < 1) {
                //?
            }
        }
        $db->execute('UPDATE `phones` SET `user_id`=' . ($new_user_id > 0 ? $new_user_id : 'NULL') . ' WHERE `id`=' . (int) $phone['id'] . ' AND `user_id`=' . $user_id);
    }
    # log out of all queues
    #
    $user_ext = $db->executeGetOne('SELECT `name` FROM `ast_sipfriends` WHERE `_user_id`=' . $user_id);
    $user_ext = preg_replace('/[^0-9]/', '', $user_ext);
    if ($user_ext != '') {
        ob_start();
        @exec(GS_DIR . 'dialplan-scripts/fake-agi-env.php' . ' ' . qsa(GS_DIR . 'dialplan-scripts/queue-login-logout.agi') . ' ' . qsa($user_ext) . ' 0 logoutall 1>>/dev/null 2>>/dev/null');
        ob_end_clean();
    }
    # restart phone
    #
    if ($ip_addr != '') {
        $ret = @gs_prov_phone_checkcfg_by_ip($ip_addr, $reboot);
    }
    if (isGsError($ret)) {
        gs_script_error($ret->getMsg());
    }
    return true;
}
function gs_callforward_timeout_set($user, $timeout = 20)
{
    if (!preg_match('/^[a-z0-9\\-_.]+$/', $user)) {
        return new GsError('User must be alphanumeric.');
    }
    $timeout = (int) $timeout;
    if ($timeout > 250) {
        $timeout = 250;
    } elseif ($timeout < 1) {
        $timeout = 1;
    }
    # connect to db
    #
    $db = gs_db_master_connect();
    if (!$db) {
        return new GsError('Could not connect to database.');
    }
    # get user_id
    #
    $user_id = $db->executeGetOne('SELECT `id` FROM `users` WHERE `user`=\'' . $db->escape($user) . '\'');
    if (!$user_id) {
        return new GsError('Unknown user.');
    }
    # get user_code
    #
    $user_code = $db->executeGetOne('SELECT `user` FROM `users` WHERE `id`=' . $user_id);
    # get all call forwards
    #
    $cf = @gs_callforward_get($user_code);
    if (isGsError($cf)) {
        gs_script_error('Could not get call forwards (' . $cf->getMsg() . ')');
    }
    foreach ($cf as $source => $arr1) {
        foreach ($arr1 as $case => $arr) {
            if ($case == 'unavail') {
                @gs_callforward_set($user_code, $source, $case, 'std', $arr['number_std'], $timeout);
                @gs_callforward_set($user_code, $source, $case, 'var', $arr['number_var'], $timeout);
            }
        }
    }
    return true;
}