" . _("Phone Features") . "";
return $ret;
}
//*****************************************************************************
function action($args) {
global $ARI_ADMIN_USERNAME;
global $SETTINGS_ALLOW_PHONE_SETTINGS;
global $SETTINGS_ALLOW_CALLFORWARD_SETTINGS;
// args
$m = getArgument($args,'m');
$a = getArgument($args,'a');
$lang_code = getArgument( $args,'lang_code');
$exten = $_SESSION['ari_user']['extension'];
if ($a=='update') {
if ($SETTINGS_ALLOW_PHONE_SETTINGS) {
if ($exten!=$ARI_ADMIN_USERNAME) {
$this->storePhoneSetting( $args, $exten, 'call_waiting', 'CW', 'ENABLED');
$this->storePhoneSetting( $args, $exten, 'do_not_disturb', 'DND', 'YES');
}
}
if ($SETTINGS_ALLOW_CALLFORWARD_SETTINGS) {
if ($exten!=$ARI_ADMIN_USERNAME) {
$this->storeCallForwardNumber( $args, $exten, 'call_forward', 'CF');
$this->storeCallForwardNumber( $args, $exten, 'call_forward_busy', 'CFB');
$this->storeCallForwardNumber( $args, $exten, 'call_forward_unavailable', 'CFU');
}
}
}
// redirect to see updated page
$ret .= "
";
return $ret;
}
//*****************************************************************************
function display($args) {
global $STANDALONE;
global $ARI_ADMIN_USERNAME;
global $SETTINGS_ALLOW_PHONE_SETTINGS;
global $SETTINGS_ALLOW_CALLFORWARD_SETTINGS;
// args
$m = getArgument($args,'m');
$a = getArgument($args,'a');
$lang_code = getArgument( $args,'lang_code');
$exten = $_SESSION['ari_user']['extension'];
$displayname = $_SESSION['ari_user']['displayname'];
$exten = $_SESSION['ari_user']['extension'];
$display = new DisplaySearch();
// build controls
if ($exten!=$ARI_ADMIN_USERNAME) {
if ($SETTINGS_ALLOW_PHONE_SETTINGS) {
$dnd_cw_text = "";
$dnd_cw_text.= "" . _("Phone Features") . " |
";
$dnd_cw_text.= $this->displayPhoneControls( $exten, 'call_waiting', 'CW', "Call Waiting");
$dnd_cw_text.= $this->displayPhoneControls( $exten, 'do_not_disturb', 'DND', "Do Not Disturb");
$dnd_cw_text .= "
";
}
if ($SETTINGS_ALLOW_CALLFORWARD_SETTINGS) {
$set_call_forward_text .= "";
$set_call_forward_text.= "";
$set_call_forward_text.= "" . _("Call Forwarding") . " |
";
$set_call_forward_text.= $this->displayCallForwardControls( $exten, 'call_forward', 'CF', "Unconditional:");
$set_call_forward_text.= $this->displayCallForwardControls( $exten, 'call_forward_unavailable', 'CFU', "Unavailable:");
$set_call_forward_text.= $this->displayCallForwardControls( $exten, 'call_forward_busy', 'CFB', "Busy:");
$set_call_forward_text .= "
";
}
}
// build page content
$ret .= checkErrorMessage();
if ($_SESSION['ari_user']['admin_settings']) {
$headerText = _("Phone Features");
} else {
$headerText = sprintf(_("Phone Features for %s (%s)"),$displayname,$exten);
}
$ret .= $display->displayHeaderText($headerText);
$ret .= $display->displayLine();
$ret .= "
";
return $ret;
}
//*****************************************************************************
function setPhoneSetting( $databaseCallFwdType, $exten, $state_value) {
global $asterisk_manager_interface;
$type_opt = ($state_value != "") ? "put":"del";
$response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database $type_opt $databaseCallFwdType $exten $state_value\r\n\r\n");
}
//*****************************************************************************
function getPhoneSetting($exten, $databaseCallFwdType) {
global $asterisk_manager_interface;
$number = '';
$result = false;
$response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get $databaseCallFwdType $exten\r\n\r\n");
if (stristr($response, 'ENABLED')) {
$result = true;
}
elseif (stristr($response, 'YES')) {
$result = true;
}
return $result;
}
//*****************************************************************************
function storePhoneSetting( $args, $exten, $settingType, $databaseCallFwdType, $state_value)
{
$setting_enable = getArgument( $args, $settingType . '_enable');
$this->setPhoneSetting( $databaseCallFwdType, $exten, ($setting_enable == 'checked')?$state_value:"");
}
//*****************************************************************************
function displayPhoneControls( $exten, $callFwdType, $databaseCallFwdType, $title)
{
$phone_setting_enable = ($this->getPhoneSetting($exten, $databaseCallFwdType)) ? 'checked':'';
$ret = "\n";
$ret.= "";
$ret.= "";
$ret.= " | ";
$ret.= "
\n";
return $ret;
}
//*****************************************************************************
/*
* Sets Asterisk call forward setting
*
* @param $exten
* Extension to modify
* @param $state
* Call forward enable or disable
* @param $call_forward_number
* Call forward number
* @param $variable_opt
* Call forward type (CF, CFU, CFB)
*/
function setCallForward($exten,$state,$call_forward_number, $variable_opt = "CF") {
global $asterisk_manager_interface;
if ($state) {
$type_opt = "put";
$value_opt = $call_forward_number;
}
else {
$type_opt = "del";
}
$response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database $type_opt $variable_opt $exten $value_opt\r\n\r\n");
}
/*
* Gets call forward number if set
*
* @param $exten
* Extension to get information about
* @return $number
* call forward number returned if set
* @param $variable_opt
* Call forward type (CF, CFU, CFB)
*/
function getCallForwardNumber($exten, $variable_opt = "CF") {
global $asterisk_manager_interface;
$number = '';
$response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get $variable_opt $exten\r\n\r\n");
if (is_numeric($response)) {
$number = $response;
}
$stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_call_forward_number']);
if ($stripped==$number) {
$number = $_COOKIE['ari_call_forward_number'];
}
return $number;
}
function storeCallForwardNumber( $args, $exten, $callFwdType, $databaseCallFwdType)
{
$call_forward_enable = getArgument($args, $callFwdType . '_enable');
$call_forward_number = getArgument($args, $callFwdType . '_number');
$stripped_call_forward_number = preg_replace('/-|\(|\)|\s/','',$call_forward_number);
if ($call_forward_enable && !is_numeric($stripped_call_forward_number)) {
$_SESSION['ari_error'] = _("Call forward number not changed") . "
" .
sprintf(_("Number %s must contain dial numbers (characters like '(', '-', and ')' are ok)"), $call_forward_number);
}
else {
$this->setCallForward( $exten, $call_forward_enable, $stripped_call_forward_number, $databaseCallFwdType);
// store cookie
$stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_' . $callFwdType]);
if ($call_forward_number && $stripped!=$stripped_call_forward_number) {
setcookie('ari_' . $callFwdType, $call_forward_number, time()+365*24*60*60);
}
}
}
function displayCallForwardControls( $exten, $callFwdType, $databaseCallFwdType, $title)
{
$call_forward_number = $this->getCallForwardNumber($exten, $databaseCallFwdType);
// If we have a value, we want the item checked
if ($call_forward_number) {
$call_forward_enable = 'checked';
}
else {
$call_forward_number = $_COOKIE['ari_' . $callFwdType ];
$call_forward_text_box_options = "disabled style='background: #DDD;'";
}
$ret = "\n";
$ret.= "" . _($title) . " | ";
$ret.= "";
$ret.= "";
$ret.= " | ";
$ret.= "";
$ret.= "";
$ret.= "" . _("Enable") . "";
$ret.= " | ";
$ret.= "
\n";
return $ret;
}
} // class
?>