$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") . "


"; } 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") . "
" . _("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") . "
" . 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") . "
" . 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") . "
" . _("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") . "
" . 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") . "
" . 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") . "
" . ("'$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") . "
" . 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") . "
" . 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 .= " "; 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 = "

" . _("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:") . " "; $set_voicemail_text = " " . $set_voicemail_password_text . " " . $set_voicemail_email_text . " " . $set_voicemail_audio_format_text . "

" . _("Voicemail Settings") . "

"; } // 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 = "

" . _("Call Monitor Settings") . "

" . _("Record INCOMING:") . " " . _("Always") . " " . _("Never") . " " . _("On-Demand") . "
" . _("Record OUTGOING:") . " " . _("Always") . " " . _("Never") . " " . _("On-Demand") . "
"; } // 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 . "

" . $set_voicemail_text . "
" . $set_callmonitor_text . "
"; 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 ?>