" . _("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
?>