2 //*****************************************************************************
4 //*****************************************************************************
11 //*****************************************************************************
14 //*****************************************************************************
15 function navMenu($args) {
18 global $SETTINGS_ALLOW_PHONE_SETTINGS;
19 global $SETTINGS_ALLOW_CALLFORWARD_SETTINGS;
21 // If we're not allowing call forwarding AND PHONE SETTINGS get out of here
22 if (!$SETTINGS_ALLOW_PHONE_SETTINGS && !$SETTINGS_ALLOW_CALLFORWARD_SETTINGS) return "";
25 <p><small><small><a href='" . $_SESSION['ARI_ROOT'] . "?m=PhoneFeatures&f=display'>" . _("Phone Features") . "</a></small></small></p>";
29 //*****************************************************************************
30 function action($args) {
32 global $ARI_ADMIN_USERNAME;
33 global $SETTINGS_ALLOW_PHONE_SETTINGS;
34 global $SETTINGS_ALLOW_CALLFORWARD_SETTINGS;
37 $m = getArgument($args,'m');
38 $a = getArgument($args,'a');
39 $lang_code = getArgument( $args,'lang_code');
40 $exten = $_SESSION['ari_user']['extension'];
44 if ($SETTINGS_ALLOW_PHONE_SETTINGS) {
45 if ($exten!=$ARI_ADMIN_USERNAME) {
46 $this->storePhoneSetting( $args, $exten, 'call_waiting', 'CW', 'ENABLED');
47 $this->storePhoneSetting( $args, $exten, 'do_not_disturb', 'DND', 'YES');
51 if ($SETTINGS_ALLOW_CALLFORWARD_SETTINGS) {
52 if ($exten!=$ARI_ADMIN_USERNAME) {
53 $this->storeCallForwardNumber( $args, $exten, 'call_forward', 'CF');
54 $this->storeCallForwardNumber( $args, $exten, 'call_forward_busy', 'CFB');
55 $this->storeCallForwardNumber( $args, $exten, 'call_forward_unavailable', 'CFU');
60 // redirect to see updated page
65 window.location = \"" . $_SESSION['ARI_ROOT'] . "?m=" . $m . "\"
72 //*****************************************************************************
73 function display($args) {
76 global $ARI_ADMIN_USERNAME;
77 global $SETTINGS_ALLOW_PHONE_SETTINGS;
78 global $SETTINGS_ALLOW_CALLFORWARD_SETTINGS;
81 $m = getArgument($args,'m');
82 $a = getArgument($args,'a');
83 $lang_code = getArgument( $args,'lang_code');
84 $exten = $_SESSION['ari_user']['extension'];
86 $displayname = $_SESSION['ari_user']['displayname'];
87 $exten = $_SESSION['ari_user']['extension'];
89 $display = new DisplaySearch();
92 if ($exten!=$ARI_ADMIN_USERNAME) {
94 if ($SETTINGS_ALLOW_PHONE_SETTINGS) {
95 $dnd_cw_text = "<table class='settings'>";
96 $dnd_cw_text.= "<tr><td><h3>" . _("Phone Features") . "</h3></td></tr>";
98 $dnd_cw_text.= $this->displayPhoneControls( $exten, 'call_waiting', 'CW', "Call Waiting");
99 $dnd_cw_text.= $this->displayPhoneControls( $exten, 'do_not_disturb', 'DND', "Do Not Disturb");
101 $dnd_cw_text .= "</table>";
104 if ($SETTINGS_ALLOW_CALLFORWARD_SETTINGS) {
106 $set_call_forward_text .= "<SCRIPT LANGUAGE='JavaScript'>
108 function rowCounter(field, maxlimit) {
109 temp = field.value.split('\u000A',maxlimit+1)
110 field.value = temp.join('\u000A')
111 if (temp.length == maxlimit+1) {
112 field.value = field.value.substring(0, field.value.length-1)
116 function disable_fields() {
118 if (document.ari_settings.call_forward_enable.checked) {
119 document.ari_settings.call_forward_number.style.backgroundColor = '#FFF';
120 document.ari_settings.call_forward_number.disabled = false;
123 document.ari_settings.call_forward_number.style.backgroundColor = '#DDD';
124 document.ari_settings.call_forward_number.disabled = true;
127 if (document.ari_settings.call_forward_busy_enable.checked) {
128 document.ari_settings.call_forward_busy_number.style.backgroundColor = '#FFF';
129 document.ari_settings.call_forward_busy_number.disabled = false;
132 document.ari_settings.call_forward_busy_number.style.backgroundColor = '#DDD';
133 document.ari_settings.call_forward_busy_number.disabled = true;
136 if (document.ari_settings.call_forward_unavailable_enable.checked) {
137 document.ari_settings.call_forward_unavailable_number.style.backgroundColor = '#FFF';
138 document.ari_settings.call_forward_unavailable_number.disabled = false;
141 document.ari_settings.call_forward_unavailable_number.style.backgroundColor = '#DDD';
142 document.ari_settings.call_forward_unavailable_number.disabled = true;
148 $set_call_forward_text.= "<table class='settings'>";
149 $set_call_forward_text.= "<tr><td><h3>" . _("Call Forwarding") . "</h3></td></tr>";
151 $set_call_forward_text.= $this->displayCallForwardControls( $exten, 'call_forward', 'CF', "Unconditional:");
152 $set_call_forward_text.= $this->displayCallForwardControls( $exten, 'call_forward_unavailable', 'CFU', "Unavailable:");
153 $set_call_forward_text.= $this->displayCallForwardControls( $exten, 'call_forward_busy', 'CFB', "Busy:");
155 $set_call_forward_text .= "</table>";
159 // build page content
160 $ret .= checkErrorMessage();
162 if ($_SESSION['ari_user']['admin_settings']) {
163 $headerText = _("Phone Features");
165 $headerText = sprintf(_("Phone Features for %s (%s)"),$displayname,$exten);
168 $ret .= $display->displayHeaderText($headerText);
169 $ret .= $display->displayLine();
171 <form class='settings' name='ari_settings' action='' method='GET'>
172 <input type=hidden name=m value=" . $m . ">
173 <input type=hidden name=f value='action'>
174 <input type=hidden name=a value='update'>
178 " . $set_call_forward_text . "
180 <input name='submit' type='submit' value='" . _("Update") . "'>
185 //*****************************************************************************
186 function setPhoneSetting( $databaseCallFwdType, $exten, $state_value) {
188 global $asterisk_manager_interface;
190 $type_opt = ($state_value != "") ? "put":"del";
192 $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database $type_opt $databaseCallFwdType $exten $state_value\r\n\r\n");
195 //*****************************************************************************
196 function getPhoneSetting($exten, $databaseCallFwdType) {
198 global $asterisk_manager_interface;
202 $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get $databaseCallFwdType $exten\r\n\r\n");
203 if (stristr($response, 'ENABLED')) {
206 elseif (stristr($response, 'YES')) {
212 //*****************************************************************************
213 function storePhoneSetting( $args, $exten, $settingType, $databaseCallFwdType, $state_value)
215 $setting_enable = getArgument( $args, $settingType . '_enable');
217 $this->setPhoneSetting( $databaseCallFwdType, $exten, ($setting_enable == 'checked')?$state_value:"");
220 //*****************************************************************************
221 function displayPhoneControls( $exten, $callFwdType, $databaseCallFwdType, $title)
224 $phone_setting_enable = ($this->getPhoneSetting($exten, $databaseCallFwdType)) ? 'checked':'';
228 $ret.= "<label><input " . $phone_setting_enable . " type=checkbox name='" . $callFwdType . "_enable' value='checked' >";
229 $ret.= "<small>" . _($title) . "</small></label>";
235 //*****************************************************************************
237 * Sets Asterisk call forward setting
240 * Extension to modify
242 * Call forward enable or disable
243 * @param $call_forward_number
244 * Call forward number
245 * @param $variable_opt
246 * Call forward type (CF, CFU, CFB)
248 function setCallForward($exten,$state,$call_forward_number, $variable_opt = "CF") {
250 global $asterisk_manager_interface;
254 $value_opt = $call_forward_number;
260 $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database $type_opt $variable_opt $exten $value_opt\r\n\r\n");
264 * Gets call forward number if set
267 * Extension to get information about
269 * call forward number returned if set
270 * @param $variable_opt
271 * Call forward type (CF, CFU, CFB)
273 function getCallForwardNumber($exten, $variable_opt = "CF") {
275 global $asterisk_manager_interface;
279 $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get $variable_opt $exten\r\n\r\n");
280 if (is_numeric($response)) {
284 $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_call_forward_number']);
285 if ($stripped==$number) {
286 $number = $_COOKIE['ari_call_forward_number'];
293 function storeCallForwardNumber( $args, $exten, $callFwdType, $databaseCallFwdType)
295 $call_forward_enable = getArgument($args, $callFwdType . '_enable');
296 $call_forward_number = getArgument($args, $callFwdType . '_number');
298 $stripped_call_forward_number = preg_replace('/-|\(|\)|\s/','',$call_forward_number);
300 if ($call_forward_enable && !is_numeric($stripped_call_forward_number)) {
301 $_SESSION['ari_error'] = _("Call forward number not changed") . "<br>" .
302 sprintf(_("Number %s must contain dial numbers (characters like '(', '-', and ')' are ok)"), $call_forward_number);
305 $this->setCallForward( $exten, $call_forward_enable, $stripped_call_forward_number, $databaseCallFwdType);
308 $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_' . $callFwdType]);
309 if ($call_forward_number && $stripped!=$stripped_call_forward_number) {
310 setcookie('ari_' . $callFwdType, $call_forward_number, time()+365*24*60*60);
315 function displayCallForwardControls( $exten, $callFwdType, $databaseCallFwdType, $title)
317 $call_forward_number = $this->getCallForwardNumber($exten, $databaseCallFwdType);
319 // If we have a value, we want the item checked
320 if ($call_forward_number) {
321 $call_forward_enable = 'checked';
324 $call_forward_number = $_COOKIE['ari_' . $callFwdType ];
325 $call_forward_text_box_options = "disabled style='background: #DDD;'";
329 $ret.= "<td>" . _($title) . "</td>";
331 $ret.= "<input " . $call_forward_text_box_options . " name='" . $callFwdType . "_number' type='text' size=24 value='" . $call_forward_number . "'>";
334 $ret.= "<input " . $call_forward_enable . " type=checkbox name='" . $callFwdType . "_enable' value='checked' OnClick=\"disable_fields(); return true;\">";
335 $ret.= "<small>" . _("Enable") . "</small>";