getVmxState($exten,'unavail'); // and vmx is enabled for this user if ($vmx_enabled !== false) $ret .= "

" . _("VmX™ Locator") . "

"; } } return $ret; } /* * Acts on the user settings * * @param $args * Common arguments * @param $a * action */ function action($args) { global $STANDALONE; global $ARI_ADMIN_USERNAME; global $SETTINGS_ALLOW_VMX_SETTINGS; // args $m = getArgument($args,'m'); $a = getArgument($args,'a'); $follow_me_disabled = getArgument($args,'follow_me_disabled'); $vmx_option_0_number = getArgument($args, 'vmx_option_0_number'); $vmx_option_0_system_default = getArgument($args, 'vmx_option_0_system_default'); $vmx_option_1_number = getArgument($args, 'vmx_option_1_number'); $vmx_option_1_system_default = getArgument($args, 'vmx_option_1_system_default'); $vmx_option_2_number = getArgument($args, 'vmx_option_2_number'); $vmx_unavail_enabled = getArgument($args, 'vmx_unavail_enabled'); $vmx_busy_enabled = getArgument($args, 'vmx_busy_enabled'); $vmx_play_instructions = getArgument($args, 'vmx_play_instructions'); $vmx_disabled = getArgument($args, 'vmx_disabled'); $exten = $_SESSION['ari_user']['extension']; // The action is 'update if ($a=='update') { $follow_me_disabled = ($this->getFollowMeListRingTime($exten) > 0)?0:1; $vmx_disabled = $this->getVmxState($exten,'unavail'); if ($vmx_disabled === false) { $vmx_disabled = true; $SETTINGS_ALLOW_VMX_SETTINGS=false; } else { $vmx_disabled = false; } if ($vmx_disabled) { setcookie("ari_vmx_disabled", $vmx_disabled, time()+365*24*60*60); $vmx_disabled_delayed = $vmx_disabled; $_SESSION['ari_error'] = _("Your Premium VmX Locator service has been disabled, REFRESH your browser to remove this message") . "
" . sprintf(_("Check with your Telephone System Administrator if you think there is a problem")); } if (! $vmx_disabled) { // set database $this->setVmxState($exten,'unavail',$vmx_unavail_enabled); $this->setVmxState($exten,'busy',$vmx_busy_enabled); $this->setVmxPlayInstructions($exten,'unavail',$vmx_play_instructions); $this->setVmxPlayInstructions($exten,'busy',$vmx_play_instructions); // store cookie setcookie("ari_vmx_unavail_enabled", $vmx_unavail_enabled, time()+365*24*60*60); setcookie("ari_vmx_busy_enabled", $vmx_busy_enabled, time()+365*24*60*60); setcookie("ari_vmx_play_instructions", $vmx_play_instructions, time()+365*24*60*60); $stripped_vmx_option_0_number = preg_replace('/-|\(|\)|\s/','',$vmx_option_0_number); if ($vmx_option_0_system_default) { $this->setVmxOptionNumber($exten,'0','unavail',""); $this->setVmxOptionNumber($exten,'0','busy',""); setcookie("ari_vmx_option_0_system_default", $vmx_option_0_system_default, time()+365*24*60*60); if (is_numeric($stripped_vmx_option_0_number) || !$stripped_vmx_option_0_number) { $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_vmx_option_0_number']); if ($vmx_option_0_number && $stripped!=$stripped_vmx_option_0_number) { setcookie("ari_vmx_option_0_number", $call_vmx_option_0_number, time()+365*24*60*60); } } } else { if (!is_numeric($stripped_vmx_option_0_number) && $stripped_vmx_option_0_number) { $_SESSION['ari_error'] = _("Option 0 not changed") . "
" . sprintf(_("Number %s must contain dial numbers (characters like '(', '-', and ')' are ok)"),$vmx_option_0_number); } else { // set database $this->setVmxOptionNumber($exten,'0','unavail',$stripped_vmx_option_0_number); $this->setVmxOptionNumber($exten,'0','busy',$stripped_vmx_option_0_number); // store cookie $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_vmx_option_0_number']); if ($vmx_option_0_number && $stripped!=$stripped_vmx_option_0_number) { setcookie("ari_vmx_option_0_number", $call_vmx_option_0_number, time()+365*24*60*60); } } } $stripped_vmx_option_1_number = preg_replace('/-|\(|\)|\s/','',$vmx_option_1_number); if ($vmx_option_1_system_default && !$follow_me_disabled) { $this->setVmxOptionFollowMe($exten,'1','unavail'); $this->setVmxOptionFollowMe($exten,'1','busy'); setcookie("ari_vmx_option_1_system_default", $vmx_option_1_system_default, time()+365*24*60*60); if (is_numeric($stripped_vmx_option_1_number) || !$stripped_vmx_option_1_number) { $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_vmx_option_1_number']); if ($vmx_option_1_number && $stripped!=$stripped_vmx_option_1_number) { setcookie("ari_vmx_option_1_number", $call_vmx_option_1_number, time()+365*24*60*60); } } } else { if (!is_numeric($stripped_vmx_option_1_number) && $stripped_vmx_option_1_number) { $_SESSION['ari_error'] = _("Option 1 not changed") . "
" . sprintf(_("Number %s must contain dial numbers (characters like '(', '-', and ')' are ok)"),$vmx_option_1_number); } else { // set database $this->setVmxOptionNumber($exten,'1','unavail',$stripped_vmx_option_1_number); $this->setVmxOptionNumber($exten,'1','busy',$stripped_vmx_option_1_number); // store cookie $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_vmx_option_1_number']); if ($vmx_option_1_number && $stripped!=$stripped_vmx_option_1_number) { setcookie("ari_vmx_option_1_number", $call_vmx_option_1_number, time()+365*24*60*60); } } } $stripped_vmx_option_2_number = preg_replace('/-|\(|\)|\s/','',$vmx_option_2_number); if (!is_numeric($stripped_vmx_option_2_number) && $stripped_vmx_option_2_number) { $_SESSION['ari_error'] = _("Option 2 not changed") . "
" . sprintf(_("Number %s must contain dial numbers (characters like '(', '-', and ')' are ok)"),$vmx_option_2_number); } else { // set database $this->setVmxOptionNumber($exten,'2','unavail',$stripped_vmx_option_2_number); $this->setVmxOptionNumber($exten,'2','busy',$stripped_vmx_option_2_number); // store cookie $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_vmx_option_2_number']); if ($vmx_option_2_number && $stripped!=$stripped_vmx_option_2_number) { setcookie("ari_vmx_option_2_number", $call_vmx_option_2_number, time()+365*24*60*60); } } } // vmx_disabled false } // redirect to see updated page $ret .= " "; return $ret; } /* * Displays stats page * * @param $args * Common arguments */ function display($args) { global $SETTINGS_ALLOW_VMX_SETTINGS; 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']; $display = new DisplaySearch(); $follow_me_listring_time = $this->getFollowMeListRingTime($exten); //TODO: Set this better than this? $follow_me_disabled = ($follow_me_listring_time > 0)?0:1; setcookie("ari_follow_me_disabled", $follow_me_disabled, time()+365*24*60*60); $vmx_unavail_enabled=$this->getVmxState($exten,'unavail'); if ($vmx_unavail_enabled === false) { $vmx_disabled = true; setcookie("ari_vmx_disabled", $vmx_disabled, time()+365*24*60*60); $SETTINGS_ALLOW_VMX_SETTINGS=false; } else { $vmx_disabled = false; setcookie("ari_vmx_disabled", false, time()+365*24*60*60); $vmx_busy_enabled=$this->getVmxState($exten,'busy'); $vmx_play_instructions=$this->getVmxPlayInstructions($exten); $vmx_option_0_number=$this->getVmxOptionNumber($exten,'0');; $vmx_option_1_number=$this->getVmxOptionNumber($exten,'1');; $vmx_option_2_number=$this->getVmxOptionNumber($exten,'2');; if (is_numeric($vmx_option_0_number)) { $vmx_option_0_system_default=''; $vmx_option_0_number_text_box_options=''; } else { $vmx_option_0_system_default='checked'; $vmx_option_0_number_text_box_options="disabled style='background: #DDD;'"; } // if follow-me is enabled then the options are a numberic value (dial a phone number) // or a followme target (FMnnn) which should not be displayed but means the box is checked // or otherwise blank (or garbage in which case blank it) // if (!$follow_me_disabled) { $vmx_option_1_system_default=$this->getVmxOptionFollowMe($exten,'1'); if ($vmx_option_1_system_default) { $vmx_option_1_number = ''; $vmx_option_1_number_text_box_options="disabled style='background: #DDD;'"; } } } $set_vmx_text .= "
" . _("Use When:") . "" . _("Menu options below are available during your personal voicemail greeting playback.

Check both to use at all times.") . "
" . _("unavailable") . " " . _("busy") . "
" . _("Voicemail Instructions:") ."" . _("Uncheck to play a beep after your personal voicemail greeting.") . "
" . _("Standard voicemail prompts.") . "


" . _("Press 0:") . "" . _("Pressing 0 during your personal voicemail greeing goes to the Operator. Uncheck to enter another destination here.") . "
" . _("Go To Operator") . "
" . _("Press 1:") . ""; if ($follow_me_disabled) $set_vmx_text .= _("The remaining options can have internal extensions, ringgroups, queues and external numbers that may be rung. It is often used to include your cell phone. You should run a test to make sure that the number is functional any time a change is made so you don't leave a caller stranded or receiving invalid number messages."); else $set_vmx_text .= _("Enter an alternate number here, then change your personal voicemail greeting to let callers know to press 1 to reach that number.

If you'd like to use your Follow Me List, check \"Send to Follow Me\" and disable Follow Me above."); $set_vmx_text .= "
"; if (!$follow_me_disabled) $set_vmx_text .= "" . _("Send to Follow-Me") . ""; $set_vmx_text .= "
" . _("Press 2:") . "" . _("Use any extensions, ringgroups, queues or external numbers.

Remember to re-record your personal voicemail greeting and include instructions. Run a test to make sure that the number is functional.") . "


"; // Now we should be ready to build the page $ret .= checkErrorMessage(); $headerText = sprintf(_("VmX Locator™ Settings for %s (%s)"),$displayname,$exten); $ret .= $display->displayHeaderText($headerText); $ret .= $display->displayLine(); $ret .= ""; $ret .= "
" . $set_vmx_text . "
"; return $ret; } /* * Gets VMX option FollowMe * * @param $exten * Extension to get information about * @param $digit * Option number to get * @param $mode * Mode to get (unavail/busy) * @return $response * checked if set to got to extesion's follow-me on this option */ function getVmxOptionFollowMe($exten, $digit, $mode='unavail') { global $asterisk_manager_interface; $digit = trim($digit); $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/vmx/$mode/$digit/ext\r\n\r\n"); return (($response == 'FM'.$exten) ? 'checked':''); } /* * Sets VMX option FollowMe * * @param $exten * Extension to set information about * @param $digit * Option number to set * @param $mode * Mode to set (unavail/busy) * @param $context * Context to set ext to (default from-findmefollow) * @param $priority * Priority to set ext to (default 1) */ function setVmxOptionFollowMe($exten, $digit, $mode, $context='ext-findmefollow', $priority='1') { global $asterisk_manager_interface; $value_opt = "FM$exten"; $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/$digit/ext $value_opt\r\n\r\n"); $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/$digit/context $context\r\n\r\n"); $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/$digit/pri $priority\r\n\r\n"); } /* * Gets VMX option number * * @param $exten * Extension to get information about * @param $digit * Option number to get * @param $mode * Mode to get (unavail/busy) * @return $number * Number to use or blank if disabled */ function getVmxOptionNumber($exten, $digit, $mode='unavail') { global $asterisk_manager_interface; $number = ''; $digit = trim($digit); $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/vmx/$mode/$digit/ext\r\n\r\n"); if (is_numeric($response)) { $number = $response; } $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE["ari_vmx_option_${digit}_number"]); if ($stripped==$number) { $number = $_COOKIE["ari_vmx_option_${digit}_number"]; } return $number; } /* * Sets VMX option number * * @param $exten * Extension to set information about * @param $digit * Option number to set * @param $mode * Mode to set (unavail/busy) * @param $number * Number to set ext to (blank will delete it) * @param $context * Context to set ext to (default from-internal) * @param $priority * Priority to set ext to (default 1) */ function setVmxOptionNumber($exten, $digit, $mode, $number, $context='from-internal', $priority='1') { global $asterisk_manager_interface; $value_opt = trim($number); if (is_numeric($value_opt)) { $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/$digit/ext $value_opt\r\n\r\n"); $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/$digit/context $context\r\n\r\n"); $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/$digit/pri $priority\r\n\r\n"); } else { $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database deltree AMPUSER $exten/vmx/$mode/$digit\r\n\r\n"); } } /* * Sets VMX State * * @param $exten * Extension to modify * @param $mode * Mode to set (unavail/busy) * @param $vmx_state * enabled/disabled state based on check box value */ function setVmxState($exten,$mode,$vmx_state) { global $asterisk_manager_interface; $value_opt = ($vmx_state)?'enabled':'disabled'; $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/state $value_opt\r\n\r\n"); } /* * Gets VMX State * * @param $exten * Extension to get information about * @param $mode * Mode to get (unavail/busy) * @return $data * state of variable (checked/blank) or false if no poper value */ function getVmxState($exten, $mode='unavail') { global $asterisk_manager_interface; $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/vmx/$mode/state\r\n\r\n"); if (preg_match("/enabled/",$response)) { $response='checked'; } elseif (preg_match("/disabled/",$response)) { $response=''; } else { $response = false; } //TODO: really need to check for a bogus response, see how other side does it // return $response; } /* * Sets VMX Play Instructions * * @param $exten * Extension to modify * @param $vmx_play_instructions * play instructions or just beep (checked, blank) * @param $mode * Mode to set (unavail/busy) */ function setVmxPlayInstructions($exten,$mode,$vmx_play_instructions) { global $asterisk_manager_interface; $value_opt = ($vmx_play_instructions)?'""':'s'; $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/vmxopts/timeout $value_opt\r\n\r\n"); } /* * Get VMX Play Instructions * * @param $exten * Extension to get information about * @param $mode * Mode to get (unavail/busy) * @return $data * state of variable (checked/blank) or false if no poper value */ function getVmxPlayInstructions($exten, $mode='unavail') { global $asterisk_manager_interface; $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/vmx/$mode/vmxopts/timeout\r\n\r\n"); if (preg_match("/s/",$response)) { $response=''; } else { $response='checked'; } //TODO: really need to check for a bogus response, see how other side does it // return $response; } /* * Gets Follow Me List-Ring Time if set * * @param $exten * Extension to get information about * @return $number * follow me list-ring time returned if set */ function getFollowMeListRingTime($exten) { global $asterisk_manager_interface; $number = ''; $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/followme/grptime\r\n\r\n"); if (is_numeric($response)) { $number = $response; } $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_follow_me_listring_time']); if ($stripped==$number) { $number = $_COOKIE['ari_follow_me_listring_time']; } return $number; } } // class ?>