6 require_once 'plc_login.php';
8 // Get session and API handles
9 require_once 'plc_session.php';
13 require_once 'plc_drupal.php';
14 include 'plc_header.php';
17 require_once 'plc_functions.php';
18 require_once 'plc_peers.php';
19 require_once 'linetabs.php';
20 require_once 'table.php';
22 //fix the memory limit for this page
23 ini_set("memory_limit","48M");
25 // --------------------
26 // recognized URL arguments
27 $peerscope=$_GET['peerscope'];
28 $pattern=$_GET['pattern'];
29 $site_id=intval($_GET['site_id']);
30 $slice_id=intval($_GET['slice_id']);
35 $tabs []= tab_persons_mysite();
38 $tabs []= tab_persons_local();
39 // --------------------
40 $person_filter=array();
43 function person_status ($person) {
47 if ( $person['peer_id'] ) {
52 // check that the person has keys
53 if ( count($person['key_ids']) == 0)
54 $messages [] = "No Key";
55 if ( ! $person['enabled'] )
56 $messages[] = "Disabled";
57 // for tech-only people: outline user if in a slice
58 if ( ( count($person['roles'])==1 ) &&
59 ( in_array('tech',$person['roles']) ) ) {
60 if (! empty($person["slice_ids"]) ) $messages[]="Tech in a Slice";
62 // or for other kind of people, if they have no slice
63 if ( count($person['slice_ids']) == 0) $messages [] = "No Slice";
65 return plc_vertical_table($messages,$class);
70 $person_columns=array('person_id','first_name','last_name','email','roles','peer_id','key_ids','site_ids','enabled','slice_ids');
71 // PIs and admins can see users not yet enabled
72 $privileges=plc_is_admin() || plc_is_pi();
74 $person_filter['enabled']=true;
75 // server-side filtering - set pattern in $_GET for filtering on email
77 $person_filter['email']=$pattern;
78 $title .= " matching " . $pattern;
80 $person_filter['email']="*";
83 // server-side selection on peerscope
84 $peerscope=new PeerScope ($api,$_GET['peerscope']);
85 $person_filter=array_merge($person_filter,$peerscope->filter());
86 $title .= ' - ' . $peerscope->label();
89 $sites=$api->GetSites(array($site_id),array("name","login_base","person_ids"));
92 $login_base=$site['login_base'];
93 $title .= t_site($site);
94 $person_filter['person_id']=$site['person_ids'];
95 if ($site_id != plc_my_site_id())
96 $tabs []= tab_site($site);
100 $slices=$api->GetSlices(array($slice_id),array('person_ids','name'));
102 $title .= t_slice($slice);
103 $tabs []= tab_slice($slice);
104 $person_filter['person_id'] = $slice['person_ids'];
108 $persons=$api->GetPersons($person_filter,$person_columns);
112 if ($persons) foreach ($persons as $person)
113 if ($person['site_ids'][0])
114 $site_ids []= $person['site_ids'][0];
116 // fetch related sites
117 $site_columns=array('site_id','login_base');
118 $site_filter=array('site_id'=>$site_ids);
119 $sites=$api->GetSites($site_filter,$site_columns);
123 foreach ($sites as $site) {
124 $site_hash[$site['site_id']]=$site;
127 // --------------------
128 drupal_set_title($title);
130 plekit_linetabs($tabs);
133 drupal_set_message ('No account found');
137 $headers = array ("Peer"=>"string",
147 // initial sort on email
148 $table=new PlekitTable("persons",$headers,3);
151 $peers=new Peers ($api);
155 foreach ($persons as $person) {
156 $person_id=$person['person_id'];
157 $email=$person['email'];
158 $shortname = $peers->shortname($person['peer_id']);
159 $site_id=$person['site_ids'][0];
160 $site=$site_hash[$site_id];
161 $login_base = $site['login_base'];
162 $roles = plc_vertical_table ($person['roles']);
166 $table->cell($shortname);
167 $table->cell ($person['first_name']);
168 $table->cell ($person['last_name']);
169 $table->cell(l_person_t($person_id,$email));
170 $table->cell(l_site_t($site_id,$login_base));
171 $table->cell($roles);
172 $table->cell(count($person['slice_ids']));
173 $table->cell(person_status($person));
177 $notes=array("The S column shows the number of slices for the given user");
178 $table->end(array('notes'=>$notes));
180 //plekit_linetabs ($tabs,"bottom");
183 include 'plc_footer.php';