fix remaining glitches for php8
[plewww.git] / planetlab / slices / slice.php
index d5e743d..d4bdc76 100644 (file)
@@ -27,21 +27,17 @@ require_once 'columns.php';
 // keep css separate for now
 drupal_set_html_head('
 <link href="/planetlab/css/my_slice.css" rel="stylesheet" type="text/css" />
-<script src="/planetlab/slices/leases.js" type="text/javascript" charset="utf-8"></script>
 ');
 
-// -------------------- admins potentially need to get full list of users
-ini_set('memory_limit','32M');
-//error_reporting(0);
 
 $profiling=false;
-if ($_GET['profiling']) $profiling=true;
+if (get_array($_GET, 'profiling')) $profiling=true;
 
 if ($profiling)  plc_debug_prof_start();
 
-// -------------------- 
+// --------------------
 // recognized URL arguments
-$slice_id=intval($_GET['id']);
+$slice_id=intval($get_array($_GET, 'id'));
 if ( ! $slice_id ) { plc_error('Malformed URL - id not set'); return; }
 
 ////////////////////
@@ -57,7 +53,7 @@ if (empty($slices)) {
 
 $slice=$slices[0];
 
-if ($profiling) plc_debug_prof('1: slice',count($slices));
+if ($profiling) plc_debug_prof('01: slice',count($slices));
 // pull all node info to vars
 $name= $slice['name'];
 $expires = date( "d/m/Y", $slice['expires'] );
@@ -70,7 +66,7 @@ $peer_id= $slice['peer_id'];
 $peers=new Peers ($api);
 $local_peer = ! $peer_id;
 
-if ($profiling) plc_debug_prof('2: peers',count($peers));
+if ($profiling) plc_debug_prof('02: peers',count($peers));
 
 // gets site info
 $sites= $api->GetSites( array( $site_id ) );
@@ -78,14 +74,14 @@ $site=$sites[0];
 $site_name= $site['name'];
 $max_slices = $site['max_slices'];
 
-if ($profiling) plc_debug_prof('3: sites',count($sites));
+if ($profiling) plc_debug_prof('03: sites',count($sites));
 //////////////////////////////////////// building blocks for the renew area
 // Constants
 global $DAY;           $DAY = 24*60*60;
-global $WEEK;          $WEEK = 7 * $DAY; 
+global $WEEK;          $WEEK = 7 * $DAY;
 global $MAX_WEEKS;     $MAX_WEEKS= 8;          // weeks from today
 global $GRACE_DAYS;    $GRACE_DAYS=10;         // days for renewal promoted on top
-global $NOW;           $NOW=mktime();
+global $NOW;           $NOW=time();
 
 //////////////////////////////////////////////////////////// utility for the renew tab
 // make the renew area on top and open if the expiration time is less than 10 days from now
@@ -100,7 +96,7 @@ function renew_needed ($slice) {
 
 function renew_area ($slice,$site,$visible) {
   global $DAY, $WEEK, $MAX_WEEKS, $GRACE_DAYS, $NOW;
+
   $current_exp=$slice['expires'];
   $current_text = gmstrftime("%A %b-%d-%y %T %Z", $current_exp);
   $max_exp= $NOW + ($MAX_WEEKS * $WEEK); // seconds since epoch
@@ -129,15 +125,15 @@ out more about your site's nodes, and how to contact your site's PI(s)
 and Technical Contact(s).</p>
 EOF;
      echo $message;
+
   } else {
     // xxx this is a rough cut and paste from the former UI
     // showing a datepicker view could be considered as well with some extra work
     // calculate possible extension lengths
     $selectors = array();
-    foreach ( array ( 1 => "One more week", 
-                     2 => "Two more weeks", 
-                     3 => "Three more weeks", 
+    foreach ( array ( 1 => "One more week",
+                     2 => "Two more weeks",
+                     3 => "Three more weeks",
                      4 => "One more month" ) as $weeks => $text ) {
       $candidate_exp = $current_exp + $weeks*$WEEK;
       if ( $candidate_exp < $max_exp) {
@@ -151,7 +147,7 @@ EOF;
     if ( empty( $selectors ) ) {
       print <<< EOF
 <div class='my-slice-renewal'>
-Slices cannot be renewed more than $MAX_WEEKS weeks from now, i.e. not beyond $max_text. 
+Slices cannot be renewed more than $MAX_WEEKS weeks from now, i.e. not beyond $max_text.
 For this reason, the current slice cannot be renewed any further into the future, try again closer to expiration date.
 </div>
 EOF;
@@ -162,7 +158,7 @@ EOF;
 <p>
 PlanetLab's security model requires that anyone who is concerned about a slice's activity be able to immediately learn about that slice. The details that you provide are your public explanation about why the slice behaves as it does. Be sure to describe the <span class='bold'>kind of traffic</span> that your slice generates, and how it handles material that is under <span class='bold'>copyright</span>, if relevant.
 </p><p>
-The PlanetLab Operations Centres regularly respond to concerns raised by third parties about site behaviour. Most incidents are resolved rapidly based upon the publicly posted slice details. However, when these details are not sufficiently clear or accurate, and we cannot immediately reach the slice owner, we must delete the slice. 
+The PlanetLab Operations Centres regularly respond to concerns raised by third parties about site behaviour. Most incidents are resolved rapidly based upon the publicly posted slice details. However, when these details are not sufficiently clear or accurate, and we cannot immediately reach the slice owner, we must delete the slice.
 </p>
 EOF;
 
@@ -179,7 +175,7 @@ print("<p><i>NOTE: Slices cannot be renewed beyond another $max_renewal_weeks we
 print ("</div>");
     }
   }
+
   $toggle->end();
 }
 
@@ -221,7 +217,7 @@ plekit_linetabs($tabs);
 ////////////////////////////////////////
 $peers->block_start($peer_id);
 
-//////////////////////////////////////// renewal area 
+//////////////////////////////////////// renewal area
 // (1) close to expiration : show on top and open
 
 if ($local_peer ) {
@@ -231,18 +227,11 @@ if ($local_peer ) {
 
 
 //////////////////////////////////////////////////////////// tab:details
-// default for opening the details section or not ?
-if ($local_peer) {
-  $default_show_details = true;
- } else {
-  $default_show_details = ! $renew_visible;
- }
-  
-$toggle = 
+$toggle =
   new PlekitToggle ('my-slice-details',"Details",
                    array('bubble'=>
                          'Display and modify details for that slice',
-                         'visible'=>get_arg('show_details',$default_show_details)));
+                         'visible'=>get_arg('show_details')));
 $toggle->start();
 
 $details=new PlekitDetails($privileges);
@@ -280,7 +269,7 @@ $person_columns = array('email','person_id','first_name','last_name','roles');
 if (!empty($person_ids))
   $persons=$api->GetPersons(array('person_id'=>$slice['person_ids']),$person_columns);
 // just propose to add everyone else
-// xxx this is maybe too much for admins as it slows stuff down 
+// xxx this is maybe too much for admins as it slows stuff down
 // as regular persons can see only a fraction of the db anyway
 $potential_persons=
   $api->GetPersons(array('~person_id'=>$slice['person_ids'],
@@ -289,12 +278,12 @@ $potential_persons=
                   $person_columns);
 $count=count($persons);
 
-if ($profiling) plc_debug_prof('4: persons',count($persons));
+if ($profiling) plc_debug_prof('04: persons',count($persons));
 $toggle=
   new PlekitToggle ('my-slice-persons',"$count users",
                    array('bubble'=>
                          'Manage accounts attached to this slice',
-                         'visible'=>get_arg('show_persons',false)));
+                         'visible'=>get_arg('show_persons')));
 $toggle->start();
 
 ////////// people currently in
@@ -304,7 +293,7 @@ $toggle->start();
 // show otherwise
 $toggle_persons = new PlekitToggle ('my-slice-persons-current',
                                    "$count people currently in $name",
-                                   array('visible'=>get_arg('show_persons_current',!$privileges)));
+                                   array('visible'=>get_arg('show_persons_current')));
 $toggle_persons->start();
 
 $headers=array();
@@ -346,7 +335,7 @@ if ($privileges) {
   $count=count($potential_persons);
   $toggle_persons = new PlekitToggle ('my-slice-persons-add',
                                      "$count people may be added to $name",
-                                     array('visible'=>get_arg('show_persons_add',false)));
+                                     array('visible'=>get_arg('show_persons_add')));
   $toggle_persons->start();
   if ( ! $potential_persons ) {
     // xxx improve style
@@ -363,7 +352,7 @@ if ($privileges) {
                     'pagesize'=>8);
     // show search for admins only as other people won't get that many names to add
     if ( ! plc_is_admin() ) $options['search_area']=false;
-    
+
     $table=new PlekitTable('add_persons',$headers,'0',$options);
     $form=new PlekitForm(l_actions(),array('slice_id'=>$slice['slice_id']));
     $form->start();
@@ -442,32 +431,36 @@ $extra_columns[]=array('tagname'=>'deployment', 'header'=>'DL', 'source'=>'myplc
 }
 
 //CoMon Live data
-//NOTE: Uncomment these lines if CoMon provides information for your nodes
 
-//$extra_columns[]=array('tagname'=>'bwlimit', 'header'=>'BW', 'source'=>'comon', 'type'=>'sortAlphaNumericTop', 'title'=>'Bandwidth limit', 'fetched'=>false);
-//$extra_columns[]=array('tagname'=>'numcores', 'header'=>'CC', 'source'=>'comon', 'type'=>'sortAlphaNumericTop', 'title'=>'Number of CPU Cores', 'fetched'=>false);
-//$extra_columns[]=array('tagname'=>'cpuspeed', 'header'=>'CR', 'source'=>'comon', 'type'=>'sortAlphaNumericTop', 'title'=>'CPU clock rate', 'fetched'=>false);
-//$extra_columns[]=array('tagname'=>'disksize', 'header'=>'DS', 'source'=>'comon', 'type'=>'sortAlphaNumericTop', 'title'=>'Disk size', 'fetched'=>false);
-//$extra_columns[]=array('tagname'=>'gbfree', 'header'=>'DF', 'source'=>'comon', 'type'=>'sortAlphaNumericTop', 'title'=>'Currently available disk space', 'fetched'=>false);
-//$extra_columns[]=array('tagname'=>'memsize', 'header'=>'MS', 'source'=>'comon', 'type'=>'sortAlphaNumericTop', 'title'=>'Memory size', 'fetched'=>false);
-//$extra_columns[]=array('tagname'=>'numslices', 'header'=>'SM', 'source'=>'comon', 'type'=>'sortAlphaNumericTop', 'title'=>'Number of slices in memory', 'fetched'=>false);
-//$extra_columns[]=array('tagname'=>'uptime', 'header'=>'UT', 'source'=>'comon', 'type'=>'sortAlphaNumericTop', 'title'=>'Continuous uptime until now', 'fetched'=>false);
+if (MYSLICE_COMON_AVAILABLE)
+{
+$extra_columns[]=array('tagname'=>'bwlimit', 'header'=>'BW', 'source'=>'comon', 'type'=>'sortAlphaNumericTop', 'title'=>'Bandwidth limit', 'fetched'=>false);
+$extra_columns[]=array('tagname'=>'numcores', 'header'=>'CC', 'source'=>'comon', 'type'=>'sortAlphaNumericTop', 'title'=>'Number of CPU Cores', 'fetched'=>false);
+$extra_columns[]=array('tagname'=>'cpuspeed', 'header'=>'CR', 'source'=>'comon', 'type'=>'sortAlphaNumericTop', 'title'=>'CPU clock rate', 'fetched'=>false);
+$extra_columns[]=array('tagname'=>'disksize', 'header'=>'DS', 'source'=>'comon', 'type'=>'sortAlphaNumericTop', 'title'=>'Disk size', 'fetched'=>false);
+$extra_columns[]=array('tagname'=>'gbfree', 'header'=>'DF', 'source'=>'comon', 'type'=>'sortAlphaNumericTop', 'title'=>'Currently available disk space', 'fetched'=>false);
+$extra_columns[]=array('tagname'=>'memsize', 'header'=>'MS', 'source'=>'comon', 'type'=>'sortAlphaNumericTop', 'title'=>'Memory size', 'fetched'=>false);
+$extra_columns[]=array('tagname'=>'numslices', 'header'=>'SM', 'source'=>'comon', 'type'=>'sortAlphaNumericTop', 'title'=>'Number of slices in memory', 'fetched'=>false);
+$extra_columns[]=array('tagname'=>'uptime', 'header'=>'UT', 'source'=>'comon', 'type'=>'sortAlphaNumericTop', 'title'=>'Continuous uptime until now', 'fetched'=>false);
+}
 
 //TopHat Live data
-//NOTE: Uncomment these lines if TopHat provides information for your nodes
-
-//$extra_columns[]=array('tagname'=>'asn', 'header'=>'AS', 'source'=>'tophat', 'type'=>'string', 'title'=>'AS Number', 'fetched'=>false);
-//$extra_columns[]=array('tagname'=>'city', 'header'=>'LCY', 'source'=>'tophat', 'type'=>'string', 'title'=>'City', 'fetched'=>false);
-//$extra_columns[]=array('tagname'=>'region', 'header'=>'LRN', 'source'=>'tophat', 'type'=>'string', 'title'=>'Region', 'fetched'=>false);
-//$extra_columns[]=array('tagname'=>'country', 'header'=>'LCN', 'source'=>'tophat', 'type'=>'string', 'title'=>'Country', 'fetched'=>false);
-//$extra_columns[]=array('tagname'=>'continent', 'header'=>'LCT', 'source'=>'tophat', 'type'=>'string', 'title'=>'Continent', 'fetched'=>false);
-////$extra_columns[]=array('tagname'=>'hopcount', 'header'=>'HC', 'source'=>'tophat', 'type'=>'sortAlphaNumericTop', 'title'=>'Hop count from reference node', 'fetched'=>false);
+
+if (MYSLICE_TOPHAT_AVAILABLE)
+{
+$extra_columns[]=array('tagname'=>'asn', 'header'=>'AS', 'source'=>'tophat', 'type'=>'string', 'title'=>'AS Number', 'fetched'=>false);
+$extra_columns[]=array('tagname'=>'city', 'header'=>'LCY', 'source'=>'tophat', 'type'=>'string', 'title'=>'City', 'fetched'=>false);
+$extra_columns[]=array('tagname'=>'region', 'header'=>'LRN', 'source'=>'tophat', 'type'=>'string', 'title'=>'Region', 'fetched'=>false);
+$extra_columns[]=array('tagname'=>'country', 'header'=>'LCN', 'source'=>'tophat', 'type'=>'string', 'title'=>'Country', 'fetched'=>false);
+$extra_columns[]=array('tagname'=>'continent', 'header'=>'LCT', 'source'=>'tophat', 'type'=>'string', 'title'=>'Continent', 'fetched'=>false);
+//$extra_columns[]=array('tagname'=>'hopcount', 'header'=>'HC', 'source'=>'tophat', 'type'=>'sortAlphaNumericTop', 'title'=>'Hop count from reference node', 'fetched'=>false);
 ////$extra_columns[]=array('tagname'=>'rtt', 'header'=>'RTT', 'source'=>'tophat', 'type'=>'sortAlphaNumericTop', 'title'=>'Round trip time from reference node', 'fetched'=>false);
 //////$extra_columns[]=array('tagname'=>'agents', 'header'=>'MA', 'source'=>'tophat', 'type'=>'sortAlphaNumericTop', 'title'=>'Co-located measurement agents', 'fetched'=>true);
 ////$extra_columns[]=array('tagname'=>'agents_sonoma', 'header'=>'MAS', 'source'=>'tophat', 'type'=>'sortAlphaNumericTop', 'title'=>'Co-located SONoMA agents', 'fetched'=>true);
 ////$extra_columns[]=array('tagname'=>'agents_etomic', 'header'=>'MAE', 'source'=>'tophat', 'type'=>'sortAlphaNumericTop', 'title'=>'Co-located ETOMIC agents', 'fetched'=>true);
 ////$extra_columns[]=array('tagname'=>'agents_tdmi', 'header'=>'MAT', 'source'=>'tophat', 'type'=>'sortAlphaNumericTop', 'title'=>'Co-located TDMI agents', 'fetched'=>true);
 ////$extra_columns[]=array('tagname'=>'agents_dimes', 'header'=>'MAD', 'source'=>'tophat', 'type'=>'sortAlphaNumericTop', 'title'=>'Co-located DIMES agents', 'fetched'=>true);
+}
 
 
 
@@ -510,7 +503,7 @@ if ($column_configuration == "") {
       $i++;
       $slice_column_configuration = $slice_conf[$i];
     }
-  }        
+  }
 }
 
 if ($sliceconf_exists == false)
@@ -540,7 +533,7 @@ foreach ($show_conf as $ss) {
     $show_reservable_info = FALSE;
   else if ($ss =="columns")
     $show_layout_info = '0';
-}        
+}
 
 $slice_nodes=array();
 $potential_nodes=array();
@@ -553,7 +546,7 @@ foreach ($all_nodes as $node) {
     $potential_nodes[]=$node;
   }
 }
-if ($profiling) plc_debug_prof('5: nodes',count($slice_nodes));
+if ($profiling) plc_debug_prof('05: nodes',count($slice_nodes));
 ////////////////////
 // outline the number of reservable nodes
 $nodes_message=count_english($slice_nodes,"node");
@@ -561,40 +554,43 @@ if (count($reservable_nodes)) $nodes_message .= " (" . count($reservable_nodes)
 $toggle=new PlekitToggle ('my-slice-nodes',$nodes_message,
                          array('bubble'=>
                                'Manage nodes attached to this slice',
-                               'visible'=>get_arg('show_nodes',false)));
+                               'visible'=>get_arg('show_nodes')));
 $toggle->start();
 
 
 //////////////////// reservable nodes area
 $leases_info="
-You have attached one or more reservable nodes to your slice. 
-Reservable nodes show up with the '$mark' mark. 
+You have attached one or more reservable nodes to your slice.
+Reservable nodes show up with the '$mark' mark.
 Your slivers will be available only during timeslots
-where you have obtained leases. 
+where you have obtained leases.
 You can manage your leases in the tab below.
 <br>
 This feature is still experimental; feedback is appreciated at <a href='mailto:devel@planet-lab.org'>devel@planet-lab.org</a>
 ";
 $count=count($reservable_nodes);
 if ($count && $privileges) {
+  // include leases.js only if needed
+  drupal_set_html_head('<script src="/planetlab/slices/leases.js" type="text/javascript" charset="utf-8"></script>');
+
   // having reservable nodes in white lists looks a bit off scope for now...
   $toggle_nodes=new PlekitToggle('my-slice-nodes-reserve',
                                 "Leases - " . count($reservable_nodes) . " reservable node(s)",
-                                array('visible'=>get_arg('show_nodes_resa',false), 
-                                      'info_text'=>$leases_info,
-                                      'info_visible'=>$show_reservable_info));
+                                array('visible'=>get_arg('show_nodes_resa'),
+                                      'info-text'=>$leases_info,
+                                      'info-visible'=>$show_reservable_info));
   $toggle_nodes->start();
 
   // get settings from environment, otherwise set to defaults
   // when to start, in hours in the future from now
-  $leases_offset=$_GET['leases_offset'];
+  $leases_offset=$get_array($_GET, 'leases_offset');
   if ( ! $leases_offset ) $leases_offset=0;
   // how many timeslots to show
-  $leases_slots=$_GET['leases_slots'];
-  if ( ! $leases_slots ) $leases_slots = 48;
-  // offset in hours (in the future) from now 
-  $leases_w = $_GET['leases_w'];
-  if ( ! $leases_w) $leases_w=14;
+  $leases_slots=$get_array($_GET, 'leases_slots');
+  if ( ! $leases_slots ) $leases_slots = 36;
+  // offset in hours (in the future) from now
+  $leases_w = $get_array($_GET, 'leases_w');
+  if ( ! $leases_w) $leases_w=18;
   // number of timeslots to display
 
   $granularity=$api->GetLeaseGranularity();
@@ -622,17 +618,18 @@ if ($count && $privileges) {
 <div id='leases_area'></div>
 
 <div id='leases_buttons'>
-  <button id='leases_refresh' type='submit'>Refresh</button>
-  <button id='leases_submit' type='submit'>Submit</button>
+    <button id='leases_refresh' type='submit'>Refresh (Pull)</button>
+    <button id='leases_submit' type='submit'>Submit (Push)</button>
 </div>
 EOF;
 
   $toggle_nodes->end();
  }
 
+if ($profiling) plc_debug_prof('06: leases',0);
 
 //////////////////// node configuration panel
-if ($first_time_configuration) 
+if ($first_time_configuration)
 $column_conf_visible = '1';
 else
 $column_conf_visible = '0';
@@ -649,12 +646,11 @@ href="http://trac.myslice.info">http://trac.myslice.info</a>.
 ';
 $toggle_nodes=new PlekitToggle('my-slice-nodes-configuration',
                                "Node table layout",
-                               array('visible'=>$column_conf_visible, 
-                                    'info_text'=>$layout_info,
-                                    'info_visible'=>$show_layout_info));
+                               array('info-text'=>$layout_info,
+                                    'info-visible'=>$show_layout_info));
 $toggle_nodes->start();
 
-//usort ($table_headers, create_function('$col1,$col2','return strcmp($col1["header"],$col2["header"]);'));
+//usort ($table_headers, function($col1, $col2) {return strcmp($col1["header"],$col2["header"]);}));
 //print("<p>TABLE HEADERS<p>");
 //print_r($table_headers);
 
@@ -669,12 +665,15 @@ print("<br><input type='hidden' size=80 id='full_column_configuration' value='".
 print("<input type='hidden' id='previousConf' value='".$slice_column_configuration."' />");
 print("<input type='hidden' id='defaultConf' value='".$default_configuration."' />");
 
+if ($profiling) plc_debug_prof('07: before configuration_panel',0);
 $ConfigureColumns->configuration_panel_html(true);
 
+if ($profiling) plc_debug_prof('08: before javascript_init',0);
 $ConfigureColumns->javascript_init();
 
 $toggle_nodes->end();
 
+if ($profiling) plc_debug_prof('09: layout',0);
 
 $all_sites=$api->GetSites(NULL, array('site_id','login_base'));
 $site_hash=array();
@@ -685,16 +684,16 @@ $interface_filter=array('is_primary'=>TRUE);
 $interfaces=$api->GetInterfaces($interface_filter,$interface_columns);
 
 $interface_hash=array();
-foreach ($interfaces as $interface) $interface_hash[$interface['node_id']]=$interface;
-
-
-
+if ($interfaces) {
+       foreach ($interfaces as $interface) $interface_hash[$interface['node_id']]=$interface;
+}
 
+if ($profiling) plc_debug_prof('10: interfaces',count($interfaces));
 
 //////////////////// nodes currently in
 $toggle_nodes=new PlekitToggle('my-slice-nodes-current',
                               count_english($slice_nodes,"node") . " currently in $name",
-                              array('visible'=>get_arg('show_nodes_current',!$privileges)));
+                              array('visible'=>get_arg('show_nodes_current')));
 $toggle_nodes->start();
 
 $headers=array();
@@ -705,7 +704,7 @@ $notes [] = "For information about the different columns please see the <b>node
 /*
 $headers['peer']='string';
 $headers['hostname']='string';
-$short="-S-"; $long=Node::status_footnote(); $type='string'; 
+$short="-S-"; $long=Node::status_footnote(); $type='string';
        $headers[$short]=array('type'=>$type,'title'=>$long); $notes []= "$short = $long";
 $short=reservable_mark(); $long=reservable_legend(); $type='string';
        $headers[$short]=array('type'=>$type,'title'=>$long); $notes []= "$short = $long";
@@ -735,7 +734,7 @@ $table->start();
 if ($slice_nodes) foreach ($slice_nodes as $node) {
   $table->row_start();
 
-$table->cell($node['node_id'], array('display'=>'none'));
+  $table->cell($node['node_id'], array('display'=>'none'));
 
   $table->cell(l_node_obj($node));
   $peers->cell($table,$node['peer_id']);
@@ -776,6 +775,8 @@ if ($privileges) {
 $table->end();
 $toggle_nodes->end();
 
+if ($profiling) plc_debug_prof('11: nodes in',count($slice_nodes));
+
 //////////////////// nodes to add
 if ($privileges) {
   $new_potential_nodes = array();
@@ -790,7 +791,7 @@ if ($privileges) {
   $count=count($potential_nodes);
   $toggle_nodes=new PlekitToggle('my-slice-nodes-add',
                                 count_english($potential_nodes,"more node") . " available",
-                                array('visible'=>get_arg('show_nodes_add',false)));
+                                array('visible'=>get_arg('show_nodes_add')));
   $toggle_nodes->start();
 
   if ( $potential_nodes ) {
@@ -801,7 +802,7 @@ if ($privileges) {
 /*
     $headers['peer']='string';
     $headers['hostname']='string';
-    $short="-S-"; $long=Node::status_footnote(); $type='string'; 
+    $short="-S-"; $long=Node::status_footnote(); $type='string';
        $headers[$short]=array('type'=>$type,'title'=>$long); $notes []= "$short = $long";
        $short=reservable_mark(); $long=reservable_legend(); $type='string';
        $headers[$short]=array('type'=>$type,'title'=>$long); $notes []= "$short = $long";
@@ -816,7 +817,7 @@ if ($privileges) {
 
     //$notes=array_merge($notes,$visibletags->notes());
 $notes [] = "For information about the different columns please see the <b>node table layout</b> tab above or <b>mouse over</b> the column headers";
-    
+
     $table=new PlekitTable('add_nodes',$headers,NULL, $table_options);
     $form=new PlekitForm(l_actions(),
                         array('slice_id'=>$slice['slice_id']));
@@ -825,7 +826,7 @@ $notes [] = "For information about the different columns please see the <b>node
     if ($potential_nodes) foreach ($potential_nodes as $node) {
        $table->row_start();
 
-$table->cell($node['node_id'], array('display'=>'none'));
+       $table->cell($node['node_id'], array('display'=>'none'));
 
        $table->cell(l_node_obj($node));
        $peers->cell($table,$node['peer_id']);
@@ -861,6 +862,8 @@ $table->cell($node['node_id'], array('display'=>'none'));
 
 $toggle->end();
 
+if ($profiling) plc_debug_prof('12: nodes to add',count($potential_nodes));
+
 //////////////////////////////////////// retrieve all slice tags
 $tags=$api->GetSliceTags (array('slice_id'=>$slice_id));
 //////////////////////////////////////////////////////////// tab:initscripts
@@ -881,7 +884,7 @@ available names in the drop down below.  </li>
 <li> You also have the option to provide <span class='bold'> your own
 code </span>, with the following conventions: <ul>
 
-<li> Like regular initscripts, your script must except to receive as a
+<li> Like regular initscripts, your script must expect to receive as a
 first argument <span class='bold'> start </span>, <span class='bold'>
 stop </span> or <span class='bold'> restart </span>. It is important
 to honor this argument, as your slice may be stopped and restarted at
@@ -899,7 +902,7 @@ The slice-specific setting has precedence on a shared initscript.
 
 $shared_initscripts=$api->GetInitScripts(array('-SORT'=>'name'),array('name'));
 //$shared_initscripts=$api->GetInitScripts();
-if ($profiling) plc_debug_prof('6 initscripts',count($initscripts));
+if ($profiling) plc_debug_prof('13: initscripts',count($initscripts));
 // xxx expose this even on foreign slices for now
 if ($local_peer) {
   $initscript='';
@@ -922,8 +925,8 @@ if ($local_peer) {
 
   $toggle = new PlekitToggle('slice-initscripts',$label,
                             array('bubble'=>'Manage initscript on that slice',
-                                  'visible'=>get_arg('show_initscripts',false),
-                                  'info_text'=>$initscript_info
+                                  'visible'=>get_arg('show_initscripts'),
+                                  'info-text'=>$initscript_info
                                   // not messing with persontags to guess whether this should be displayed or not
                                   // hopefully some day toggle will know how to handle that using web storage
                                   ));
@@ -933,7 +936,7 @@ if ($local_peer) {
   // we expose the previous values so that actions.php can know if changes are really needed
   // the code needs to be encoded as it may contain any character
   // as far as the code, this does not work too well b/c what actions.php receives
-  // seems to have spurrious \r chars, and the comparison between old and new values 
+  // seems to have spurrious \r chars, and the comparison between old and new values
   // is not reliable, which results in changes being made although the code hasn't changed
   // hve spent too much time on this, good enough for now...
   $details->form_start(l_actions(),array('action'=>'update-initscripts',
@@ -960,7 +963,7 @@ if ($local_peer) {
                  $details->form()->select_html('initscript',$selectors,array('label'=>'none')),
                  'initscript',
                  array('input_type'=>'select'));
-  if ($initscript && ! $is_found) 
+  if ($initscript && ! $is_found)
     // xxx better rendering ?
     $details->th_td('WARNING',plc_warning_html("Current name '" . $initscript . "' is not a known shared initscript name"));
   ////////// by contents
@@ -976,7 +979,7 @@ if ($local_peer) {
                  array('input_type'=>'textarea', 'width'=>$script_width,'height'=>$script_height));
   $details->tr_submit('unused','Update initscripts');
   $details->form_end();
-  $details->end();  
+  $details->end();
   $toggle->end();
 }
 
@@ -991,22 +994,22 @@ $tag_value_threshold=24;
 
 // xxx expose this even on foreign slices for now
 //if ( $local_peer ) {
-  if ($profiling) plc_debug_prof('7 slice tags',count($tags));
+  if ($profiling) plc_debug_prof('14: slice tags',count($tags));
   function get_tagname ($tag) { return $tag['tagname'];}
   $tagnames = array_map ("get_tagname",$tags);
-  
+
   $toggle = new PlekitToggle ('slice-tags',count_english_warning($tags,'tag'),
                              array('bubble'=>'Inspect and set tags on that slice',
-                                   'visible'=>get_arg('show_tags',false)));
+                                   'visible'=>get_arg('show_tags')));
   $toggle->start();
-  
+
   $headers=array(
     "Name"=>"string",
     "Value"=>"string",
     "Node"=>"string",
     "NodeGroup"=>"string");
   if ($tags_privileges) $headers[plc_delete_icon()]="none";
-  
+
   $table_options=array("notes_area"=>false,"pagesize_area"=>false,"search_width"=>10);
   $table=new PlekitTable("slice_tags",$headers,'0',$table_options);
   $form=new PlekitForm(l_actions(),
@@ -1023,8 +1026,10 @@ $tag_value_threshold=24;
     }
     $_nodes = $api->GetNodes(array('node_id' => $_node_ids), array('node_id', 'hostname'));
     $_hostnames = array();
-    foreach ($_nodes as $_node) {
-      $_hostnames[$_node['node_id']] = $_node['hostname'];
+    if ($_nodes) {
+       foreach ($_nodes as $_node) {
+               $_hostnames[$_node['node_id']] = $_node['hostname'];
+       }
     }
 
     // Loop through tags again to display
@@ -1034,9 +1039,9 @@ $tag_value_threshold=24;
         $node_name = $_hostnames[$tag['node_id']];
       }
       $nodegroup_name="n/a";
-      if ($tag['nodegroup_id']) { 
+      if ($tag['nodegroup_id']) {
         $nodegroups=$api->GetNodeGroups(array('nodegroup_id'=>$tag['nodegroup_id']));
-       if ($profiling) plc_debug_prof('8 nodegroup for slice tag',$nodegroup);
+       if ($profiling) plc_debug_prof('15: nodegroup for slice tag',$nodegroup);
         if ($nodegroup) {
           $nodegroup = $nodegroups[0];
           $nodegroup_name = $nodegroup['groupname'];
@@ -1058,27 +1063,27 @@ $tag_value_threshold=24;
     $table->cell($form->submit_html ("delete-slice-tags","Remove selected"),
                  array('hfill'=>true,'align'=>'right'));
     $table->row_end();
-    
+
     $table->row_start();
     function tag_selector ($tag) {
       return array("display"=>$tag['tagname'],"value"=>$tag['tag_type_id']);
     }
-    $all_tags= $api->GetTagTypes( array ("category"=>"slice*","-SORT"=>"+tagname"), array("tagname","tag_type_id"));
-    if ($profiling) plc_debug_prof('9 tagtypes',count($all_tags));
+    $all_tags= $api->GetTagTypes( array ("category"=>"*slice*","-SORT"=>"+tagname"), array("tagname","tag_type_id"));
+    if ($profiling) plc_debug_prof('16: tagtypes',count($all_tags));
     $selector_tag=array_map("tag_selector",$all_tags);
-    
-    function node_selector($node) { 
+
+    function node_selector($node) {
       return array("display"=>$node["hostname"],"value"=>$node['node_id']);
     }
     $selector_node=array_map("node_selector",$slice_nodes);
-    
+
     function nodegroup_selector($ng) {
       return array("display"=>$ng["groupname"],"value"=>$ng['nodegroup_id']);
     }
     $all_nodegroups = $api->GetNodeGroups( array("groupname"=>"*"), array("groupname","nodegroup_id"));
-    if ($profiling) plc_debug_prof('10 nodegroups',count($all_nodegroups));
+    if ($profiling) plc_debug_prof('17: nodegroups',count($all_nodegroups));
     $selector_nodegroup=array_map("nodegroup_selector",$all_nodegroups);
-    
+
     $table->cell($form->select_html("tag_type_id",$selector_tag,array('label'=>"Choose Tag")));
     $table->cell($form->text_html("value","",array('width'=>8)));
     $table->cell($form->select_html("node_id",$selector_node,array('label'=>"All Nodes")));
@@ -1086,7 +1091,7 @@ $tag_value_threshold=24;
     $table->cell($form->submit_html("add-slice-tag","Set Tag"),array('columns'=>2,'align'=>'left'));
     $table->row_end();
   }
-    
+
   $table->end();
   $form->end();
   $toggle->end();
@@ -1095,7 +1100,7 @@ $tag_value_threshold=24;
 
 //////////////////////////////////////////////////////////// tab:renew
 if ($local_peer ) {
-  if ( ! $renew_visible) renew_area ($slice,$site,false);
+  if ( ! $renew_visible) renew_area ($slice,$site,NULL);
  }
 
 $peers->block_end($peer_id);