GetInterfaces(array('interface_id'=>$interface_id)); $interface=$interfaces[0]; $node_id=$interface['node_id']; $title=('Updating interface ' . $interface['ip']); } else if (isset ($_GET['node_id'])) { $mode='add'; $interface=array(); $node_id=$_GET['node_id']; $title=('Adding interface'); } // check if ( ! $node_id) { drupal_set_error('Malformed URL in interface.php, need id or node_id'); plc_redirect(l_nodes()); return; } $tabs=array(); $tabs[] = array('label'=>'Back to node', 'url'=>l_node($node_id), 'values' => array('show_interfaces'=>True), 'bubble'=>'Cancel pending changes'); plekit_linetabs($tabs); $fields=array( 'method', 'type', 'ip', 'gateway', 'network', 'broadcast', 'netmask', 'dns1', 'dns2', 'hostname', 'mac', 'bwlimit', 'node_id' ); ////////////////////////////// $node_columns = array( 'node_id', 'hostname', 'site_id', 'interface_ids' ); $nodes= $api->GetNodes( array( intval($node_id) ), $node_columns); $node= $nodes[0]; $site_id=$node['site_id']; $can_update= plc_is_admin() || ( plc_in_site ($site_id) && ( plc_is_pi() || plc_is_tech())); drupal_set_title($title . " on " . $node['hostname']); // include javacsript helpers require_once 'prototype.php'; drupal_set_html_head (' '); $nifty_id = ($mode == 'add' ) ? 'add-interface' : 'interface'; $toggle = new PlekitToggle ($nifty_id,"Details", array('bubble'=>'Display and modify details for that interface', 'visible'=>get_arg('show_details'))); $toggle->start(); $details=new PlekitDetails($can_update); // xxx hardwire network type for now $form_variables = array('node_id'=>$node_id,'type'=>"ipv4"); if ($mode == "update") $form_variables['interface_id']=$interface_id; $form=$details->form_start(l_actions(),$form_variables, array('onSubmit'=>'return interfaceSubmit()')); $details->start(); if ($mode == 'add') $method_default = 'dhcp'; else $method_default = $interface['method']; $method_select = $form->select_html ("method", interface_method_selectors($api,$method_default,false), array('id'=>'method','onChange'=>'updateMethodFields()')); $details->th_td("Method",$method_select,"method",array('input_type'=>'select','value'=>$interface['method'])); // dont display the 'type' selector as it contains only ipv4 //>>> GetNetworkTypes() //[u'ipv4'] $details->th_td("IP",$interface['ip'],"ip",array('width'=>15, 'onKeyup'=>'networkHelper()', 'onChange'=>'networkHelper()')); $details->th_td("Netmask",$interface['netmask'],"netmask",array('width'=>15, 'onKeyup'=>'networkHelper()', 'onChange'=>'networkHelper()')); $details->th_td("Network",$interface['network'],"network",array('width'=>15)); $details->th_td("Broadcast",$interface['broadcast'],"broadcast",array('width'=>15)); $details->th_td("Gateway",$interface['gateway'],"gateway",array('width'=>15, 'onChange'=>'subnetChecker("gateway",false)')); $details->th_td("DNS 1",$interface['dns1'],"dns1",array('width'=>15, 'onChange'=>'subnetChecker("dns1",false)')); $details->th_td("DNS 2",$interface['dns2'],"dns2",array('width'=>15, 'onChange'=>'subnetChecker("dns2",true)')); $details->space(); $details->th_td("BW limit (bps)",$interface['bwlimit'],"bwlimit",array('width'=>11)); $details->th_td("Hostname",$interface['hostname'],"hostname"); $details->th_td("Mac address",$interface['mac'],"mac", array('onChange'=>'macChecker("mac", true)')); // the buttons $update_button = $form->submit_html ("update-interface","Update"); $add_button = $form->submit_html ("add-interface","Add as new", array('onSubmit'=>'interfaceSubmit()')); switch ($mode) { case 'add': // primary interfaces can't be virtual $is_primary = (count($node['interface_ids']) == 0); if ( ! $is_primary) { // default is to create virtual interfaces $details->th_th("Virtual Interface", $form->checkbox_html('is-virtual','yes',array('id'=>'virtual', 'checked'=>'checked', 'onChange'=>'updateVirtualArea()'))); $details->th_td("Interface name","eth0",'ifname'); $details->th_td("alias (leave empty if unsure)","",'alias'); } $details->tr($add_button,"right"); break; case 'update': $details->tr($update_button . " " . $add_button,"right"); break; } $details->end(); $form->end(); $toggle->end(); // no tags if the interface has not been created yet if ($mode == 'add') return; //////////////////////////////////////// tags $tags=$api->GetInterfaceTags (array('interface_id'=>$interface_id)); $toggle=new PlekitToggle ('tags',count_english($tags,'tag'), array('visible'=>get_arg('show_tags'))); $toggle->start(); $form = new PlekitForm (l_actions(),array('interface_id'=>$interface_id)); $form->start(); function get_tagname ($tag) { return $tag['tagname'];} $tagnames = array_map ("get_tagname",$tags); $headers=array("Name"=>"string", "Value"=>"string", ); if ($can_update) $headers[plc_delete_icon()]="none"; $table_options=array("notes_area"=>false,"pagesize_area"=>false,"search_width"=>10); $table=new PlekitTable("interface_tags",$headers,0,$table_options); $table->start(); if ($tags) foreach ($tags as $tag) { $table->row_start(); $table->cell(l_tag_obj($tag)); $table->cell($tag['value']); // the remove checkbox if ($can_update) $table->cell ($form->checkbox_html('interface_tag_ids[]',$tag['interface_tag_id'])); $table->row_end(); } if ($can_update) { $table->tfoot_start(); // remove tag $table->row_start(); $table->cell($form->submit_html("delete-interface-tags","Remove Tags"), // use the whole columns and right adjust array('hfill'=>true,'align'=>'right')); $table->row_end(); // set tag area $table->row_start(); // get list of tag names in the interface/* category $all_tags= $api->GetTagTypes( array ("category"=>"interface*"), array("tagname","tag_type_id")); // xxx cannot use onchange=submit() - would need to somehow pass action name function tag_selector ($tag) { return array("display"=>$tag['tagname'],"value"=>$tag['tag_type_id']); } $selector=array_map("tag_selector",$all_tags); $table->cell($form->select_html("tag_type_id",$selector,array('label'=>"Choose"))); $table->cell($form->text_html("value","",array('width'=>8))); //cell-xxx $table->cell($form->submit_html("set-tag-on-interface","Set Tag"),2,"left"); $table->row_end(); } $table->end(); $form->end(); $toggle->end(); //plekit_linetabs ($tabs,"bottom"); // Print footer include 'plc_footer.php'; ?>