$tmp = array(); if (gs_get_conf('GS_PB_IMPORTED_ENABLED')) { $pos = (int) gs_get_conf('GS_PB_IMPORTED_ORDER', 9) * 10; $tmp[$pos] = array('k' => 'imported', 'v' => gs_get_conf('GS_PB_IMPORTED_TITLE', __("Importiert"))); } kSort($tmp); foreach ($tmp as $arr) { $typeToTitle[$arr['k']] = $arr['v']; } $url_snom_extnumbers = GS_PROV_SCHEME . '://' . GS_PROV_HOST . (GS_PROV_PORT == 80 ? '' : ':' . GS_PROV_PORT) . GS_PROV_PATH . 'snom/extnumbers.php'; $url_snom_menu = GS_PROV_SCHEME . '://' . GS_PROV_HOST . (GS_PROV_PORT ? ':' . GS_PROV_PORT : '') . GS_PROV_PATH . 'snom/menu.php'; #################################### INITIAL SCREEN { if (!$type) { $mac = preg_replace('/[^\\dA-Z]/', '', strToUpper(trim(@$_REQUEST['m']))); $user_name = $db->executeGetOne('SELECT `user` FROM `users` WHERE `id`=\'' . $db->escape($user_id) . '\''); $enumbers = gs_user_external_numbers_get($user_name); if (isGsError($enumbers)) { _err('Fehler beim Abfragen.'); } ob_start(); echo '<?', 'xml version="1.0" encoding="utf-8"?', '>', "\n", '<SnomIPPhoneMenu>', "\n", '<Title>' . __("externe Nummern") . '</Title>', "\n\n"; foreach ($enumbers as $extnumber) { echo '<MenuItem>', "\n", '<Name>', snom_xml_esc($extnumber), '</Name>', "\n", '<URL>', $url_snom_menu, '?t=forward&m=', $mac, '&u=', $user, '</URL>', "\n", '</MenuItem>', "\n\n"; # in XML the & must normally be encoded as & but not for # the stupid Snom! } defineBackMenu(); echo '</SnomIPPhoneMenu>', "\n"; _ob_send(); } #################################### INITIAL SCREEN }
echo ' <integer>', $r['read'], '</integer>', "\n"; } echo ' </dict>', "\n"; } echo '</array>', "\n"; echo '</plist>', "\n"; if ($_GET['action'] == 'calls_missed') { gs_user_watchedmissed($userinfo['id']); if (GS_BUTTONDAEMON_USE == true) { gs_buttondeamon_missedcalls($userinfo['ext']); } } break; case 'redirect': $forwards = gs_callforward_get($userinfo['user']); $numbers = gs_user_external_numbers_get($userinfo['user']); echo '<?xml version="1.0" encoding="UTF-8"?>', "\n"; echo '<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">', "\n"; echo '<plist version="1.0">', "\n"; echo '<dict>', "\n"; echo ' <key>timeout</key>', "\n"; echo ' <integer>', $forwards['internal']['unavail']['timeout'], '</integer>', "\n"; echo ' <key>standardNumber</key>', "\n"; echo ' <string>', $forwards['internal']['always']['number_std'], '</string>', "\n"; echo ' <key>tempNumber</key>', "\n"; echo ' <string>', $forwards['internal']['always']['number_var'], '</string>', "\n"; echo ' <key>externalNumbers</key>', "\n"; echo ' <array>', "\n"; foreach ($numbers as $number) { echo ' <string>', $number, '</string>', "\n"; }
if (is_array($warnings) && count($warnings) > 0) { ?> <div style="max-width:600px;"> <img alt=" " src="<?php echo GS_URL_PATH; ?> crystal-svg/16/app/important.png" class="fl" /> <p style="margin-left:22px;"> <?php echo implode('<br />', $warnings); ?> </p> </div> <?php } $e_numbers = gs_user_external_numbers_get($_SESSION['sudo_user']['name']); ?> <script type="text/javascript"> //<![CDATA[ function gs_num_sel( el ) { try { if (el.value == '') return; switch (el.id) { case 'sel-num-std': var text_el_id = 'ipt-num-std'; break; case 'sel-num-var': var text_el_id = 'ipt-num-var'; break; default: return; } document.getElementById(text_el_id).value = el.value; //el.value = '';
} if ($cidnum === $user['ext']) { $cidnum = null; } else { $cidnum_obj = new CanonicalPhoneNumber($cidnum); if ($cidnum_obj->intl === $user_ext_obj->intl) { $cidnum = null; } unset($cidnum_obj); # cidnum might be modified later } if ($cidnum) { if (!$is_foreign) { # get external numbers if (!is_array($user_external_numbers)) { $user_external_numbers = @gs_user_external_numbers_get($user_code); if (isGsError($user_external_numbers)) { gs_log(GS_LOG_WARNING, $user_external_numbers->getMsg()); $user_external_numbers = array(); } if (!is_array($user_external_numbers)) { $user_external_numbers = array(); } } # check if number in external numbers if (!in_array($cidnum, $user_external_numbers, true)) { $cidnum_obj = new CanonicalPhoneNumber($cidnum); if ($cidnum_obj->errt != '' && $cidnum_obj->errt !== 'self') { gs_log(GS_LOG_WARNING, 'Problem with phone number "' . $cidnum . '" (' . $cidnum_obj->errt . ').'); $in_external_numbers = false; } else {
function gs_callforward_set($user, $source, $case, $type, $number, $timeout, $vmail_rec_num = 0) { if (!preg_match('/^[a-z0-9\\-_.]+$/', $user)) { return new GsError('User must be alphanumeric.'); } if (!in_array($source, array('internal', 'external'), true)) { return new GsError('Source must be internal|external.'); } if (!in_array($case, array('always', 'busy', 'unavail', 'offline'), true)) { return new GsError('Case must be always|busy|unavail|offline.'); } if (!in_array($type, array('std', 'var', 'vml', 'trl', 'par'), true)) { return new GsError('Type must be std|var|vml|trl|par.'); } $number = preg_replace('/[^0-9vm*]/', '', $number); if (!$timeout || $timeout != -1) { $timeout = (int) $timeout; //if ($case != 'unavail') $timeout = 0; 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.'); } # check if has call forward entry # $num = $db->executeGetOne('SELECT COUNT(*) FROM `callforwards` WHERE `user_id`=' . $user_id . ' AND `source`=\'' . $db->escape($source) . '\' AND `case`=\'' . $db->escape($case) . '\''); if ($num < 1) { $ok = $db->execute('INSERT INTO `callforwards` (`user_id`, `source`, `case`, `timeout`, `number_std`, `number_var`, `number_vml`, `active`) VALUES (' . $user_id . ', \'' . $db->escape($source) . '\', \'' . $db->escape($case) . '\', 20, \'\', \'\', \'\', \'no\')'); } else { $ok = true; } # set call forward # if (gs_get_conf('GS_DP_FORWARD_REQ_EXT_NUM')) { if ($number != '' && subStr($number, 0, 1) === '0' && $number != '0') { //FIXME - use the rules for canonization to check if the number // is external $enumbers = gs_user_external_numbers_get($user); if (isGsError($enumbers)) { return new GsError($enumbers->getMsg()); } if (!is_array($enumbers)) { return new GsError('Failed to get external numbers.'); } if (!in_array($number, $enumbers)) { return new GsError('Number not in external numbers.'); } } } $field = 'number_' . $type; if ($timeout != -1) { $ok = $ok && $db->execute('UPDATE `callforwards` SET `' . $field . '`=\'' . $db->escape($number) . '\', `timeout`=' . $timeout . ', `vm_rec_id`=' . $db->escape($vmail_rec_num) . ' WHERE `user_id`=' . $user_id . ' AND `source`=\'' . $db->escape($source) . '\' AND `case`=\'' . $db->escape($case) . '\' LIMIT 1'); } else { $ok = $ok && $db->execute('UPDATE `callforwards` SET `' . $field . '`=\'' . $db->escape($number) . '\', `vm_rec_id`=' . $db->escape($vmail_rec_num) . ' WHERE `user_id`=' . $user_id . ' AND `source`=\'' . $db->escape($source) . '\' AND `case`=\'' . $db->escape($case) . '\' LIMIT 1'); } if (!$ok) { return new GsError('Failed to set call forwarding number.'); } return true; }