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';
21 require_once 'nifty.php';
23 //fix the memory limit for this page
24 ini_set("memory_limit","64M");
26 // --------------------
27 // recognized URL arguments
28 $peerscope=$_GET['peerscope'];
29 $pattern=$_GET['pattern'];
30 $site_id=intval($_GET['site_id']);
31 $slice_id=intval($_GET['slice_id']);
36 $tabs []= tab_persons_mysite();
39 $tabs []= tab_persons_local();
40 $tabs []= tab_persons();
42 // --------------------
43 $person_filter=array();
46 function person_status ($person) {
50 if ( $person['peer_id'] ) {
55 // check that the person has keys
56 if ( count($person['key_ids']) == 0)
57 $messages [] = "No Key";
58 if ( count($person['site_ids']) == 0)
59 $messages [] = "No Site";
60 if ( ! $person['enabled'] )
61 $messages[] = "Disabled";
62 if ( count ($person['roles']) == 0)
63 $messages []= "No role!";
64 // for tech-only people: outline user if in a slice
65 if ( ( count($person['roles'])==1 ) &&
66 ( in_array('tech',$person['roles']) ) ) {
67 if (! empty($person["slice_ids"]) ) $messages[]="Tech in a Slice";
69 // or for other kind of people, if they have no slice
70 if ( count($person['slice_ids']) == 0) $messages [] = "No Slice";
72 return plc_vertical_table($messages,$class);
77 $person_columns=array('person_id','first_name','last_name','email','roles','peer_id','key_ids','site_ids','enabled','slice_ids');
78 // PIs and admins can see users not yet enabled
79 $privileges=plc_is_admin() || plc_is_pi();
81 $person_filter['enabled']=true;
82 // server-side filtering - set pattern in $_GET for filtering on email
84 $person_filter['email']=$pattern;
85 $title .= " matching " . $pattern;
87 $person_filter['email']="*";
90 // server-side selection on peerscope
91 $peerscope=new PeerScope ($api,$_GET['peerscope']);
92 $person_filter=array_merge($person_filter,$peerscope->filter());
93 $title .= ' - ' . $peerscope->label();
96 $sites=$api->GetSites(array($site_id),array("name","login_base","person_ids"));
99 $login_base=$site['login_base'];
100 $title .= t_site($site);
101 $person_filter['person_id']=$site['person_ids'];
102 if ($site_id != plc_my_site_id())
103 $tabs []= tab_site($site);
107 $slices=$api->GetSlices(array($slice_id),array('person_ids','name'));
109 $title .= t_slice($slice);
110 $tabs []= tab_slice($slice);
111 $person_filter['person_id'] = $slice['person_ids'];
115 $persons=$api->GetPersons($person_filter,$person_columns);
117 // build site_ids - take all site_ids into account
119 if ($persons) foreach ($persons as $person) {
120 if ($person['site_ids']) foreach ($person['site_ids'] as $person_site_id) {
121 $site_ids []= $person_site_id;
125 // fetch related sites
126 $site_columns=array('site_id','login_base');
127 $site_filter=array('site_id'=>$site_ids);
128 $sites=$api->GetSites($site_filter,$site_columns);
132 foreach ($sites as $site) {
133 $site_hash[$site['site_id']]=$site;
136 // --------------------
137 drupal_set_title($title);
139 plekit_linetabs($tabs);
142 drupal_set_message ('No account found');
146 $nifty=new PlekitNifty ('','objects-list','big');
149 if (plc_is_admin()) $headers["I"]='int';
150 $headers["Peer"]="string";
151 $headers["First"]="string";
152 $headers["Last"]="string";
153 $headers["Email"]="string";
154 $headers["Site(s)" ]= "string";
155 $headers["R"]="string";
156 $headers["S" ]= "int";
157 $headers["Status"]="string";
160 if (! plc_is_admin()) $sort_column=3;
161 // but turn off initial sort for admins as this slows stuff down terribly
162 else $sort_column =-1;
163 $table=new PlekitTable("persons",$headers,$sort_column);
166 $peers=new Peers ($api);
170 foreach ($persons as $person) {
171 $person_id=$person['person_id'];
172 $email=$person['email'];
173 $site_ids = $person['site_ids'];
174 $roles = plc_vertical_table ($person['roles']);
175 $peer_id=$person['peer_id'];
179 if (plc_is_admin()) $table->cell(href(l_person($person_id),$person_id));
180 $peers->cell($table,$peer_id);
181 $table->cell (href(l_person($person_id),$person['first_name']));
182 $table->cell (href(l_person($person_id),$person['last_name']));
183 $table->cell(l_person_t($person_id,$email));
184 $site_links = array();
185 foreach ($site_ids as $site_id) {
186 $site=$site_hash[$site_id];
187 $login_base = $site['login_base'];
188 $site_links []= l_site_t($site_id,$login_base);
190 $table->cell(plc_vertical_table($site_links),array('only-if'=>!$peer_id));
191 $table->cell($roles,array('only-if'=>!$peer_id));
192 $table->cell(count($person['slice_ids']));
193 $table->cell(person_status($person));
198 if (plc_is_admin()) $notes[]= "I = person_id";
199 $notes []= "R = roles";
200 $notes []= "S = number of slices";
201 $table->end(array('notes'=>$notes));
204 //plekit_linetabs ($tabs,"bottom");
207 include 'plc_footer.php';