Changeset 3629

Show
Ignore:
Timestamp:
01/24/07 16:09:53 (6 years ago)
Author:
p_lindheimer
Message:

added followme, VmX Locator, CFB, CFU, help on feature codes pulled from database so it is accurate, and I think there is a tweak to help find monitor files for an extension more often

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • freepbx/trunk/amp_conf/htdocs/recordings/includes/main.conf.php

    r1825 r3629  
    224224# 
    225225$ARI_HELP_FEATURE_CODES = array(); 
    226 $ARI_HELP_FEATURE_CODES['*411'] = _("Directory"); 
    227 $ARI_HELP_FEATURE_CODES['*43'] = _("Echo Test"); 
    228 $ARI_HELP_FEATURE_CODES['*60'] = _("Time"); 
    229 $ARI_HELP_FEATURE_CODES['*61'] = _("Weather"); 
    230 $ARI_HELP_FEATURE_CODES['*62'] = _("Schedule wakeup call"); 
    231 $ARI_HELP_FEATURE_CODES['*65'] = _("festival test (your extension is XXX)"); 
    232 $ARI_HELP_FEATURE_CODES['*70'] = _("Activate Call Waiting (deactivated by default)"); 
    233 $ARI_HELP_FEATURE_CODES['*71'] = _("Deactivate Call Waiting"); 
    234 $ARI_HELP_FEATURE_CODES['*72'] = _("Call Forwarding System"); 
    235 $ARI_HELP_FEATURE_CODES['*73'] = _("Disable Call Forwarding"); 
    236 $ARI_HELP_FEATURE_CODES['*77'] = _("IVR Recording"); 
    237 $ARI_HELP_FEATURE_CODES['*78'] = _("Enable Do-Not-Disturb"); 
    238 $ARI_HELP_FEATURE_CODES['*79'] = _("Disable Do-Not-Disturb"); 
    239 $ARI_HELP_FEATURE_CODES['*90'] = _("Call Forward on Busy"); 
    240 $ARI_HELP_FEATURE_CODES['*91'] = _("Disable Call Forward on Busy"); 
    241 $ARI_HELP_FEATURE_CODES['*97'] = _("Message Center (does not ask for extension)"); 
    242 $ARI_HELP_FEATURE_CODES['*98'] = _("Enter Message Center"); 
    243 $ARI_HELP_FEATURE_CODES['*99'] = _("Playback IVR Recording"); 
    244 $ARI_HELP_FEATURE_CODES['666'] = _("Test Fax"); 
    245 $ARI_HELP_FEATURE_CODES['7777'] = _("Simulate incoming call"); 
     226//$ARI_HELP_FEATURE_CODES['*411'] = _("Directory"); 
     227//$ARI_HELP_FEATURE_CODES['*43'] = _("Echo Test"); 
     228//$ARI_HELP_FEATURE_CODES['*60'] = _("Time"); 
     229//$ARI_HELP_FEATURE_CODES['*61'] = _("Weather"); 
     230//$ARI_HELP_FEATURE_CODES['*62'] = _("Schedule wakeup call"); 
     231//$ARI_HELP_FEATURE_CODES['*65'] = _("festival test (your extension is XXX)"); 
     232//$ARI_HELP_FEATURE_CODES['*77'] = _("IVR Recording"); 
     233//$ARI_HELP_FEATURE_CODES['*99'] = _("Playback IVR Recording"); 
     234//$ARI_HELP_FEATURE_CODES['666'] = _("Test Fax"); 
     235//$ARI_HELP_FEATURE_CODES['7777'] = _("Simulate incoming call"); 
     236 
     237$ARI_HELP_FEATURE_CODES['*72'] = _("Call Forward All Activate"); 
     238$ARI_HELP_FEATURE_CODES['*73'] = _("Call Forward All Deactivate"); 
     239$ARI_HELP_FEATURE_CODES['*74'] = _("Call Forward All Prompting Deactivate"); 
     240$ARI_HELP_FEATURE_CODES['*90'] = _("Call Forward Busy Activate"); 
     241$ARI_HELP_FEATURE_CODES['*91'] = _("Call Forward Busy Deactivate"); 
     242$ARI_HELP_FEATURE_CODES['*92'] = _("Call Forward Busy Prompting Deactivate"); 
     243$ARI_HELP_FEATURE_CODES['*52'] = _("Call Forward No Answer/Unavailable Activate"); 
     244$ARI_HELP_FEATURE_CODES['*53'] = _("Call Forward No Answer/Unavailable Deactivate"); 
     245$ARI_HELP_FEATURE_CODES['*70'] = _("Call Waiting - Activate"); 
     246$ARI_HELP_FEATURE_CODES['*71'] = _("Call Waiting - Deactivate"); 
     247$ARI_HELP_FEATURE_CODES['*78'] = _("Do-Not-Disturb Activate"); 
     248$ARI_HELP_FEATURE_CODES['*79'] = _("Do-Not-Disturb Deactivate"); 
     249$ARI_HELP_FEATURE_CODES['*97'] = _("My Voicemail"); 
     250$ARI_HELP_FEATURE_CODES['*98'] = _("Dial Voicemail"); 
    246251 
    247252############################### 
     
    260265$ASTERISK_PROTOCOLS['zap']['config_files'] = "/etc/asterisk/zapata.conf;/etc/asterisk/zapata_additional.conf"; 
    261266 
     267# Settings for Follow-Me Select Boxes in seconds 
     268# 
     269 
     270$SETTINGS_PRERING_LOW = 4; 
     271$SETTINGS_PRERING_HIGH = 30; 
     272$SETTINGS_LISTRING_LOW = 6; 
     273$SETTINGS_LISTRING_HIGH = 60; 
     274 
     275$SETTINGS_FOLLOW_ME_LIST_MAX = 5; 
     276$SETTINGS_ALLOW_VMX_SETTINGS = true; 
    262277# 
    263278# For setting  
     
    265280#           1 - show controls 
    266281# 
     282$SETTINGS_ALLOW_CALLFORWARD_SETTINGS = 1; 
     283$SETTINGS_ALLOW_VOICEMAIL_SETTINGS = 1; 
    267284$SETTINGS_ALLOW_VOICEMAIL_PASSWORD_SET = 1; 
    268285 
     
    304321#           1 - show controls 
    305322# 
    306 $SETTINGS_ALLOW_CALL_RECORDING_SET = 1
     323$SETTINGS_ALLOW_CALL_RECORDING_SET = 0
    307324 
    308325 
  • freepbx/trunk/amp_conf/htdocs/recordings/modules/callmonitor.module

    r1773 r3629  
    587587      // allow entries to be viewed with users extension 
    588588      $searchText .= "(src = '" . $_SESSION['ari_user']['extension'] . "' 
    589                       OR dst = '" . $_SESSION['ari_user']['extension'] . "')"; 
     589                      OR dst = '" . $_SESSION['ari_user']['extension'] . "' 
     590          OR channel LIKE 'SIP/" . $_SESSION['ari_user']['extension'] ."-%' 
     591          OR dstchannel LIKE 'SIP/" . $_SESSION['ari_user']['extension'] ."-%')"; 
    590592 
    591593      // allow entries to be viewed with users outbound CID 
  • freepbx/trunk/amp_conf/htdocs/recordings/modules/help.module

    r1773 r3629  
    8383 
    8484    // handset feature code body 
    85     foreach($ARI_HELP_FEATURE_CODES as $key => $feature_code) { 
     85    if (isset($_SESSION['dbh_asterisk'])) { 
    8686 
    87       $handset_feature_codes_body .=  
    88         "<tr> 
    89            <td class='feature_codes'> 
    90              " . $key . " 
    91            </td> 
    92            <td> 
    93              " . $feature_code . " 
    94            </td> 
    95          </tr>"; 
     87      $sql = " 
     88             SELECT keycode, description 
     89             FROM ( 
     90               SELECT modulename, description, defaultcode keycode 
     91               FROM featurecodes  
     92               WHERE customcode IS NULL  
     93               AND enabled = '1' 
     94               UNION ALL SELECT modulename, description, customcode keycode 
     95               FROM featurecodes 
     96               WHERE customcode IS NOT NULL  
     97               AND enabled = '1' 
     98             )c 
     99             WHERE modulename NOT  
     100             IN ( 'core', 'recordings', 'infoservices', 'polycomreassign') 
     101             ORDER BY modulename, keycode 
     102             "; 
     103 
     104      $results = $_SESSION['dbh_asterisk']->getAll($sql, DB_FETCHMODE_ASSOC); 
     105      if(DB::IsError($results)) { 
     106        $_SESSION['ari_error'] = $results->getMessage(); 
     107      } 
     108      else { 
     109        foreach ($results as $item ) { 
     110 
     111        $handset_feature_codes_body .=  
     112          "<tr> 
     113             <td class='feature_codes'> 
     114               " . $item['keycode'] . " 
     115             </td> 
     116             <td> 
     117               " . $item['description'] . " 
     118             </td> 
     119           </tr>"; 
     120        } 
     121      } 
     122    } 
     123    else { 
     124 
     125      // handset feature code body 
     126      foreach($ARI_HELP_FEATURE_CODES as $key => $feature_code) { 
     127 
     128        $handset_feature_codes_body .=  
     129          "<tr> 
     130             <td class='feature_codes'> 
     131               " . $key . " 
     132             </td> 
     133             <td> 
     134               " . $feature_code . " 
     135             </td> 
     136           </tr>"; 
     137      } 
    96138    } 
    97139 
  • freepbx/trunk/amp_conf/htdocs/recordings/modules/settings.module

    r1773 r3629  
    7878    global $ARI_ADMIN_USERNAME; 
    7979    global $ASTERISK_VOICEMAIL_CONF; 
     80    global $SETTINGS_ALLOW_CALLFORWARD_SETTINGS; 
     81    global $SETTINGS_ALLOW_VOICEMAIL_SETTINGS; 
    8082    global $SETTINGS_ALLOW_VOICEMAIL_PASSWORD_SET; 
    8183    global $SETTINGS_VOICEMAIL_PASSWORD_LENGTH; 
    8284    global $SETTINGS_VOICEMAIL_PASSWORD_EXACT; 
    8385    global $SETTINGS_ALLOW_CALL_RECORDING_SET; 
     86    global $SETTINGS_ALLOW_VMX_SETTINGS; 
    8487 
    8588    // args 
     
    9194    $call_forward_enable  = getArgument($args,'call_forward_enable'); 
    9295    $call_forward_number  = getArgument($args,'call_forward_number'); 
     96 
     97    $call_forward_busy_enable  = getArgument($args,'call_forward_busy_enable'); 
     98    $call_forward_busy_number  = getArgument($args,'call_forward_busy_number'); 
     99 
     100    $call_forward_unavailable_enable  = getArgument($args,'call_forward_unavailable_enable'); 
     101    $call_forward_unavailable_number  = getArgument($args,'call_forward_unavailable_number'); 
     102 
     103    $follow_me_prering_time  = getArgument($args,'follow_me_prering_time'); 
     104    $follow_me_listring_time  = getArgument($args,'follow_me_listring_time'); 
     105    $follow_me_list  = getArgument($args,'follow_me_list'); 
     106    $follow_me_confirm  = getArgument($args,'follow_me_confirm'); 
     107    $follow_me_disabled = getArgument($args,'follow_me_disabled'); 
     108 
     109    $vmx_option_0_number          = getArgument($args, 'vmx_option_0_number'); 
     110    $vmx_option_0_system_default  = getArgument($args, 'vmx_option_0_system_default'); 
     111    $vmx_option_1_number          = getArgument($args, 'vmx_option_1_number'); 
     112    $vmx_option_2_number          = getArgument($args, 'vmx_option_2_number'); 
     113    $vmx_unavail_enabled          = getArgument($args, 'vmx_unavail_enabled'); 
     114    $vmx_busy_enabled             = getArgument($args, 'vmx_busy_enabled'); 
     115    $vmx_play_instructions        = getArgument($args, 'vmx_play_instructions'); 
     116    $vmx_disabled                 = getArgument($args,'vmx_disabled'); 
    93117 
    94118    $voicemail_password = getArgument($args,'voicemail_password'); 
     
    118142 
    119143        // update call forward number 
    120         if (!$STANDALONE['use']) { 
    121  
     144        if ($SETTINGS_ALLOW_CALLFORWARD_SETTINGS && !$STANDALONE['use']) { 
     145 
     146          // normal call forward 
    122147          $stripped_call_forward_number = preg_replace('/-|\(|\)|\s/','',$call_forward_number); 
    123148          if ($call_forward_enable && !is_numeric($stripped_call_forward_number)) { 
     
    137162            } 
    138163          } 
     164 
     165          // call forward busy 
     166          $stripped_call_forward_busy_number = preg_replace('/-|\(|\)|\s/','',$call_forward_busy_number); 
     167          if ($call_forward_busy_enable && !is_numeric($stripped_call_forward_busy_number)) { 
     168            $_SESSION['ari_error'] =  
     169              _("Call forward number not changed") . "<br>" . 
     170              sprintf(_("Number %s must contain dial numbers (characters like '(', '-', and ')' are ok)"),$call_forward_busy_number); 
     171          } 
     172          else { 
     173 
     174            // set database 
     175            $this->setCallForward($exten,$call_forward_busy_enable,$stripped_call_forward_busy_number, "CFB"); 
     176 
     177            // store cookie 
     178            $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_call_forward_busy_number']); 
     179            if ($call_forward_busy_number && $stripped!=$stripped_call_forward_busy_number) { 
     180              setcookie("ari_call_forward_busy_number", $call_forward_busy_number, time()+365*24*60*60); 
     181            } 
     182          } 
     183 
     184          // call forward unavailable 
     185          $stripped_call_forward_unavailable_number = preg_replace('/-|\(|\)|\s/','',$call_forward_unavailable_number); 
     186          if ($call_forward_unavailable_enable && !is_numeric($stripped_call_forward_unavailable_number)) { 
     187            $_SESSION['ari_error'] =  
     188              _("Call forward number not changed") . "<br>" . 
     189              sprintf(_("Number %s must contain dial numbers (characters like '(', '-', and ')' are ok)"),$call_forward_unavailable_number); 
     190          } 
     191          else { 
     192 
     193            // set database 
     194            $this->setCallForward($exten,$call_forward_unavailable_enable,$stripped_call_forward_unavailable_number, "CFU"); 
     195 
     196            // store cookie 
     197            $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_call_forward_unavailable_number']); 
     198            if ($call_forward_unavailable_number && $stripped!=$stripped_call_forward_unavailable_number) { 
     199              setcookie("ari_call_forward_unavailable_number", $call_forward_unavailable_number, time()+365*24*60*60); 
     200            } 
     201          } 
     202 
    139203        } 
    140204 
     205        // Make sure Follow-Me setup has not been deleted for this user since the last refresh 
     206        $follow_me_disabled_delayed = $_COOKIE['ari_follow_me_disabled']; 
     207 
     208        if (! $_COOKIE['ari_follow_me_disabled']) { 
     209 
     210          $follow_me_disabled = ($this->getFollowMeListRingTime($exten) > 0)?0:1; 
     211 
     212          if ($follow_me_disabled) { 
     213 
     214            setcookie("ari_follow_me_disabled", $follow_me_disabled, time()+365*24*60*60); 
     215            $follow_me_disabled_delayed = $follow_me_disabled; 
     216            $_SESSION['ari_error'] =  
     217              _("Your Follow-Me has been disabled, REFRESH your browser to remove this message") . "<br>" . 
     218              sprintf(_("Check with your Telephone System Administrator if you think there is a problem")); 
     219          } 
     220        } 
     221 
     222        $vmx_disabled_delayed = $_COOKIE['ari_vmx_disabled']; 
     223        if (! $_COOKIE['ari_vmx_disabled']) { 
     224 
     225          $vmx_disabled = $this->getVmxState($exten,'unavail'); 
     226          if ($vmx_disabled === false) { 
     227            $vmx_disabled = true; 
     228            $SETTINGS_ALLOW_VMX_SETTINGS=false; 
     229          } else { 
     230            $vmx_disabled = false; 
     231          } 
     232          if ($vmx_disabled) { 
     233 
     234            setcookie("ari_vmx_disabled", $vmx_disabled, time()+365*24*60*60); 
     235            $vmx_disabled_delayed = $vmx_disabled; 
     236            $_SESSION['ari_error'] =  
     237              _("Your Premium VmX Locator service has been disabled, REFRESH your browser to remove this message") . "<br>" . 
     238              sprintf(_("Check with your Telephone System Administrator if you think there is a problem")); 
     239          } 
     240        } 
     241 
     242        if (! $vmx_disabled_delayed) { 
     243          if (!$STANDALONE['use']) { 
     244   
     245            // set database 
     246            $this->setVmxState($exten,'unavail',$vmx_unavail_enabled); 
     247            $this->setVmxState($exten,'busy',$vmx_busy_enabled); 
     248            $this->setVmxPlayInstructions($exten,'unavail',$vmx_play_instructions); 
     249            $this->setVmxPlayInstructions($exten,'busy',$vmx_play_instructions); 
     250   
     251            // store cookie 
     252            setcookie("ari_vmx_unavail_enabled", $vmx_unavail_enabled, time()+365*24*60*60); 
     253            setcookie("ari_vmx_busy_enabled", $vmx_busy_enabled, time()+365*24*60*60); 
     254            setcookie("ari_vmx_play_instructions", $vmx_play_instructions, time()+365*24*60*60); 
     255 
     256            $stripped_vmx_option_0_number = preg_replace('/-|\(|\)|\s/','',$vmx_option_0_number); 
     257            if ($vmx_option_0_system_default) { 
     258              $this->setVmxOptionNumber($exten,'0','unavail',""); 
     259              $this->setVmxOptionNumber($exten,'0','busy',""); 
     260              setcookie("ari_vmx_option_0_system_default", $vmx_option_0_system_default, time()+365*24*60*60); 
     261              if (is_numeric($stripped_vmx_option_0_number) || !$stripped_vmx_option_0_number) { 
     262                $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_vmx_option_0_number']); 
     263                if ($vmx_option_0_number && $stripped!=$stripped_vmx_option_0_number) { 
     264                  setcookie("ari_vmx_option_0_number", $call_vmx_option_0_number, time()+365*24*60*60); 
     265                } 
     266              } 
     267            } else { 
     268              if (!is_numeric($stripped_vmx_option_0_number) && $stripped_vmx_option_0_number) { 
     269                $_SESSION['ari_error'] =  
     270                  _("Option 0 not changed") . "<br>" . 
     271                  sprintf(_("Number %s must contain dial numbers (characters like '(', '-', and ')' are ok)"),$vmx_option_0_number); 
     272              } 
     273              else { 
     274 
     275                // set database 
     276                $this->setVmxOptionNumber($exten,'0','unavail',$stripped_vmx_option_0_number); 
     277                $this->setVmxOptionNumber($exten,'0','busy',$stripped_vmx_option_0_number); 
     278 
     279                // store cookie 
     280                $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_vmx_option_0_number']); 
     281                if ($vmx_option_0_number && $stripped!=$stripped_vmx_option_0_number) { 
     282                  setcookie("ari_vmx_option_0_number", $call_vmx_option_0_number, time()+365*24*60*60); 
     283                } 
     284              } 
     285            } 
     286 
     287            $stripped_vmx_option_1_number = preg_replace('/-|\(|\)|\s/','',$vmx_option_1_number); 
     288            if (!is_numeric($stripped_vmx_option_1_number) && $stripped_vmx_option_1_number) { 
     289              $_SESSION['ari_error'] =  
     290                _("Option 1 not changed") . "<br>" . 
     291                sprintf(_("Number %s must contain dial numbers (characters like '(', '-', and ')' are ok)"),$vmx_option_1_number); 
     292            } 
     293            else { 
     294 
     295              // set database 
     296              $this->setVmxOptionNumber($exten,'1','unavail',$stripped_vmx_option_1_number); 
     297              $this->setVmxOptionNumber($exten,'1','busy',$stripped_vmx_option_1_number); 
     298   
     299              // store cookie 
     300              $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_vmx_option_1_number']); 
     301              if ($vmx_option_1_number && $stripped!=$stripped_vmx_option_1_number) { 
     302                setcookie("ari_vmx_option_1_number", $call_vmx_option_1_number, time()+365*24*60*60); 
     303              } 
     304            } 
     305 
     306            $stripped_vmx_option_2_number = preg_replace('/-|\(|\)|\s/','',$vmx_option_2_number); 
     307            if (!is_numeric($stripped_vmx_option_2_number) && $stripped_vmx_option_2_number) { 
     308              $_SESSION['ari_error'] =  
     309                _("Option 2 not changed") . "<br>" . 
     310                sprintf(_("Number %s must contain dial numbers (characters like '(', '-', and ')' are ok)"),$vmx_option_2_number); 
     311            } 
     312            else { 
     313 
     314              // set database 
     315              $this->setVmxOptionNumber($exten,'2','unavail',$stripped_vmx_option_2_number); 
     316              $this->setVmxOptionNumber($exten,'2','busy',$stripped_vmx_option_2_number); 
     317 
     318              // store cookie 
     319              $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_vmx_option_2_number']); 
     320              if ($vmx_option_2_number && $stripped!=$stripped_vmx_option_2_number) { 
     321                setcookie("ari_vmx_option_2_number", $call_vmx_option_2_number, time()+365*24*60*60); 
     322              } 
     323            } 
     324          } 
     325        } // vmx_disabled_delayed false 
     326 
     327        if (! $follow_me_disabled_delayed) { 
     328 
     329          // assume no errors, don't update SQL if errors occured 
     330          $follow_me_update_succeeded=1; 
     331   
     332          // update follow me pre-ring time 
     333          if (!$STANDALONE['use']) { 
     334   
     335            $stripped_follow_me_prering_time = preg_replace('/-|\s/','',$follow_me_prering_time); 
     336            if (!is_numeric($stripped_follow_me_prering_time)) { 
     337              $_SESSION['ari_error'] =  
     338                _("Follow-Me pre-ring time not changed") . "<br>" . 
     339                sprintf(_("Number %s must be an interger number of seconds"),$follow_me_prering_time); 
     340              $follow_me_update_succeeded=0; 
     341            } 
     342            else { 
     343   
     344              // set database 
     345              $this->setFollowMePreRingTime($exten,$stripped_follow_me_prering_time); 
     346   
     347              // store cookie 
     348              $stripped = preg_replace('/-|\s/','',$_COOKIE['ari_follow_me_prering_time']); 
     349              if ($follow_me_prering_time && $stripped!=$stripped_follow_me_prering_time) { 
     350                setcookie("ari_follow_me_prering_time", $follow_me_prering_time, time()+365*24*60*60); 
     351              } 
     352            } 
     353          } 
     354   
     355          // update follow me list ring time 
     356          if (!$STANDALONE['use']) { 
     357   
     358            $stripped_follow_me_listring_time = preg_replace('/-|\s/','',$follow_me_listring_time); 
     359            if (!is_numeric($stripped_follow_me_listring_time)) { 
     360              $_SESSION['ari_error'] =  
     361                _("Follow-Me list ring time not changed") . "<br>" . 
     362                sprintf(_("Number %s must be an interger number of seconds"),$follow_me_listring_time); 
     363              $follow_me_update_succeeded=0; 
     364            } 
     365            else { 
     366   
     367              // set database 
     368              $this->setFollowMeListRingTime($exten,$stripped_follow_me_listring_time); 
     369   
     370              // store cookie 
     371              $stripped = preg_replace('/-|\s/','',$_COOKIE['ari_follow_me_listring_time']); 
     372              if ($follow_me_listring_time && $stripped!=$stripped_follow_me_listring_time) { 
     373                setcookie("ari_follow_me_listring_time", $follow_me_listring_time, time()+365*24*60*60); 
     374              } 
     375            } 
     376          } 
     377   
     378          // update follow me list  
     379          if (!$STANDALONE['use']) { 
     380   
     381            $grplist = explode("\n", $follow_me_list); 
     382   
     383            if (!$grplist) { 
     384                    $grplist = null; 
     385            } 
     386   
     387            foreach (array_keys($grplist) as $key) { 
     388              //trim it 
     389              $grplist[$key] = trim($grplist[$key]); 
     390   
     391              // Lookup the extension and append hash if not a user, and remove invalid chars 
     392              $grplist[$key] = $this->lookupSetExtensionFormat($grplist[$key]); 
     393   
     394              // remove blanks 
     395              if ($grplist[$key] == "") unset($grplist[$key]); 
     396            } 
     397   
     398            // check for duplicates, and re-sequence 
     399            $grplist = array_values(array_unique($grplist)); 
     400 
     401            $stripped_follow_me_list = implode("-",$grplist); 
     402   
     403            if ($stripped_follow_me_list == "") { 
     404              $_SESSION['ari_error'] =  
     405                _("Follow-Me list must contain at least one valid number") . "<br>" . 
     406                sprintf(_("The following: %s is not valid"),$follow_me_list); 
     407              $follow_me_update_succeeded=0; 
     408            } 
     409            else { 
     410   
     411              // set database 
     412              $this->setFollowMeList($exten,$stripped_follow_me_list); 
     413   
     414              // store cookie 
     415              $stripped = preg_replace('/|\(|\)|\s/','',$_COOKIE['ari_follow_me_list']); 
     416              if ($follow_me_list && $stripped!=$stripped_follow_me_list) { 
     417                setcookie("ari_follow_me_list", $follow_me_list, time()+365*24*60*60); 
     418              } 
     419            } 
     420          } 
     421   
     422          // update follow me confirm 
     423          if (!$STANDALONE['use']) { 
     424   
     425            // set database 
     426            $this->setFollowMeConfirm($exten,$follow_me_confirm); 
     427   
     428            // store cookie 
     429            setcookie("ari_follow_me_confirm", $follow_me_confirm, time()+365*24*60*60); 
     430          } 
     431   
     432          //If no errors than update the SQL table to keep in sync 
     433          if ($follow_me_update_succeeded) { 
     434            $this->setFollowMeMySQL($exten, $follow_me_prering_time, $follow_me_listring_time, $follow_me_list, $follow_me_confirm); 
     435          } 
     436 
     437        } //if !follow_me_disabled 
     438 
    141439        // voicemail settings 
    142         if ($_SESSION['ari_user']['voicemail_enabled']==1) { 
     440        if ($SETTINGS_ALLOW_VOICEMAIL_SETTINGS && $_SESSION['ari_user']['voicemail_enabled']==1) { 
    143441 
    144442 
     
    356654    global $STANDALONE; 
    357655    global $ARI_ADMIN_USERNAME; 
     656    global $SETTINGS_ALLOW_CALLFORWARD_SETTINGS; 
     657    global $SETTINGS_ALLOW_VOICEMAIL_SETTINGS; 
    358658    global $SETTINGS_ALLOW_VOICEMAIL_PASSWORD_SET; 
    359659    global $SETTINGS_VOICEMAIL_PASSWORD_LENGTH; 
     
    361661    global $ARI_VOICEMAIL_AUDIO_FORMAT_DEFAULT; 
    362662    global $SETTINGS_ALLOW_CALL_RECORDING_SET; 
     663    global $SETTINGS_PRERING_LOW; 
     664    global $SETTINGS_PRERING_HIGH; 
     665    global $SETTINGS_LISTRING_LOW; 
     666    global $SETTINGS_LISTRING_HIGH; 
     667 
     668    global $SETTINGS_FOLLOW_ME_LIST_MAX; 
     669    global $SETTINGS_ALLOW_VMX_SETTINGS; 
    363670 
    364671    global $loaded_modules; 
     
    394701      if (!$STANDALONE['use']) { 
    395702 
     703 
    396704        $call_forward_number = $this->getCallForwardNumber($exten); 
    397705        if ($call_forward_number) {  
     
    403711        } 
    404712 
    405         $set_call_forward_text = " 
    406           <table class='settings'> 
     713        $call_forward_busy_number = $this->getCallForwardNumber($exten, 'CFB'); 
     714        if ($call_forward_busy_number) {  
     715          $call_forward_busy_enable = 'checked'; 
     716        } 
     717        else { 
     718          $call_forward_busy_number = $_COOKIE['ari_call_forward_busy_number']; 
     719          $call_forward_busy_text_box_options = "disabled style='background: #DDD;'"; 
     720        } 
     721 
     722        $call_forward_unavailable_number = $this->getCallForwardNumber($exten, 'CFU'); 
     723        if ($call_forward_unavailable_number) {  
     724          $call_forward_unavailable_enable = 'checked'; 
     725        } 
     726        else { 
     727          $call_forward_unavailable_number = $_COOKIE['ari_call_forward_unavailable_number']; 
     728          $call_forward_unavailable_text_box_options = "disabled style='background: #DDD;'"; 
     729        } 
     730 
     731        $follow_me_prering_time = $this->getFollowMePreRingTime($exten); 
     732        $follow_me_listring_time = $this->getFollowMeListRingTime($exten); 
     733        $follow_me_list =  explode("-", $this->getFollowMeList($exten) ); 
     734        $follow_me_confirm = $this->getFollowMeConfirm($exten); 
     735 
     736        $FOLLOW_ME_LIST_MAX = (count($follow_me_list) > $SETTINGS_FOLLOW_ME_LIST_MAX) ? count($follow_me_list):$SETTINGS_FOLLOW_ME_LIST_MAX; 
     737 
     738        //TODO: Set this better than this? 
     739        $follow_me_disabled = ($follow_me_listring_time > 0)?0:1; 
     740        setcookie("ari_follow_me_disabled", $follow_me_disabled, time()+365*24*60*60); 
     741 
     742        $set_call_forward_text = "<table class='settings'>"; 
     743 
     744        $set_call_forward_text .= (!$SETTINGS_ALLOW_CALLFORWARD_SETTINGS)?'':" 
     745    <table class='settings'> 
    407746      <tr> 
    408               <td><h3>" . _("Call Routing") . "</h3></td> 
     747       <td><h3>" . _("Call Forwarding") . "</h3></td> 
    409748      </tr> 
    410749      <tr> 
    411               <td>" . _("Call Forwarding:") . "</td> 
    412               <td> 
    413                 <input " . $call_forward_text_box_options . " name='call_forward_number' type='text' size=24 value='" . $call_forward_number . "'> 
    414               </td> 
    415       <tr> 
    416               <td></td> 
    417               <td> 
    418                 <input " . $call_forward_enable . " type=checkbox name='call_forward_enable' value='checked' OnClick=\"disable_fields(); return true;\"> 
    419                 <small>" . _("Enable") . "</small> 
    420               </td> 
    421       </tr> 
    422           </table>"; 
    423       } 
    424  
    425       // voicemail settings 
    426       if ($_SESSION['ari_user']['voicemail_enabled']==1 &&  
    427             in_array('voicemail',array_keys($loaded_modules))) { 
    428         if ($SETTINGS_ALLOW_VOICEMAIL_PASSWORD_SET) { 
    429  
    430           if ($SETTINGS_VOICEMAIL_PASSWORD_EXACT) { 
    431             $voicemail_password_length_message = sprintf(_("Passwords must be all numbers and only %s digits"),$SETTINGS_VOICEMAIL_PASSWORD_LENGTH); 
    432           } 
    433           else { 
    434             $voicemail_password_length_message = sprintf(_("Passwords must be all numbers and at least %s digits"),$SETTINGS_VOICEMAIL_PASSWORD_LENGTH); 
    435           } 
    436  
    437           $set_voicemail_password_text = " 
    438       <tr> 
    439               <td>" . _("Voicemail Password:") . "</td> 
    440               <td> 
    441                 <input name='voicemail_password' type='password' size=16 value=" . $_SESSION['ari_user']['voicemail_password'] . "> 
    442               </td> 
     750        <td>" . _("Unconditional:") . "</td> 
     751        <td> 
     752          <input " . $call_forward_text_box_options . " name='call_forward_number' type='text' size=24 value='" . $call_forward_number . "'> 
     753        </td> 
     754        <td> 
     755          <input " . $call_forward_enable . " type=checkbox name='call_forward_enable' value='checked' OnClick=\"disable_fields(); return true;\"> 
     756          <small>" . _("Enable") . "</small> 
     757        </td> 
    443758      </tr> 
    444759      <tr> 
    445               <td>" . _("Enter again to confirm:") . "</td> 
    446               <td> 
    447                 <input name='voicemail_password_confirm' type='password' size=16 value=" . $_SESSION['ari_user']['voicemail_password'] . "> 
    448               </td> 
     760        <td>" . _("Unavailable:") . "</td> 
     761        <td> 
     762          <input " . $call_forward_unavailable_text_box_options . " name='call_forward_unavailable_number' type='text' size=24 value='" . $call_forward_unavailable_number . "'> 
     763        </td> 
     764        <td> 
     765          <input " . $call_forward_unavailable_enable . " type=checkbox name='call_forward_unavailable_enable' value='checked' OnClick=\"disable_fields(); return true;\"> 
     766          <small>" . _("Enable") . "</small> 
     767        </td> 
    449768      </tr> 
    450769      <tr> 
    451              <td class='note' colspan=2><small>" . $voicemail_password_length_message . "</small></td> 
    452       </tr>"; 
    453         } 
    454  
    455         if (isset($_SESSION['ari_user']['voicemail_email'])) { 
    456  
    457           if ($_SESSION['ari_user']['voicemail_email_enable']) {  
    458             $voicemail_email_address = $_SESSION['ari_user']['voicemail_email_address']; 
    459             $voicemail_pager_address = $_SESSION['ari_user']['voicemail_pager_address']; 
    460             $voicemail_email_enable = 'checked'; 
    461  
    462             foreach (array_keys($_SESSION['ari_user']['voicemail_email']) as $key) { 
    463               $var = "voicemail_email_$key"; 
    464               $var_enable = $var . "enable"; 
    465               if ($_SESSION['ari_user']['voicemail_email'][$key]=='yes') { 
    466                 $$var_enable = 'checked'; 
    467               } 
    468             } 
    469           } 
    470           else { 
    471  
    472             $voicemail_email_address = $_COOKIE['ari_voicemail_email_address']; 
    473             $voicemail_email_text_box_options = "disabled style='background: #DDD;'"; 
    474             $voicemail_pager_address = $_COOKIE['ari_voicemail_pager_address']; 
    475             $voicemail_pager_text_box_options = "disabled style='background: #DDD;'"; 
    476  
    477             foreach ($_SESSION['ari_user']['voicemail_email'] as $key => $value) { 
    478               $var = "voicemail_email_$key"; 
    479               $var_cookie = "ari_" . $var; 
    480               $var_enable = $var . "enable"; 
    481               $var_text_box_options = $var . "text_box_options"; 
    482  
    483               $$var_text_box_options = "disabled"; 
    484               if ($_COOKIE[$var_cookie]=='yes') { 
    485                 $$var_enable = 'checked'; 
    486               } 
    487             } 
    488           } 
    489  
    490           $set_voicemail_email_text = " 
     770        <td>" . _("Busy:") . "</td> 
     771        <td> 
     772          <input " . $call_forward_busy_text_box_options . " name='call_forward_busy_number' type='text' size=24 value='" . $call_forward_busy_number . "'> 
     773        </td> 
     774        <td> 
     775          <input " . $call_forward_busy_enable . " type=checkbox name='call_forward_busy_enable' value='checked' OnClick=\"disable_fields(); return true;\"> 
     776          <small>" . _("Enable") . "</small> 
     777        </td> 
     778      </tr> 
     779 
     780        "; 
     781 
     782        $set_call_forward_text .= ($follow_me_disabled)?'':" 
    491783      <tr> 
    492               <td>" . _("Email Voicemail To:") . "</td> 
    493               <td> 
    494                 <input " . $voicemail_email_text_box_options . " name='voicemail_email_address' type='text' size=48 value='" . $voicemail_email_address . "'> 
    495               </td> 
     784        <td><h3><br>" . _("Follow Me") . "</h3></td> 
    496785      </tr> 
    497786      <tr> 
    498               <td>" . _("Pager Voicemail To:") . "</td> 
    499               <td> 
    500                 <input " . $voicemail_pager_text_box_options . " name='voicemail_pager_address' type='text' size=48 value='" . $voicemail_pager_address . "'> 
    501               </td> 
    502       </tr> 
    503             <tr> 
    504               <td></td> 
    505               <td> 
    506                 <input " . $voicemail_email_enable . " type=checkbox name='voicemail_email_enable' value='1' OnClick=\"disable_fields(); return true;\"> 
    507                 <small>" . _("Enable") . "</small> 
    508               </td> 
    509            </tr>"; 
    510  
    511           foreach ($_SESSION['ari_user']['voicemail_email'] as $key => $value) { 
    512  
    513             $var = "voicemail_email_$key"; 
    514             $var_enable = $var . "enable"; 
    515             $var_text_box_options = $var . "text_box_options"; 
    516             if ($SETTINGS_VOICEMAIL_EMAIL_OPTION_DESCRIPTIONS[$key]) { 
    517               $var_text = $SETTINGS_VOICEMAIL_EMAIL_OPTION_DESCRIPTIONS[$key]; 
    518             } 
    519             else { 
    520               $var_text = $key; 
    521             } 
    522  
    523             if ($value != 'yes' && $value != 'no' && $value !='') { 
    524  
    525               $size = strlen($value) - 1; 
    526               $set_voicemail_email_text .= " 
    527                 <tr> 
    528                   <td></td> 
    529                   <td> 
    530                     <input type=text size='" . $size . "' name='" . $var . "' value='" . $value . "' OnClick=\"disable_fields(); return true;\"> 
    531                     <small>" . $var_text . "</small> 
    532                   </td> 
    533                 </tr>"; 
    534             }  
    535             else { 
    536  
    537               $set_voicemail_email_text .= " 
    538                 <tr> 
    539                   <td></td> 
    540                   <td> 
    541                     <input " . $$var_enable . " " . $$var_text_box_options . " type=checkbox name='" . $var . "' value='yes' OnClick=\"disable_fields(); return true;\"> 
    542                     <small>" . $var_text . "</small> 
    543                   </td> 
    544                 </tr>"; 
    545             } 
    546           } 
    547         } 
    548   
    549         $wav_enable = 'selected'; 
    550         if ($_COOKIE['ari_voicemail_audio_format']=='.gsm'||  
    551               ($_COOKIE['ari_voicemail_audio_format']=='' && $ARI_VOICEMAIL_AUDIO_FORMAT_DEFAULT='.gsm')) { 
    552           $wav_enable = ''; 
    553           $gsm_enable = 'selected'; 
    554         }  
    555  
    556         $set_voicemail_audio_format_text = " 
    557     <tr> 
    558             <td>" . _("Audio Format:") . "</td> 
    559             <td> 
    560               <select name='voicemail_audio_format'> 
    561                 <option value='.wav' " . $wav_enable .  ">" . _("Best Quality") . " (.wav)</option> 
    562                 <option value='.gsm' " . $gsm_enable .  ">" . _("Smallest Download") . " (.gsm)</option> 
    563               </select> 
    564             </td> 
    565           </tr>"; 
    566  
    567         $set_voicemail_text = " 
    568           <table class='settings'> 
    569             <tr> 
    570               <td><h3>" . _("Voicemail Settings") . "</h3></td> 
    571       </tr> 
    572             " . $set_voicemail_password_text . " 
    573             " . $set_voicemail_email_text . " 
    574             " . $set_voicemail_audio_format_text . " 
    575           </table>"; 
    576       } 
    577  
    578       // call monitor settings 
    579       if ($this->getFreePBXVersion() && 
    580             $SETTINGS_ALLOW_CALL_RECORDING_SET &&  
    581             in_array('callmonitor',array_keys($loaded_modules))) { 
    582  
    583         foreach($data as $key=>$value) { 
    584           if ($key=='record_in') { 
    585             if ($value=='Always') { 
    586               $ri_always = 'checked=checked'; 
    587             } 
    588             elseif ($value=='Never') { 
    589               $ri_never = 'checked=checked'; 
    590             } 
    591             elseif ($value=='Adhoc') { 
    592               $ri_on_demand = 'checked=checked'; 
    593             } 
    594           } 
    595           if ($key=='record_out') { 
    596             if ($value=='Always') { 
    597               $ro_always = 'checked=checked'; 
    598             } 
    599             elseif ($value=='Never') { 
    600               $ro_never = 'checked=checked'; 
    601             } 
    602             elseif ($value=='Adhoc') { 
    603               $ro_on_demand = 'checked=checked'; 
    604             } 
    605           } 
    606         } 
    607  
    608         $set_callmonitor_text = " 
    609           <table class='settings'> 
     787        <td>" . _("Initial Ring Time:") . "</td> 
     788        <td> 
     789          <select " . $follow_me_prering_time_text_box_options . " name='follow_me_prering_time'/>"; 
     790  if (!$follow_me_disabled) { 
     791    $default_prering = $follow_me_prering_time; 
     792    for ($i=$SETTINGS_PRERING_LOW; $i <= $SETTINGS_PRERING_HIGH; $i++) { 
     793      $set_call_forward_text .=  '<option value="'.$i.'" '.($i == $default_prering ? 'SELECTED' : '').'>'.$i.'</option>'; 
     794    } 
     795  } 
     796        $set_call_forward_text .= ($follow_me_disabled)?'':" 
     797          </select> 
     798          <small>" . _("seconds") . "</small> 
     799        </td> 
    610800      <tr> 
    611               <td><h3>" . _("Call Monitor Settings") . "</h3></td> 
     801        <td valign='top'>" . _("Follow Me List:") . "</td> 
     802        <td> 
     803          <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> 
     804        </td> 
     805      <tr> 
     806        <td>" . _("List Ring Time:") . "</td> 
     807        <td> 
     808          <select " . $follow_me_listring_time_text_box_options . " name='follow_me_listring_time'/>"; 
     809  if (!$follow_me_disabled) { 
     810    $default_listring = $follow_me_listring_time; 
     811    for ($i=$SETTINGS_LISTRING_LOW; $i <= $SETTINGS_LISTRING_HIGH; $i++) { 
     812      $set_call_forward_text .=  '<option value="'.$i.'" '.($i == $default_listring ? 'SELECTED' : '').'>'.$i.'</option>'; 
     813    } 
     814  } 
     815        $set_call_forward_text .= ($follow_me_disabled)?'':" 
     816          </select> 
     817          <small>" . _("seconds") . "</small> 
     818        </td> 
     819      <tr> 
     820        <td>" . _("Use Confirmation:") . "</td> 
     821        <td> 
     822          <input " . $follow_me_confirm . " type=checkbox name='follow_me_confirm' value='checked'> 
     823          <small>" . _("Enable") . "</small> 
     824        </td> 
     825        "; 
     826 
     827        $set_call_forward_text .= " 
     828      </tr> 
     829      </tr> 
     830    </table> 
     831        "; 
     832 
     833        $vmx_unavail_enabled=$this->getVmxState($exten,'unavail'); 
     834        if ($vmx_unavail_enabled === false) { 
     835          $vmx_disabled = true; 
     836          setcookie("ari_vmx_disabled", $vmx_disabled, time()+365*24*60*60); 
     837          $SETTINGS_ALLOW_VMX_SETTINGS=false; 
     838        } else { 
     839          $vmx_disabled = false; 
     840          setcookie("ari_vmx_disabled", false, time()+365*24*60*60); 
     841          $vmx_busy_enabled=$this->getVmxState($exten,'busy'); 
     842          $vmx_play_instructions=$this->getVmxPlayInstructions($exten); 
     843          $vmx_option_0_number=$this->getVmxOptionNumber($exten,'0');; 
     844          $vmx_option_1_number=$this->getVmxOptionNumber($exten,'1');; 
     845          $vmx_option_2_number=$this->getVmxOptionNumber($exten,'2');; 
     846 
     847          if (is_numeric($vmx_option_0_number)) { 
     848            $vmx_option_0_system_default=''; 
     849            $vmx_option_0_number_text_box_options=''; 
     850          } else { 
     851            $vmx_option_0_system_default='checked'; 
     852            $vmx_option_0_number_text_box_options="disabled style='background: #DDD;'"; 
     853          } 
     854        } 
     855 
     856        $set_vmx_text .= (!$SETTINGS_ALLOW_VMX_SETTINGS)?'':" 
     857    <table class='settings'> 
     858      <tr> 
     859        <td><h3>" . _("Voicemail VmX Locator") . "</h3></td> 
    612860      </tr> 
    613861      <tr> 
    614               <td>" . _("Record INCOMING:") . " </td> 
    615               <td> 
    616                 <input type='radio' name='record_in' value='Always' " . $ri_always . "/> " . _("Always") . "  
    617                 <input type='radio' name='record_in' value='Never' " . $ri_never . "/> " . _("Never") . "        
    618                 <input type='radio' name='record_in' value='Adhoc' " . $ri_on_demand . "/> " . _("On-Demand") . " 
    619               </td> 
    620             </tr> 
    621             <tr> 
    622               <td>" . _("Record OUTGOING:") . " </td> 
    623               <td> 
    624                 <input type='radio' name='record_out' value='Always' " . $ro_always . "/> " . _("Always") . " 
    625                 <input type='radio' name='record_out' value='Never' " . $ro_never . "/> " . _("Never") . "         
    626                 <input type='radio' name='record_out' value='Adhoc' " . $ro_on_demand . "/> " . _("On-Demand") . " 
    627               </td> 
    628             </tr> 
    629           </table>"; 
    630       } 
    631     } 
    632  
    633     // javascript enable options 
    634     if (isset($_SESSION['ari_user']['voicemail_email']) && 
    635           in_array('voicemail',array_keys($loaded_modules))) { 
    636       foreach ($_SESSION['ari_user']['voicemail_email'] as $key => $value) { 
    637         $var = "voicemail_email_$key"; 
    638         $js_voicemail_email_disable .= " 
    639           document.ari_settings.$var.disabled = false;"; 
    640         $js_voicemail_email_enable .= " 
    641           document.ari_settings.$var.disabled = true;"; 
    642       } 
    643  
    644       $js_voicemail_script = " 
    645           if (document.ari_settings.voicemail_email_enable.checked) { 
    646             document.ari_settings.voicemail_email_address.style.backgroundColor = '#FFF'; 
    647             document.ari_settings.voicemail_email_address.disabled = false; 
    648             document.ari_settings.voicemail_email_address.value='" . $voicemail_email_address . "'; 
    649             document.ari_settings.voicemail_pager_address.style.backgroundColor = '#FFF'; 
    650             document.ari_settings.voicemail_pager_address.disabled = false; 
    651             document.ari_settings.voicemail_pager_address.value='" . $voicemail_pager_address . "'; 
    652             " . $js_voicemail_email_disable . " 
    653           } 
    654           else { 
    655             document.ari_settings.voicemail_email_address.style.backgroundColor = '#DDD'; 
    656             document.ari_settings.voicemail_email_address.disabled = true; 
    657             document.ari_settings.voicemail_pager_address.style.backgroundColor = '#DDD'; 
    658             document.ari_settings.voicemail_pager_address.disabled = true; 
    659             " . $js_voicemail_email_enable . " 
    660           }"; 
    661     } 
    662  
    663     // build page content 
    664     $ret .= checkErrorMessage(); 
    665  
    666     if ($_SESSION['ari_user']['admin_settings']) { 
    667       $headerText = _("Settings"); 
    668     } else { 
    669       $headerText = sprintf(_("Settings for %s (%s)"),$displayname,$exten); 
    670     } 
    671  
    672     $ret .= $display->displayHeaderText($headerText); 
    673     $ret .= $display->displayLine(); 
    674  
    675     $ret .= " 
    676       <SCRIPT LANGUAGE='JavaScript'> 
    677       <!-- Begin 
    678         function disable_fields() { 
    679           if (document.ari_settings.call_forward_enable.checked) { 
    680             document.ari_settings.call_forward_number.style.backgroundColor = '#FFF'; 
    681             document.ari_settings.call_forward_number.disabled = false; 
    682           } 
    683           else { 
    684             document.ari_settings.call_forward_number.style.backgroundColor = '#DDD'; 
    685             document.ari_settings.call_forward_number.disabled = true; 
    686           } 
     862        <td>" . _("Enabled Modes:") . "</td> 
     863        <td> 
     864          <input " . $vmx_unavail_enabled . " type=checkbox name='vmx_unavail_enabled' value='checked'> 
     865          <small>" . _("unavailable") . "</small> 
     866        </td> 
     867        <td> 
     868          <input " . $vmx_busy_enabled . " type=checkbox name='vmx_busy_enabled' value='checked'> 
     869          <small>" . _("busy") . "</small> 
     870        </td> 
     871      </tr> 
     872      <tr> 
     873        <td>" . _("Voicemail Instructions:") . "</td> 
     874        <td> 
     875          <input " . $vmx_play_instructions . " type=checkbox name='vmx_play_instructions' value='checked'> 
     876          <small>" . _("play instructions to caller") . "</small> 
     877        </td> 
     878      </tr> 
     879    </table> 
     880    <table class='settings'> 
     881      <tr> 
     882        <td>" . _("Option 0:") . "</td> 
     883        <td> 
     884          <input " . $vmx_option_0_number_text_box_options . " name='vmx_option_0_number' type='text' size=24 value='" . $vmx_option_0_number . "'> 
     885        </td> 
     886        <td> 
     887            <input " . $vmx_option_0_system_default . " type=checkbox name='vmx_option_0_system_default' value='checked' OnClick=\"disable_fields(); return true;\"> 
     888            <small>" . _("Use System Default") . "</small> 
     889          </td> 
     890        </tr> 
     891        <tr> 
     892          <td>" . _("Option 1:") . "</td> 
     893          <td> 
     894            <input " . $vmx_option_1_number_text_box_options . " name='vmx_option_1_number' type='text' size=24 value='" . $vmx_option_1_number . "'> 
     895          </td> 
     896        </tr> 
     897        <tr> 
     898          <td>" . _("Option 2:") . "</td> 
     899          <td> 
     900            <input " . $vmx_option_2_number_text_box_options . " name='vmx_option_2_number' type='text' size=24 value='" . $vmx_option_2_number . "'> 
     901          </td> 
     902        </tr> 
     903      </table> 
     904      "; 
     905 
     906 
     907        } 
     908 
     909        // voicemail settings 
     910        if ($SETTINGS_ALLOW_VOICEMAIL_SETTINGS && $_SESSION['ari_user']['voicemail_enabled']==1 &&  
     911              in_array('voicemail',array_keys($loaded_modules))) { 
     912          if ($SETTINGS_ALLOW_VOICEMAIL_PASSWORD_SET) { 
     913 
     914            if ($SETTINGS_VOICEMAIL_PASSWORD_EXACT) { 
     915              $voicemail_password_length_message = sprintf(_("Passwords must be all numbers and only %s digits"),$SETTINGS_VOICEMAIL_PASSWORD_LENGTH); 
     916            } 
     917            else { 
     918              $voicemail_password_length_message = sprintf(_("Passwords must be all numbers and at least %s digits"),$SETTINGS_VOICEMAIL_PASSWORD_LENGTH); 
     919            } 
     920 
     921            $set_voicemail_password_text = " 
     922        <tr> 
     923          <td>" . _("Voicemail Password:") . "</td> 
     924          <td> 
     925            <input name='voicemail_password' type='password' size=16 value=" . $_SESSION['ari_user']['voicemail_password'] . "> 
     926          </td> 
     927        </tr> 
     928        <tr> 
     929          <td>" . _("Enter again to confirm:") . "</td> 
     930          <td> 
     931            <input name='voicemail_password_confirm' type='password' size=16 value=" . $_SESSION['ari_user']['voicemail_password'] . "> 
     932          </td> 
     933        </tr> 
     934        <tr> 
     935          <td class='note' colspan=2><small>" . $voicemail_password_length_message . "</small></td> 
     936        </tr>"; 
     937          } 
     938 
     939          if (isset($_SESSION['ari_user']['voicemail_email'])) { 
     940 
     941            if ($_SESSION['ari_user']['voicemail_email_enable']) {  
     942              $voicemail_email_address = $_SESSION['ari_user']['voicemail_email_address']; 
     943              $voicemail_pager_address = $_SESSION['ari_user']['voicemail_pager_address']; 
     944              $voicemail_email_enable = 'checked'; 
     945 
     946              foreach (array_keys($_SESSION['ari_user']['voicemail_email']) as $key) { 
     947                $var = "voicemail_email_$key"; 
     948                $var_enable = $var . "enable"; 
     949                if ($_SESSION['ari_user']['voicemail_email'][$key]=='yes') { 
     950                  $$var_enable = 'checked'; 
     951                } 
     952              } 
     953            } 
     954            else { 
     955 
     956              $voicemail_email_address = $_COOKIE['ari_voicemail_email_address']; 
     957              $voicemail_email_text_box_options = "disabled style='background: #DDD;'"; 
     958              $voicemail_pager_address = $_COOKIE['ari_voicemail_pager_address']; 
     959              $voicemail_pager_text_box_options = "disabled style='background: #DDD;'"; 
     960 
     961              foreach ($_SESSION['ari_user']['voicemail_email'] as $key => $value) { 
     962                $var = "voicemail_email_$key"; 
     963                $var_cookie = "ari_" . $var; 
     964                $var_enable = $var . "enable"; 
     965                $var_text_box_options = $var . "text_box_options"; 
     966 
     967                $$var_text_box_options = "disabled"; 
     968                if ($_COOKIE[$var_cookie]=='yes') { 
     969                  $$var_enable = 'checked'; 
     970                } 
     971              } 
     972            } 
     973 
     974            $set_voicemail_email_text = " 
     975        <tr> 
     976          <td>" . _("Email Voicemail To:") . "</td> 
     977          <td> 
     978            <input " . $voicemail_email_text_box_options . " name='voicemail_email_address' type='text' size=48 value='" . $voicemail_email_address . "'> 
     979          </td> 
     980        </tr> 
     981        <tr> 
     982          <td>" . _("Pager Voicemail To:") . "</td> 
     983          <td> 
     984            <input " . $voicemail_pager_text_box_options . " name='voicemail_pager_address' type='text' size=48 value='" . $voicemail_pager_address . "'> 
     985          </td> 
     986        </tr> 
     987        <tr> 
     988          <td></td> 
     989          <td> 
     990            <input " . $voicemail_email_enable . " type=checkbox name='voicemail_email_enable' value='1' OnClick=\"disable_fields(); return true;\"> 
     991            <small>" . _("Enable") . "</small> 
     992          </td> 
     993        </tr>"; 
     994 
     995            foreach ($_SESSION['ari_user']['voicemail_email'] as $key => $value) { 
     996 
     997              $var = "voicemail_email_$key"; 
     998              $var_enable = $var . "enable"; 
     999              $var_text_box_options = $var . "text_box_options"; 
     1000              if ($SETTINGS_VOICEMAIL_EMAIL_OPTION_DESCRIPTIONS[$key]) { 
     1001                $var_text = $SETTINGS_VOICEMAIL_EMAIL_OPTION_DESCRIPTIONS[$key]; 
     1002              } 
     1003              else { 
     1004                $var_text = $key; 
     1005              } 
     1006 
     1007              if ($value != 'yes' && $value != 'no' && $value !='') { 
     1008 
     1009                $size = strlen($value) - 1; 
     1010                $set_voicemail_email_text .= " 
     1011                  <tr> 
     1012                    <td></td> 
     1013                    <td> 
     1014                      <input type=text size='" . $size . "' name='" . $var . "' value='" . $value . "' OnClick=\"disable_fields(); return true;\"> 
     1015                      <small>" . $var_text . "</small> 
     1016                    </td> 
     1017                  </tr>"; 
     1018              }  
     1019              else { 
     1020 
     1021                $set_voicemail_email_text .= " 
     1022                  <tr> 
     1023                    <td></td> 
     1024                    <td> 
     1025                      <input " . $$var_enable . " " . $$var_text_box_options . " type=checkbox name='" . $var . "' value='yes' OnClick=\"disable_fields(); return true;\"> 
     1026                      <small>" . $var_text . "</small> 
     1027                    </td> 
     1028                  </tr>"; 
     1029              } 
     1030            } 
     1031          } 
     1032    
     1033          $wav_enable = 'selected'; 
     1034          if ($_COOKIE['ari_voicemail_audio_format']=='.gsm'||  
     1035                ($_COOKIE['ari_voicemail_audio_format']=='' && $ARI_VOICEMAIL_AUDIO_FORMAT_DEFAULT='.gsm')) { 
     1036            $wav_enable = ''; 
     1037            $gsm_enable = 'selected'; 
     1038          }  
     1039 
     1040          $set_voicemail_audio_format_text = " 
     1041            <tr> 
     1042              <td>" . _("Audio Format:") . "</td> 
     1043              <td> 
     1044                <select name='voicemail_audio_format'> 
     1045                  <option value='.wav' " . $wav_enable .  ">" . _("Best Quality") . " (.wav)</option> 
     1046                  <option value='.gsm' " . $gsm_enable .  ">" . _("Smallest Download") . " (.gsm)</option> 
     1047                </select> 
     1048              </td> 
     1049            </tr>"; 
     1050 
     1051          $set_voicemail_text = " 
     1052            <table class='settings'> 
     1053              <tr> 
     1054                <td><h3>" . _("Voicemail Settings") . "</h3></td> 
     1055              </tr> 
     1056              " . $set_voicemail_password_text . " 
     1057              " . $set_voicemail_email_text . " 
     1058              " . $set_voicemail_audio_format_text . " 
     1059            </table>"; 
     1060        } 
     1061 
     1062        // call monitor settings 
     1063        if ($this->getFreePBXVersion() && 
     1064              $SETTINGS_ALLOW_CALL_RECORDING_SET &&  
     1065              in_array('callmonitor',array_keys($loaded_modules))) { 
     1066 
     1067          foreach($data as $key=>$value) { 
     1068            if ($key=='record_in') { 
     1069              if ($value=='Always') { 
     1070                $ri_always = 'checked=checked'; 
     1071              } 
     1072              elseif ($value=='Never') { 
     1073                $ri_never = 'checked=checked'; 
     1074              } 
     1075              elseif ($value=='Adhoc') { 
     1076                $ri_on_demand = 'checked=checked'; 
     1077              } 
     1078            } 
     1079            if ($key=='record_out') { 
     1080              if ($value=='Always') { 
     1081                $ro_always = 'checked=checked'; 
     1082              } 
     1083              elseif ($value=='Never') { 
     1084                $ro_never = 'checked=checked'; 
     1085              } 
     1086              elseif ($value=='Adhoc') { 
     1087                $ro_on_demand = 'checked=checked'; 
     1088              } 
     1089            } 
     1090          } 
     1091 
     1092          $set_callmonitor_text = " 
     1093            <table class='settings'> 
     1094        <tr> 
     1095                <td><h3>" . _("Call Monitor Settings") . "</h3></td> 
     1096        </tr> 
     1097        <tr> 
     1098                <td>" . _("Record INCOMING:") . " </td> 
     1099                <td> 
     1100                  <input type='radio' name='record_in' value='Always' " . $ri_always . "/> " . _("Always") . "  
     1101                  <input type='radio' name='record_in' value='Never' " . $ri_never . "/> " . _("Never") . "        
     1102                  <input type='radio' name='record_in' value='Adhoc' " . $ri_on_demand . "/> " . _("On-Demand") . " 
     1103                </td> 
     1104              </tr> 
     1105              <tr> 
     1106                <td>" . _("Record OUTGOING:") . " </td> 
     1107                <td> 
     1108                  <input type='radio' name='record_out' value='Always' " . $ro_always . "/> " . _("Always") . " 
     1109                  <input type='radio' name='record_out' value='Never' " . $ro_never . "/> " . _("Never") . "         
     1110                  <input type='radio' name='record_out' value='Adhoc' " . $ro_on_demand . "/> " . _("On-Demand") . " 
     1111                </td> 
     1112              </tr> 
     1113            </table>"; 
     1114        } 
     1115      } 
     1116 
     1117      // javascript enable options 
     1118      if (isset($_SESSION['ari_user']['voicemail_email']) && 
     1119            in_array('voicemail',array_keys($loaded_modules))) { 
     1120        foreach ($_SESSION['ari_user']['voicemail_email'] as $key => $value) { 
     1121          $var = "voicemail_email_$key"; 
     1122          $js_voicemail_email_disable .= " 
     1123            document.ari_settings.$var.disabled = false;"; 
     1124          $js_voicemail_email_enable .= " 
     1125            document.ari_settings.$var.disabled = true;"; 
     1126        } 
     1127 
     1128        $js_voicemail_script = " 
     1129            if (document.ari_settings.voicemail_email_enable.checked) { 
     1130              document.ari_settings.voicemail_email_address.style.backgroundColor = '#FFF'; 
     1131              document.ari_settings.voicemail_email_address.disabled = false; 
     1132              document.ari_settings.voicemail_email_address.value='" . $voicemail_email_address . "'; 
     1133              document.ari_settings.voicemail_pager_address.style.backgroundColor = '#FFF'; 
     1134              document.ari_settings.voicemail_pager_address.disabled = false; 
     1135              document.ari_settings.voicemail_pager_address.value='" . $voicemail_pager_address . "'; 
     1136              " . $js_voicemail_email_disable . " 
     1137            } 
     1138            else { 
     1139              document.ari_settings.voicemail_email_address.style.backgroundColor = '#DDD'; 
     1140              document.ari_settings.voicemail_email_address.disabled = true; 
     1141              document.ari_settings.voicemail_pager_address.style.backgroundColor = '#DDD'; 
     1142              document.ari_settings.voicemail_pager_address.disabled = true; 
     1143              " . $js_voicemail_email_enable . " 
     1144            }"; 
     1145      } 
     1146 
     1147      // build page content 
     1148      $ret .= checkErrorMessage(); 
     1149 
     1150      if ($_SESSION['ari_user']['admin_settings']) { 
     1151        $headerText = _("Settings"); 
     1152      } else { 
     1153        $headerText = sprintf(_("Settings for %s (%s)"),$displayname,$exten); 
     1154      } 
     1155 
     1156      $ret .= $display->displayHeaderText($headerText); 
     1157      $ret .= $display->displayLine(); 
     1158 
     1159      $ret .= " 
     1160        <SCRIPT LANGUAGE='JavaScript'> 
     1161        <!-- Begin 
     1162    function rowCounter(field, maxlimit) { 
     1163      temp = field.value.split('\u000A',maxlimit+1) 
     1164      field.value = temp.join('\u000A') 
     1165      if (temp.length == maxlimit+1) { 
     1166        field.value = field.value.substring(0, field.value.length-1) 
     1167      } 
     1168    } 
     1169 
     1170          function disable_fields() {"; 
     1171      if ($SETTINGS_ALLOW_CALLFORWARD_SETTINGS) { 
     1172        $ret .= " 
     1173            if (document.ari_settings.call_forward_enable.checked) { 
     1174              document.ari_settings.call_forward_number.style.backgroundColor = '#FFF'; 
     1175              document.ari_settings.call_forward_number.disabled = false; 
     1176            } 
     1177            else { 
     1178              document.ari_settings.call_forward_number.style.backgroundColor = '#DDD'; 
     1179              document.ari_settings.call_forward_number.disabled = true; 
     1180            } 
     1181 
     1182            if (document.ari_settings.call_forward_busy_enable.checked) { 
     1183              document.ari_settings.call_forward_busy_number.style.backgroundColor = '#FFF'; 
     1184              document.ari_settings.call_forward_busy_number.disabled = false; 
     1185            } 
     1186            else { 
     1187              document.ari_settings.call_forward_busy_number.style.backgroundColor = '#DDD'; 
     1188              document.ari_settings.call_forward_busy_number.disabled = true; 
     1189            } 
     1190 
     1191            if (document.ari_settings.call_forward_unavailable_enable.checked) { 
     1192              document.ari_settings.call_forward_unavailable_number.style.backgroundColor = '#FFF'; 
     1193              document.ari_settings.call_forward_unavailable_number.disabled = false; 
     1194            } 
     1195            else { 
     1196              document.ari_settings.call_forward_unavailable_number.style.backgroundColor = '#DDD'; 
     1197              document.ari_settings.call_forward_unavailable_number.disabled = true; 
     1198            }"; 
     1199        } 
     1200        $ret .= " 
     1201            if (document.ari_settings.vmx_option_0_system_default.checked) { 
     1202              document.ari_settings.vmx_option_0_number.style.backgroundColor = '#DDD'; 
     1203              document.ari_settings.vmx_option_0_number.disabled = true; 
     1204            }  
     1205            else { 
     1206              document.ari_settings.vmx_option_0_number.style.backgroundColor = '#FFF'; 
     1207              document.ari_settings.vmx_option_0_number.disabled = false; 
     1208            } 
     1209 
    6871210          " . $js_voicemail_script . " 
    6881211        } 
     
    6991222        " . $set_call_forward_text . " 
    7001223        <br> 
     1224        " . $set_vmx_text . " 
     1225        <br> 
    7011226        " . $set_voicemail_text . " 
    7021227        <br> 
     
    7181243   * @param $call_forward_number 
    7191244   *   Call forward number 
    720    */ 
    721   function setCallForward($exten,$state,$call_forward_number) { 
     1245   * @param $variable_opt 
     1246   *   Call forward type (CF, CFU, CFB) 
     1247   */ 
     1248  function setCallForward($exten,$state,$call_forward_number, $variable_opt = "CF") { 
    7221249 
    7231250    global $asterisk_manager_interface; 
     
    7311258    } 
    7321259 
    733     $variable_opt = "CF"; 
     1260    //$variable_opt = "CF"; 
    7341261 
    7351262    $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database $type_opt $variable_opt $exten $value_opt\r\n\r\n"); 
     
    7431270   * @return $number 
    7441271   *   call forward number returned if set 
    745    */ 
    746   function getCallForwardNumber($exten) { 
     1272   * @param $variable_opt 
     1273   *   Call forward type (CF, CFU, CFB) 
     1274   */ 
     1275  function getCallForwardNumber($exten, $variable_opt = "CF") { 
    7471276 
    7481277    global $asterisk_manager_interface; 
     
    7501279    $number = ''; 
    7511280 
    752     $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get CF $exten\r\n\r\n"); 
     1281    $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get $variable_opt $exten\r\n\r\n"); 
    7531282    if (is_numeric($response)) { 
    7541283      $number = $response; 
     
    7621291    return $number; 
    7631292  } 
     1293 
     1294 
     1295  /* 
     1296   * Gets VMX option number 
     1297   * 
     1298   * @param $exten 
     1299   *   Extension to get information about 
     1300   * @param $digit 
     1301   *   Option number to get 
     1302   * @param $mode 
     1303   *  Mode to get (unavail/busy) 
     1304   * @return $number 
     1305   *   Number to use or blank if disabled 
     1306   */ 
     1307  function getVmxOptionNumber($exten, $digit, $mode='unavail') { 
     1308 
     1309    global $asterisk_manager_interface; 
     1310 
     1311    $number = ''; 
     1312    $digit = trim($digit); 
     1313 
     1314    $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/vmx/$mode/$digit/ext\r\n\r\n"); 
     1315    if (is_numeric($response)) { 
     1316      $number = $response; 
     1317    } 
     1318 
     1319    $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE["ari_vmx_option_${digit}_number"]); 
     1320    if ($stripped==$number) { 
     1321      $number = $_COOKIE["ari_vmx_option_${digit}_number"]; 
     1322    } 
     1323 
     1324    return $number; 
     1325  } 
     1326 
     1327  /* 
     1328   * Sets VMX option number 
     1329   * 
     1330   * @param $exten 
     1331   *   Extension to set information about 
     1332   * @param $digit 
     1333   *   Option number to set 
     1334   * @param $mode 
     1335   *  Mode to set (unavail/busy) 
     1336   * @param $number 
     1337   *  Number to set ext to (blank will delete it) 
     1338   * @param $context 
     1339   *  Context to set ext to (default from-internal) 
     1340   * @param $priority 
     1341   *  Priority to set ext to (default 1) 
     1342   */ 
     1343  function setVmxOptionNumber($exten, $digit, $mode, $number, $context='from-internal', $priority='1') { 
     1344 
     1345    global $asterisk_manager_interface; 
     1346 
     1347    $value_opt = trim($number); 
     1348 
     1349    if (is_numeric($value_opt)) { 
     1350      $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/$digit/ext $value_opt\r\n\r\n"); 
     1351      $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/$digit/context $context\r\n\r\n"); 
     1352      $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/$digit/pri $priority\r\n\r\n"); 
     1353    } else { 
     1354      $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database deltree AMPUSER $exten/vmx/$mode/$digit\r\n\r\n"); 
     1355    } 
     1356  } 
     1357 
     1358  /* 
     1359   * Sets VMX State 
     1360   * 
     1361   * @param $exten 
     1362   *   Extension to modify 
     1363   * @param $mode 
     1364   *  Mode to set (unavail/busy) 
     1365   * @param $vmx_state 
     1366   *   enabled/disabled state based on check box value 
     1367   */ 
     1368  function setVmxState($exten,$mode,$vmx_state) { 
     1369 
     1370    global $asterisk_manager_interface; 
     1371 
     1372    $value_opt = ($vmx_state)?'enabled':'disabled'; 
     1373 
     1374    $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/state $value_opt\r\n\r\n"); 
     1375  } 
     1376 
     1377  /* 
     1378   * Gets VMX State 
     1379   * 
     1380   * @param $exten 
     1381   *   Extension to get information about 
     1382   * @param $mode 
     1383   *  Mode to get (unavail/busy) 
     1384   * @return $data 
     1385   *   state of variable (checked/blank) or false if no poper value 
     1386   */ 
     1387  function getVmxState($exten, $mode='unavail') { 
     1388 
     1389    global $asterisk_manager_interface; 
     1390 
     1391    $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/vmx/$mode/state\r\n\r\n"); 
     1392 
     1393    if (preg_match("/enabled/",$response)) { 
     1394      $response='checked'; 
     1395    }  
     1396    elseif (preg_match("/disabled/",$response)) { 
     1397      $response=''; 
     1398    } 
     1399    else { 
     1400      $response = false; 
     1401    } 
     1402 
     1403    //TODO: really need to check for a bogus response, see how other side does it 
     1404    // 
     1405    return $response; 
     1406 
     1407  } 
     1408 
     1409  /* 
     1410   * Sets VMX Play Instructions 
     1411   * 
     1412   * @param $exten 
     1413   *   Extension to modify 
     1414   * @param $vmx_play_instructions 
     1415   *   play instructions or just beep (checked, blank) 
     1416   * @param $mode 
     1417   *  Mode to set (unavail/busy) 
     1418   */ 
     1419  function setVmxPlayInstructions($exten,$mode,$vmx_play_instructions) { 
     1420 
     1421    global $asterisk_manager_interface; 
     1422 
     1423    $value_opt = ($vmx_play_instructions)?'""':'s'; 
     1424 
     1425    $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/vmxopts/timeout $value_opt\r\n\r\n"); 
     1426  } 
     1427 
     1428  /* 
     1429   * Get VMX Play Instructions 
     1430   * 
     1431   * @param $exten 
     1432   *   Extension to get information about 
     1433   * @param $mode 
     1434   *  Mode to get (unavail/busy) 
     1435   * @return $data 
     1436   *   state of variable (checked/blank) or false if no poper value 
     1437   */ 
     1438  function getVmxPlayInstructions($exten, $mode='unavail') { 
     1439 
     1440    global $asterisk_manager_interface; 
     1441 
     1442    $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/vmx/$mode/vmxopts/timeout\r\n\r\n"); 
     1443 
     1444    if (preg_match("/s/",$response)) { 
     1445      $response=''; 
     1446    }  
     1447    else { 
     1448      $response='checked'; 
     1449    } 
     1450 
     1451    //TODO: really need to check for a bogus response, see how other side does it 
     1452    // 
     1453    return $response; 
     1454 
     1455  } 
     1456 
     1457  /* 
     1458   * Sets Follow Me Pre-Ring Time 
     1459   * 
     1460   * @param $exten 
     1461   *   Extension to modify 
     1462   * @param $follow_me_prering_time 
     1463   *   Pre-Ring Time to ring 
     1464   */ 
     1465  function setFollowMePreRingTime($exten,$follow_me_prering_time) { 
     1466 
     1467    global $asterisk_manager_interface; 
     1468 
     1469    $value_opt = $follow_me_prering_time; 
     1470 
     1471    $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/followme/prering $value_opt\r\n\r\n"); 
     1472  } 
     1473 
     1474  /* 
     1475   * Gets Follow Me Pre-Ring Time if set 
     1476   * 
     1477   * @param $exten 
     1478   *   Extension to get information about 
     1479   * @return $number 
     1480   *   follow me pre-ring time returned if set 
     1481   */ 
     1482  function getFollowMePreRingTime($exten) { 
     1483 
     1484    global $asterisk_manager_interface; 
     1485 
     1486    $number = ''; 
     1487 
     1488    $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/followme/prering\r\n\r\n"); 
     1489    if (is_numeric($response)) { 
     1490      $number = $response; 
     1491    } 
     1492 
     1493    $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_follow_me_prering_time']); 
     1494    if ($stripped==$number) { 
     1495      $number = $_COOKIE['ari_follow_me_prering_time']; 
     1496    } 
     1497 
     1498    return $number; 
     1499  } 
     1500 
     1501  /* 
     1502   * Sets Follow Me List Ring Time 
     1503   * 
     1504   * @param $exten 
     1505   *   Extension to modify 
     1506   * @param $follow_me_listring_time 
     1507   *   List Ring Time to ring 
     1508   */ 
     1509  function setFollowMeListRingTime($exten,$follow_me_listring_time) { 
     1510 
     1511    global $asterisk_manager_interface; 
     1512 
     1513    $value_opt = $follow_me_listring_time; 
     1514 
     1515    $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/followme/grptime $value_opt\r\n\r\n"); 
     1516  } 
     1517 
     1518  /* 
     1519   * Gets Follow Me List-Ring Time if set 
     1520   * 
     1521   * @param $exten 
     1522   *   Extension to get information about 
     1523   * @return $number 
     1524   *   follow me list-ring time returned if set 
     1525   */ 
     1526  function getFollowMeListRingTime($exten) { 
     1527 
     1528    global $asterisk_manager_interface; 
     1529 
     1530    $number = ''; 
     1531 
     1532    $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/followme/grptime\r\n\r\n"); 
     1533    if (is_numeric($response)) { 
     1534      $number = $response; 
     1535    } 
     1536 
     1537    $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_follow_me_listring_time']); 
     1538    if ($stripped==$number) { 
     1539      $number = $_COOKIE['ari_follow_me_listring_time']; 
     1540    } 
     1541 
     1542    return $number; 
     1543  } 
     1544 
     1545  /* 
     1546   * Sets Follow Me List 
     1547   * 
     1548   * @param $exten 
     1549   *   Extension to modify 
     1550   * @param $follow_me_list 
     1551   *   Follow Me List 
     1552   */ 
     1553  function setFollowMeList($exten,$follow_me_list) { 
     1554 
     1555    global $asterisk_manager_interface; 
     1556 
     1557    $value_opt = $follow_me_list; 
     1558 
     1559    $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/followme/grplist $value_opt\r\n\r\n"); 
     1560  } 
     1561 
     1562  /* 
     1563   * Gets Follow Me List if set 
     1564   * 
     1565   * @param $exten 
     1566   *   Extension to get information about 
     1567   * @return $data 
     1568   *   follow me list if set 
     1569   */ 
     1570  function getFollowMeList($exten) { 
     1571 
     1572    global $asterisk_manager_interface; 
     1573 
     1574    $number = ''; 
     1575 
     1576    $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/followme/grplist\r\n\r\n"); 
     1577 
     1578    //TODO: really need to check for a bogus response, see how other side does it 
     1579    // 
     1580    return preg_replace("/[^0-9*\-]/", "", $response); 
     1581  } 
     1582 
     1583  /* 
     1584   * Sets Follow Confirmation Setting 
     1585   * 
     1586   * @param $exten 
     1587   *   Extension to modify 
     1588   * @param $follow_me_list 
     1589   *   Follow Me Confirm Setting 
     1590   */ 
     1591  function setFollowMeConfirm($exten,$follow_me_confirm) { 
     1592 
     1593    global $asterisk_manager_interface; 
     1594 
     1595    $value_opt = ($follow_me_confirm)?'ENABLED':'DISABLED'; 
     1596 
     1597    $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/followme/grpconf $value_opt\r\n\r\n"); 
     1598  } 
     1599 
     1600  /* 
     1601   * Gets Follow Me Confirmation Setting 
     1602   * 
     1603   * @param $exten 
     1604   *   Extension to get information about 
     1605   * @return $data 
     1606   *   follow me confirm setting 
     1607   */ 
     1608  function getFollowMeConfirm($exten) { 
     1609 
     1610    global $asterisk_manager_interface; 
     1611 
     1612    $number = ''; 
     1613 
     1614    $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/followme/grpconf\r\n\r\n"); 
     1615 
     1616    if (preg_match("/ENABLED/",$response)) { 
     1617        $response='checked'; 
     1618    }  
     1619    else { 
     1620        $response=''; 
     1621    } 
     1622 
     1623    //TODO: really need to check for a bogus response, see how other side does it 
     1624    // 
     1625    return $response; 
     1626 
     1627  } 
     1628 
     1629 
     1630 
    7641631 
    7651632  /* 
     
    9221789  } 
    9231790 
    924  
    925 
    926  
     1791  /* 
     1792   * Sets Follow-Me Settings in FreePBX MySQL Database 
     1793   * 
     1794   * @param $exten 
     1795   *   Extension to modify 
     1796   * @param $follow_me_prering_time 
     1797   *   Pre-Ring Time to ring 
     1798   * @param $follow_me_listring_time 
     1799   *   List Ring Time to ring 
     1800   * @param $follow_me_list 
     1801   *   Follow Me List 
     1802   * @param $follow_me_list 
     1803   *   Follow Me Confirm Setting 
     1804   * 
     1805   */ 
     1806  function setFollowMeMySQL($exten, $follow_me_prering_time, $follow_me_listring_time, $follow_me_list, $follow_me_confirm) { 
     1807 
     1808    if (isset($_SESSION['dbh_asterisk'])) { 
     1809 
     1810      //format for SQL database 
     1811      $follow_me_confirm = ($follow_me_confirm)?'CHECKED':''; 
     1812 
     1813      $sql = "UPDATE findmefollow SET grptime = '" . $follow_me_listring_time . "', grplist = '". 
     1814           str_replace("'", "''", trim($follow_me_list)) . "', pre_ring = '" . $follow_me_prering_time . 
     1815           "', needsconf = '" . $follow_me_confirm . "' WHERE grpnum = $exten LIMIT 1"; 
     1816      $results = $_SESSION['dbh_asterisk']->query($sql); 
     1817 
     1818      if(DB::IsError($results)) { 
     1819        $_SESSION['ari_error'] = $results->getMessage(); 
     1820      } 
     1821 
     1822      return 1; 
     1823    } 
     1824  } 
     1825 
     1826  function lookupSetExtensionFormat($exten) { 
     1827 
     1828    if (trim($exten) == "") return $exten; 
     1829 
     1830    $exten = preg_replace("/[^0-9*]/", "", $exten); 
     1831 
     1832    $sql = "SELECT extension FROM users WHERE extension = '".$exten."'"; 
     1833    $asa = $_SESSION['dbh_asterisk']->getrow($sql, DB_FETCHMODE_ASSOC); 
     1834    if (!is_array($asa)) {  
     1835      return $exten.'#'; 
     1836    } else { 
     1837      return $exten; 
     1838    } 
     1839  } 
     1840 
     1841 
     1842} // class 
    9271843 
    9281844?>