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); }
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; }
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; }