X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetlab%2Fpersons%2Findex.php;h=ed8bc04074c9811110c52f4df5d9a88e4b262896;hb=50c52e39521aa6ac664e542848057822fed4d395;hp=e4260fcc58d2f9beb6263e282e38038f3e735d73;hpb=9c2c95763677a4f5045bc039f680e56752861f4b;p=plewww.git diff --git a/planetlab/persons/index.php b/planetlab/persons/index.php index e4260fc..ed8bc04 100644 --- a/planetlab/persons/index.php +++ b/planetlab/persons/index.php @@ -5,469 +5,7 @@ // Require login require_once 'plc_login.php'; -// Get session and API handles -require_once 'plc_session.php'; -global $plc, $api; - -// Print header -require_once 'plc_drupal.php'; -// set default -drupal_set_title('People'); -include 'plc_header.php'; - -// Common functions -require_once 'plc_functions.php'; -require_once 'plc_sorts.php'; - -//fix the memory limit for this page -ini_set("memory_limit","48M"); - -// find person roles -$_person= $plc->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'; - +if ($_GET['id']) require ('person.php') ; +else require ('persons.php'); ?>