This commit was generated by cvs2svn to compensate for changes in r11022,
[freeside.git] / fs_selfservice / fri / modules / phonefeatures.module
1 <?php
2 //*****************************************************************************
3 class PhoneFeatures {
4 //*****************************************************************************
5   function rank() {
6
7     $rank = 4;
8     return $rank;
9   }
10
11 //*****************************************************************************
12   function init() {
13   }
14 //*****************************************************************************
15   function navMenu($args) {
16
17     global $ARI_NO_LOGIN;
18     global $SETTINGS_ALLOW_PHONE_SETTINGS;
19     global $SETTINGS_ALLOW_CALLFORWARD_SETTINGS;
20
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 "";
23
24       $ret .= "
25         <p><small><small><a href='" . $_SESSION['ARI_ROOT'] . "?m=PhoneFeatures&f=display'>" . _("Phone Features") . "</a></small></small></p>";
26
27     return $ret;
28   }
29 //*****************************************************************************
30   function action($args) {
31
32     global $ARI_ADMIN_USERNAME;
33     global $SETTINGS_ALLOW_PHONE_SETTINGS;
34     global $SETTINGS_ALLOW_CALLFORWARD_SETTINGS;
35
36     // args
37     $m = getArgument($args,'m');
38     $a = getArgument($args,'a');
39     $lang_code = getArgument( $args,'lang_code');
40         $exten = $_SESSION['ari_user']['extension'];
41
42         if ($a=='update') {
43
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');
48                         }
49                 }
50                 
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');
56                         }
57                 }
58         }
59
60     // redirect to see updated page
61         $ret .= "
62           <head>
63                 <script>
64                 <!--
65                   window.location = \"" . $_SESSION['ARI_ROOT'] . "?m=" . $m . "\"
66                 // -->
67                 </script>
68         </head>";
69   
70     return $ret;
71   }
72 //*****************************************************************************
73 function display($args) {
74         
75         global $STANDALONE;
76         global $ARI_ADMIN_USERNAME;
77         global $SETTINGS_ALLOW_PHONE_SETTINGS;
78     global $SETTINGS_ALLOW_CALLFORWARD_SETTINGS;
79
80     // args
81     $m = getArgument($args,'m');
82     $a = getArgument($args,'a');
83     $lang_code = getArgument( $args,'lang_code');
84         $exten = $_SESSION['ari_user']['extension'];
85         
86         $displayname = $_SESSION['ari_user']['displayname'];
87         $exten = $_SESSION['ari_user']['extension'];
88
89         $display = new DisplaySearch();
90
91         // build controls
92         if ($exten!=$ARI_ADMIN_USERNAME) {
93                 
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>";
97                         
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");
100                         
101                         $dnd_cw_text .= "</table>";
102                 }
103                 
104                 if ($SETTINGS_ALLOW_CALLFORWARD_SETTINGS) {
105                 
106                         $set_call_forward_text .= "<SCRIPT LANGUAGE='JavaScript'>
107                                                                                 <!-- Begin
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)
113                                                                                         }
114                                                                                 }
115                                                                                 
116                                                                                 function disable_fields() {
117                                                                                 
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;
121                                                                                         }
122                                                                                         else {
123                                                                                                 document.ari_settings.call_forward_number.style.backgroundColor = '#DDD';
124                                                                                                 document.ari_settings.call_forward_number.disabled = true;
125                                                                                         }
126                                                                                         
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;
130                                                                                         }
131                                                                                         else {
132                                                                                                 document.ari_settings.call_forward_busy_number.style.backgroundColor = '#DDD';
133                                                                                                 document.ari_settings.call_forward_busy_number.disabled = true;
134                                                                                         }
135                                                                                         
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;
139                                                                                         }
140                                                                                         else {
141                                                                                                 document.ari_settings.call_forward_unavailable_number.style.backgroundColor = '#DDD';
142                                                                                                 document.ari_settings.call_forward_unavailable_number.disabled = true;
143                                                                                         }
144                                                                                 }
145                                                                                 // End -->
146                                                                                 </script>";
147                 
148                         $set_call_forward_text.= "<table class='settings'>";
149                         $set_call_forward_text.= "<tr><td><h3>" . _("Call Forwarding") . "</h3></td></tr>";
150                         
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:");
154                         
155                         $set_call_forward_text .= "</table>";           
156                 }
157         }
158                 
159         // build page content
160         $ret .= checkErrorMessage();
161         
162         if ($_SESSION['ari_user']['admin_settings']) {
163                 $headerText = _("Phone Features");
164         } else {
165                 $headerText = sprintf(_("Phone Features for %s (%s)"),$displayname,$exten);
166         }
167         
168         $ret .= $display->displayHeaderText($headerText);
169         $ret .= $display->displayLine();
170         $ret .= "
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'>
175         <br>
176         " . $dnd_cw_text . "
177         <br>
178         " . $set_call_forward_text . "
179         <br>
180         <input name='submit' type='submit' value='" . _("Update") . "'>
181         </form>";
182         
183 return $ret;
184 }
185 //*****************************************************************************
186   function setPhoneSetting( $databaseCallFwdType, $exten, $state_value) {
187
188     global $asterisk_manager_interface;
189
190         $type_opt = ($state_value != "") ? "put":"del";
191
192     $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database $type_opt $databaseCallFwdType $exten $state_value\r\n\r\n");
193   }
194
195 //*****************************************************************************
196         function getPhoneSetting($exten, $databaseCallFwdType) {
197                 
198                 global $asterisk_manager_interface;
199                 $number = '';
200                 
201                 $result = false;
202                 $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get $databaseCallFwdType $exten\r\n\r\n");
203                 if (stristr($response, 'ENABLED')) {
204                         $result = true;
205                 } 
206                 elseif (stristr($response, 'YES')) {
207                         $result = true;
208                 }
209
210                 return $result;
211         }
212 //*****************************************************************************
213         function storePhoneSetting( $args, $exten, $settingType, $databaseCallFwdType, $state_value)
214         {
215                 $setting_enable  = getArgument( $args, $settingType . '_enable');
216                 
217                 $this->setPhoneSetting( $databaseCallFwdType, $exten, ($setting_enable == 'checked')?$state_value:"");
218         }
219
220 //*****************************************************************************
221         function displayPhoneControls( $exten, $callFwdType, $databaseCallFwdType, $title)
222         {
223
224                 $phone_setting_enable = ($this->getPhoneSetting($exten, $databaseCallFwdType)) ? 'checked':'';
225
226                 $ret = "\n<tr>";
227                 $ret.= "<td>";
228                 $ret.= "<label><input " . $phone_setting_enable . " type=checkbox name='" . $callFwdType . "_enable' value='checked' >";
229                 $ret.= "<small>" . _($title) . "</small></label>";
230                 $ret.= "</td>";
231                 $ret.= "</tr>\n";
232                 
233                 return $ret;
234         }
235 //*****************************************************************************
236   /*
237    * Sets Asterisk call forward setting
238    *
239    * @param $exten
240    *   Extension to modify
241    * @param $state
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)
247    */
248   function setCallForward($exten,$state,$call_forward_number, $variable_opt = "CF") {
249
250     global $asterisk_manager_interface;
251
252     if ($state) {
253       $type_opt = "put";
254       $value_opt = $call_forward_number;
255     }
256     else {
257       $type_opt = "del";
258     }
259
260     $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database $type_opt $variable_opt $exten $value_opt\r\n\r\n");
261   }
262
263   /*
264    * Gets call forward number if set
265    *
266    * @param $exten
267    *   Extension to get information about
268    * @return $number
269    *   call forward number returned if set
270    * @param $variable_opt
271    *   Call forward type (CF, CFU, CFB)
272    */
273         function getCallForwardNumber($exten, $variable_opt = "CF") {
274                 
275                 global $asterisk_manager_interface;
276                 
277                 $number = '';
278                 
279                 $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get $variable_opt $exten\r\n\r\n");
280                 if (is_numeric($response)) {
281                         $number = $response;
282                 }
283                 
284                 $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_call_forward_number']);
285                 if ($stripped==$number) {
286                         $number = $_COOKIE['ari_call_forward_number'];
287                 }
288                 
289                 return $number;
290         }
291
292
293         function storeCallForwardNumber( $args, $exten, $callFwdType, $databaseCallFwdType)
294         {
295                 $call_forward_enable  = getArgument($args, $callFwdType . '_enable');
296                 $call_forward_number  = getArgument($args, $callFwdType . '_number');
297         
298                 $stripped_call_forward_number = preg_replace('/-|\(|\)|\s/','',$call_forward_number);
299                 
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);
303                 }
304                 else {
305                         $this->setCallForward( $exten, $call_forward_enable, $stripped_call_forward_number, $databaseCallFwdType);
306                         
307                         // store cookie
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);
311                         }
312                 }               
313         }
314
315         function displayCallForwardControls( $exten, $callFwdType, $databaseCallFwdType, $title)
316         {
317                 $call_forward_number = $this->getCallForwardNumber($exten, $databaseCallFwdType);
318                 
319                 // If we have a value, we want the item checked
320                 if ($call_forward_number) { 
321                         $call_forward_enable = 'checked';
322                 }
323                 else {
324                         $call_forward_number = $_COOKIE['ari_' . $callFwdType ];
325                         $call_forward_text_box_options = "disabled style='background: #DDD;'";
326                 }
327
328                 $ret = "\n<tr>";
329                 $ret.= "<td>" . _($title) . "</td>";
330                 $ret.= "<td>";
331                 $ret.= "<input " . $call_forward_text_box_options . " name='" . $callFwdType . "_number' type='text' size=24 value='" . $call_forward_number . "'>";
332                 $ret.= "</td>";
333                 $ret.= "<td>";
334                 $ret.= "<input " . $call_forward_enable . " type=checkbox name='" . $callFwdType . "_enable' value='checked' OnClick=\"disable_fields(); return true;\">";
335                 $ret.= "<small>" . _("Enable") . "</small>";
336                 $ret.= "</td>";
337                 $ret.= "</tr>\n";
338                 
339                 return $ret;
340         }
341 } // class
342 ?>