slice page in progress, can renew and manage users
[plewww.git] / planetlab / persons / persons.php
index 89cd015..86203bd 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-// $Id: index.php 11645 2009-01-21 23:09:49Z thierry $
+// $Id$
 
 // Require login
 require_once 'plc_login.php';
@@ -15,8 +15,9 @@ include 'plc_header.php';
 
 // Common functions
 require_once 'plc_functions.php';
-require_once 'plc_minitabs.php';
-require_once 'plc_tables.php';
+require_once 'plc_peers.php';
+require_once 'linetabs.php';
+require_once 'table.php';
 
 //fix the memory limit for this page
 ini_set("memory_limit","48M");
@@ -31,12 +32,11 @@ $slice_id=intval($_GET['slice_id']);
 // --- decoration
 $title="Accounts";
 $tabs=array();
-$mysite_id=plc_my_site_id();
-$tabs['My accounts'] = array('url'=>l_persons(),
-                            'values'=>array('site_id'=>plc_my_site_id()),
-                            'bubble'=>'Lists accounts on site ' . $mysite_id);
+$tabs []= tab_persons_mysite();
+
+if (plc_is_admin()) 
+  $tabs []= tab_persons_local();
 // -------------------- 
-$peer_filter=array();
 $person_filter=array();
 
 ////////////////////
@@ -54,17 +54,20 @@ function person_status ($person) {
     $messages [] = "No Key";
   if ( ! $person['enabled'] ) 
     $messages[] = "Disabled";
-  //detect tech-only people involved in slices. 
+  // for tech-only people: outline user if in a slice
   if ( ( count($person['roles'])==1 ) && 
-       ( in_array('tech',$person['roles']) )  && 
-       (! empty($person["slice_ids"])) ) 
-    $messages[]="Tech involved in a Slice";  
+       ( in_array('tech',$person['roles']) ) ) {
+    if (! empty($person["slice_ids"]) ) $messages[]="Tech in a Slice";  
+  } else {
+    // or for other kind of people, if they have no slice
+    if ( count($person['slice_ids']) == 0) $messages [] = "No Slice";
+  }
   return plc_vertical_table($messages,$class);
 }
 
 
 // fetch persons 
-$person_columns=array('person_id','first_name','last_name','email','roles','peer_id','key_ids','site_ids','enabled');
+$person_columns=array('person_id','first_name','last_name','email','roles','peer_id','key_ids','site_ids','enabled','slice_ids');
 // PIs and admins can see users not yet enabled
 $privileges=plc_is_admin() || plc_is_pi();
 if ( ! $privileges ) 
@@ -78,8 +81,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"));
@@ -87,17 +91,16 @@ if ($site_id) {
   $name=$site['name'];
   $login_base=$site['login_base'];
   $title .= t_site($site);
-  $tabs = array_merge($tabs,tabs_site($site));
   $person_filter['person_id']=$site['person_ids'];
-  if ($site_id == plc_my_site_id()) 
-    unset($tabs['My accounts']);
+  if ($site_id != plc_my_site_id()) 
+    $tabs []= tab_site($site);
 }
 
 if ($slice_id) {
   $slices=$api->GetSlices(array($slice_id),array('person_ids','name'));
   $slice=$slices[0];
   $title .= t_slice($slice);
-  $tabs = array_merge($tabs,tabs_slice($slice));
+  $tabs []= tab_slice($slice);
   $person_filter['person_id'] = $slice['person_ids'];
  }
 
@@ -124,52 +127,57 @@ foreach ($sites as $site) {
 // --------------------
 drupal_set_title($title);
 
-plc_tabs($tabs);
+plekit_linetabs($tabs);
 
 if ( ! $persons ) {
   drupal_set_message ('No account found');
   return;
  }
   
-$columns = array ("Peer"=>"string",
-                 "Roles"=>"string",
+$headers = array ("Peer"=>"string",
                  "First"=>"string",
                  "Last"=>"string",
                  "Email"=>"string",
                  "Site" => "string",
+                 "R"=>"string",
+                 "S" => "int",
                  "Status"=>"string",
                  );
 
 // initial sort on email
-$table_options=array();
-plc_table_start("persons",$columns,4,$table_options);
+$table=new PlekitTable("persons",$headers,3);
+$table->start();
+
+$peers=new Peers ($api);
 
-$peer_hash = plc_peer_get_hash ($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);
+    $table->row_start();
     
-    plc_table_cell($shortname);
-    plc_table_cell($roles);
-    plc_table_cell ($person['first_name']);
-    plc_table_cell ($person['last_name']);
-    plc_table_cell(l_person_t($person_id,$email));
-    plc_table_cell($login_base);
-    plc_table_cell(person_status($person));
-    plc_table_row_end();
+    $table->cell($shortname);
+    $table->cell ($person['first_name']);
+    $table->cell ($person['last_name']);
+    $table->cell(l_person_t($person_id,$email));
+    $table->cell(l_site_t($site_id,$login_base));
+    $table->cell($roles);
+    $table->cell(count($person['slice_ids']));
+    $table->cell(person_status($person));
+    $table->row_end();
                                 
 }
+$notes=array("The S column shows the number of slices for the given user");
+$table->end(array('notes'=>$notes));
 
-plc_table_end($table_options);
+//plekit_linetabs ($tabs,"bottom");
 
 // Print footer
 include 'plc_footer.php';