Example #1
0
$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 &amp; but not for
        # the stupid Snom!
    }
    defineBackMenu();
    echo '</SnomIPPhoneMenu>', "\n";
    _ob_send();
}
#################################### INITIAL SCREEN }
Example #2
0
             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 = '';
Example #4
0
}
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;
}