63245e941243768a1980fe154342d5fe1849414d
[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 ini_set('memory_limit','48M');
27
28 // -------------------- 
29 // recognized URL arguments
30 $peerscope=$_GET['peerscope'];
31 $pattern=$_GET['pattern'];
32 $site_id=intval($_GET['site_id']);
33 $person_id=intval($_GET['person_id']);
34
35 // --- decoration
36 $title="Slices";
37 $tabs=array();
38
39 if (plc_is_admin()) {
40     $tabs []= tab_slices();
41 }
42 if (plc_is_user()) {
43     $tabs []= tab_slices_person();
44 }
45 $tabs []= tab_slices_mysite();
46 if (plc_is_admin()) $tabs []= tab_slices_local();
47
48 // ----------
49 $slice_filter=array();
50
51
52 // fetch slices
53 $slice_columns=array('slice_id','name','expires','person_ids','peer_id','node_ids');
54 // server-side filtering - set pattern in $_GET for filtering on hostname
55 if ($pattern) {
56   $slice_filter['name']=$pattern;
57   $title .= " matching " . $pattern;
58  } else {
59   $slice_filter['name']="*";
60  }
61
62 // server-side selection on peerscope
63 $peerscope=new PeerScope($api,$_GET['peerscope']);
64 $slice_filter=array_merge($slice_filter,$peerscope->filter());
65 $title .= ' - ' . $peerscope->label();
66
67
68 if ($site_id) {
69   $sites=$api->GetSites(array($site_id));
70   $site=$sites[0];
71   $name=$site['name'];
72   $login_base=$site['login_base'];
73   $title .= t_site($site);
74   $tabs []= tab_site($site);
75   $slice_filter['site_id']=array($site_id);
76 }
77
78 if ($person_id) {
79     // fetch the person's slice_ids
80     $persons = $api->GetPersons(array('person_id'=>$person_id),array('person_id','email','slice_ids'));
81     $person=$persons[0];
82     $slice_ids['slice_id']=$person['slice_ids'];
83     $title .= t_person($person);
84     $slice_filter['slice_id']=$person['slice_ids'];
85 }
86
87 // go
88 $slices=$api->GetSlices($slice_filter,$slice_columns);
89
90 // build person_hash
91 $person_ids=array();
92 if ($slices) foreach ($slices as $slice) {
93   $person_ids = array_merge ($person_ids,$slice['person_ids']);
94 }
95 $persons=$api->GetPersons($person_ids,array('person_id','email'));
96 global $person_hash;
97 $person_hash=array();
98 if ($persons) foreach ($persons as $person) $person_hash[$person['person_id']]=$person;
99
100 function email_link_from_hash($person_id) { 
101   global $person_hash; 
102   return l_person_obj($person_hash[$person_id]);
103 }
104
105 // --------------------
106 drupal_set_title($title);
107
108 plekit_linetabs($tabs);
109
110 if ( ! $slices ) {
111   drupal_set_message ('No slice found');
112   return;
113  }
114   
115 $nifty=new PlekitNifty ('','objects-list','big');
116 $nifty->start();
117 if (plc_is_admin()) $headers["I"]="int";
118 $headers["Peer"]="string";
119 $headers["Name"]="string";
120 $headers["Users"]="string";
121 $headers["U"]="int";
122 $headers["N"]="int";
123 $headers["Exp. d/m/y"]="date-dmy";
124
125 # initial sort on hostnames
126 if (plc_is_admin()) $slices_sort_column = 3;
127 else $slices_sort_column = 2;
128     
129 $table=new PlekitTable ("slices",$headers,$slices_sort_column,
130                         array('search_width'=>20));
131 $table->start();
132
133 $peers = new Peers ($api);
134 // write rows
135 foreach ($slices as $slice) {
136   $slice_id=$slice['slice_id'];
137   $peer_id=$slice['peer_id'];
138   $users=plc_vertical_table (array_map ("email_link_from_hash",$slice['person_ids']));
139   $expires= date( "d/m/Y", $slice['expires'] );
140
141   $table->row_start();
142   if (plc_is_admin()) $table->cell (l_slice_t($slice_id,$slice_id));
143   $peers->cell($table,$peer_id);
144   $table->cell (href(l_slice_nodes($slice_id),$slice['name']));
145   $table->cell ($users);
146   $table->cell(href(l_persons_slice($slice_id),count($slice['person_ids'])));
147   $table->cell (href(l_nodes_slice($slice_id),count($slice['node_ids'])));
148   $table->cell ($expires);
149   $table->row_end();
150 }
151
152 $notes=array();
153 $notes []= "U = number of users";
154 $notes []= "N = number of nodes";
155 $table->end(array('notes'=>$notes));
156 $nifty->end();
157
158 //plekit_linetabs ($tabs,"bottom");
159
160 // Print footer
161 include 'plc_footer.php';
162
163 ?>