checkpoint
[plewww.git] / planetlab / slices / slices.php
1 <?php
2
3 // $Id$
4 // pattern-matching selection not implemented
5 // due to GetSlices bug, see test.php for details
6 // in addition that would not make much sense
7
8 // Require login
9 require_once 'plc_login.php';
10
11 // Get session and API handles
12 require_once 'plc_session.php';
13 global $plc, $api;
14
15 // Print header
16 require_once 'plc_drupal.php';
17 include 'plc_header.php';
18
19 // Common functions
20 require_once 'plc_functions.php';
21 require_once 'plc_peers.php';
22 require_once 'linetabs.php';
23 require_once 'table.php';
24 require_once 'nifty.php';
25
26 // -------------------- 
27 // recognized URL arguments
28 $peerscope=$_GET['peerscope'];
29 $pattern=$_GET['pattern'];
30 $site_id=intval($_GET['site_id']);
31 $person_id=intval($_GET['person_id']);
32
33 // --- decoration
34 $title="Slices";
35 $tabs=array();
36 $tabs []= tab_slices_mysite();
37 if (plc_is_admin()) $tabs []= tab_slices_local();
38
39 // ----------
40 $slice_filter=array();
41
42
43 // fetch slices
44 $slice_columns=array('slice_id','name','expires','person_ids','peer_id','node_ids');
45 // server-side filtering - set pattern in $_GET for filtering on hostname
46 if ($pattern) {
47   $slice_filter['name']=$pattern;
48   $title .= " matching " . $pattern;
49  } else {
50   $slice_filter['name']="*";
51  }
52
53 // server-side selection on peerscope
54 $peerscope=new PeerScope($api,$_GET['peerscope']);
55 $slice_filter=array_merge($slice_filter,$peerscope->filter());
56 $title .= ' - ' . $peerscope->label();
57
58
59 if ($site_id) {
60   $sites=$api->GetSites(array($site_id));
61   $site=$sites[0];
62   $name=$site['name'];
63   $login_base=$site['login_base'];
64   $title .= t_site($site);
65   $tabs []= tab_site($site);
66   $slice_filter['site_id']=array($site_id);
67 }
68
69 if ($person_id) {
70   $persons=$api->GetPersons(array('person_id'=>$person_id,array('email','person_id','slice_ids')));
71   $person=$persons[0];
72   $title .= t_person($person);
73   $tabs .= tab_person($person);
74   $slice_filter['slice_id']=$person['slice_ids'];
75  }
76
77 // go
78 $slices=$api->GetSlices($slice_filter,$slice_columns);
79
80 // build person_hash
81 $person_ids=array();
82 if ($slices) foreach ($slices as $slice) {
83   $person_ids = array_merge ($person_ids,$slice['person_ids']);
84 }
85 $persons=$api->GetPersons($person_ids,array('person_id','email'));
86 global $person_hash;
87 $person_hash=array();
88 if ($persons) foreach ($persons as $person) $person_hash[$person['person_id']]=$person;
89
90 function email_link_from_hash($person_id) { 
91   global $person_hash; 
92   return l_person_obj($person_hash[$person_id]);
93 }
94
95 // --------------------
96 drupal_set_title($title);
97
98 plekit_linetabs($tabs);
99
100 if ( ! $slices ) {
101   drupal_set_message ('No slice found');
102   return;
103  }
104   
105 $nifty=new PlekitNifty ('','objects-list','big');
106 $nifty->start();
107 $headers = array ("Peer"=>"string",
108                   "Name"=>"string",
109                   "Users"=>"string",
110                   "U"=>"int",
111                   "N"=>"int",
112                   "Exp. d/m/y"=>"date-dmy");
113
114 # initial sort on hostnames
115 $table=new PlekitTable ("slices",$headers,2,
116                         array('search_width'=>20));
117 $table->start();
118
119 $peers = new Peers ($api);
120 // write rows
121 foreach ($slices as $slice) {
122   $peer_id=$slice['peer_id'];
123   $shortname = $peers->shortname($peer_id);
124   $users=plc_vertical_table (array_map ("email_link_from_hash",$slice['person_ids']));
125   $expires= date( "d/m/Y", $slice['expires'] );
126
127   $table->row_start();
128   $table->cell ($peers->link($peer_id,$shortname));
129   $table->cell (l_slice_obj($slice));
130   $table->cell ($users);
131   $table->cell(count($slice['person_ids']));
132   $table->cell (href(l_nodes_slice($slice['slice_id']),count($slice['node_ids'])));
133   $table->cell ($expires);
134   $table->row_end();
135 }
136
137 $notes=array("U = number of users / N = number of nodes");
138 $table->end(array('notes'=>$notes));
139 $nifty->end();
140
141 //plekit_linetabs ($tabs,"bottom");
142
143 // Print footer
144 include 'plc_footer.php';
145
146 ?>