diff options
-rw-r--r-- | src/usr/local/www/interfaces_ppps_edit.php | 187 |
1 files changed, 99 insertions, 88 deletions
diff --git a/src/usr/local/www/interfaces_ppps_edit.php b/src/usr/local/www/interfaces_ppps_edit.php index d18e338..54cbba6 100644 --- a/src/usr/local/www/interfaces_ppps_edit.php +++ b/src/usr/local/www/interfaces_ppps_edit.php @@ -95,12 +95,6 @@ if (is_array($config['vlans']['vlan']) && count($config['vlans']['vlan'])) { if($_GET && $_GET['type']) $pconfig['type'] = $_GET['type']; -if($_GET && $_GET['country']) - $pconfig['country'] = $_GET['country']; - -if($_GET && $_GET['provider']) - $pconfig['provider'] = $_GET['provider']; - if (is_numericint($_GET['id'])) $id = $_GET['id']; @@ -214,7 +208,6 @@ if (isset($id) && $a_ppps[$id]) { } if ($_POST) { - unset($input_errors); $pconfig = $_POST; @@ -319,19 +312,6 @@ if ($_POST) { } } -/* - foreach ($a_ppps as $ppp) { - if (isset($id) && ($a_ppps[$id]) && ($a_ppps[$id] === $ppp)) { - continue; - } - - if ($ppp['serialport'] == $_POST['serialport']) { - $input_errors[] = "Serial port is in use"; - break; - } - } -*/ - if (!$input_errors) { $ppp = array(); $ppp['ptpid'] = $_POST['ptpid']; @@ -473,6 +453,8 @@ $serviceproviders_attr = xml2array($serviceproviders_contents,1,"attr"); $serviceproviders = &$serviceproviders_attr['serviceproviders']['country']; +//print_r($serviceproviders); + function build_country_list() { global $serviceproviders; @@ -488,61 +470,6 @@ function build_country_list() { return($list); } -function build_provider_list($country) { - global $serviceproviders; - - $list = array(); - - foreach($serviceproviders as $sp) { - if($sp['attr']['code'] == strtolower($country)) { - if(is_array($sp['provider'][0])) { - foreach($sp['provider'] as $provider) { - array_push($list, $provider['name']['value']); - } - } - } - } - - return array_combine($list, $list); -} - -function build_plans_list($country, $provider) { - global $serviceproviders; - - $list = array(); - - foreach($serviceproviders as $sprecord) { - if($sprecord['attr']['code'] == strtolower($country)) { - foreach($sprecord['provider'] as $sp) { - if(strtolower($sp['name']['value']) == strtolower($provider)) { - if(array_key_exists('gsm', $sp)) { - - if(array_key_exists('attr',$sp['gsm']['apn'])) { - $name = ($sp['gsm']['apn']['name'] ? $sp['gsm']['apn']['name'] : $sp['name']['value']); - echo $name . ":" . $sp['gsm']['apn']['attr']['value']; - } else { - foreach($sp['gsm']['apn'] as $apn_info) { - $name = ($apn_info['name']['value'] ? $apn_info['name']['value'] : $apn_info['gsm']['apn']['name']); - - $key = $apn_info['attr']['value']; - $list[$key] = $name . ($key ? ' ':'') . '- ' . $key; - } - } - } - - if(array_key_exists('cdma',$sp)) { - $name = $sp['cdma']['name']['value'] ? $sp['cdma']['name']['value']:$sp['name']['value']; - $key = 'CDMA'; - $list[$key] = $name . ' - ' . $key; - } - } - } - } - } - - return($list); -} - $port_count = 0; $serport_count = 0; @@ -648,14 +575,14 @@ $section->addInput(new Form_Select( 'provider', 'Provider', $pconfig['provider'], - build_provider_list($pconfig['country']) + [] )); $section->addInput(new Form_Select( 'providerplan', 'Plan', $pconfig['providerplan'], - build_plans_list($pconfig['country'], $pconfig['provider']) + [] ))->setHelp('Select to fill in data for your service provider.'); $section->addInput(new Form_Input( @@ -688,7 +615,7 @@ if($pconfig['type'] == 'pptp' || $pconfig['type'] == 'l2tp') { $group->add(new Form_Input( 'gateway' . $j, null, - 'password', + 'text', $pconfig['gateway'][$j] ))->setHelp('IP or Hostname'); @@ -951,21 +878,21 @@ foreach($linklist['list'] as $ifnm =>$nm) { $group->add(new Form_Input( 'mtu' . $j, null, - 'password', + 'text', $pconfig['mtu'][$j] ))->setHelp('MTU'); $group->add(new Form_Input( 'mru' . $j, null, - 'password', + 'text', $pconfig['mru'][$j] ))->setHelp('MRU'); $group->add(new Form_Input( 'mrru' . $j, null, - 'password', + 'text', $pconfig['mrru'][$j] ))->setHelp('MRRU'); @@ -1066,8 +993,8 @@ events.push(function(){ hideClass('linkparam', true); hideInput('linkparamhelp', true); - var selected = $('.interfaces').val(); - var length = selected.length; + var selected = $('#interfaces').val(); + var length = $("#interfaces :selected").length; for(var i=0; i<length; i++) { hideClass('localip' + selected[i], false); @@ -1075,10 +1002,81 @@ events.push(function(){ if(!showadvanced) { hideClass('linkparam' + selected[i], false); hideInput('linkparamhelp', false); - } + } } } + function hideProviders(hide) { + hideInput('country', hide); + hideInput('provider', hide); + hideInput('providerplan', hide); + } + + function providers_list() { + $('#provider option').remove(); + $('#providerplan option').remove(); + $('#provider').append(new Option('', '')); + $.ajax("getserviceproviders.php",{ + type: 'POST', + data: {country : $('#country').val()}, + success: function(responseText) { + var responseTextArr = responseText.split("\n"); + var value, i; + responseTextArr.sort(); + for (i = 0; i < responseTextArr.length; i += 1) { + value = responseTextArr[i]; + if (/\S/.test(value)) { + $('#provider').append(new Option(value, value)); + } + } + } + }); + } + + function providerplan_list() { + $('#providerplan option').remove(); + $('#providerplan').append( new Option('','') ); + $.ajax("getserviceproviders.php",{ + type: 'POST', + data: {country : $('#country').val(), provider : $('#provider').val()}, + success: function(responseText) { + var responseTextArr = responseText.split("\n"); + var value, providerplan, i; + responseTextArr.sort(); + for (i = 0; i < responseTextArr.length; i += 1) { + value = responseTextArr[i]; + if (/\S/.test(value)) { + providerplan = value.split(":"); + $('#providerplan').append(new Option(providerplan[0] + " - " + providerplan[1], + providerplan[1])); + } + } + } + }); + } + + function prefill_provider() { + $.ajax("getserviceproviders.php",{ + type: "POST", + data: {country : $('#country').val(), provider : $('#provider').val(), plan : $('#providerplan').val()}, + success: function(responseXML) { + var xmldoc = responseXML; + var provider = xmldoc.getElementsByTagName('connection')[0]; + $('#username').val(''); + $('#password').val(''); + if(provider.getElementsByTagName('apn')[0].firstChild.data == "CDMA") { + $('#phone').val('#777'); + $('#apn').val(''); + } else { + $('#phone').val('*99#'); + $('#apn').val(provider.getElementsByTagName('apn')[0].firstChild.data); + } + $('#username').val(provider.getElementsByTagName('username')[0].firstChild.data); + $('#password').val(provider.getElementsByTagName('password')[0].firstChild.data); + } + }); + } + // Make the ‘btnadvanced’ button a plain button, not a submit button $("#btnadvanced").prop('type','button'); @@ -1094,25 +1092,38 @@ events.push(function(){ // Multiselect boxes must be handled by class $('.interfaces').on('change', function() { hideInterfaces(); - }); + }); - // When type, country or provider are changed, reload the page and build the new selector arrays + // When type, country, provider or plan are changed, reload the page and build the new selector arrays $('#type').on('change', function() { window.location = 'interfaces_ppps_edit.php?id=' + $('#id').val() + '&type=' + this.value; }); $('#country').on('change', function() { - window.location = 'interfaces_ppps_edit.php?id=' + $('#id').val() + '&country=' + this.value + '&type=' + $('#type').val(); + providers_list(); + hideInput('provider', false); }); $('#provider').on('change', function() { - window.location = 'interfaces_ppps_edit.php?id=' + $('#id').val() + '&provider=' + this.value + '&type=' + $('#type').val() + '&country=' + $('#country').val(); + providerplan_list(); + hideInput('providerplan', false); + }); + + $('#providerplan').on('change', function() { + prefill_provider(); }); // Set element visibility on initial page load setAdvVisible(); hideClass('linkparam', true); + + hideProviders($('#type').val() != "ppp"); + if ($('provider').size() == 0) + hideInput('provider', true); + + if ($('providerplan').size() == 0) + hideInput('providerplan', true); }); //]]> |