<?php
-// $Id: index.php 11645 2009-01-21 23:09:49Z thierry $
+// $Id$
// Require login
require_once 'plc_login.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';
+require_once 'nifty.php';
//fix the memory limit for this page
-ini_set("memory_limit","48M");
+ini_set("memory_limit","64M");
// --------------------
// recognized URL arguments
// --- 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();
+ $tabs []= tab_persons();
+}
// --------------------
-$peer_filter=array();
$person_filter=array();
////////////////////
// check that the person has keys
if ( count($person['key_ids']) == 0)
$messages [] = "No Key";
+ if ( count($person['site_ids']) == 0)
+ $messages [] = "No Site";
if ( ! $person['enabled'] )
$messages[] = "Disabled";
- //detect tech-only people involved in slices.
+ if ( count ($person['roles']) == 0)
+ $messages []= "No role!";
+ // 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('first_name','last_name','email','roles','peer_id','key_ids','site_ids');
+$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 )
}
// 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"));
$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())
+ $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'];
}
// go
$persons=$api->GetPersons($person_filter,$person_columns);
-// build site_ids
+// build site_ids - take all site_ids into account
$site_ids=array();
-if ($persons) foreach ($persons as $person)
- if ($person['site_ids'][0])
- $site_ids []= $person['site_ids'][0];
+if ($persons) foreach ($persons as $person) {
+ if ($person['site_ids']) foreach ($person['site_ids'] as $person_site_id) {
+ $site_ids []= $person_site_id;
+ }
+ }
// fetch related sites
$site_columns=array('site_id','login_base');
// --------------------
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",
- "First"=>"string",
- "Last"=>"string",
- "Email"=>"string",
- "Site" => "string",
- "Status"=>"string",
- );
-
-// initial sort on email
-$table_options=array();
-plc_table_start("persons",$columns,5,$table_options);
-
-$peer_hash = plc_peer_get_hash ($api);
+$nifty=new PlekitNifty ('','objects-list','big');
+$nifty->start();
+$headers=array();
+if (plc_is_admin()) $headers["I"]='int';
+$headers["Peer"]="string";
+$headers["First"]="string";
+$headers["Last"]="string";
+$headers["Email"]="string";
+$headers["Site(s)" ]= "string";
+$headers["R"]="string";
+$headers["S" ]= "int";
+$headers["Status"]="string";
+
+// sort on email
+if (! plc_is_admin()) $sort_column=3;
+// but turn off initial sort for admins as this slows stuff down terribly
+else $sort_column =-1;
+$table=new PlekitTable("persons",$headers,$sort_column);
+$table->start();
+
+$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']);
- $site_id=$person['site_ids'][0];
- $site=$site_hash[$site_id];
- $login_base = $site['login_base'];
+ $site_ids = $person['site_ids'];
$roles = plc_vertical_table ($person['roles']);
+ $peer_id=$person['peer_id'];
- 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();
+ if (plc_is_admin()) $table->cell(href(l_person($person_id),$person_id));
+ $peers->cell($table,$peer_id);
+ $table->cell (href(l_person($person_id),$person['first_name']));
+ $table->cell (href(l_person($person_id),$person['last_name']));
+ $table->cell(l_person_t($person_id,$email));
+ $site_links = array();
+ foreach ($site_ids as $site_id) {
+ $site=$site_hash[$site_id];
+ $login_base = $site['login_base'];
+ $site_links []= l_site_t($site_id,$login_base);
+ }
+ $table->cell(plc_vertical_table($site_links),array('only-if'=>!$peer_id));
+ $table->cell($roles,array('only-if'=>!$peer_id));
+ $table->cell(count($person['slice_ids']));
+ $table->cell(person_status($person));
+ $table->row_end();
}
-
-plc_table_end($table_options);
+$notes = array();
+if (plc_is_admin()) $notes[]= "I = person_id";
+$notes []= "R = roles";
+$notes []= "S = number of slices";
+$table->end(array('notes'=>$notes));
+$nifty->end();
+
+//plekit_linetabs ($tabs,"bottom");
// Print footer
include 'plc_footer.php';