(no commit message)
[freeside.git] / fs_selfservice / fri / modules / followme.module
1 <?php
2
3 /**
4  * @file
5  * Functions for the interface to the call monitor recordings
6  */
7
8 /**
9   * Class for Followme
10   */
11 class followme {
12
13   var $protocol_table;
14   var $protocol_config_files;
15
16   /*
17    * rank (for prioritizing modules)
18    */
19   function rank() {
20
21         $rank = 5;
22         return $rank;
23   }
24
25   /*
26    * init
27    */
28   function init() {
29
30   }
31
32   /*
33    * Adds menu item to nav menu
34    *
35    * @param $args
36    *   Common arguments
37    */
38   function navMenu($args) {
39         global $ARI_ADMIN_USERNAME;
40         
41         $exten = $_SESSION['ari_user']['extension'];
42         if ($exten!=$ARI_ADMIN_USERNAME) {
43                 $ret .= "<p><small><small><a href='" . $_SESSION['ARI_ROOT'] . "?m=followme&f=display'>" . _("Follow Me") . "</a></small></small></p>";
44         }
45
46         return $ret;
47   }
48
49   /*
50    * Acts on the user settings
51    *
52    * @param $args
53    *   Common arguments
54    * @param $a
55    *   action
56    */
57   function action($args) {
58
59         global $STANDALONE;
60         global $ARI_ADMIN_USERNAME;
61         global $SETTINGS_ALLOW_VMX_SETTINGS;
62
63         // args
64         $m = getArgument($args,'m');
65         $a = getArgument($args,'a');
66
67         $lang_code = getArgument($args,'lang_code');
68
69         $follow_me_prering_time                 = getArgument($args,'follow_me_prering_time');
70         $follow_me_listring_time                = getArgument($args,'follow_me_listring_time');
71         $follow_me_list                                 = getArgument($args,'follow_me_list');
72         $follow_me_confirm                              = getArgument($args,'follow_me_confirm');
73         $follow_me_ddial                                = getArgument($args,'follow_me_ddial');
74         $follow_me_disabled                             = getArgument($args,'follow_me_disabled');
75
76         $language = new Language();
77
78         // Lets see if we can make heads or tails of this code?!?
79         
80         // The action is 'update
81         if ($a=='update') {
82
83                 // Get the extension and make sure we are not in 
84                 // admin mode
85                 $exten = $_SESSION['ari_user']['extension'];
86                 if ($exten!=$ARI_ADMIN_USERNAME) {
87         
88         
89                         // Make sure Follow-Me setup has not been deleted for this user since the last refresh
90                         $follow_me_disabled_delayed = $_COOKIE['ari_follow_me_disabled'];
91                         if (! $_COOKIE['ari_follow_me_disabled']) {
92                         
93                                 $follow_me_disabled = ($this->getFollowMeListRingTime($exten) > 0)?0:1;
94                                 
95                                 if ($follow_me_disabled) {
96                                         
97                                         setcookie("ari_follow_me_disabled", $follow_me_disabled, time()+365*24*60*60);
98                                         $follow_me_disabled_delayed = $follow_me_disabled;
99                                         $_SESSION['ari_error'] = 
100                                         _("Your Follow-Me has been disabled, REFRESH your browser to remove this message") . "<br>" .
101                                         sprintf(_("Check with your Telephone System Administrator if you think there is a problem"));
102                                 }
103                         }
104         
105         
106         
107                         if (! $follow_me_disabled_delayed) {
108         
109                                 // assume no errors, don't update SQL if errors occured
110                                 $follow_me_update_succeeded=1;
111                                 
112                                 // update follow me pre-ring time
113                                 if (!$STANDALONE['use']) {
114                                 
115                                         $stripped_follow_me_prering_time = preg_replace('/-|\s/','',$follow_me_prering_time);
116                                         if (!is_numeric($stripped_follow_me_prering_time)) {
117                                                 $_SESSION['ari_error'] = 
118                                                 _("Follow-Me pre-ring time not changed") . "<br>" .
119                                                 sprintf(_("Number %s must be an interger number of seconds"),$follow_me_prering_time);
120                                                 $follow_me_update_succeeded=0;
121                                         }
122                                         else {
123                                                 
124                                                 // set database
125                                                 $this->setFollowMePreRingTime($exten,$stripped_follow_me_prering_time);
126                                                 
127                                                 // store cookie
128                                                 $stripped = preg_replace('/-|\s/','',$_COOKIE['ari_follow_me_prering_time']);
129                                                 if ($follow_me_prering_time && $stripped!=$stripped_follow_me_prering_time) {
130                                                         setcookie("ari_follow_me_prering_time", $follow_me_prering_time, time()+365*24*60*60);
131                                                 }
132                                         }
133                                 }
134           
135                                 // update follow me list ring time
136                                 if (!$STANDALONE['use']) {
137                                 
138                                         $stripped_follow_me_listring_time = preg_replace('/-|\s/','',$follow_me_listring_time);
139                                         if (!is_numeric($stripped_follow_me_listring_time)) {
140                                                 $_SESSION['ari_error'] = 
141                                                 _("Follow-Me list ring time not changed") . "<br>" .
142                                                 sprintf(_("Number %s must be an interger number of seconds"),$follow_me_listring_time);
143                                                 $follow_me_update_succeeded=0;
144                                         }
145                                         else {
146                                         
147                                                 // set database
148                                                 $this->setFollowMeListRingTime($exten,$stripped_follow_me_listring_time);
149                                                 
150                                                 // store cookie
151                                                 $stripped = preg_replace('/-|\s/','',$_COOKIE['ari_follow_me_listring_time']);
152                                                 if ($follow_me_listring_time && $stripped!=$stripped_follow_me_listring_time) {
153                                                         setcookie("ari_follow_me_listring_time", $follow_me_listring_time, time()+365*24*60*60);
154                                                 }
155                                         }
156                                 }
157           
158                                 // update follow me list 
159                                 if (!$STANDALONE['use']) {
160                                 
161                                         $grplist = explode("\n", $follow_me_list);
162                                         
163                                         if (!$grplist) {
164                                                 $grplist = null;
165                                         }
166                                         
167                                         foreach (array_keys($grplist) as $key) {
168                                                 //trim it
169                                                 $grplist[$key] = trim($grplist[$key]);
170                                                 
171                                                 // Lookup the extension and append hash if not a user, and remove invalid chars
172                                                 $grplist[$key] = $this->lookupSetExtensionFormat($grplist[$key]);
173                                                 
174                                                 // remove blanks
175                                                 if ($grplist[$key] == "") unset($grplist[$key]);
176                                         }
177                                         
178                                         // check for duplicates, and re-sequence
179                                         $grplist = array_values(array_unique($grplist));
180                                         
181                                         $stripped_follow_me_list = implode("-",$grplist);
182                                         
183                                         if ($stripped_follow_me_list == "") {
184                                                 $_SESSION['ari_error'] = 
185                                                 _("Follow-Me list must contain at least one valid number") . "<br>" .
186                                                 sprintf(_("The following: %s is not valid"),$follow_me_list);
187                                                 $follow_me_update_succeeded=0;
188                                         }
189                                         else {
190                                         
191                                                 // set database
192                                                 $this->setFollowMeList($exten,$stripped_follow_me_list);
193                                                 
194                                                 // store cookie
195                                                 $stripped = preg_replace('/|\(|\)|\s/','',$_COOKIE['ari_follow_me_list']);
196                                                 if ($follow_me_list && $stripped!=$stripped_follow_me_list) {
197                                                         setcookie("ari_follow_me_list", $follow_me_list, time()+365*24*60*60);
198                                                 }
199                                         }
200                                 }
201           
202                                 // update follow me confirm
203                                 if (!$STANDALONE['use']) {
204                                 
205                                         // set database
206                                         $this->setFollowMeConfirm($exten,$follow_me_confirm);
207                                         $this->setFollowMeDDial($exten,$follow_me_ddial);
208                                         
209                                         // store cookie
210                                         setcookie("ari_follow_me_confirm", $follow_me_confirm, time()+365*24*60*60);
211                                         setcookie("ari_follow_me_ddial", $follow_me_ddial, time()+365*24*60*60);
212                                 }
213                                 
214                                 //If no errors than update the SQL table to keep in sync
215                                 if ($follow_me_update_succeeded) {
216                                         $this->setFollowMeMySQL($exten, $follow_me_prering_time, $follow_me_listring_time, $follow_me_list, $follow_me_confirm);
217                                 }
218         
219                         } //if !follow_me_disabled
220                 }
221         }
222
223         // redirect to see updated page
224         $ret .= "
225           <head>
226                 <script>
227                 <!--
228                   window.location = \"" . $_SESSION['ARI_ROOT'] . "?m=" . $m . "\"
229                 // -->
230                 </script>
231         </head>";
232   
233         return $ret;
234   }
235
236   /*
237    * Displays stats page
238    *
239    * @param $args
240    *   Common arguments
241    */
242         function display($args) {
243                 
244                 global $STANDALONE;
245                 global $ARI_ADMIN_USERNAME;
246                 global $SETTINGS_PRERING_LOW;
247                 global $SETTINGS_PRERING_HIGH;
248                 global $SETTINGS_LISTRING_LOW;
249                 global $SETTINGS_LISTRING_HIGH;
250                 
251                 global $SETTINGS_FOLLOW_ME_LIST_MAX;
252                 
253                 global $loaded_modules;
254                 
255                 // args
256                 $m              = getArgument($args,'m');
257                 $q              = getArgument($args,'q');
258                 $start  = getArgument($args,'start');
259                 $span   = getArgument($args,'span');
260                 
261                 $displayname    = $_SESSION['ari_user']['displayname'];
262                 $exten                  = $_SESSION['ari_user']['extension'];
263                 
264                 $language = new Language();
265                 $display = new DisplaySearch();
266                 
267                 // build controls
268                 if ($exten!=$ARI_ADMIN_USERNAME) {
269                         
270                         // call forward settings
271                         if (!$STANDALONE['use']) {
272                                 
273                                 $follow_me_prering_time         = $this->getFollowMePreRingTime($exten);
274                                 $follow_me_listring_time        = $this->getFollowMeListRingTime($exten);
275                                 $follow_me_list                         =  explode("-", $this->getFollowMeList($exten) );
276                                 $follow_me_confirm                      = $this->getFollowMeConfirm($exten);
277                                 $follow_me_ddial                        = $this->getFollowMeDDial($exten);
278                                 
279                                 $FOLLOW_ME_LIST_MAX = (count($follow_me_list) > $SETTINGS_FOLLOW_ME_LIST_MAX) ? count($follow_me_list):$SETTINGS_FOLLOW_ME_LIST_MAX;
280                                 
281                                 //TODO: Set this better than this?
282                                 $follow_me_disabled = ($follow_me_listring_time > 0)?0:1;
283                                 setcookie("ari_follow_me_disabled", $follow_me_disabled, time()+365*24*60*60);
284                                 
285                                 $followme_text.= "<table class='settings'>";
286                                 
287                                 if (!$follow_me_disabled) {
288                                         // $followme_text .= "<tr><td><h3><br>" . _("Follow Me") . "</h3></td></tr>";
289                                         $followme_text .= "<tr><td>&nbsp;</td></tr>";   // Blank Line
290                                         
291                                         $followme_text .= "<tr><td><a href='#' class='info'>" . _("Enable") . "<span>";
292                                         $followme_text .= _(    "Dial-by-name Directory, IVR, and internal 
293                                                                                                         calls will ring the numbers in the FollowMe 
294                                                                                                         List. Any FreePBX routes that directly 
295                                                                                                         reference a FollowMe are unaffected by this 
296                                                                                                         enable/disable setting.");
297                                         $followme_text .= "<br></span></a></td>";
298                                         
299                                         $followme_text .= "<td><input " . $follow_me_ddial . " type=checkbox name='follow_me_ddial' value='checked'></td></tr>";
300
301                                         $followme_text .= "<tr><td>&nbsp;</td></tr>";   // Blank Line                                                                           
302                                         $followme_text .= "<tr><td valign='top'><a href='#' class='info'>" . _("Follow Me List:");
303                                         $followme_text .= "<span>" . sprintf(_("Extensions and outside numbers to ring next.")) ."<br/><br/>";
304                                         $followme_text .= sprintf(_("Include %s to keep it ringing."),"<strong>".$exten."</strong>") . "<br></span></a></td>";
305                                         $followme_text .= "<td><textarea " . $follow_me_list_options . " id='follow_me_list' name='follow_me_list' type='text' cols='20' rows='".$FOLLOW_ME_LIST_MAX."' value='' onKeyUp='rowCounter(this.form.follow_me_list, ".$FOLLOW_ME_LIST_MAX.");' onKeyDown='rowCounter(this.form.follow_me_list, ".$FOLLOW_ME_LIST_MAX.");'>".implode("\n",$follow_me_list)."</textarea>";
306                                         $followme_text .= "</td></tr>";
307                                         
308                                         $followme_text .= "<tr><td>&nbsp;</td></tr>";   // Blank Line                                                                                                                   
309                                         $followme_text .= "<tr><td><a href='#' class='info'>";
310                                         $followme_text .= sprintf(_("Ring %s First For:"), $exten);
311                                         $followme_text .= "<span>" . sprintf( _("Time to ring extension %s before ringing the %s Follow Me List %s"), "<strong>".$exten."</strong>","<strong>","</strong>");
312                                         $followme_text .= "<br></span></a></td><td>";
313                                         
314                                         $followme_text .= "<select " . $follow_me_prering_time_text_box_options . " name='follow_me_prering_time'/>";                           
315                                         $default_prering = $follow_me_prering_time;
316                                         for ($i=$SETTINGS_PRERING_LOW; $i <= $SETTINGS_PRERING_HIGH; $i++) {
317                                                 $followme_text .=  '<option value="'.$i.'" '.($i == $default_prering ? 'SELECTED' : '').'>'.$i.'</option>';
318                                         }
319                                         $followme_text .= "</select>";
320                                 
321                                         $followme_text .= "<small>" . _("seconds") . "</small>";
322                                         $followme_text .= "</td></tr>"; 
323                                         
324                                         $followme_text .= "<tr><td><a href='#' class='info'>" . _("Ring Followme List for:") . "<span>" . _("Time to ring the Follow Me List.") . "<br></span></a></td>";
325                                         $followme_text .= "<td>";
326                                         
327                                         $followme_text .= "<select " . $follow_me_listring_time_text_box_options . " name='follow_me_listring_time'/>";
328                                         $default_listring = $follow_me_listring_time;
329                                         for ($i=$SETTINGS_LISTRING_LOW; $i <= $SETTINGS_LISTRING_HIGH; $i++) {
330                                                 $followme_text .=  '<option value="'.$i.'" '.($i == $default_listring ? 'SELECTED' : '').'>'.$i.'</option>';
331                                         }
332                                         $followme_text .= "</select>";
333                                 
334                                         $followme_text .= "<small>" . _("seconds") . "</small></td></tr>";
335                                         
336                                         
337                                         $followme_text .= "<tr><td>&nbsp;</td></tr>";   // Blank Line   
338                                         
339                                         $followme_text .= "<tr><td><a href='#' class='info'>" . _("Use Confirmation:") . "<span>". _("Outside lines that are part of the Follow Me List will be called and offered a menu:<br/><br/> \"You have an incoming call. Press 1 to accept or 2 to decline.\"<br/><br/> This keeps calls from ending up in external voicemail. Make sure that the List Ring Time is long enough to allow for you to hear and react to this message.");
340                                         $followme_text .= "<br></span></a></td><td>";
341                                         $followme_text .= "<input " . $follow_me_confirm . " type=checkbox name='follow_me_confirm' value='checked'>";
342                                         $followme_text .= "<small>" . _("Enable") . "</small></td></tr>";
343                                         $followme_text .= "<tr><td>&nbsp;</td></tr>";   // Blank Line                                                                           
344                                         $followme_text .= "</table>";
345                                 }
346                         }
347                         
348                 }
349                                 
350                 // build page content
351                 $ret .= checkErrorMessage();
352                 
353                 if ($_SESSION['ari_user']['admin_settings']) {
354                         $headerText = _("Followme Settings");
355                 } else {
356                         $headerText = sprintf(_("Followme Settings for %s (%s)"),$displayname,$exten);
357                 }
358                 
359                 $ret .= $display->displayHeaderText($headerText);
360                 $ret .= $display->displayLine();
361                 
362                 $ret .= 
363                 "\n<SCRIPT LANGUAGE='JavaScript'>
364                 <!-- Begin
365                 function rowCounter(field, maxlimit) {
366                         temp = field.value.split('\u000A',maxlimit+1)
367                         field.value = temp.join('\u000A')
368                         if (temp.length == maxlimit+1) {
369                                 field.value = field.value.substring(0, field.value.length-1)
370                         }
371                 }
372                 // End -->
373                 </script>\n";
374                 
375                 $ret .= 
376                 "<form class='settings' name='ari_settings' action='' method='GET'>
377                 <input type=hidden name=m value=" . $m . ">
378                 <input type=hidden name=f value='action'>
379                 <input type=hidden name=a value='update'>
380                 " . $followme_text . "
381                 <br>
382                 <input name='submit' type='submit' value='" . _("Update") . "'>
383                 </form>";
384                 
385                 return $ret;
386         }
387
388
389   /*
390    * Sets Follow Me Pre-Ring Time
391    *
392    * @param $exten
393    *   Extension to modify
394    * @param $follow_me_prering_time
395    *   Pre-Ring Time to ring
396    */
397   function setFollowMePreRingTime($exten,$follow_me_prering_time) {
398
399         global $asterisk_manager_interface;
400
401         $value_opt = $follow_me_prering_time;
402
403         $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/followme/prering $value_opt\r\n\r\n");
404   }
405
406   /*
407    * Gets Follow Me Pre-Ring Time if set
408    *
409    * @param $exten
410    *   Extension to get information about
411    * @return $number
412    *   follow me pre-ring time returned if set
413    */
414   function getFollowMePreRingTime($exten) {
415
416         global $asterisk_manager_interface;
417
418         $number = '';
419
420         $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/followme/prering\r\n\r\n");
421         if (is_numeric($response)) {
422           $number = $response;
423         }
424
425         $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_follow_me_prering_time']);
426         if ($stripped==$number) {
427           $number = $_COOKIE['ari_follow_me_prering_time'];
428         }
429
430         return $number;
431   }
432
433   /*
434    * Sets Follow Me List Ring Time
435    *
436    * @param $exten
437    *   Extension to modify
438    * @param $follow_me_listring_time
439    *   List Ring Time to ring
440    */
441   function setFollowMeListRingTime($exten,$follow_me_listring_time) {
442
443         global $asterisk_manager_interface;
444
445         $value_opt = $follow_me_listring_time;
446
447         $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/followme/grptime $value_opt\r\n\r\n");
448   }
449
450   /*
451    * Gets Follow Me List-Ring Time if set
452    *
453    * @param $exten
454    *   Extension to get information about
455    * @return $number
456    *   follow me list-ring time returned if set
457    */
458   function getFollowMeListRingTime($exten) {
459
460         global $asterisk_manager_interface;
461
462         $number = '';
463
464         $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/followme/grptime\r\n\r\n");
465         if (is_numeric($response)) {
466           $number = $response;
467         }
468
469         $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_follow_me_listring_time']);
470         if ($stripped==$number) {
471           $number = $_COOKIE['ari_follow_me_listring_time'];
472         }
473
474         return $number;
475   }
476
477   /*
478    * Sets Follow Me List
479    *
480    * @param $exten
481    *   Extension to modify
482    * @param $follow_me_list
483    *   Follow Me List
484    */
485   function setFollowMeList($exten,$follow_me_list) {
486
487         global $asterisk_manager_interface;
488
489         $value_opt = $follow_me_list;
490
491         $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/followme/grplist $value_opt\r\n\r\n");
492   }
493
494   /*
495    * Gets Follow Me List if set
496    *
497    * @param $exten
498    *   Extension to get information about
499    * @return $data
500    *   follow me list if set
501    */
502   function getFollowMeList($exten) {
503
504         global $asterisk_manager_interface;
505
506         $number = '';
507
508         $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/followme/grplist\r\n\r\n");
509
510         //TODO: really need to check for a bogus response, see how other side does it
511         //
512         return preg_replace("/[^0-9*\-]/", "", $response);
513   }
514
515   /*
516    * Sets Follow Confirmation Setting
517    *
518    * @param $exten
519    *   Extension to modify
520    * @param $follow_me_cofirm
521    *   Follow Me Confirm Setting
522    */
523   function setFollowMeConfirm($exten,$follow_me_confirm) {
524
525         global $asterisk_manager_interface;
526
527         $value_opt = ($follow_me_confirm)?'ENABLED':'DISABLED';
528
529         $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/followme/grpconf $value_opt\r\n\r\n");
530   }
531
532   /*
533    * Gets Follow Me Confirmation Setting
534    *
535    * @param $exten
536    *   Extension to get information about
537    * @return $data
538    *   follow me confirm setting
539    */
540   function getFollowMeConfirm($exten) {
541
542         global $asterisk_manager_interface;
543
544         $number = '';
545
546         $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/followme/grpconf\r\n\r\n");
547
548         if (preg_match("/ENABLED/",$response)) {
549                 $response='checked';
550         } 
551         else {
552                 $response='';
553         }
554
555         //TODO: really need to check for a bogus response, see how other side does it
556         //
557         return $response;
558
559   }
560
561   /*
562    * Sets Follow Ddial Setting
563    *
564    * @param $exten
565    *   Extension to modify
566    * @param $follow_me_ddial
567    *   Follow Me Ddial Setting
568    */
569   function setFollowMeDDial($exten,$follow_me_ddial) {
570
571         global $asterisk_manager_interface;
572
573         $value_opt = ($follow_me_ddial)?'DIRECT':'EXTENSION';
574
575         $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/followme/ddial $value_opt\r\n\r\n");
576   }
577
578   /*
579    * Gets Follow Me Ddial Setting
580    *
581    * @param $exten
582    *   Extension to get information about
583    * @return $data
584    *   follow me ddial setting
585    */
586   function getFollowMeDDial($exten) {
587
588         global $asterisk_manager_interface;
589
590         $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/followme/ddial\r\n\r\n");
591
592         if (preg_match("/EXTENSION/",$response)) {
593                 $response='';
594         } 
595         else {
596                 $response='checked';
597         }
598
599         //TODO: really need to check for a bogus response, see how other side does it
600         //
601         return $response;
602
603   }
604
605
606
607
608
609   /*
610    * Gets FreePBX Version
611    */
612   function getFreePBXVersion() {
613
614         if (isset($_SESSION['dbh_asterisk'])) {
615           $sql = "SELECT * FROM admin WHERE variable = 'version'";
616           $results = $_SESSION['dbh_asterisk']->getAll($sql);
617           if(DB::IsError($results)) {
618                 $_SESSION['ari_error'] = $results->getMessage();
619           }
620
621           return $results[0][1];
622         }
623   }
624
625   /*
626    * Sets Follow-Me Settings in FreePBX MySQL Database
627    *
628    * @param $exten
629    *   Extension to modify
630    * @param $follow_me_prering_time
631    *   Pre-Ring Time to ring
632    * @param $follow_me_listring_time
633    *   List Ring Time to ring
634    * @param $follow_me_list
635    *   Follow Me List
636    * @param $follow_me_list
637    *   Follow Me Confirm Setting
638    *
639    */
640   function setFollowMeMySQL($exten, $follow_me_prering_time, $follow_me_listring_time, $follow_me_list, $follow_me_confirm) {
641
642         if (isset($_SESSION['dbh_asterisk'])) {
643
644           //format for SQL database
645           $follow_me_confirm = ($follow_me_confirm)?'CHECKED':'';
646
647           $sql = "UPDATE findmefollow SET grptime = '" . $follow_me_listring_time . "', grplist = '".
648                    str_replace("'", "''", trim($follow_me_list)) . "', pre_ring = '" . $follow_me_prering_time .
649                    "', needsconf = '" . $follow_me_confirm . "' WHERE grpnum = $exten LIMIT 1";
650           $results = $_SESSION['dbh_asterisk']->query($sql);
651
652           if(DB::IsError($results)) {
653                 $_SESSION['ari_error'] = $results->getMessage();
654           }
655
656           return 1;
657         }
658   }
659
660   function lookupSetExtensionFormat($exten) {
661
662         if (trim($exten) == "") return $exten;
663
664         $exten = preg_replace("/[^0-9*]/", "", $exten);
665
666         $sql = "SELECT extension FROM users WHERE extension = '".$exten."'";
667         $asa = $_SESSION['dbh_asterisk']->getrow($sql, DB_FETCHMODE_ASSOC);
668         if (!is_array($asa)) { 
669           return $exten.'#';
670         } else {
671           return $exten;
672         }
673   }
674
675
676 } // class
677
678 ?>