ckp
authorThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Mon, 2 Feb 2009 17:51:54 +0000 (17:51 +0000)
committerThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Mon, 2 Feb 2009 17:51:54 +0000 (17:51 +0000)
19 files changed:
modules/planetlab.module
planetlab/actions.php
planetlab/css/plc_style.css
planetlab/css/plc_tables.css
planetlab/events/index.php
planetlab/includes/plc_forms.php
planetlab/includes/plc_functions.php
planetlab/includes/plc_functions_trash.php
planetlab/includes/plc_peers.php [new file with mode: 0644]
planetlab/includes/plc_tables.php
planetlab/js/plc_tables.js
planetlab/nodes/comon.php
planetlab/nodes/node.php
planetlab/nodes/nodes.php
planetlab/peers/peer.php
planetlab/persons/person.php
planetlab/persons/persons.php
planetlab/sites/site.php
planetlab/sites/sites.php

index 5bb1355..be8293e 100644 (file)
@@ -111,6 +111,17 @@ function planetlab_block($op = 'list', $delta = 0, $edit = array()) {
       $is_user  = in_array(30,$plc->person['role_ids']);
       $is_tech  = in_array(40,$plc->person['role_ids']);
 
+      //////////////////// Log out
+      if ($user->uid) {
+       // Drupal logout (destroys the session and cleans up $user)
+       // Thierry unclear when this triggers, I suspect this is obsolete
+       $items[] = leaf (l(t('Log out of %s', 
+                            array('%s' => variable_get('site_name', 'local'))), 'logout'));
+      } else {
+       // PlanetLab logout (just destroy the session)
+       $items[] = leaf ( href (l_logout(),'Log out'));
+      }
+      
       //////////////////// Sites
       $site_item = '';
       $site_item .= href(l_sites(),"Sites");
@@ -179,19 +190,8 @@ function planetlab_block($op = 'list', $delta = 0, $edit = array()) {
       $doc_item .= ul_end();
       $items[] = expanded($doc_item);
 
-      if ($user->uid) {
-       // Drupal logout (destroys the session and cleans up $user)
-       // Thierry unclear when this triggers, I suspect this is obsolete
-       $items[] = leaf (l(t('Log out of %s', 
-                            array('%s' => variable_get('site_name', 'local'))), 'logout'));
-      } else {
-       // PlanetLab logout (just destroy the session)
-       $items[] = leaf ( href (l_logout(),'Log out'));
-      }
-      
       //$block['content'] = theme('list_item', $items);
       $block['content'] = menu_theme($items);
-      //      plc_debug("content",$block['content']);
     }
 
     /*
index 1d7123b..564ada2 100644 (file)
@@ -42,6 +42,8 @@ $known_actions []= "update-tag-type";
 //     expects:        tag_type_id & name & description & category & min_role_id  
 $known_actions []= "add-tag-type";
 //     expects:        tag_type_id & name & description & category & min_role_id  
+$known_actions []= "delete-site";      
+//     expects:        site_id
 $known_actions []= "expire-all-slices-in-site";
 //     expects:        slice_ids
 
@@ -229,6 +231,16 @@ switch ($action) {
    exit();
  }
 
+ case 'delete-site': {
+   $site_id = intval($_POST['site_id']);
+   if ($api->DeleteSite($site_id) ==1) 
+     drupal_set_message ("Site $site_id deleted");
+   else
+     drupal_set_error("Failed to delete site $site_id");
+   header ("location: " . l_sites());
+   exit();
+ }
+
  case 'expire-all-slices-in-site': {
    drupal_set_message("action $action not implemented in actions.php -- need tweaks and test");
    return;
index 2d2a0e0..cc99aef 100644 (file)
 expanding links
 */
 
-.example {padding:10px; color:#000; background:#fcf7ff; width:80%; clear:left; margin:2em auto 3em auto; border:1px solid #69c}
-a.expandlink {color:#00c}
+.example {
+    padding:10px; 
+    color:#000; 
+    background:#fcf7ff; 
+    width:80%; 
+    clear:left; 
+    margin:2em auto 3em auto; 
+    border:1px solid #69c;
+}
+a.expandlink {
+    color:#00c
+}
 a:active.expandlink,
 a:focus.expandlink,
-a:hover.expandlink {color:#fff}
-
-/* 
-body styles
-*/
-/*
-body {
-       font-family: sans-serif;
-       }
-
-#container {
-
-       }
-
-#topcontent {
-       position: relative;
-       width:100%;
-       height:30px;
-       }
-
-#loginbar {
-       padding:1px;
-       float:right;
-       font-size:14px;
-       border:2px solid #072F6F;
-       }
-
-#menu {
-       position: relative;
-       }
-
-#links {
-       top: 15px;
-       float:right;
-       }
-
-#boxcontainer {
-       margin-top:5px;
-       width:100%;
-       }
-
-#topbox {
-       width:100%;
-       height:49%;
-       top:50px;
-       }
-
-#topleftcontent {
-       float:left;
-       width:49%;
-       height:98%; 
-       background:#fff;
-       padding:4px;
-       }
-
-#toprightcontent {
-       float:right;
-       width:49%;
-       height:98%;
-       background:#fff;
-       padding:4px;
-       }
-
-#bottombox {
-       margin-top:1%;
-       width: 100%;
-       height: 49%;
-       }
-
-#bottomleftcontent {
-       float: left;
-       width:49%;
-       height:98%;
-       background:#fff;
-       padding:4px;
-       }
-
-#bottomrightcontent {
-       float: right;
-       width:49%;
-       height:98%;
-       background:#fff;
-       padding:4px;
-       }
-
-#toprightcontent, #bottomrightcontent, #topleftcontent, #bottomleftcontent{
-       border:2px solid #072F6F;
-       }
-*/
-/*
-form styles
-*/
-/*
-form {
-       border: 1px solid #072F6F;
-       padding: 5px;
-       }
-
-.textarea_input {
-       background-color: #ddd;
-       color: #072F6F;
-       font-size:12px;
-       }
-
-.select_input {
-       background-color: #ddd;
-       color: #072F6F;
-       font-size:12px;
-       }
-
-.text_input {
-       font-size: 10px;
-       background-color: #CCCCCC;
-       border: 1px solid #666666;
-       }
-
-.input {
-       font-size:10px;
-       color:#072F6F;
-       background-color: #ddd;
-       }
-*/
-/*
-autocomplete
-*/
-
-body
-{
-  position: relative;
-}
-
-ul.autosuggest
-{
-  position: absolute;
-  list-style: none;
-  margin: 0;
-  padding: 0;
-  overflow-y: auto;
-}
-
-ul.autosuggest li.autosuggest
-{
-  text-align: left;
-  border-bottom: 1px solid #ccc;
-  border-left: 1px solid #ccc;
-  border-right: 1px solid #ccc;
+a:hover.expandlink {
+    color:#fff
 }
 
-ul.autosuggest li.autosuggest a:link,
-ul.autosuggest li.autosuggest a:visited
-{
-  display: block;
-  padding: 2px;
-  text-decoration: none;
-  background-color: #eee;
-}
-
-ul.autosuggest li.autosuggest a:hover,
-ul.autosuggest li.autosuggest a:active
-{
-  color: #fff;
-  background-color: #f30;
-}
-
-
-ul.autosuggest li.highlight a:link,
-ul.autosuggest li.highlight a:visited
-{
-  color: #fff;
-  background-color: #f30;
-}
-
-
-/*
-drop down
-*/
-/*
-#csstopmenu, #csstopmenu ul{
-  padding: 0;
-  margin: 0;
-  list-style: none;
-}
-
-#csstopmenu li{
-  float: left;
-  position: relative;
-}
-
-#csstopmenu a{
-  text-decoration: none;
-}
-
-.mainitems{
-  border: 0px solid black;
-  border-left-width: 0;
-  width: 96px;
-  height: 16px;
-  padding-top: 7px;
-  background-repeat: no-repeat;
-}
-
-.mainitems:hover{
-  /*border-left-width: 1;
-  background-repeat: no-repeat;
-}
-/*
-.headerlinks a{
-  display:block;
-  padding:3px;
-  margin-right:2px;
-  font-size: 14px;
-  font-weight: bold;
-  text-align:center;
-  color: black;
-  background: #eee;
-  border:1px solid #072F6F;
-
-}
-
-.headerlinks a:hover{
-  background: #ddd;
-}
-
-.submenus{
-  display: none;
-  width: 10em;
-  position: absolute;
-
-  background-color: #E4E6EA;
-  border: 1px solid #072F6F;
-}
-
-.submenus li{
-  margin-top: 2px;
-  margin-bottom: 2px;
-  font-size:14px;
-  margin-left:10px;
-}
-
-.submenus li a{
-  display: block;
-  color: black;
-}
-
-html>body .submenus li a{ /* non IE browsers 
-  width: auto;
-}
-
-.submenus li a:hover{
-  background-color: #072F6F;
-  color: white;
-}
-
-#csstopmenu li>ul {/* non IE browsers 
-  top: auto;
-  left: auto;
-}
-
-#csstopmenu li:hover ul, li.over ul {
-  display: block;
-}
-
-html>body #clearmenu{ /* non IE browsers 
-  height: 3px;
+body {
+    position: relative;
 }
-*/
-/*
- * TODO: CSS for PlanetLab admin pages.
- * Must remain compatible with Drupal standard CSS names.
- *
- * Reid Moran <rmoran@cs.princeton.edu>
- * Mark Huang <mlhuang@cs.princeton.edu>
- * Copyright (C) 2006-2007 The Trustees of Princeton University
- *
- * $Id$
- */
 
 h2.plc { 
     text-align: center;
@@ -289,11 +30,11 @@ h2.plc {
 
 
 .plc-foreign {
-  background:  #d0d0d0;
+    background:  #e0e0e0;
 }
 
 .plc-warning {
-  background:  orange;
+    background:  orange;
 }
 .plc-error {
     background: red;
index 508b7ff..973ad97 100644 (file)
@@ -5,11 +5,11 @@ table.plc_table {
     margin: 0 auto 1.5em auto;
     border-collapse:collapse;
 }
-table.plc_table thead tr, table.plc_table tbody tr {
+table.plc_table>thead>tr, table.plc_table>tbody>tr {
     border-left: 1px solid #C1DAD7; 
 }    
 /* remove border for search/pagesize area */
-table.plc_table thead tr.pagesize_area, table.plc_table thead tr.search_area {
+table.plc_table>thead>tr.pagesize_area, table.plc_table>thead>tr.search_area {
     border-left: 0px;
 }    
 
@@ -218,19 +218,22 @@ tr.invisibleRow {
 p.paginationText {
     font-style:oblique;
 }
-p.plc_filter_note {
+p.plc_table_note {
     font-style:oblique;
     font-size:0.6em;
     font-family: georgia;
-    text-align: center
+    text-align: center;
+}
+span.plc_table_note_title {
+    font-weight:bold;
+    font-size:1.5em;
+    font-family: georgia;
+    text-align: center;
 }
 
-<!--[if IE]>
-<style type="text/css">
+/* for IE */
 ul.fdtablePaginater {display:inline-block;}
 mul.fdtablePaginater {display:inline;}
 ul.fdtablePaginater li {float:left;}
 ul.fdtablePaginater {text-align:center;}
-table { border-bottom:1px solid #C1DAD7; }
-</style>
-<![endif]-->
+table.plc_table { border-bottom:1px solid #C1DAD7; }
index 625ae3c..647b6b7 100644 (file)
@@ -153,10 +153,6 @@ function parse_dates () {
   return array($from_date,$from_time,$until_date,$until_time);
 }
 
-function my_is_int ($x) {
-    return (is_numeric($x) ? intval($x) == $x : false);
-}
-
 //////////////////////////////////////////////////////////// layout
 function truncate ($text,$numb,$etc = "...") {
   if (strlen($text) > $numb) {
@@ -390,7 +386,7 @@ if ( ! plc_is_admin()) {
     //    $message=sprintf('<span title="%s">%s</span>',$message,$message);
 
     $message=truncate($event['message'],40);
-    plc_table_row_start($event['event_id']);
+    plc_table_row_start();
     plc_table_cell(e_event($event['event_id']));
     plc_table_cell(date('M/d/Y H:i', $event['time']));
     plc_table_cell($event['call_name']);
index e67a2fd..ff86ec3 100644 (file)
@@ -18,7 +18,6 @@ function plc_form_start ($full_url, $values, $options=array()) {
   if ( $url_values ) $values=array_merge($values,$url_values);
   $method = array_key_exists('method',$options) ? $options['method'] : 'POST';
   print "<form method=$method action='$url' enctype='multipart/form-data'>";
-  //  plc_debug('values',$values);
   if ($values) foreach ($values as $key=>$value) {
     print plc_form_hidden_text($key,$value);
   }
index b23e86a..03a8756 100644 (file)
@@ -5,6 +5,10 @@
 // will trash this eventually
 require_once 'plc_functions_trash.php';
 
+// utility
+function my_is_int ($x) {
+    return (is_numeric($x) ? intval($x) == $x : false);
+}
 //////////////////////////////////////////////////////////// roles & other checks on global $plc
 function plc_is_admin () {
   global $plc;
@@ -45,7 +49,7 @@ function href ($url,$text) { return "<a href='" . $url . "'>" . $text . "</a>";
 function l_actions ()                  { return "/db/actions.php"; }
 
 function l_nodes ()                    { return "/db/nodes/index.php"; }
-function l_nodes_local ()              { return "/db/nodes/index.php?peerscope=local"; }
+function l_nodes_peer ($peer_id)       { return "/db/nodes/index.php?peerscope=$peer_id"; }
 function l_node ($node_id)             { return "/db/nodes/node.php?id=$node_id"; }
 function l_node_t ($node_id,$text)     { return href (l_node($node_id),$text); }
 function l_node_add ()                 { return "/db/nodes/node_add.php"; }
@@ -57,12 +61,13 @@ function l_interface_t ($interface_id,$text) {
 function l_interface_add($node_id)     { return "/db/nodes/interfaces.php?node_id=$node_id"; }
 
 function l_sites ()                    { return "/db/sites/index.php"; }
-function l_sites_local ()              { return "/db/sites/index.php?peerscope=local"; }
+function l_sites_peer ($peer_id)       { return "/db/sites/index.php?peerscope=$peer_id"; }
 function l_site ($site_id)             { return "/db/sites/index.php?id=$site_id"; }
 function l_site_t ($site_id,$text)     { return href (l_site($site_id),$text); }
 function l_site_update($site_id)       { return "/xxx-undefined"; }
 
 function l_slices ()                   { return "/db/slices/index.php"; }
+function l_slices_peer ($peer_id)      { return "/db/slices/index.php?peerscope=$peer_id"; }
 function l_slice ($slice_id)           { return "/db/slices/index.php?id=$slice_id"; }
 function l_slice_t ($slice_id,$text)   { return href (l_slice($slice_id),$text); }
 function l_slice_add ()                        { return "/db/slices/add_slice.php"; }
@@ -75,6 +80,7 @@ function l_sliver_t ($node_id,$slice_id,$text) {
                                          return href (l_sliver($node_id,$slice_id),$text) ; }
 
 function l_persons ()                  { return "/db/persons/index.php"; }
+function l_persons_peer ($peer_id)     { return "/db/persons/index.php?peerscope=$peer_id"; }
 function l_person ($person_id)         { return "/db/persons/index.php?id=$person_id"; }
 function l_person_t ($person_id,$text) { return href (l_person($person_id),$text); }
 function l_persons_site ($site_id)     { return "/db/persons/index.php?site_id=$site_id"; }
@@ -94,6 +100,7 @@ function l_event ($type,$param,$id)  { return "/db/events/index.php?type=$type&$p
 
 function l_peers()                     { return "/db/peers/index.php"; }
 function l_peer($peer_id)              { return "/db/peers/index.php?id=$peer_id"; }
+function l_peer_t($peer_id,$text)      { return href(l_peer($peer_id),$text); }
 
 function l_comon($id_name,$id_value)   { return "/db/nodes/comon.php?$id_name=$id_value"; }
 function l_sirius()                    { return "/db/sirius/index.php"; }
@@ -207,7 +214,7 @@ function is_reserved_network_addr($network_addr) {
   return false;
 }
 
-////////////////////////////////////////////////////////////  peer & peerscopes
+////////////////////////////////////////////////////////////  roles
 function plc_role_global_hash ($api) {
   $hash=array();
   $roles=$api->GetRoles();
@@ -217,88 +224,6 @@ function plc_role_global_hash ($api) {
   return $hash;
 }
   
-////////////////////////////////////////////////////////////  peer & peerscopes
-// when shortnames are needed on peers
-function plc_peer_global_hash ($api) {
-  $peer_columns=array('peer_id','shortname');
-  $peer_filter=array();
-  $peers = $api->GetPeers($peer_filter,$peer_columns);
-  
-  $peer_hash=array();
-  if ($peers) foreach ($peers as $peer) {
-    $peer_hash[$peer['peer_id']]=$peer;
-  }
-}
-
-function plc_peer_shortname ($peer_hash,$peer_id) {
-  if ( ! $peer_id ) {
-    return PLC_SHORTNAME;
-  } else {
-     return $peer_hash[$node['peer_id']]['shortname'];
-  }
-}
-
-function plc_peer_label ($peer) { 
-  if (! $peer) {
-    return "Local object on " . PLC_NAME . " (" . PLC_SHORTNAME . ")";
-  }
-  $result= $peer['peername'] . " (" . $peer['shortname'] . ")";
-  $result= href(l_peer($peer['peer_id']),$result);
-  return plc_foreign_text($result);
-}
-
-// to set the background to grey on foreign objects
-// return true if the peer is local 
-function plc_peer_block_start ($peer_hash,$peer_id) {
-  if ( ! $peer_id ) {
-    print "<div>";
-    return true;
-  } else {
-    // set two classes, one eneraic to all foreign, and one based on the peer's shortname for finer grain tuning
-    printf ('<div class="plc-foreign plc-%s>"',strtolower(plc_peer_shortname($peer_hash,$peer_id)));
-    return false;
-  }
-}
-
-function plc_peer_block_end () {
-  print "</div>\n";
-}
-
-// interpret standard syntax for peerscope
-function plc_peer_info ($api,$peerscope) {
-  switch ($peerscope) {
-  case '':
-    $peer_filter=array();
-    $peer_label="all peers";
-    break;
-  case 'local':
-    $peer_filter=array("peer_id"=>NULL);
-    $peer_label=PLC_SHORTNAME;
-    break;
-  case 'foreign':
-    $peer_filter=array("~peer_id"=>NULL);
-    $peer_label="foreign peers";
-    break;
-  default:
-    if (is_int ($peerscope)) {
-      $peer_id=intval($peerscope);
-      $peers=$api->GetPeers(array("peer_id"=>$peer_id));
-    } else {
-      $peers=$api->GetPeers(array("shortname"=>$peerscope));
-    }
-    if ($peers) {
-      $peer=$peers[0];
-      $peer_id=$peer['peer_id'];
-      $peer_filter=array("peer_id"=>$peer_id);
-      $peer_label='peer "' . $peer['shortname'] . '"';
-    } else {
-      $peer_filter=array();
-      $peer_label="[no such peer " . $peerscope . "]";
-    }
-    break;
-  }
-  return array ($peer_filter,$peer_label);
-}
 
 //////////////////////////////////////////////////////////// nodegroups
 // hash by 'tagname=value'
@@ -325,39 +250,7 @@ function tabs_node($node) { return array('Node ' . $node['hostname']=>l_node($no
 function tabs_site($site) { return array('Site ' . $site['name']=>l_site($site_id)); }
 function tabs_slice($slice) { return array('Slice ' . $slice['name']=>l_slice($slice_id)); }
 
-//////////////////////////////////////////////////////////// presentation
-// builds a table from an array of strings, with the given class
-// attempt to normalize the delete buttons and confirmations
-function plc_delete_button($width=15) {
-  return '<span title="Delete this entry"><img width=' . $width . ' alt="Delete this entry" src="/planetlab/icons/delete.png"></span>';
-}
-
-function plc_js_confirm($message) {
-  return "onclick=\"javascript:return confirm('Are you sure you want to delete " . $message . " ?')\"";
-}
-
-function plc_delete_link($url,$delete_message,$visible) {
-  return "<a href='" . $url . "' " . plc_js_confirm($delete_message) . ">" . $visible . "</a>";
-}
-
-function plc_delete_link_button($url,$delete_message,$width=15) {
-  return "<a href='" . $url . "' " . plc_js_confirm($delete_message) . ">" . plc_delete_button($width) . "</a>";
-}
-
-function plc_event_button($type,$param,$id) {
-  return '<a href="' . l_event($type,$param,$id) . '"> <span title="Related events"> <img src="/planetlab/icons/event.png" width=18></span></a>';
-}
-
-function plc_comon_button ($id_name, $id_value,$target="") {
-  $result='<a ';
-  if (!empty($target)) {
-    $result.='target="' . $target . '" ';
-  }
-  $result.='href="' . l_comon($id_name,$id_value) . '">';
-  $result.='<span title="Link to Comon"> <img src="/planetlab/icons/comon.png" width="18"></span></a>';
-  return $result;
-}
-
+//////////////////////////////////////////////////////////// html fragments
 function plc_vertical_table ($messages, $class="") {
   // pretty print the cell
   if ( empty( $messages) ) return "";
@@ -372,12 +265,6 @@ function plc_vertical_table ($messages, $class="") {
   return $formatted;
 }
 
-//////////////////////////////////////////////////////////// various mappers
-// could not figure how to use anonymous lambdas..
-function get_site_id ($site) { return $site['site_id'];}
-function get_tagname ($tag) { return $tag['tagname'];}
-
-////////////////////////////////////////////////////////////
 function plc_section ($text,$line=true) {
   if ($line) { print "<hr/>";}
   print "<h2 class=plc> $text </h2>\n";
@@ -409,5 +296,44 @@ function plc_debug ($message,$object) {
   print "</pre>";
 }
 
+if (! function_exists ("drupal_set_error")) {
+  function drupal_set_error ($text) {
+    drupal_set_message ("<span class=error>$text</span>");
+  }
+ }
+
+//////////////////////////////////////////////////////////// sort out for obsolete / trash
+// builds a table from an array of strings, with the given class
+// attempt to normalize the delete buttons and confirmations
+function plc_delete_button($width=15) {
+  return '<span title="Delete this entry"><img width=' . $width . ' alt="Delete this entry" src="/planetlab/icons/delete.png"></span>';
+}
+
+function plc_js_confirm($message) {
+  return "onclick=\"javascript:return confirm('Are you sure you want to delete " . $message . " ?')\"";
+}
+
+function plc_delete_link($url,$delete_message,$visible) {
+  return "<a href='" . $url . "' " . plc_js_confirm($delete_message) . ">" . $visible . "</a>";
+}
+
+function plc_delete_link_button($url,$delete_message,$width=15) {
+  return "<a href='" . $url . "' " . plc_js_confirm($delete_message) . ">" . plc_delete_button($width) . "</a>";
+}
+
+function plc_event_button($type,$param,$id) {
+  return '<a href="' . l_event($type,$param,$id) . '"> <span title="Related events"> <img src="/planetlab/icons/event.png" width=18></span></a>';
+}
+
+function plc_comon_button ($id_name, $id_value,$target="") {
+  $result='<a ';
+  if (!empty($target)) {
+    $result.='target="' . $target . '" ';
+  }
+  $result.='href="' . l_comon($id_name,$id_value) . '">';
+  $result.='<span title="Link to Comon"> <img src="/planetlab/icons/comon.png" width="18"></span></a>';
+  return $result;
+}
+
 
 ?>
index d277c5c..4ef99b5 100644 (file)
@@ -188,41 +188,6 @@ function paginate_trash ( $fn_array, $table_id, $caption, $limit, $main_field, $
   
 }
 
-
-
-function plc_peers_option_list ($api) {
-
-    // get list of peers
-    $peers=$api->GetPeers(NULL,array('peer_id','peername'));
-    if (count($peers)==0) {
-      $predef=array(array("peer_id"=>"","peername"=>"All (no known peers)"));
-    } else {
-      $predef=array(array("peer_id"=>"","peername"=>"All peers"),
-                   array("peer_id"=>"local","peername"=>"Local only"));
-      // show a 'foreign' button only if that makes sense
-      if (count($peers) >= 2) {
-       $predef [] = array("peer_id"=>"foreign","peername"=>"Foreign peers");
-      }
-    }
-    
-    $result="";
-    foreach ($predef as $a) {
-      $peer_line = "<option value='" . $a['peer_id'] . "'>" . $a['peername'] . "</option>\n";
-      $result .= $peer_line;
-    }
-
-    if (!empty($peers)) {
-      foreach ($peers as $a) {
-       $peer_line = "<option value='" . $a['peer_id'] . "'>" . $a['peername'] . "</option>\n";
-       $result .= $peer_line;
-      }
-    }
-
-    return $result;
-}
-
-
-
 // function for getting the diff of multi dimention array
 function arr_diff( $a1, $a2 ) {
   $diff= array();
diff --git a/planetlab/includes/plc_peers.php b/planetlab/includes/plc_peers.php
new file mode 100644 (file)
index 0000000..e63552e
--- /dev/null
@@ -0,0 +1,144 @@
+<?php
+  
+  // $Id$
+
+require_once 'plc_functions.php';
+
+// all known peers hashed on peer_id
+class Peers {
+  var $hash;
+  
+  function Peers ($api) {
+    $hash=array();
+    // fake entry fot the local myplc
+    $local_fake_peer = array ('peername' => PLC_NAME,
+                             'shortname' => PLC_SHORTNAME,
+                             'peer_id'=>'local');
+    $hash['local']=$local_fake_peer;
+    // remote
+    $peer_columns=array('peer_id','shortname','peername');
+    $peer_filter=NULL;
+    $peers = $api->GetPeers($peer_filter,$peer_columns);
+    if ($peers) foreach ($peers as $peer) {
+       $hash[$peer['peer_id']]=$peer;
+      }
+    $this->hash=$hash;
+  }
+
+  public static function is_local ($peer) {
+    return $peer['peer_id'] == 'local';
+  }
+
+  function peer ($peer_id) {
+    // use the fake local entry 
+    if (!$peer_id)
+      $peer_id='local';
+    return $this->hash[$peer_id];
+  }
+
+  public function peername ($peer_id) {
+    $peer = $this->peer ($peer_id);
+    return $peer['peername'];
+  }
+
+  public function shortname ($peer_id) {
+    $peer = $this->peer ($peer_id);
+    return $peer['shortname'];
+  }
+
+  public function label ($peer_id) {
+    $peer = $this->peer ($peer_id);
+    $result = $peer['peername'] . " (" . $peer['shortname'] . ")";
+    if (Peers::is_local ($peer))
+      $result = "[local] " . $result;
+    return $result;
+  }
+  
+  public function link ($peer_id,$text) {
+    if (! $peer_id)
+      return href("/",$text);
+    $peer = $this->peer ($peer_id);
+    return l_peer_t($peer['peer_id'],$text);
+  }
+
+  public function peer_link ($peer_id) {
+    if (! $peer_id)
+      return href("/",$this->label($peer_id));
+    $peer = $this->peer ($peer_id);
+    return l_peer_t($peer['peer_id'],$this->label($peer_id));
+  }
+
+  function classname ($peer_id) {
+    if ( ! $peer_id) 
+      return "";
+    $peer = $this->peer ($peer_id);
+    $shortname=$peer['shortname'];
+    return "plc-$shortname";
+  }
+  
+  function block_start ($peer_id) {
+    // to set the background to grey on foreign objects
+    // return true if the peer is local 
+    if ( ! $peer_id ) {
+      print "<div>";
+      return true;
+    } else {
+      $classname=strtolower($this->classname($peer_id));
+      // set two classes, one generic to all foreign, and one based on the peer's shortname for finer grain tuning
+      printf ("<div class=\"plc-foreign %s\">",$classname);
+      return false;
+    }
+  }
+
+  function block_end ($peer_id) {
+    print "</div>\n";
+  }
+}
+
+class PeerScope {
+  var $filter;
+  var $label;
+
+  function PeerScope ($api, $peerscope) {
+    switch ($peerscope) {
+    case '':
+      $this->filter=array();
+      $this->label="all peers";
+      break;
+    case 'local':
+      $this->filter=array("peer_id"=>NULL);
+      $this->label=PLC_SHORTNAME;
+      break;
+    case 'foreign':
+      $this->filter=array("~peer_id"=>NULL);
+      $this->label="foreign peers";
+      break;
+    default:
+      if (my_is_int ($peerscope)) {
+       $peer_id=intval($peerscope);
+       $peers=$api->GetPeers(array("peer_id"=>$peer_id));
+      } else {
+       $peers=$api->GetPeers(array("shortname"=>$peerscope));
+      }
+      if ($peers) {
+       $peer=$peers[0];
+       $peer_id=$peer['peer_id'];
+       $this->filter=array("peer_id"=>$peer_id);
+       $this->label='peer "' . $peer['shortname'] . '"';
+      } else {
+       $this->filter=array();
+       $this->label="[no such peerscope " . $peerscope . "]";
+      }
+      break;
+    }
+  }
+
+  public function filter() {
+    return $this->filter;
+  }
+  public function label() {
+    return $this->label;
+  }
+}
+
+?>
index 5eb0726..02b591b 100644 (file)
@@ -149,28 +149,29 @@ function plc_table_foot ($options) {
 
 ////////////////////////////////////////
 function plc_table_notes ($options) {
-  print <<< EOF
-<p class='plc_filter_note'> 
-Notes: Enter & or | in the search area to alternate between <bold>AND</bold> and <bold>OR</bold> search modes
-<br/> 
-Hold down the shift key to select multiple columns to sort 
-EOF;
-  if (array_key_exists('notes',$options)) {
-    foreach ($options['notes'] as $line) {
-      print "<br/>" . $line . "\n";
-    }
-  }
+  $plc_table_default_notes =  array(
+       "Enter & or | in the search area to alternate between <bold>AND</bold> and <bold>OR</bold> search modes",
+       "Hold down the shift key to select multiple columns to sort");
+
+  if (array_key_exists('notes',$options)) 
+    $notes=$options['notes'];
+  else
+    $notes=array();
+  $notes=array_merge($notes,$plc_table_default_notes);
+  print "<p class='plc_table_note'> <span class='plc_table_note_title'>Notes</span>\n";
+  foreach ($notes as $note) 
+    print "<br/>$note\n";
   print "</p>";
 }
 
 ////////////////////////////////////////
-function plc_table_row_start ($id="") {
-  if ( $id) {
-    printf ('<tr id="%s">',$id);
-  } else {
-    print '<tr>';
-  }
+function plc_table_row_start ($id=NULL,$class=NULL) {
+  print "<tr";
+  if ( $id) print (" id=\"$id\"");
+  if ( $class) print (" class=\"$class\"");
+  print ">\n";
 }
+
 function plc_table_row_end () {
   print "</tr>\n";
 }
index 9207def..90edc81 100644 (file)
@@ -104,19 +104,25 @@ function plc_table_filter (table_id,pattern_id,and_id) {
   // remove whitespaces at the beginning and end
   pattern_text = pattern_text.replace(/[ \t]+$/,"");
   pattern_text = pattern_text.replace(/^[ \t]+/,"");
+  // normnalize to lowercase
+  pattern_text = pattern_text.toLowerCase();
   
   if (pattern_text.indexOf ("&") != -1) {
-    pattern_text = pattern_text.replace(/&$/,"").replace(/&/," ");
+    pattern_text = pattern_text.replace(/&/," ");
     pattern_area.value=pattern_text;
     and_button.checked=true;
     return;
   } else if (pattern_text.indexOf ("|") != -1 ) {
-    pattern_text = pattern_text.replace(/\|$/,"").replace(/\|/," ");
+    pattern_text = pattern_text.replace(/\|/," ");
     pattern_area.value=pattern_text;
     and_button.checked=false;
     return;
   }
     
+  // var counter=0;
+  //  window.console.log ("entering plc_table_filter " + table_id);
+
+  var re_brackets = new RegExp ('<[^>]*>','g');
   var patterns = pattern_text.split(" ");
 
   for (row_index = 0; row=rows[row_index]; row_index++) {
@@ -130,9 +136,13 @@ function plc_table_filter (table_id,pattern_id,and_id) {
       visible=true;
       for (i in patterns) {
        var pattern_matched=false;
-       pattern=patterns[i];
+       pattern=new RegExp(patterns[i],"i");
        for (cell_index = 0; cell=cells[cell_index]; cell_index++) {
-         if ( cell.innerHTML.match(pattern)) {
+         var against=cell.innerHTML;
+         against=against.replace(re_brackets,'');
+         //counter++;
+         //window.console.log ("plc_table_filter is matching " + against + " against " + pattern);
+         if ( against.match(pattern)) {
            pattern_matched=true;
            // alert ('AND matched! p='+pattern+' c='+cell.innerHTML);
            break;        
@@ -146,7 +156,8 @@ function plc_table_filter (table_id,pattern_id,and_id) {
       for (cell_index = 0; cell=cells[cell_index]; cell_index++) {
        for (i in patterns) {
          pattern=patterns[i];
-         if (cell.innerHTML.match(pattern)) {
+         //counter++;
+         if (cell.innerHTML.toLowerCase().match(pattern)) {
            visible=true;
            // alert ('OR matched! p='+pattern+' c='+cell.innerHTML);
            break;
@@ -154,6 +165,7 @@ function plc_table_filter (table_id,pattern_id,and_id) {
        }
       }
     }
+    //window.console.log ("plc_table_filter has done " + counter + " matches");
     plc_table_row_visible(row,visible);
     if (visible) matching_entries +=1;
   }
index 3524eb9..2406c1c 100644 (file)
@@ -93,8 +93,6 @@ foreach ($nns as $nn) {
   $local_ips[] = $nn['ip'];
 }
 
-//plc_debug('locals',$local_ips);
-
 // for foreign hosts we're left with dns resolving them
 $remote_ips=array();
 foreach ($hostnames as $hostname) {
@@ -106,15 +104,11 @@ foreach ($hostnames as $hostname) {
   }
 }
 
-//plc_debug('remote ips',$remote_ips);
-
-
 // add both lists
 $all_ips=$local_ips+$remote_ips;
 // compute comon URL
 $url = plc_comon_url_from_ips("http://comon.cs.princeton.edu",$all_ips);
 
-//plc_debug('url',$url);
 
 // redirect to comon
 header("Location: " . $url);
index 0c15c8a..8bb3bfb 100644 (file)
@@ -15,6 +15,7 @@ include 'plc_header.php';
 
 // Common functions
 require_once 'plc_functions.php';
+require_once 'plc_peers.php';
 require_once 'plc_minitabs.php';
 require_once 'plc_tables.php';
 require_once 'plc_details.php';
@@ -50,12 +51,9 @@ $interface_ids= $node['interface_ids'];
 $nodegroup_ids= $node['nodegroup_ids'];
 $pcu_ids= $node['pcu_ids'];
 
-// get peer
+// get peers
 $peer_id = $node['peer_id'];
-if ($peer_id) {
-  $peers=$api->GetPeers(array($peer_id));
-  $peer=$peers[0];
- }
+$peers=new Peers ($api);
 
 // gets site info
 $sites= $api->GetSites( array( $site_id ) );
@@ -99,11 +97,6 @@ if( !empty( $pcu_ids ) )
 
 //////////////////// display node info
 
-// fetches peers and initialize hash peer_id->peer
-$peer_hash = plc_peer_global_hash ($api);
-// show gray background on foreign objects : start a <div> with proper class
-$local_peer = plc_peer_block_start ($peer_hash,$peer_id);
-  
 drupal_set_title("Details for node " . $hostname);
   
 // extra privileges to admins, and (pi||tech) on this site
@@ -137,15 +130,22 @@ $tabs["All nodes"]=l_nodes();
 
 plc_tabs($tabs);
 
+// show gray background on foreign objects : start a <div> with proper class
+$local_peer = $peers->block_start ($peer_id);
+  
 plc_details_start ();
+if ( ! $local_peer) {
+  plc_details_line("Peer",$peers->peer_link($peer_id));
+  plc_details_space_line();
+ }
+
 plc_details_line("Hostname",$hostname);
 plc_details_line("Type",$node_type);
 plc_details_line("Model",$model);
 plc_details_line("Version",$version);
-plc_details_line("Peer",plc_peer_label($peer));
-
 // no tool to implement this multiple-choice setting yet
 // xxx would need at least to use the proper class, like plc_details_class() or something
+plc_details_space_line ();
 echo "<tr><th>Boot State: </th><td>";
 if ( ! $local_peer) {
   echo $boot_state;
@@ -205,32 +205,33 @@ plc_details_end ();
 
 //////////////////////////////////////////////////////////// Tags
 // get tags
-$tags=$api->GetNodeTags (array('node_id'=>$node_id));
-$tagnames = array_map ("get_tagname",$tags);
-//plc_debug('tagnames',$tagnames);
-$nodegroups_hash=plc_nodegroup_global_hash($api,$tagnames);
-//plc_debug('hash',$nodegroups_hash);
-
-plc_section("Tags");
-$headers=array("Name"=>"string",
-              "Value"=>"string",
-              "Nodegroup"=>"string");
-
-$table_options=array("notes_area"=>false,"pagesize_area"=>false,"search_width"=>10);
-plc_table_start("node_tags",$headers,0,$table_options);
-if ($tags) foreach ($tags as $tag) {
-  // does this match a nodegroup ?
-  $nodegroup_name="n/a";
-  $nodegroup_key=$tag['tagname'] . "=" . $tag['value'];
-  $nodegroup=$nodegroups_hash[$nodegroup_key];
-  if ($nodegroup) $nodegroup_name=l_nodegroup_t($nodegroup['nodegroup_id'],$nodegroup['groupname']);
-  plc_table_row_start();
-  plc_table_cell($tag['tagname']);
-  plc_table_cell($tag['value']);
-  plc_table_cell($nodegroup_name);
-  plc_table_row_end();
-}
-plc_table_end("node_tags");
+if ( $local_peer ) {
+  $tags=$api->GetNodeTags (array('node_id'=>$node_id));
+  function get_tagname ($tag) { return $tag['tagname'];}
+  $tagnames = array_map ("get_tagname",$tags);
+  $nodegroups_hash=plc_nodegroup_global_hash($api,$tagnames);
+  
+  plc_section("Tags");
+  $headers=array("Name"=>"string",
+                "Value"=>"string",
+                "Nodegroup"=>"string");
+  
+  $table_options=array("notes_area"=>false,"pagesize_area"=>false,"search_width"=>10);
+  plc_table_start("node_tags",$headers,0,$table_options);
+  if ($tags) foreach ($tags as $tag) {
+      // does this match a nodegroup ?
+      $nodegroup_name="n/a";
+      $nodegroup_key=$tag['tagname'] . "=" . $tag['value'];
+      $nodegroup=$nodegroups_hash[$nodegroup_key];
+      if ($nodegroup) $nodegroup_name=l_nodegroup_t($nodegroup['nodegroup_id'],$nodegroup['groupname']);
+      plc_table_row_start();
+      plc_table_cell($tag['tagname']);
+      plc_table_cell($tag['value']);
+      plc_table_cell($nodegroup_name);
+      plc_table_row_end();
+    }
+  plc_table_end("node_tags");
+ }
 
 //////////////////////////////////////////////////////////// slices
 // display slices
@@ -252,8 +253,8 @@ if ( ! $slices  ) {
   plc_table_start ("node_slices",$headers,1,$table_options);
 
   foreach ($slices as $slice) {
-    plc_table_row_start($slice['name']);
-    plc_table_cell (plc_peer_shortname($peer_hash,$slice['peer_id']));
+    plc_table_row_start();
+    plc_table_cell ($peers->shortname($peer_id));
     plc_table_cell (l_slice_t ($slice['slice_id'],$slice['name']));
     plc_table_cell (l_sliver_t ($node_id,$slice['slice_id'],'view'));
     plc_table_row_end();
@@ -300,7 +301,7 @@ if ( $local_peer ) {
       $interface_type= $interface['type'];
       $interface_method= $interface['method'];
 
-      plc_table_row_start($interface['ip']);
+      plc_table_row_start();
       if ( $privileges ) {
        if (!$interface_primary) {
          // xxx 
@@ -326,7 +327,7 @@ if ( $local_peer ) {
  }
       
 ////////////////////////////////////////////////////////////
-plc_peer_block_end();
+$peers->block_end($peer_id);
 
 
 // Print footer
index 13e61c2..7916444 100644 (file)
@@ -15,6 +15,7 @@ include 'plc_header.php';
 
 // Common functions
 require_once 'plc_functions.php';
+require_once 'plc_peers.php';
 require_once 'plc_minitabs.php';
 require_once 'plc_tables.php';
 
@@ -63,8 +64,9 @@ if ($pattern) {
  }
 
 // server-side selection on peerscope
-list ( $peer_filter, $peer_label) = plc_peer_info($api,$_GET['peerscope']);
-$node_filter=array_merge($node_filter,$peer_filter);
+$peerscope=new PeerScope($api,$_GET['peerscope']);
+$node_filter=array_merge($node_filter,$peerscope->filter());
+$title .= ' - ' . $peerscope->label();
 
 if ($site_id) {
   $sites=$api->GetSites(array($site_id),array("name","login_base"));
@@ -135,7 +137,7 @@ $headers = array ("Peer"=>"string",
 # initial sort on hostnames
 plc_table_start("nodes",$headers,4);
 
-$peer_hash = plc_peer_global_hash ($api);
+$peers = new Peers ($api);
 // write rows
 foreach ($nodes as $node) {
     $hostname=$node['hostname'];
@@ -146,11 +148,12 @@ foreach ($nodes as $node) {
     $node_id=$node['node_id'];
     $ip=$interface_hash[$node['node_id']]['ip'];
     $interface_id=$interface_hash[$node['node_id']]['interface_id'];
-    $shortname = plc_peer_shortname ($peer_hash,$node['peer_id']);
+    $peer_id=$node['peer_id'];
+    $shortname = $peers->shortname($peer_id);
     $node_type = $node['node_type'];
 
-    plc_table_row_start($hostname);
-    plc_table_cell ($shortname);
+    plc_table_row_start();
+    plc_table_cell ($peers->link($peer_id,$shortname));
     plc_table_cell (topdomain($hostname));
     plc_table_cell (l_site_t($site_id,$login_base));
     plc_table_cell ($node['boot_state']);
index 7deca56..d21c051 100644 (file)
@@ -36,6 +36,7 @@ if ( ! $peer_id ) { plc_error('Malformed URL - id not set'); return; }
 // make the api call to pull that peers DATA
 $peers= $api->GetPeers( array( $peer_id ) );
 $peer = $peers[0];
+$peer_id=$peer['peer_id'];
 
 drupal_set_title("Details for Peer " . $peername);
 
@@ -45,10 +46,14 @@ plc_details_line("Short name",$peer['shortname']);
 plc_details_line("Hierarchical name",$peer['hrn_root']);
 plc_details_line("API URL",$peer['peer_url']);
 
-plc_details_line("Number of sites",sizeof($peer['site_ids']));
-plc_details_line("Number of nodes",sizeof($peer['node_ids']));
-plc_details_line("Number of persons",sizeof($peer['person_ids']));
-plc_details_line("Number of slices",sizeof($peer['slice_ids']));
+$nb=sizeof($peer['site_ids']);
+plc_details_line("Number of sites",href(l_sites_peer($peer_id),"$nb sites"));
+$nb=sizeof($peer['node_ids']);
+plc_details_line("Number of nodes",href(l_nodes_peer($peer_id),"$nb nodes"));
+$nb=sizeof($peer['person_ids']);
+plc_details_line("Number of users",href(l_persons_peer($peer_id),"$nb users"));
+$nb=sizeof($peer['slice_ids']);
+plc_details_line("Number of slices",href(l_slices_peer($peer_id),"$nb slices"));
 plc_details_end();
 
 // Print footer
index 74dd797..11bcd15 100644 (file)
@@ -15,6 +15,7 @@ include 'plc_header.php';
 
 // Common functions
 require_once 'plc_functions.php';
+require_once 'plc_peers.php';
 require_once 'plc_minitabs.php';
 require_once 'plc_tables.php';
 require_once 'plc_details.php';
@@ -64,13 +65,9 @@ $keys= $api->GetKeys( $key_ids );
 
 drupal_set_title("Details for account " . $first_name . " " . $last_name);
 
-$plc_hash=plc_peer_global_hash($api);
-if ($peer_id) {
-  $peers=$api->GetPeers(array($peer_id));
-  $peer=$peers[0];
-}
+$peers = new Peers ($api);
 
-$local_peer = plc_peer_block_start ($peer_hash,$peer_id);
+$local_peer = $peers->block_start ($peer_id);
 $is_my_account = plc_my_person_id() == $person_id;
 $privileges = plc_is_admin () || ( plc_in_site($site_id) && plc_is_pi());
 
@@ -144,7 +141,7 @@ plc_details_line("URL",$url);
 plc_details_line("Phone",$phone);
 plc_details_line("Title",$title);
 plc_details_line("Bio",wordwrap($bio,50,"<br/>"));
-plc_details_line("Peer",plc_peer_label($peer));
+plc_details_line("Peer",$peers->peer_link($peer_id));
 plc_details_end();
 
 //////////////////// slices
@@ -173,11 +170,8 @@ if( ! $slices) {
  }
 
 // we don't set 'action', but use the submit button name instead
-plc_form_start(l_actions(),
-              array("person_id"=>$person_id,
-                    // uncomment this to run the 'debug' action 
-                    //"action"=>"debug",
-                    ));
+plc_form_start(l_actions(), 
+              array("person_id"=>$person_id,));
 
 //////////////////// keys
 plc_section ("Keys");
@@ -197,7 +191,7 @@ plc_table_start("person_keys",$headers,"1",$table_options);
     
 if ($keys) foreach ($keys as $key) {
   $key_id=$key['key_id'];
-  plc_table_row_start($key_id);
+  plc_table_row_start();
   plc_table_cell ($key['key_type']);
   plc_table_cell(wordwrap( $key['key'], 60, "<br />\n", 1 ));
   if ($can_manage_keys) 
@@ -256,6 +250,7 @@ if ($can_manage_sites) {
   // add a site : the button
   $add_site_right_area=plc_form_submit_text("add-person-to-site","Add in site");
   // get list of local sites that the person is not in
+  function get_site_id ($site) { return $site['site_id'];}
   $person_site_ids=array_map("get_site_id",$sites);
   $relevant_sites= $api->GetSites( array("peer_id"=>NULL,"~site_id"=>$person_site_ids), $site_columns);
 
@@ -324,7 +319,7 @@ plc_table_end("person_roles",array("footers"=>$footers));
 
 //////////////////////////////
 plc_form_end();
-plc_peer_block_end();
+$peers->block_end($peer_id);
   
 // Print footer
 include 'plc_footer.php';
index f5ac603..e4f5a39 100644 (file)
@@ -15,6 +15,7 @@ include 'plc_header.php';
 
 // Common functions
 require_once 'plc_functions.php';
+require_once 'plc_peers.php';
 require_once 'plc_minitabs.php';
 require_once 'plc_tables.php';
 
@@ -79,8 +80,9 @@ if ($pattern) {
  }
 
 // server-side selection on peerscope
-list ( $peer_filter, $peer_label) = plc_peer_info($api,$_GET['peerscope']);
-$person_filter=array_merge($person_filter,$peer_filter);
+$peerscope=new PeerScope ($api,$_GET['peerscope']);
+$person_filter=array_merge($person_filter,$peerscope->filter());
+$title .= ' - ' . $peerscope->label();
 
 if ($site_id) {
   $sites=$api->GetSites(array($site_id),array("name","login_base","person_ids"));
@@ -138,25 +140,26 @@ $headers = array ("Peer"=>"string",
                  "Last"=>"string",
                  "Email"=>"string",
                  "Site" => "string",
+                 "S" => "int",
                  "Status"=>"string",
                  );
 
 // initial sort on email
 plc_table_start("persons",$headers,4);
 
-$peer_hash = plc_peer_global_hash ($api);
+$peers=new Peers ($api);
 // write rows
 
 foreach ($persons as $person) {
     $person_id=$person['person_id'];
     $email=$person['email'];
-    $shortname = plc_peer_shortname ($peer_hash,$person['peer_id']);
+    $shortname = $peers->shortname($person['peer_id']);
     $site_id=$person['site_ids'][0];
     $site=$site_hash[$site_id];
     $login_base = $site['login_base'];
     $roles = plc_vertical_table ($person['roles']);
 
-    plc_table_row_start($email);
+    plc_table_row_start();
     
     plc_table_cell($shortname);
     plc_table_cell($roles);
@@ -164,12 +167,13 @@ foreach ($persons as $person) {
     plc_table_cell ($person['last_name']);
     plc_table_cell(l_person_t($person_id,$email));
     plc_table_cell($login_base);
+    plc_table_cell(count($person['slice_ids']));
     plc_table_cell(person_status($person));
     plc_table_row_end();
                                 
 }
-
-plc_table_end("persons");
+$notes=array("The S column shows the number of slices for the given user");
+plc_table_end("persons",array('notes'=>$notes));
 
 // Print footer
 include 'plc_footer.php';
index cdce78e..67a6783 100644 (file)
@@ -15,6 +15,7 @@ include 'plc_header.php';
 
 // Common functions
 require_once 'plc_functions.php';
+require_once 'plc_peers.php';
 require_once 'plc_minitabs.php';
 require_once 'plc_tables.php';
 require_once 'plc_details.php';
@@ -36,8 +37,8 @@ if (empty($sites)) {
 
 $site=$sites[0];
 // var names to api return
-$sitename= $site['name'];
-$abbrev_name= $site['abbreviated_name'];
+$sitename= htmlentities($site['name']);
+$abbrev_name= htmlentities($site['abbreviated_name']);
 $site_url= $site['url'];
 $login_base= $site['login_base'];
 $site_lat= $site['latitude'];
@@ -47,12 +48,12 @@ $max_slices= $site['max_slices'];
 
 $enabled = $site['enabled'];
 
+// extra privileges to admins, and (pi||tech) on this site
+$privileges = plc_is_admin () || ( plc_in_site($site_id) && ( plc_is_pi() || plc_is_tech()));
+  
 // get peer details
 $peer_id= $site['peer_id'];
-if ($peer_id) {
-  $peers=$api->GetPeers(array("peer_id"=>$peer_id));
-  $peer=$peers[0];
- }
+$peers = new Peers ($api);
 
 $adress_ids= $site['address_ids'];
 $pcu_ids= $site['pcu_ids'];
@@ -65,7 +66,8 @@ $api->begin();
 $api->GetAddresses( $adress_ids );
 
 // gets pcu info
-$api->GetPCUs( $pcu_ids );
+// GetPCUs is not accessible to the 'user' role
+//$api->GetPCUs( $pcu_ids );
 
 // gets node info
 $api->GetNodes( $node_ids, array( "node_id", "hostname", "boot_state" ) );
@@ -75,7 +77,8 @@ $api->GetPersons( $person_ids, array( "role_ids", "person_id", "first_name", "la
 
 $api->GetSlices ( $slice_ids, array ("slice_id", "name", "instantiation" ) );
 
-list( $addresses, $pcus, $nodes, $persons, $slices )= $api->commit();
+//list( $addresses, $pcus, $nodes, $persons, $slices )= $api->commit();
+list( $addresses, $nodes, $persons, $slices )= $api->commit();
   
 $techs = array();
 $pis = array();
@@ -90,10 +93,6 @@ foreach( $persons as $person ) {
 }
 
 // fetches peers and initialize hash peer_id->peer
-$peer_hash = plc_peer_global_hash ($api);
-// show gray background on foreign objects : start a <div> with proper class
-plc_peer_block_start ($peer_hash,$peer_id);
-
 drupal_set_title("Details for site " . $sitename);
   
 // extra privileges to admins, and pi on this site
@@ -107,12 +106,14 @@ if ( ! $peer_id  && $privileges ) {
                        'bubble'=>"Update details of $sitename");
   // not avail to PI
   $tabs['Expire slices'] = array('url'=>l_actions(),
+                                'method'=>'POST',
                                 'values'=>array('site_id'=>$site_id,
                                                 'action'=>'expire-all-slices-in-site'),
                                 'bubble'=>"Expire all slices and prevent creation of new slices",
                                 'confirm'=>"Suspend all slices in $login_base");
   if (plc_is_admin())
     $tabs['Delete']=array('url'=>l_actions(),
+                         'method'=>'POST',
                          'values'=>array('site_id'=>$site_id,
                                          'action'=>'delete-site'),
                          'bubble'=>"Delete site $sitename",
@@ -133,6 +134,9 @@ $tabs["All sites"]=l_sites();
 
 plc_tabs($tabs);
 
+// show gray background on foreign objects : start a <div> with proper class
+$peers->block_start ($peer_id);
+
 if ( ! $enabled ) 
   plc_warning ("This site is not enabled - Please visit " . 
               href (l_sites_pending(),"this page") . 
@@ -145,7 +149,7 @@ plc_details_line("Abbreviated name",$abbrev_name);
 plc_details_line("URL",$site_url);
 plc_details_line("Latitude",$site_lat);
 plc_details_line("Longitude",$site_long);
-plc_details_line("Peer",plc_peer_label($peer));
+plc_details_line("Peer",$peers->peer_link($peer_id));
 
 if ( ! $peer_id ) {
 
@@ -155,13 +159,13 @@ if ( ! $peer_id ) {
     plc_details_line("Addresses","");
     foreach ($addresses as $address) {
       plc_details_line(plc_vertical_table($address['address_types']),
-                      plc_vertical_table($address['line1'],
-                                         $address['line2'],
-                                         $address['line3'],
-                                         $address['city'],
-                                         $address['state'],
-                                         $address['postalcode'],
-                                         $address['country']));
+                      plc_vertical_table(array($address['line1'],
+                                               $address['line2'],
+                                               $address['line3'],
+                                               $address['city'],
+                                               $address['state'],
+                                               $address['postalcode'],
+                                               $address['country'])));
     }
   }
 
@@ -206,7 +210,7 @@ if ( ! $peer_id ) {
 plc_details_end();
 
 ////////////////////////////////////////
-plc_peer_block_end();
+$peers->block_end($peer_id);
 
 // Print footer
 include 'plc_footer.php';
index 81ba30c..9a84876 100644 (file)
@@ -15,6 +15,7 @@ include 'plc_header.php';
 
 // Common functions
 require_once 'plc_functions.php';
+require_once 'plc_peers.php';
 require_once 'plc_minitabs.php';
 require_once 'plc_tables.php';
 
@@ -80,8 +81,9 @@ if ($pattern) {
  }
 
 // server-side selection on peerscope
-list ( $peer_filter, $peer_label) = plc_peer_info($api,$_GET['peerscope']);
-$site_filter=array_merge($site_filter,$peer_filter);
+$peerscope = new PeerScope ($api,$peerscope);
+$site_filter=array_merge($site_filter,$peerscope->filter());
+$title .= ' - ' . $peerscope->label();
 
 if (! plc_is_admin()) {
   $site_columns = array("site_id", "name", "abbreviated_name", "login_base" , "peer_id" );
@@ -92,7 +94,7 @@ if (! plc_is_admin()) {
  }
 
 $tabs['My site'] = array('url'=>l_site(plc_my_site_id()));
-$tabs['Local sites'] = array('url'=>l_sites_local());
+$tabs['Local sites'] = array('url'=>l_sites_peer('local'));
 if (plc_is_admin()) 
   $tabs['Pending'] = array ('url'=>l_sites_pending(),
                            'bubble'=>'Review pending join requests');
@@ -103,7 +105,7 @@ plc_tabs($tabs);
 // go
 $sites= $api->GetSites( $site_filter , $site_columns);
 
-$peer_hash = plc_peer_global_hash ($api);
+$peers=new Peers($api);
 
 $headers['Peer']="string";
 $headers['Full Name']="string";
@@ -117,9 +119,10 @@ if (plc_is_admin()) {
  }
 
 plc_table_start("sites",$headers,2);
+
 if ($sites) foreach ($sites as $site) {
-  $shortname = plc_peer_shortname ($peer_hash,$site['peer_id']);
-  plc_table_row_start($site['login_base']);
+  $shortname = $peers->shortname($site['peer_id']);
+  plc_table_row_start();
   plc_table_cell($shortname);
   plc_table_cell (l_site_t($site['site_id'],$site['name']));
   plc_table_cell ($site['login_base']);
@@ -132,7 +135,9 @@ if ($sites) foreach ($sites as $site) {
   }
   plc_table_row_end();
 }
-plc_table_end("sites");
+$notes=array("N = number of sites / U = number of users / S = number of slices");
+
+plc_table_end("sites",array('notes'=>$notes));
 
 // Print footer
 include 'plc_footer.php';