(no commit message)
[freeside.git] / fs_selfservice / fri / modules / settings.module
diff --git a/fs_selfservice/fri/modules/settings.module b/fs_selfservice/fri/modules/settings.module
new file mode 100644 (file)
index 0000000..314ce40
--- /dev/null
@@ -0,0 +1,813 @@
+<?php
+
+/**
+ * @file
+ * Functions for the interface to the call monitor recordings
+ */
+
+/**
+  * Class for settings
+  */
+class Settings {
+
+  var $protocol_table;
+  var $protocol_config_files;
+
+  /*
+   * rank (for prioritizing modules)
+   */
+  function rank() {
+
+    $rank = 9;
+    return $rank;
+  }
+
+  /*
+   * init
+   */
+  function init() {
+
+    // determine what protocol user is using
+    global $ASTERISK_PROTOCOLS;
+
+    foreach ($ASTERISK_PROTOCOLS as $protocol => $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 .= "<p><small><small><a href='" . $_SESSION['ARI_ROOT'] . "?m=Settings&f=display'>" . _("Settings") . "</a></small></small></p><br>";
+       }
+
+    return $ret;
+  }
+
+  /*
+   * Acts on the user settings
+   *
+   * @param $args
+   *   Common arguments
+   * @param $a
+   *   action
+   */
+  function action($args) {
+
+    global $ARI_ADMIN_USERNAME;
+    global $ASTERISK_VOICEMAIL_CONF;
+    global $SETTINGS_ALLOW_VOICEMAIL_SETTINGS;
+    global $SETTINGS_ALLOW_VOICEMAIL_PASSWORD_SET;
+    global $SETTINGS_VOICEMAIL_PASSWORD_LENGTH;
+    global $SETTINGS_VOICEMAIL_PASSWORD_EXACT;
+    global $SETTINGS_ALLOW_CALL_RECORDING_SET;
+
+    // args
+    $m = getArgument($args,'m');
+    $a = getArgument($args,'a');
+
+    $voicemail_password                = getArgument($args,'voicemail_password');
+    $voicemail_password_confirm = getArgument($args,'voicemail_password_confirm');
+    $voicemail_email_address   = getArgument($args,'voicemail_email_address');
+    $voicemail_pager_address   = getArgument($args,'voicemail_pager_address');
+    $voicemail_email_enable    = getArgument($args,'voicemail_email_enable');
+    $voicemail_audio_format    = getArgument($args,'voicemail_audio_format');
+    $record_in                                         = getArgument($args,'record_in');
+    $record_out                                = getArgument($args,'record_out');
+    
+    if (isset($_SESSION['ari_user']['voicemail_email'])) {
+      foreach (array_keys($_SESSION['ari_user']['voicemail_email']) as $key) {
+        $var = "voicemail_email_$key"; 
+        $$var = getArgument($args,$var);
+      }
+    }
+
+    if ($a=='update') {
+
+               $exten = $_SESSION['ari_user']['extension'];
+               if ($exten!=$ARI_ADMIN_USERNAME) {
+                       
+                       // Make sure Follow-Me setup has not been deleted for this user since the last refresh
+                       $follow_me_disabled_delayed = $_COOKIE['ari_follow_me_disabled'];
+                       
+                       // voicemail settings
+                       if ($SETTINGS_ALLOW_VOICEMAIL_SETTINGS && $_SESSION['ari_user']['voicemail_enabled']==1) {
+                               
+                               
+                               // update voicemail password
+                               if ($SETTINGS_ALLOW_VOICEMAIL_PASSWORD_SET) {
+                                       
+                                       // update voicemail password
+                                       if ($voicemail_password=='' || $voicemail_password_confirm=='') {
+                                               $_SESSION['ari_error'] = 
+                                               _("Voicemail password not changed") . "<br>" .
+                                               _("Password and password confirm must not be blank");
+                                       }  
+                                       else if ((strlen($voicemail_password)<$SETTINGS_VOICEMAIL_PASSWORD_LENGTH) || !is_numeric($voicemail_password)) {
+                                               $_SESSION['ari_error'] = 
+                                               _("Voicemail password not changed") . "<br>" .
+                                               sprintf(_("Passwords must be all numbers and greater than %d digits"),$SETTINGS_VOICEMAIL_PASSWORD_LENGTH);
+                                       }
+                                       else if (strlen($voicemail_password)!=$SETTINGS_VOICEMAIL_PASSWORD_LENGTH && $SETTINGS_VOICEMAIL_PASSWORD_EXACT || !is_numeric($voicemail_password)) {
+                                               $_SESSION['ari_error'] = 
+                                               _("Voicemail password not changed") . "<br>" .
+                                               sprintf(_("Passwords must be all numbers and only %d digits"),$SETTINGS_VOICEMAIL_PASSWORD_LENGTH);
+                                       }
+                                       else if ($voicemail_password!=$voicemail_password_confirm) {
+                                               $_SESSION['ari_error'] = 
+                                               _("Voicemail password not changed") . "<br>" .
+                                               _("Password and password confirm do not match");
+                                       }
+                                       else {
+                                       
+                                               // check for writable the files
+                                               $temp_file = $ASTERISK_VOICEMAIL_CONF . ".tmp";
+                                               $fp = fopen($temp_file, "w");
+                                               if (!$fp) {
+                                                       $_SESSION['ari_error'] = 
+                                                       _("Voicemail password not changed") . "<br>" .
+                                                       sprintf(_("%s does not exist or is not writable"),$temp_file);
+                                               }
+                                               else if (!is_writable($ASTERISK_VOICEMAIL_CONF)) {
+                                                       $_SESSION['ari_error'] = 
+                                                       _("Voicemail password not changed") . "<br>" .
+                                                       sprintf(_("%s does not exist or is not writable"),$ASTERISK_VOICEMAIL_CONF);
+                                               }
+                                               else {
+                                                       
+                                                       // update session
+                                                       $_SESSION['ari_user']['voicemail_password'] = $voicemail_password;
+                                                       
+                                                       // save password
+                                                       $lines = file($ASTERISK_VOICEMAIL_CONF);
+                                                       foreach ($lines as $key => $line) {
+                                                               unset($value);
+                                                               list($var,$value) = split('=>',$line);
+                                                               $var = trim($var);
+                                                               if ($var==$exten && $value) {
+                                                               
+                                                                       // write out line with password change
+                                                                       $buf = split(',',$value);
+                                                                       $buf[0] = $voicemail_password;
+                                                                       $line = $var . " => " . join(',', $buf);
+                                                                       
+                                                                       fwrite($fp, $line);
+                                                               }
+                                                               else {
+                                                                       // write out original line with no changes
+                                                                       fwrite($fp, $line);
+                                                               }
+                                                       }
+                                                       fclose($fp);
+                                                       unlink($ASTERISK_VOICEMAIL_CONF);
+                                                       rename($temp_file,$ASTERISK_VOICEMAIL_CONF);
+                                                       
+                                                       $voicemail_reload = 1;
+                                               }
+                                       }
+                                       
+                                       // voicemail email address
+                                       if ($voicemail_email_enable && 
+                                       ($voicemail_email_address && !preg_match('/@/',$voicemail_email_address) || 
+                                       ($voicemail_pager_address && !preg_match('/@/',$voicemail_pager_address)))) {
+                                               $_SESSION['ari_error'] = 
+                                               _("Voicemail email and pager address not changed") . "<br>" .
+                                               ("'$voicemail_email_address' and '$voicemail_pager_address' must be a valid email addresses");
+                                       }
+                                       else {
+                                       
+                                               // check for writable the files
+                                               $temp_file = $ASTERISK_VOICEMAIL_CONF . ".tmp";
+                                               $fp = fopen($temp_file, "w");
+                                               if (!$fp) {
+                                                       $_SESSION['ari_error'] = 
+                                                       _("Voicemail email settings not changed") . "<br>" .
+                                                       sprintf(_("%s does not exist or is not writable"),$temp_file);
+                                               }
+                                               else if (!is_writable($ASTERISK_VOICEMAIL_CONF)) {
+                                                       $_SESSION['ari_error'] = 
+                                                       _("Voicemail email settings not changed") . "<br>" .
+                                                       sprintf(_("%s does not exist or is not writable"),$ASTERISK_VOICEMAIL_CONF);
+                                               }
+                                               else {
+                                                       
+                                                       // store cookie
+                                                       if ($voicemail_email_enable) {
+                                                               setcookie("ari_voicemail_email_address", $voicemail_email_address, time()+365*24*60*60);
+                                                               setcookie("ari_voicemail_pager_address", $voicemail_pager_address, time()+365*24*60*60);
+                                                               foreach (array_keys($_SESSION['ari_user']['voicemail_email']) as $key) {
+                                                                       $var = "voicemail_email_$key";
+                                                                       $var_cookie = "ari_" . $var;
+                                                                       setcookie("$var_cookie", $$var, time()+365*24*60*60);
+                                                               }
+                                                       }
+                                                       
+                                                       // update session
+                                                       $_SESSION['ari_user']['voicemail_email_enable'] = $voicemail_email_enable;
+                                                       if ($voicemail_email_enable) {
+                                                               $_SESSION['ari_user']['voicemail_email_address'] = $voicemail_email_address;
+                                                               $_SESSION['ari_user']['voicemail_pager_address'] = $voicemail_pager_address;
+                                                               foreach (array_keys($_SESSION['ari_user']['voicemail_email']) as $key) {
+                                                                       $option = "voicemail_email_$key";
+                                                                       $_SESSION['ari_user']['voicemail_email'][$key] = $$option;
+                                                               }
+                                                       }
+                                                       
+                                                       // save settings
+                                                       if (!$voicemail_email_enable) {
+                                                               $voicemail_email_address = '';
+                                                               $voicemail_pager_address = '';
+                                                       }
+                                                       
+                                                       $lines = file($ASTERISK_VOICEMAIL_CONF);
+                                                       foreach ($lines as $key => $line) {
+                                                               unset($value);
+                                                               list($var,$value) = split('=>',$line);
+                                                               $var = trim($var);
+                                                               if ($var==$exten && $value) {
+                                                               
+                                                                       // write out line with voicemail email change
+                                                                       $buf = split(',',$value);
+                                                                       $buf[2] = $voicemail_email_address;
+                                                                       $buf[3] = $voicemail_pager_address;
+                                                                       
+                                                                       foreach ($_SESSION['ari_user']['voicemail_email'] as $key => $value) {
+                                                                               $option = "voicemail_email_$key";
+                                                                               if ($$option && $key) {
+                                                                                       $options .= $key . "=" . $value;
+                                                                               }
+                                                                               else {
+                                                                                       $options .= $key . "=no";
+                                                                               }
+                                                                               $options .= "|";
+                                                                       }
+                                                                       $buf[4] = substr($options, 0, -1);
+                                                                       
+                                                                       $line = $var . " =>" . join(',', $buf);
+                                                                       if (substr($line, 0, -1)!="\n") {
+                                                                               $line .= "\n";
+                                                                       }
+                                                                       
+                                                                       fwrite($fp, $line);
+                                                               }
+                                                               else {
+                                                               
+                                                               // write out original line with no changes
+                                                               fwrite($fp, $line);
+                                                               }
+                                                       }
+                                                       fclose($fp);
+                                                       unlink($ASTERISK_VOICEMAIL_CONF);
+                                                       rename($temp_file,$ASTERISK_VOICEMAIL_CONF);
+                                                       
+                                                       $voicemail_reload = 1;
+                                               }
+                                       }
+                                       
+                                       // reload asterisk voicemail
+                                       if ($voicemail_reload) {
+                                       $this->reloadAsteriskVoicemail();
+                                       }
+                               }
+                               
+                               // update voicemail audio format setting
+                               setcookie("ari_voicemail_audio_format", $voicemail_audio_format, time()+365*24*60*60);
+                       }
+       
+                       // update call monitor record setting
+                       if ($SETTINGS_ALLOW_CALL_RECORDING_SET) {
+                               if ($record_in && $record_out) {
+                                       $this->setRecordSettings($exten,$record_in,$record_out);
+                               }
+                       }
+               }
+    }
+
+    // redirect to see updated page
+    $ret .= "
+      <head>
+        <script>
+        <!--
+          window.location = \"" . $_SESSION['ARI_ROOT'] . "?m=" . $m . "\"
+        // -->
+        </script>
+    </head>";
+  
+    return $ret;
+  }
+
+  /*
+   * Displays stats page
+   *
+   * @param $args
+   *   Common arguments
+   */
+  function display($args) {
+    global $SETTINGS_ALLOW_VOICEMAIL_SETTINGS;
+    global $SETTINGS_ALLOW_VOICEMAIL_PASSWORD_SET;
+    global $SETTINGS_VOICEMAIL_PASSWORD_LENGTH;
+    global $SETTINGS_VOICEMAIL_EMAIL_OPTION_DESCRIPTIONS;
+    global $ARI_VOICEMAIL_AUDIO_FORMAT_DEFAULT;
+    global $SETTINGS_ALLOW_CALL_RECORDING_SET;
+
+    global $loaded_modules;
+
+    // args
+    $m                 = getArgument($args,'m');
+    $q                 = getArgument($args,'q');
+    $start     = getArgument($args,'start');
+    $span      = getArgument($args,'span');
+
+    $displayname = $_SESSION['ari_user']['displayname'];
+    $exten = $_SESSION['ari_user']['extension'];
+
+    $language = new Language();
+    $display = new DisplaySearch();
+
+    // get data
+    $data = $this->getRecordSettings($_SESSION['ari_user']['extension']);
+
+    // lang setting options
+    if (extension_loaded('gettext')) { 
+      $setLangText = "<p class='lang'>" . _("Language:") . " " . $language->GetForm() . "</p>";
+    } 
+
+
+       // 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 = "
+                       <tr>
+                       <td>" . _("Voicemail Password:") . "</td>
+                       <td>
+                       <input name='voicemail_password' type='password' size=16 value=" . $_SESSION['ari_user']['voicemail_password'] . ">
+                       </td>
+                       </tr>
+                       <tr>
+                       <td>" . _("Enter again to confirm:") . "</td>
+                       <td>
+                       <input name='voicemail_password_confirm' type='password' size=16 value=" . $_SESSION['ari_user']['voicemail_password'] . ">
+                       </td>
+                       </tr>
+                       <tr>
+                       <td class='note' colspan=2><small>" . $voicemail_password_length_message . "</small></td>
+                       </tr>";
+               }
+               
+               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 = "
+                       
+                               <tr>
+                               <td> " . _("Email Notification") . " <input " . $voicemail_email_enable . " type=checkbox name='voicemail_email_enable' value='1' OnClick=\"disable_fields(); return true;\">
+                               <small> " ._("Enable") . " </small>      
+                               </td>
+                               </tr><tr>
+                               <td><a href='#' class='info'>" . _("Email Voicemail To:") . "<span>" . ("Email a notification, including audio file if indicated below.") . " </span></a></td>
+                               <td>
+                               <input " . $voicemail_email_text_box_options . " name='voicemail_email_address' type='text' size=48 value='" . $voicemail_email_address . "'>
+                               </td>
+                               </tr>
+                               <tr>
+                               <td><a href='#' class='info'>" . _("Pager Email Notification To:") . "<span>" . ("Email a short notification") . " </span></a></td>
+                               <td>
+                               <input " . $voicemail_pager_text_box_options . " name='voicemail_pager_address' type='text' size=48 value='" . $voicemail_pager_address . "'>
+                               </td>
+                               </tr>
+                               <tr>
+                               <td></td>
+                               </tr>";
+                       
+                       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 .= "
+                                       <tr>
+                                       <td></td>
+                                       <td>
+                                       <input type=text size='" . $size . "' name='" . $var . "' value='" . $value . "' OnClick=\"disable_fields(); return true;\">
+                                       <small>" . $var_text . "</small>
+                                       </td>
+                                       </tr>";
+                               } 
+                               else {
+                                       
+                                       $set_voicemail_email_text .= "
+                                       <tr>
+                                       <td></td>
+                                       <td>
+                                       <input " . $$var_enable . " " . $$var_text_box_options . " type=checkbox name='" . $var . "' value='yes' OnClick=\"disable_fields(); return true;\">
+                                       <small>" . $var_text . "</small>
+                                       </td>
+                                       </tr>";
+                               }
+                       }
+               }
+               
+               $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 = "
+                       <tr>
+                       <td>" . _("Audio Format:") . "</td>
+                       <td>
+                       <select name='voicemail_audio_format'>
+                       <option value='.wav' " . $wav_enable .  ">" . _("Best Quality") . " (.wav)</option>
+                       <option value='.gsm' " . $gsm_enable .  ">" . _("Smallest Download") . " (.gsm)</option>
+                       </select>
+                       </td>
+                       </tr>";
+               
+               $set_voicemail_text = "
+                       <table class='settings'>
+                       <tr>
+                       <td><h3>" . _("Voicemail Settings") . "</h3></td>
+                       </tr>
+                       " . $set_voicemail_password_text . "
+                       " . $set_voicemail_email_text . "
+                       " . $set_voicemail_audio_format_text . "
+                       </table>";
+       }
+
+       // 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 = "
+                       <table class='settings'>
+                       <tr>
+                       <td><h3>" . _("Call Monitor Settings") . "</h3></td>
+                       </tr>
+                       <tr>
+                       <td>" . _("Record INCOMING:") . " </td>
+                       <td>
+                       <input type='radio' name='record_in' value='Always' " . $ri_always . "/> " . _("Always") . " 
+                       <input type='radio' name='record_in' value='Never' " . $ri_never . "/> " . _("Never") . "                               
+                       <input type='radio' name='record_in' value='Adhoc' " . $ri_on_demand . "/> " . _("On-Demand") . "
+                       </td>
+                       </tr>
+                       <tr>
+                       <td>" . _("Record OUTGOING:") . " </td>
+                       <td>
+                       <input type='radio' name='record_out' value='Always' " . $ro_always . "/> " . _("Always") . "
+                       <input type='radio' name='record_out' value='Never' " . $ro_never . "/> " . _("Never") . "                              
+                       <input type='radio' name='record_out' value='Adhoc' " . $ro_on_demand . "/> " . _("On-Demand") . "
+                       </td>
+                       </tr>
+                       </table>";
+       }
+
+       // 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(_("Settings for %s (%s)"),$displayname,$exten);
+       
+       $ret .= $display->displayHeaderText($headerText);
+       $ret .= $display->displayLine();
+       
+       $ret .= "
+               <SCRIPT LANGUAGE='JavaScript'>
+               <!-- Begin
+               function rowCounter(field, maxlimit) {
+                       temp = field.value.split('\u000A',maxlimit+1)
+                       field.value = temp.join('\u000A')
+                       if (temp.length == maxlimit+1) {
+                               field.value = field.value.substring(0, field.value.length-1)
+                       }
+               }
+               
+               function disable_fields() {";
+                       $ret .= $js_voicemail_script . "
+               }
+               // End -->
+               </script>";
+       
+       $ret .= "
+               " . $setLangText . "
+               <form class='settings' name='ari_settings' action='' method='GET'>
+               <input type=hidden name=m value=" . $m . ">
+               <input type=hidden name=f value='action'>
+               <input type=hidden name=a value='update'>
+               <br>
+               " . $set_voicemail_text . "
+               <br>
+               " . $set_callmonitor_text . "
+               <br>
+               <input name='submit' type='submit' value='" . _("Update") . "'>
+               </form>";
+       
+       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
+
+?>