person;
$_roles= $_person['role_ids'];
////////////////////
// The set of columns to fetch
// and the filter applied for fetching sites
if ( !in_array( '10', $_roles ) ) {
$columns = array("person_id", "first_name", "last_name", "email", "roles" , "peer_id");
// PIs can see users not yet enabled
if ( ! in_array ('20', $_roles) ) {
$filter = array ("enabled" => TRUE);
} else {
$filter = array();
}
} else {
$columns = array("person_id", "first_name", "last_name", "email", "roles" , "peer_id", "key_ids", "enabled","slice_ids" );
$filter = array ();
}
//////////////////
// perform post-processing on site objects as returned by GetSites
// performs sanity check and summarize the result in a single column
// performs in-place replacement, so passes a reference
function layout_person ($person) {
// we need the 'key_ids' field to do this
// so regular users wont run this
if ( ! array_key_exists ('key_ids', $person))
return $person ;
$messages=array();
// do all this stuff on local persons only
if ( $person['peer_id'] ) {
$class='plc-foreign';
} else {
$class='plc-warning';
// check that the person has keys, but dont do that for admins
if ( ! in_array ('admin',$person['roles']) && count($person['key_ids']) == 0)
$messages [] = "No Key";
}
if ( ! $person['enabled'] )
$messages[] = "Disabled";
// but always cleanup $person columns
unset ($person['key_ids']);
unset ($person['enabled']);
//detect tech already involved on some slices.
if( ( count($person['roles'])==1 ) && ( in_array('tech',$person['roles']) ) && (! empty($person["slice_ids"])) ) {
$messages[]="Tech involved in a Slice";
}
// cleanup $person columns
unset ($person['slice_ids']);
//display the extra status column
$person['status'] = plc_make_table($class,$messages);
return $person;
}
// if emailpattern or peerscope is set then search for Persons.
// we use GET rather than POST so paginate can display the right contents on subsequent pages
// can be useful for writing bookmarkable URL's as well
if( $_GET['emailpattern'] || $_GET['peerscope']) {
$emailpattern= $_GET['emailpattern'];
if (empty($emailpattern)) {
$emailpattern="*";
}
$filter = array_merge (array( "email"=>$emailpattern ), $filter);
switch ($_GET['peerscope']) {
case '':
$peer_label="all peers";
break;
case 'local':
$filter=array_merge(array("peer_id"=>NULL),$filter);
$peer_label="local peer";
break;
case 'foreign':
$filter=array_merge(array("~peer_id"=>NULL),$filter);
$peer_label="foreign peers";
break;
default:
$peer_id=intval($_GET['peerscope']);
$filter=array_merge(array("peer_id"=>$peer_id),$filter);
$peer=$api->GetPeers(array("peer_id"=>$peer_id));
$peer_label='peer "' . $peer[0]['peername'] . '"';
break;
}
// need to use a hash filter for patterns to be properly handled
$persons= $api->GetPersons($filter , $columns );
$persons= array_map(layout_person,$persons);
$person_count = count ($persons);
if ( $person_count == 1) {
header( "location: index.php?id=". $persons[0]['person_id'] );
exit();
} else if ( $person_count == 0) {
echo " No person whose email matches $emailpattern ";
} else {
drupal_set_title ("Users matching $emailpattern on ". $peer_label);
sort_persons ($persons);
echo paginate( $persons, "person_id", "Persons", 25, "email");
}
}
// if a site_id is given, display the site persons only
else if( $_GET['site_id'] ) {
$site_id= $_GET['site_id'];
// Get site info
$site_info= $api->GetSites( array( intval( $site_id ) ), array( "name", "person_ids" ) );
drupal_set_title("People with " . $site_info[0]['name']);
// Get site nodes
$persons= $api->GetPersons( array_merge (array("person_id"=>$site_info[0]['person_ids']),$filter), $columns );
$persons= array_map(layout_person,$persons);
sort_persons( $persons );
echo paginate( $persons, "person_id", "Persons", 25, "email" );
}
// if a slice_id is given,display the persons involved in this slice
else if( $_GET['slice_id'] ) {
$slice_id= $_GET['slice_id'];
// Get slice infos
$slice_info= $api->GetSlices( array( intval( $slice_id ) ), array( "name", "person_ids" ) );
drupal_set_title("People In " . $slice_info[0]['name']);
// Get slice persons
$persons= $api->GetPersons( array_merge (array("person_id"=>$slice_info[0]['person_ids']),$filter), $columns );
if ( empty ($persons) ) {
echo "No persons to display";
} else {
$persons= array_map(layout_person,$persons);
sort_persons( $persons );
echo paginate( $persons, "person_id", "Persons", 25, "email" );
echo "