$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");
$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']);
}
/*
// 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
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;
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;
.plc-foreign {
- background: #d0d0d0;
+ background: #e0e0e0;
}
.plc-warning {
- background: orange;
+ background: orange;
}
.plc-error {
background: red;
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;
}
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; }
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) {
// $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']);
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);
}
// 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;
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"; }
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"; }
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"; }
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"; }
return false;
}
-//////////////////////////////////////////////////////////// peer & peerscopes
+//////////////////////////////////////////////////////////// roles
function plc_role_global_hash ($api) {
$hash=array();
$roles=$api->GetRoles();
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'
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 "";
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";
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;
+}
+
?>
}
-
-
-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();
--- /dev/null
+<?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;
+ }
+}
+
+?>
////////////////////////////////////////
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";
}
// 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++) {
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;
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;
}
}
}
+ //window.console.log ("plc_table_filter has done " + counter + " matches");
plc_table_row_visible(row,visible);
if (visible) matching_entries +=1;
}
$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) {
}
}
-//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);
// 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';
$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 ) );
//////////////////// 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
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;
//////////////////////////////////////////////////////////// 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
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();
$interface_type= $interface['type'];
$interface_method= $interface['method'];
- plc_table_row_start($interface['ip']);
+ plc_table_row_start();
if ( $privileges ) {
if (!$interface_primary) {
// xxx
}
////////////////////////////////////////////////////////////
-plc_peer_block_end();
+$peers->block_end($peer_id);
// Print footer
// Common functions
require_once 'plc_functions.php';
+require_once 'plc_peers.php';
require_once 'plc_minitabs.php';
require_once 'plc_tables.php';
}
// 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"));
# 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'];
$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']);
// 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);
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
// 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';
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());
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
}
// 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");
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)
// 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);
//////////////////////////////
plc_form_end();
-plc_peer_block_end();
+$peers->block_end($peer_id);
// Print footer
include 'plc_footer.php';
// Common functions
require_once 'plc_functions.php';
+require_once 'plc_peers.php';
require_once 'plc_minitabs.php';
require_once 'plc_tables.php';
}
// 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"));
"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);
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';
// 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';
$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'];
$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'];
$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" ) );
$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();
}
// 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
'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",
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") .
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 ) {
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'])));
}
}
plc_details_end();
////////////////////////////////////////
-plc_peer_block_end();
+$peers->block_end($peer_id);
// Print footer
include 'plc_footer.php';
// Common functions
require_once 'plc_functions.php';
+require_once 'plc_peers.php';
require_once 'plc_minitabs.php';
require_once 'plc_tables.php';
}
// 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" );
}
$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');
// 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";
}
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']);
}
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';