handling toggle parts visible tag: now rely on local storage, so avoid
[plewww.git] / planetlab / nodes / interface.php
index 471d8d3..744ce3f 100644 (file)
@@ -15,6 +15,7 @@ require_once 'linetabs.php';
 require_once 'details.php';
 require_once 'table.php';
 require_once 'toggle.php';
+require_once 'prototype.php';
 
 require_once 'plc_drupal.php';
 include 'plc_header.php';
@@ -48,7 +49,8 @@ if ( ! $node_id) {
  }
 
 $tabs=array();
-$tabs[] = array('label'=>'Back to node', 'url'=>l_node($node_id),
+$tabs[] = array('label'=>'Back to node', 'url'=>l_node($node_id), 
+               'values' => array('show_interfaces'=>True),
                'bubble'=>'Cancel pending changes');
 plekit_linetabs($tabs);
 
@@ -56,7 +58,8 @@ $fields=array( 'method', 'type', 'ip', 'gateway', 'network', 'broadcast', 'netma
               'dns1', 'dns2', 'hostname', 'mac', 'bwlimit', 'node_id' );
 
 //////////////////////////////
-$nodes= $api->GetNodes( array( intval($node_id) ), array( 'node_id', 'hostname', 'site_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'];
 
@@ -70,17 +73,28 @@ drupal_set_html_head ('
 <script type="text/javascript" src="/planetlab/nodes/interface.js"></script>
 ');
 
+$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);
+$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,$interface['method'],false),
+                                    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']));
 
@@ -105,17 +119,25 @@ $details->th_td("DNS 2",$interface['dns2'],"dns2",array('width'=>15,
 $details->space();
 $details->th_td("BW limit (bps)",$interface['bwlimit'],"bwlimit",array('width'=>11));
 $details->th_td("Hostname",$interface['hostname'],"hostname");
-# xxx should the user be allowed to change this ?
-$mac=$interface['mac'];
-if ($mac) $details->th_td("MAC address",$mac);
+$details->th_td("Mac address",$interface['mac'],"mac", array('onChange'=>'macChecker("mac", true)'));
 
 // the buttons
-$update_button = $form->submit_html ("update-interface","Update",
-                                    array('onSubmit'=>'interfaceSubmit()'));
+$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':
@@ -125,19 +147,21 @@ switch ($mode) {
 
 $details->end();
 $form->end();
+$toggle->end();
 
 // no tags if the interface has not been created yet
 if ($mode == 'add') return;
 
 
 //////////////////////////////////////// tags
-$toggle=new PlekitToggle ('tags','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();
 
-$tags=$api->GetInterfaceTags (array('interface_id'=>$interface_id));
 function get_tagname ($tag) { return $tag['tagname'];}
 $tagnames = array_map ("get_tagname",$tags);
   
@@ -166,7 +190,7 @@ if ($can_update) {
   $table->row_start();
   $table->cell($form->submit_html("delete-interface-tags","Remove Tags"),
               // use the whole columns and right adjust
-              $table->columns(), "right");
+              array('hfill'=>true,'align'=>'right'));
   $table->row_end();
 
   // set tag area
@@ -178,6 +202,7 @@ if ($can_update) {
   $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();
  }