X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetlab%2Fpersons%2Fpersons.php;h=ef04dcda5e85b17145bf6a51a080074e4807473b;hb=50a3cc764fc4eb4b9a54f23b97a01077b762181d;hp=dc8fbb5f237336841034d853f357aa0f61fbb494;hpb=10342455b167946d770d53036571299ed3605a83;p=plewww.git diff --git a/planetlab/persons/persons.php b/planetlab/persons/persons.php index dc8fbb5..ef04dcd 100644 --- a/planetlab/persons/persons.php +++ b/planetlab/persons/persons.php @@ -1,6 +1,6 @@ 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(); //////////////////// @@ -52,19 +52,26 @@ function person_status ($person) { // 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('person_id','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 ) @@ -78,8 +85,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,28 +95,29 @@ 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']; } // 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'); @@ -124,52 +133,72 @@ 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", - "First"=>"string", - "Last"=>"string", - "Email"=>"string", - "Site" => "string", - "Status"=>"string", - ); - -// initial sort on email -$table_options=array(); -plc_table_start("persons",$columns,4,$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';