X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetlab%2Fpersons%2Fpersons.php;h=e4f5a396330895c557a8380ac7af74c0c3028626;hb=34d41a3846da0721bc27d94ffe69ec4ee2cf9dec;hp=b35c675ecd7211783769f5fc8814c48c39ef0391;hpb=50c52e39521aa6ac664e542848057822fed4d395;p=plewww.git
diff --git a/planetlab/persons/persons.php b/planetlab/persons/persons.php
index b35c675..e4f5a39 100644
--- a/planetlab/persons/persons.php
+++ b/planetlab/persons/persons.php
@@ -1,6 +1,6 @@
person;
-$_roles= $_person['role_ids'];
-
+// --------------------
+// recognized URL arguments
+$peerscope=$_GET['peerscope'];
+$pattern=$_GET['pattern'];
+$site_id=intval($_GET['site_id']);
+$slice_id=intval($_GET['slice_id']);
+
+// --- decoration
+$title="Accounts";
+$tabs=array();
+$tabs['My accounts'] = array('url'=>l_persons(),
+ 'values'=>array('site_id'=>plc_my_site_id()),
+ 'bubble'=>'Lists accounts on site ' . plc_my_site_id());
+// --------------------
+$person_filter=array();
////////////////////
-// 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 ();
- }
+function person_status ($person) {
-//////////////////
-// 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";
}
+ // check that the person has keys
+ if ( 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_vertical_table($messages,$class);
- 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 ";
+ // for tech-only people: outline user if in a slice
+ if ( ( count($person['roles'])==1 ) &&
+ ( in_array('tech',$person['roles']) ) ) {
+ if (! empty($person["slice_ids"]) ) $messages[]="Tech in a Slice";
} else {
- drupal_set_title ("Users matching $emailpattern on ". $peer_label);
- sort_persons ($persons);
- echo paginate( $persons, "person_id", "Persons", 25, "email");
+ // or for other kind of people, if they have no slice
+ if ( count($person['slice_ids']) == 0) $messages [] = "No Slice";
}
- }
-// 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" );
-
+ return plc_vertical_table($messages,$class);
}
-// 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 "