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 "

GetPersons( empty($filter) ? NULL : $filter, $columns ); $persons= array_map(layout_person,$persons); sort_persons( $persons ); drupal_set_html_head(' '); echo "

\n
\n"; //if( $emailpattern ) echo "'$emailpattern' is not a valid person email.\n"; echo "\n \n \n \n \n \n
\n
\n"; echo paginate( $persons, "person_id" , "Persons", 25, "email"); echo "\n"; } else { // get the person_id from the URL $person_id= intval( $_GET['id'] ); // GetPersons API call for this person $person_info= $api->GetPersons( array( $person_id ) ); if( empty( $person_info ) ) { echo "No such person."; } else { // vars from api $first_name= $person_info[0]['first_name']; $last_name= $person_info[0]['last_name']; $title= $person_info[0]['title']; $url= $person_info[0]['url']; $phone= $person_info[0]['phone']; $email= $person_info[0]['email']; $enabled= $person_info[0]['enabled']; $peer_id=$person_info[0]['peer_id']; // arrays from api $role_ids= $person_info[0]['role_ids']; $roles= $person_info[0]['roles']; $site_ids= $person_info[0]['site_ids']; $slice_ids= $person_info[0]['slice_ids']; $key_ids= $person_info[0]['key_ids']; // gets more data from API calls $site_info= $api->GetSites( $site_ids, array( "site_id", "name" ) ); $slice_info= $api->GetSlices( $slice_ids, array( "slice_id", "name" ) ); $key_info= $api->GetKeys( $key_ids ); drupal_set_title("$first_name $last_name Account Information"); // start form if ( ! $peer_id ) { echo "
\n"; } else { echo "
"; } echo "\n"; if ( ! $peer_id ) { if( in_array( 10, $_roles ) || ( in_array( 20, $_roles ) && in_array( $site_ids[0], $_person['site_ids'] ) ) ) { // list to take person action echo "
"; if (in_array( 10, $_roles )) { echo plc_event_button("Person","person",$person_id); echo ""; } echo "\n"; if( $enabled == false ) { echo ""; echo "   <- This user is not enabled. Choose here to enable or delete."; } echo "
"; } } // basic person info echo "
"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
First Name: $first_name
Last Name: $last_name
Title: $title
Email: $email
Phone: $phone
URL: $url
\n"; if( in_array( 10, $_roles ) || $_person['person_id'] == $person_id ) echo "
Update info\n"; echo "
\n"; // keys $can_manage_keys = ( ( ! $peer_id ) && (in_array( "10", $_roles ) || $person_id == $_person['person_id'])); echo "

Keys

\n"; if( !empty( $key_ids ) ) { echo "

\n"; echo ""; if ( $can_manage_keys ) echo ""; echo "\n"; foreach( $key_info as $key ) { $key_type= $key['key_type']; $key_id= $key['key_id']; $key_text= wordwrap( $key['key'], 70, "
\n", 1 ); echo "\n"; } echo "
TypeKeyRemove
$key_type$key_text"; if ( $can_manage_keys ) echo ""; echo "
\n"; if ($can_manage_keys) echo "


\n"; } else { echo " This user has no known key"; } if( $can_manage_keys ){ echo "
Upload new key: \n \n


\n"; } // sites echo "

Sites

\n"; if( !empty( $site_info ) ) { echo "\n"; foreach( $site_info as $site ) { $site_name= $site['name']; $site_id= $site['site_id']; echo "\n"; } echo "
$site_name ( remove)
\n"; echo "\n"; } else { echo " This user is not affiliated with a site !!"; } // diplay site select list to add another site for user if( ! $peer_id && in_array( 10, $_roles ) ) { // get site info $full_site_info= $api->GetSites( NULL, array( "site_id", "name" ) ); if( $site_info ) $person_site= arr_diff( $full_site_info, $site_info ); else $person_site= $full_site_info; sort_sites( $person_site ); echo "

Select a site to add this user to: "; echo ""; } echo "


\n"; // roles echo "

Roles

\n"; echo "

\n"; echo ""; if( in_array( "10", $_roles ) ) echo ""; echo "\n"; // construct role array for( $n=0; $n$role_ids[$n], 'name'=>$roles[$n] ); } $button_shown=0; if ( !empty ($roles) ) { foreach( $proles as $role ) { $role_name= $role['name']; $role_id= $role['role_id']; echo "\n"; $button_shown=1; } } echo "\n"; } } else { echo " This user has no known role !!"; } echo "
RoleRemove
$role_name"; if( in_array( 10, $_roles ) ) { echo ""; if ( ! $button_shown ) { $rowspan=count($roles); echo "
\n"; // if admin show roles to add if( in_array( 10, $_roles ) ) { $all_roles= $api->GetRoles(); $addable_roles= arr_diff( $all_roles, $proles ); ##when the proles array is empty strangely the method arr_diff($all_roles, $proles ) ##return an empty array and the scrolling roles list is not displayed in this case ##assign to addablerole all the roles if (count($proles)==0) $addable_roles=$all_roles; if( !empty( $addable_roles ) ) { echo "

Add role: \n"; } } echo "


\n"; // slices echo "

Slices

\n"; if( !empty( $slice_info ) ) { foreach( $slice_info as $slice ) { $slice_name= $slice['name']; $slice_id= $slice['slice_id']; echo "$slice_name
\n"; } } else { echo "No slices found for that user"; } if ( ! $peer_id ) { echo "\n"; } else { echo "
\n"; } } if( $peer_id ) echo "
"; echo "

Back to persons list"; } // Print footer include 'plc_footer.php'; ?>