$value) {
      $data = $this->getProtocolRecordSettings($value['table'],$_SESSION['ari_user']['extension']);
      if (count($data)) {
        $this->protocol_table = $value['table'];  
        $this->protocol_config_files = $value['config_files'];  
        break;
      }  
    }
  }
  /*
   * Adds menu item to nav menu
   *
   * @param $args
   *   Common arguments
   */
  function navMenu($args) {
	$ret = "";
	$exten = $_SESSION['ari_user']['extension'];
	
	// and we are not logged in as admin
	if ($exten!=$ARI_ADMIN_USERNAME) {
		$ret .= "
" . _("Phone Settings") . " 
" . _("Language:") . " " . $language->GetForm() . "
";
    } 
	// voicemail settings
	if ($SETTINGS_ALLOW_VOICEMAIL_SETTINGS && $_SESSION['ari_user']['voicemail_enabled']==1 && 
	in_array('voicemail',array_keys($loaded_modules))) {
		if ($SETTINGS_ALLOW_VOICEMAIL_PASSWORD_SET) {
			
			if ($SETTINGS_VOICEMAIL_PASSWORD_EXACT) {
				$voicemail_password_length_message = sprintf(_("Passwords must be all numbers and only %s digits"),$SETTINGS_VOICEMAIL_PASSWORD_LENGTH);
			}
			else {
				$voicemail_password_length_message = sprintf(_("Passwords must be all numbers and at least %s digits"),$SETTINGS_VOICEMAIL_PASSWORD_LENGTH);
			}
			
			$set_voicemail_password_text = "
			
			" . _("Voicemail Password:") . " 
			
			 
			 
			
			" . _("Enter again to confirm:") . " 
			
			 
			 
			
			" . $voicemail_password_length_message . "  ";
		}
		
		if (isset($_SESSION['ari_user']['voicemail_email'])) {
			
			if ($_SESSION['ari_user']['voicemail_email_enable']) { 
				$voicemail_email_address = $_SESSION['ari_user']['voicemail_email_address'];
				$voicemail_pager_address = $_SESSION['ari_user']['voicemail_pager_address'];
				$voicemail_email_enable = 'checked';
				
				foreach (array_keys($_SESSION['ari_user']['voicemail_email']) as $key) {
					$var = "voicemail_email_$key";
					$var_enable = $var . "enable";
					if ($_SESSION['ari_user']['voicemail_email'][$key]=='yes') {
						$$var_enable = 'checked';
					}
				}
			}
			else {
				
				$voicemail_email_address = $_COOKIE['ari_voicemail_email_address'];
				$voicemail_email_text_box_options = "disabled style='background: #DDD;'";
				$voicemail_pager_address = $_COOKIE['ari_voicemail_pager_address'];
				$voicemail_pager_text_box_options = "disabled style='background: #DDD;'";
				
				foreach ($_SESSION['ari_user']['voicemail_email'] as $key => $value) {
					$var = "voicemail_email_$key";
					$var_cookie = "ari_" . $var;
					$var_enable = $var . "enable";
					$var_text_box_options = $var . "text_box_options";
					
					$$var_text_box_options = "disabled";
					if ($_COOKIE[$var_cookie]=='yes') {
						$$var_enable = 'checked';
					}
				}
			}
			
			$set_voicemail_email_text = "
			
				
				 " . _("Email Notification") . "  " ._("Enable") . "        
				 
				 
				" . _("Email Voicemail To:") . "" . ("Email a notification, including audio file if indicated below.") . "   
				 
				 
				
				" . _("Pager Email Notification To:") . "" . ("Email a short notification") . "   
				 
				 
				
				 ";
			
			foreach ($_SESSION['ari_user']['voicemail_email'] as $key => $value) {
				
				$var = "voicemail_email_$key";
				$var_enable = $var . "enable";
				$var_text_box_options = $var . "text_box_options";
				if ($SETTINGS_VOICEMAIL_EMAIL_OPTION_DESCRIPTIONS[$key]) {
					$var_text = $SETTINGS_VOICEMAIL_EMAIL_OPTION_DESCRIPTIONS[$key];
				}
				else {
					$var_text = $key;
				}
				
				if ($value != 'yes' && $value != 'no' && $value !='') {
					
					$size = strlen($value) - 1;
					$set_voicemail_email_text .= "
					
					
					" . $var_text . " 
					 
					 ";
				} 
				else {
					
					$set_voicemail_email_text .= "
					
					
					" . $var_text . " 
					 
					 ";
				}
			}
		}
		
		$wav_enable = 'selected';
		if ($_COOKIE['ari_voicemail_audio_format']=='.gsm'|| 
		($_COOKIE['ari_voicemail_audio_format']=='' && $ARI_VOICEMAIL_AUDIO_FORMAT_DEFAULT='.gsm')) {
			$wav_enable = '';
			$gsm_enable = 'selected';
		} 
		
		$set_voicemail_audio_format_text = "
			
			" . _("Audio Format:") . " 
			
			
			" . _("Best Quality") . " (.wav) 
			" . _("Smallest Download") . " (.gsm) 
			 
			 
			 ";
		
		$set_voicemail_text = "
			
			
			" . _("Voicemail Settings") . "  
			" . $set_voicemail_password_text . "
			" . $set_voicemail_email_text . "
			" . $set_voicemail_audio_format_text . "
			
";
	}
	// call monitor settings
	if ($this->getFreePBXVersion() &&
	$SETTINGS_ALLOW_CALL_RECORDING_SET && 
	in_array('callmonitor',array_keys($loaded_modules))) {
		
		foreach($data as $key=>$value) {
			if ($key=='record_in') {
				if ($value=='Always') {
					$ri_always = 'checked=checked';
				}
				elseif ($value=='Never') {
					$ri_never = 'checked=checked';
				}
				elseif ($value=='Adhoc') {
					$ri_on_demand = 'checked=checked';
				}
			}
			if ($key=='record_out') {
				if ($value=='Always') {
					$ro_always = 'checked=checked';
				}
				elseif ($value=='Never') {
					$ro_never = 'checked=checked';
				}
				elseif ($value=='Adhoc') {
					$ro_on_demand = 'checked=checked';
				}
			}
		}
		
		$set_callmonitor_text = "
			";
	}
	// javascript enable options
	if (isset($_SESSION['ari_user']['voicemail_email']) &&
	in_array('voicemail',array_keys($loaded_modules))) {
		foreach ($_SESSION['ari_user']['voicemail_email'] as $key => $value) {
			$var = "voicemail_email_$key";
			$js_voicemail_email_disable .= "
			document.ari_settings.$var.disabled = false;";
			$js_voicemail_email_enable .= "
			document.ari_settings.$var.disabled = true;";
		}
		
		$js_voicemail_script = "
			if (document.ari_settings.voicemail_email_enable.checked) {
			document.ari_settings.voicemail_email_address.style.backgroundColor = '#FFF';
			document.ari_settings.voicemail_email_address.disabled = false;
			document.ari_settings.voicemail_email_address.value='" . $voicemail_email_address . "';
			document.ari_settings.voicemail_pager_address.style.backgroundColor = '#FFF';
			document.ari_settings.voicemail_pager_address.disabled = false;
			document.ari_settings.voicemail_pager_address.value='" . $voicemail_pager_address . "';
			" . $js_voicemail_email_disable . "
			}
			else {
			document.ari_settings.voicemail_email_address.style.backgroundColor = '#DDD';
			document.ari_settings.voicemail_email_address.disabled = true;
			document.ari_settings.voicemail_pager_address.style.backgroundColor = '#DDD';
			document.ari_settings.voicemail_pager_address.disabled = true;
			" . $js_voicemail_email_enable . "
			}";
	}
	
	// build page content
	$ret .= checkErrorMessage();
	
	$headerText = sprintf(_("Phone Settings for %s (%s)"),$displayname,$exten);
	
	$ret .= $display->displayHeaderText($headerText);
	$ret .= $display->displayLine();
	
	$ret .= "
		";
	
	$ret .= "
		" . $setLangText . "
		";
	
	return $ret;
  }
  /*
   * Sets Asterisk call recording setting
   *
   * @param $exten
   *   Extension to modify
   * @param $direction
   *   Call direction
   * @param $state
   *   State to set to
   */
  function setRecordSettings($exten,$state_in,$state_out) {
    global $asterisk_manager_interface;
    if (version_compare($this->getFreePBXVersion(), '1.10', '<')) {
      if ($state_in=="Always") {
        $type_opt = "put";
        $value_opt = " " . "ENABLED";
      }
      elseif ($state_in=="Never") {
        $type_opt = "put";
        $value_opt = " " . "DISABLED";
      }
      else {
        $type_opt = "del";
        $value_opt = "";
      }
      $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database $type_opt RECORD-IN $exten $value_opt\r\n\r\n");
      if ($state_out=="Always") {
        $type_opt = "put";
        $value_opt = " " . "ENABLED";
      }
      elseif ($state_out=="Never") {
        $type_opt = "put";
        $value_opt = " " . "DISABLED";
      }
      else {
        $type_opt = "del";
        $value_opt = "";
      }
      $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database $type_opt RECORD-OUT $exten $value_opt\r\n\r\n");
    }
    else {
      $value_opt= "out=".$state_out."|in=".$state_in;
      $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/recording $value_opt\r\n\r\n");
    }
  }
  /*
   * Gets record settings for a protocol
   *
   * @param $table
   *   Table to pull information from
   * @param $exten
   *   Extension to get information about
   * @return $data
   *   call monitor record settings 
   */
  function getProtocolRecordSettings($table,$exten) {
    global $asterisk_manager_interface;
    $data = array();
    if (version_compare($this->getFreePBXVersion(), '1.10', '<')) {
      $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get RECORD-IN $exten\r\n\r\n");
      if (preg_match("/ENABLED/",$response)) {
        $data['record_in'] = 'Always';
      }
      elseif (preg_match("/DISABLED/",$response)) { 
        $data['record_in'] = 'Never';
      }
      else {
        $data['record_in'] = 'Adhoc';
      }
      $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get RECORD-OUT $exten\r\n\r\n");
      if (preg_match("/ENABLED/",$response)) {
        $data['record_out'] = 'Always';
      }
      elseif (preg_match("/DISABLED/",$response)) { 
        $data['record_out'] = 'Never';
      }
      else {
        $data['record_out'] = 'Adhoc';
      }
    }
    else {
      $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/recording\r\n\r\n");
      if (strstr($response,"in=Always")) {
        $data['record_in'] = 'Always';
      }
      elseif (strstr($response,"in=Never")) { 
        $data['record_in'] = 'Never';
      }
      else {
        $data['record_in'] = 'Adhoc';
      }
      if (strstr($response,"out=Always")) {
        $data['record_out'] = 'Always';
      }
      elseif (strstr($response,"out=Never")) { 
        $data['record_out'] = 'Never';
      }
      else {
        $data['record_out'] = 'Adhoc';
      }
    }
    return $data;
  }
  /*
   * Gets record settings
   *
   * @param $exten
   *   Extension to get information about
   * @param $data
   *   Reference to the variable to store the data in
   */
  function getRecordSettings($exten) {
    // check protocol tables first
    $data = $this->getProtocolRecordSettings($this->protocol_table,$exten);
    return $data;
  }
  /*
   * Reloads Asterisk Configuration
   */
  function reloadAsteriskVoicemail() {
    global $asterisk_manager_interface;
    $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: Reload app_voicemail.so\r\n\r\n");
  }
  /*
   * Gets FreePBX Version
   */
  function getFreePBXVersion() {
    if (isset($_SESSION['dbh_asterisk'])) {
      $sql = "SELECT * FROM admin WHERE variable = 'version'";
      $results = $_SESSION['dbh_asterisk']->getAll($sql);
      if(DB::IsError($results)) {
        $_SESSION['ari_error'] = $results->getMessage();
      }
      return $results[0][1];
    }
  }
  function lookupSetExtensionFormat($exten) {
    if (trim($exten) == "") return $exten;
    $exten = preg_replace("/[^0-9*]/", "", $exten);
    $sql = "SELECT extension FROM users WHERE extension = '".$exten."'";
    $asa = $_SESSION['dbh_asterisk']->getrow($sql, DB_FETCHMODE_ASSOC);
    if (!is_array($asa)) { 
      return $exten.'#';
    } else {
      return $exten;
    }
  }
} // class
?>