<?php require_once('common.inc.php'); require_once('form.inc.php'); require_once('user.inc.php'); require_once('incomplete.inc.php'); require_once('project.inc.php'); require_once('filter.inc.php'); require_once('email.inc.php'); require_once('schools.inc.php'); $mysqli = sfiab_init('committee'); $u = user_load($mysqli); $roles = array(); $years = array(); $status = array(); $attending = array(); $filter_collapsed = "true"; foreach($_GET as $k=>$v) { switch($k) { case 'roles': if(!is_array($_GET['roles'])) exit(); foreach($_GET['roles'] as $r) { if(!array_key_exists($r, $sfiab_roles)) exit(); $roles[] = $r; } $_SESSION['edit_return'] = $roles; break; case 'years': if(!is_array($_GET['years'])) exit(); foreach($_GET['years'] as $y) { $year = (int)$y; if($year > 0 && $year < 9999) { $years[] = $year; } else if($year == -1) { $years = array(-1); break; } } break; case 'status': if(!is_array($_GET['status'])) exit(); foreach($_GET['status'] as $s) { if(in_array($s, array('complete', 'active','new','accepted'))) { $status[] = $s; } } break; case 'attending': if(!is_array($_GET['attending'])) exit(); foreach($_GET['attending'] as $s) { if(in_array($s, array('attending', 'not_attending'))) { $attending[] = $s; } } break; case 'show_filter': $filter_collapsed = "false"; break; case 'edit': $uid = (int)$v; $new_u = user_load($mysqli, $uid); /* Create a project */ if($new_u['s_pid'] === NULL && in_array('student', $new_u['roles'])) { $new_u['s_pid'] = project_create($mysqli); user_save($mysqli, $new_u); } $_SESSION['edit_uid'] = $uid; $_SESSION['edit_roles'] = $new_u['roles']; $_SESSION['edit_name'] = $new_u['name']; header("Location: ".user_homepage($new_u)); exit(); case 'return': unset($_SESSION['edit_uid']); unset($_SESSION['edit_roles']); unset($_SESSION['edit_name']); $roles = $_SESSION['edit_return']; break; } } if(count($roles) == 0) { $roles = array('committee'); $_SESSION['edit_return'] = $roles; } if(count($years) == 0) { $years[] = $config['year']; } if(count($status) == 0) { $status[] = 'complete'; $status[] = 'active'; } if(count($attending) == 0) { $attending = array('attending', 'not_attending'); } $page_id = 'c_user_list'; sfiab_page_begin($u, "User List", $page_id); ?> <div data-role="page" id="<?=$page_id?>"><div data-role="main" class="sfiab_page" > <div data-role="collapsible" data-collapsed="<?=$filter_collapsed?>" data-iconpos="right" data-collapsed-icon="carat-d" data-expanded-icon="carat-u" > <h3>User List Options</h3> <?php $form_id = $page_id.'_form'; $roles_sel = array(); foreach($sfiab_roles as $type=>$data) { $roles_sel[$type] = $data['name']; } form_begin($form_id, "c_user_list.php", false, false, "get"); form_check_group($form_id, 'roles', "Show Roles", $roles_sel, $roles); form_hidden($form_id, "show_filter", "1"); /* Find the full range of years */ $q = $mysqli->query("SELECT DISTINCT(`year`) FROM `users` ORDER BY `year` DESC"); $years_sel = array(); while($r = $q->fetch_row()) { $y = (int)$r[0]; $years_sel[$y] = $y; } $years_sel["-1"] = "Latest for each user"; form_check_group($form_id, 'years', "Show Years", $years_sel, $years); $status_sel = array('complete' => 'Complete', 'active' => 'Active', 'new' => 'New', 'accepted' => 'Accepted (students only)'); form_check_group($form_id, 'status', "Show Status", $status_sel, $status); $attending_sel = array('attending' => "Attending", 'not_attending'=>'Not Attending'); form_check_group($form_id, 'attending', "Show Attending", $attending_sel, $attending); form_button($form_id, 'filter', 'Apply Filters'); form_end($form_id); ?> </div> <?php // <ul data-role="listview" data-filter="true" data-filter-placeholder="Search..." data-inset="true"> $hide_columns = array(); $hide_columns['pid'] = true; $hide_columns['school'] = true; $hide_columns['project_number'] = true; $q_roles_array = array(); foreach($roles as $r) { $q_roles_array[] = "FIND_IN_SET('$r',`roles`)>0"; if($r == 'student') { $hide_columns['school'] = false; } } $q_roles = "( ".join(' OR ', $q_roles_array)." )"; if(count($status) == 0) { /* Can't happen */ $q_status = '1'; } else { $a = array(); if(in_array('complete', $status)) $a[] = "(`enabled`='1' AND (`j_complete`='1' OR `s_complete`='1' OR `v_complete`='1' OR FIND_IN_SET('committee',`roles`)>0 ) )"; if(in_array('accepted', $status)) $a[] = "(`enabled`='1' AND `s_accepted`='1')"; if(in_array('active', $status)) $a[] = "`enabled`='1'"; if(in_array('new', $status)) $a[] = "(`new`='1' AND `enabled`='1')"; $q_status = "(".join(' OR ', $a).")"; } $c = count($attending); if($c == 0 || $c == 2) { /* Nothing (can't happen) or both selected, return all attending status */ $q_attending = '1'; } else { $q_attending = in_array('attending', $attending) ? "`attending`='1'" : "`attending`='0'"; } if(count($years) == 0 || $years[0] == -1) { /* This returns all rows that match the inner query, so if there's a deleted an non-deleted user in the max_year, * this returns a single line, and the INNER JOIN creates two lines. The enabled=1 filters it back down to one */ $q_join = "INNER JOIN ( SELECT max(year) max_year, username FROM users GROUP BY username ) u2 ON `u`.username = `u2`.username AND `u`.year = `u2`.max_year"; $q_year = "1"; } else { /* Not trying to find the max year for each user, just filter directly by year */ $q_year = "year IN ('".join("','", $years)."')"; $q_join = ''; } $query = "SELECT * FROM users u $q_join WHERE $q_year AND $q_roles AND $q_status AND $q_attending "; $q = $mysqli->query($query); //print($query); print($mysqli->error); $schools = school_load_all($mysqli); $projects = projects_load_all($mysqli, false); $users = array(); while($user_data = $q->fetch_assoc()) { $users[] = user_load($mysqli, -1, -1, NULL, $user_data); } ?> <?php /*Use overflow x scroll in a containing div to make the whole table scroll <div style="overflow-x: scroll;"> */ ?> <table style="width: 100%"> <tr> <td width="100%"> <input id="user_list_filter_input" data-type="search" /> </td> <td id="user_list_column_toggle" style="padding-top: 4px;" ></td> </tr></table> <table data-role="table" id="user_list" data-filter="true" data-filter-placeholder="Search..." data-input="#user_list_filter_input" data-inset="true" data-mode="columntoggle" class="ui-responsive table-stroke" data-column-btn-text="Columns..." > <thead><tr> <th >Name / Email</th> <th data-priority="2">Username</th> <th data-priority="1">School</th> <th data-priority="2">Reg ID</th> <th data-priority="2">Proj Num</th> <th data-priority="1">Role / Status</th> <th data-priority="1">Year</th> <th ></th> </tr></thead> <tbody> <?php foreach($users as &$user) { $roles_str = implode(' ', $user['roles']); $filter_text = "{$user['name']} {$user['organization']} $roles_str {$user['email']}"; $status = ''; $role = ''; foreach($user['roles'] as $r) { if($role != '') $role .= ', '; $role .= $sfiab_roles[$r]['name']; if($status != '') $status .= ', '; if($user['attending']) { $accepted = NULL; switch($r) { case 'judge': $complete = $user['j_complete']; break; case 'student': $complete = $user['s_complete']; $accepted = $user['s_accepted']; break; case 'volunteer': $complete = $user['v_complete']; break; default: $complete = NULL; } if($complete === NULL) { ; // Nothing. } else if($complete == true) { if($accepted == true) { $status .= '<font color="green">Complete+Accepted</font>'; } else { $status .= '<font color="green">Complete</font>'; } } else { $status .= '<font color="orange">Incomplete</font>'; } } } if($user['new'] == 1) { $status = '<font color="blue">New</font>'; } else if($user['enabled'] == 0) { $status = '<font color="red">Deleted</font>'; } else if(!$user['attending']) { $status = '<font color="blue">Not Attending</font>'; } $link = "c_user_list.php?edit={$user['uid']}"; $org = ''; if(in_array('sponsor', $user['roles'])) { $org = $user['organization'].' - '; } $school_str = $user['schools_id'] > 0 ? $schools[$user['schools_id']]['school'] : ''; $project_number = $user['s_pid'] > 0 ? $projects[$user['s_pid']]['number'] : ''; ?> <tr> <td style="word-break: break-all; min-width:20%;"><b><?=$org.$user['name']?></b><br/><?=$user['email']?></td> <td align="center" style="word-break: break-all; min-width:20%; " ><?=$user['username']?></td> <td align="center" style="min-width:15%; " ><?=$school_str?></td> <td><?=$user['s_pid']?></td> <td><?=$project_number?></td> <td><?=$role?><br/><?=$status?></td> <td><?=$user['year']?></td> <td><div data-role="controlgroup" data-type="horizontal" data-mini="true"> <a href="c_user_edit.php?uid=<?=$user['uid']?>" data-mini="true" data-role="button" data-iconpos="notext" data-icon="gear" data-ajax="false">Edit</a> <a href="<?=$link?>" data-mini="true" data-role="button" data-iconpos="notext" data-icon="user" data-ajax="false">Edit</a> </div></td> </tr> <?php } ?> </tbody></table> <br/><br/> <script> /* Move the columns toggle button into the table beside the search bar */ $(document).on("pagecreate", function () { $(".ui-table-columntoggle-btn").appendTo($("#user_list_column_toggle")); /* Hide some columns by default */ <?php foreach($hide_columns as $col=>$val) { if($val == false) continue; switch($col) { case 'pid': $i = 2; break; case 'school': $i = 1; break; case 'project_number': $i = 3; break; } ?> $("#user_list-popup .ui-checkbox label")[<?=$i?>].click(); <?php } ?> }); </script> <?php sfiab_page_end(); ?>