forked from science-ation/science-ation
505 lines
17 KiB
PHP
505 lines
17 KiB
PHP
<?
|
|
/*
|
|
This file is part of the 'Science Fair In A Box' project
|
|
SFIAB Website: http://www.sfiab.ca
|
|
|
|
Copyright (C) 2005 Sci-Tech Ontario Inc <info@scitechontario.org>
|
|
Copyright (C) 2005 James Grant <james@lightbox.org>
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public
|
|
License as published by the Free Software Foundation, version 2.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; see the file COPYING. If not, write to
|
|
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
Boston, MA 02111-1307, USA.
|
|
*/
|
|
|
|
// This file was modified March of 2015 by Sebastian Ruan
|
|
/* Flagging for judges has been added to monitor concerns.
|
|
Update User button also added; allows super users to update
|
|
a judge to the current fair year without logging in as them. */
|
|
?>
|
|
<?
|
|
require_once('../common.inc.php');
|
|
require_once('../user.inc.php');
|
|
require_once('../judge.inc.php');
|
|
user_auth_required('committee', 'admin');
|
|
|
|
require_once('judges.inc.php');
|
|
|
|
$show_types = $_GET['show_types'];
|
|
if(user_valid_type($show_types) == false) $show_types = array('judge');
|
|
|
|
$show_complete = (get_value_from_array($_GET,'show_complete') == 'yes') ? 'yes' : 'no';
|
|
$show_year = get_value_from_array($_GET,'show_year') == 'current' ? 'current' : 'all';
|
|
|
|
$uid = intval(get_value_from_array($_GET,'uid'));
|
|
|
|
if(get_value_from_array($_GET,'action') == 'remove') {
|
|
if(!$uid) {
|
|
echo "Invalid uid for delete";
|
|
exit;
|
|
}
|
|
user_delete($uid);
|
|
message_push(happy(i18n('User deleted.')));
|
|
}
|
|
|
|
|
|
|
|
send_header("User Editor",
|
|
array('Committee Main' => 'committee_main.php',
|
|
'Administration' => 'admin/index.php')
|
|
);
|
|
?>
|
|
<script language="javascript" type="text/javascript">
|
|
|
|
function openeditor(id)
|
|
{
|
|
if(id) currentid=id;
|
|
|
|
window.open("user_editor_window.php?id="+currentid,"UserEditor","location=no,menubar=no,directories=no,toolbar=no,width=1000,height=640,scrollbars=yes");
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
function toggleoptions()
|
|
{
|
|
if(document.getElementById('options').style.display == 'none') {
|
|
document.getElementById('options').style.display = 'block';
|
|
document.getElementById('optionstext').innerHTML = '- <?=i18n('Hide Display Options')?>';
|
|
|
|
} else {
|
|
document.getElementById('options').style.display = 'none';
|
|
document.getElementById('optionstext').innerHTML = '+ <?=i18n('Show Display Options')?>';
|
|
}
|
|
}
|
|
|
|
function togglenew()
|
|
{
|
|
if(document.getElementById('new').style.display == 'none') {
|
|
document.getElementById('new').style.display = 'block';
|
|
document.getElementById('newtext').innerHTML = '<?=i18n('Cancel New User')?>';
|
|
|
|
} else {
|
|
document.getElementById('new').style.display = 'none';
|
|
document.getElementById('newtext').innerHTML = '<?=i18n('Add New User')?>';
|
|
}
|
|
}
|
|
|
|
function neweditor()
|
|
{
|
|
var username = document.forms.newuser.new_email.value;
|
|
var usertype = document.forms.newuser.new_type.value;
|
|
window.open("user_editor_window.php?type="+usertype+"&username="+username,"UserEditor","location=no,menubar=no,directories=no,toolbar=no,width=770,height=500,scrollbars=yes");
|
|
document.forms.newuser.new_email.value = "";
|
|
return false;
|
|
}
|
|
|
|
|
|
/* update (id) grabs the current url and appends an action called update as well as the id it is going to renew.
|
|
If there is already an action called update and an id the function will change the id to the new
|
|
id as determined by the button clicked
|
|
|
|
update (id) Int -> String
|
|
|
|
Effects: update(id) reloads the page with the adjusted url
|
|
|
|
Example: update (2526) => http://localhost/sfiab/testfair/admin/user_list.php?show_types[]=judge&action=update&id=2526 */
|
|
|
|
function update (id)
|
|
{
|
|
var url = window.location.href;
|
|
|
|
// if a previous update button was already clicked
|
|
if(url.indexOf('&action=')>-1){
|
|
url = url.substring(0,url.indexOf('&action=update'));
|
|
url += '&action=update&id='+id;
|
|
}
|
|
// if there is no ? in the url already present
|
|
else if (url.indexOf ('?') == -1) {
|
|
url += '?action=update&id='+id;
|
|
}
|
|
//if '?action...' is present in url
|
|
else if(url.indexOf('?action=')>-1){
|
|
url = url.substring(0,url.indexOf('?action=update'));
|
|
url += '?action=update&id='+id;
|
|
}
|
|
|
|
else{
|
|
url += '&action=update&id='+id;
|
|
}
|
|
|
|
// reload using adjusted url
|
|
window.location.href=url;
|
|
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
<?
|
|
|
|
// Begin updating user
|
|
if($_GET['action']=='update') {
|
|
$id = intval($_GET['id']);
|
|
|
|
//if no id print error
|
|
if(!$id) {
|
|
echo "Invalid id for update";
|
|
exit;
|
|
}
|
|
|
|
$user = user_load($id);
|
|
|
|
// Determine if there is a more recent uid that may possibly be in the current FAIRYEAR (allows refresh page to work)
|
|
$query = $pdo->prepare("SELECT id,uid,year FROM users WHERE uid='{$user['uid']}'
|
|
ORDER BY year DESC LIMIT 1");
|
|
$query->execute();
|
|
|
|
$user_new = $query->fetch(PDO::FETCH_ASSOC);
|
|
|
|
// Make sure our user is NOT in the current FAIRYEAR (again, this helps with page refresh to work )
|
|
if ($user_new['year'] != $config['FAIRYEAR']) {
|
|
/* Update user to new year via dupelicating row into new id.
|
|
If multiple Roles, all updated */
|
|
user_dupe($user, $config['FAIRYEAR']);
|
|
message_push(happy(i18n('User Updated')));
|
|
|
|
//find the newly updated user
|
|
$q_reload = $pdo->prepare("SELECT id FROM users WHERE uid='{$user['uid']}'
|
|
ORDER BY year DESC LIMIT 1");
|
|
$q_reload->execute();
|
|
|
|
$reload_user = $q_reload->fetch(PDO::FETCH_ASSOC);
|
|
|
|
?>
|
|
<script language="javascript" type="text/javascript">
|
|
|
|
var new_id=<?=$reload_user['id'];?>;
|
|
// open or reopen user_editor_window.php with user's new id
|
|
openeditor(new_id);
|
|
|
|
</script>
|
|
<?
|
|
|
|
}
|
|
|
|
}
|
|
//End update to user
|
|
|
|
echo "<div class=\"notice\">";
|
|
echo "<a id=\"optionstext\" onclick=\"toggleoptions();return false;\">- ".i18n('Hide Display Options')."</a>";
|
|
|
|
echo "<form method=\"GET\" action=\"$PHP_SELF\">";
|
|
|
|
echo "<div id=\"options\" style=\"display: block;\" >";
|
|
echo "<table><tr><td>".i18n('Type').":</td>";
|
|
$x = 0;
|
|
foreach($user_what as $k=>$v ) {
|
|
$sel = (in_array($k, $show_types)) ? 'checked="checked"' : '';
|
|
echo "<td><input type=\"checkbox\" name=\"show_types[]\" value=\"$k\" $sel >".i18n($v)."</input></td>";
|
|
if($x) echo "</tr><tr><td></td>";
|
|
$x = ~$x;
|
|
}
|
|
echo "</tr>";
|
|
|
|
echo "<tr><td>".i18n('Complete').":</td><td>";
|
|
echo "<select name=\"show_complete\">";
|
|
$s = ($show_complete == 'yes') ? 'selected="selected"' : '';
|
|
echo "<option value=\"yes\" $s>".i18n('Show only complete registrations')."</option>";
|
|
$s = ($show_complete == 'no') ? 'selected="selected"' : '';
|
|
echo "<option value=\"no\" $s>".i18n('Show ALL registrations')."</option>";
|
|
echo "</select>";
|
|
|
|
echo "</tr>";
|
|
echo "<tr><td>".i18n('Year').":</td><td>";
|
|
echo "<select name=\"show_year\">";
|
|
$s = ($show_year == 'current') ? 'selected="selected"' : '';
|
|
echo "<option value=\"current\" $s>".i18n('Show only registrations from %1', array($config['FAIRYEAR']))."</option>";
|
|
$s = ($show_year == 'all') ? 'selected="selected"' : '';
|
|
echo "<option value=\"all\" $s>".i18n('Show ALL years')."</option>";
|
|
echo "</select>";
|
|
echo "</td></tr></table>";
|
|
echo "<br />";
|
|
echo "<input type=submit value=\"".i18n('Apply Filter')."\">";
|
|
echo "</div>";
|
|
echo "</form>";
|
|
|
|
echo "</div>";
|
|
|
|
|
|
echo "<br/><a id=\"newtext\" href=\"javascript:togglenew()\">".i18n('Add New User')."</a>";
|
|
echo '<div id="new" style="display: none;" class="notice">';
|
|
echo "<form name=\"newuser\" method=\"GET\" action=\"$PHP_SELF\">";
|
|
echo "<table><tr><td>".i18n('Type').":</td><td>";
|
|
echo "<select name=\"new_type\">";
|
|
$x = 0;
|
|
foreach($user_what as $k=>$v ) {
|
|
$sel = (in_array($k, $show_types)) ? 'selected="selected"' : '';
|
|
echo "<option value=\"$k\" $sel>".i18n($v)."</option>";
|
|
}
|
|
echo "</select>";
|
|
echo "</tr>";
|
|
echo "<tr><td>".i18n('Email').":</td><td>";
|
|
echo '<input type="text" name="new_email" value="" />';
|
|
echo '</td></tr>';
|
|
echo '</table>';
|
|
echo "<input type=submit onclick=\"neweditor();\" value=\"".i18n('Create New User')."\">";
|
|
|
|
echo '</form>';
|
|
|
|
echo '</div>';
|
|
echo "<br />";
|
|
echo "<br />";
|
|
|
|
/* Grab a list of users */
|
|
$w = array();
|
|
foreach($show_types as $t) {
|
|
$w [] = "u1.types LIKE '%$t%'";
|
|
}
|
|
$where_types = "AND (".join(" OR ", $w).")";
|
|
|
|
$where_complete = "";
|
|
if($show_complete == 'yes') {
|
|
foreach($show_types as $t) {
|
|
$where_complete .= "AND ({$t}_complete='yes' OR {$t}_complete IS NULL) ";
|
|
}
|
|
}
|
|
|
|
if($show_year == 'current')
|
|
$having_year = "AND u1.year={$config['FAIRYEAR']}";
|
|
|
|
echo "<table class=\"tableview\">";
|
|
|
|
$querystr="SELECT
|
|
*
|
|
FROM
|
|
users u1
|
|
LEFT JOIN `users_committee` ON `users_committee`.`users_id`=`u1`.`id`
|
|
LEFT JOIN `users_judge` ON `users_judge`.`users_id`=`u1`.`id`
|
|
LEFT JOIN `users_volunteer` ON `users_volunteer`.`users_id`=`u1`.`id`
|
|
LEFT JOIN `users_fair` ON `users_fair`.`users_id`=`u1`.`id`
|
|
LEFT JOIN `users_sponsor` ON `users_sponsor`.`users_id`=`u1`.`id`
|
|
WHERE u1.year=( SELECT MAX(`year`) FROM users u2 WHERE u1.uid=u2.uid )
|
|
GROUP BY uid
|
|
HAVING
|
|
u1.deleted='no'
|
|
$having_year
|
|
$where_types
|
|
$where_complete
|
|
ORDER BY
|
|
lastname ASC,
|
|
firstname ASC,
|
|
year DESC";
|
|
|
|
$q = $pdo->prepare($querystr);
|
|
$q->execute();
|
|
|
|
echo $pdo->errorInfo();
|
|
// echo $querystr;
|
|
$num=$q->rowCount();
|
|
echo $pdo->errorInfo();
|
|
echo i18n("Listing %1 people total. See the table at the bottom for the totals by status <br><br><br>",array($num));
|
|
echo i18n(" <lh>Notes:</lh> <ul><li> Deleting users from this list is a permanent operation and cannot be undone. Consider editing the user and deactivating or deleting roles in their account instead.
|
|
<li> Updating a user to the current fair year allows you to then complete the user from this list.
|
|
<li> A flagged judge indicates there is text in the private information field for that judge.
|
|
<li> Only committee members can see text entered into the private information field for judges. This field is not seen nor editable by any judge.");
|
|
|
|
|
|
echo "<thead>";
|
|
echo "<tr>";
|
|
echo " <th>".i18n("Name")."</th>";
|
|
echo " <th>".i18n("Email Address")."</th>";
|
|
echo " <th>".i18n("Year")."</th>";
|
|
echo " <th>".i18n("Type(s)")."</th>";
|
|
echo " <th>".i18n("Active")."</th>";
|
|
echo " <th>".i18n("Complete")."</th>";
|
|
echo " <th>".i18n("Flagged")."</th>";
|
|
echo " <th>".i18n("Actions")."</th>";
|
|
echo "</tr>";
|
|
echo "</thead>";
|
|
|
|
$tally = array();
|
|
$tally['active'] = array();
|
|
$tally['inactive'] = array();
|
|
$tally['active']['complete'] = 0;
|
|
$tally['active']['incomplete'] = 0;
|
|
$tally['inactive']['complete'] = 0;
|
|
$tally['inactive']['incomplete'] = 0;
|
|
while($r=$q->fetch(PDO::FETCH_ASSOC))
|
|
{
|
|
//JAMES - TEMP - due to the previous error with improperly setting judge status to NOT complete when special awards was turned off
|
|
//we now need to make sure we re-calculate all the judge statuses somehow, so might as well do it here.
|
|
//FIXME: remove this after all the fairs are done this year SUMMER 2010
|
|
if(in_array('judge',$show_types)){
|
|
$u=user_load_by_uid($r['uid']);
|
|
|
|
//we also set the $r array so it displays properly on first load
|
|
if(judge_status_update($u)=="complete")
|
|
$r['judge_complete']='yes';
|
|
|
|
else{
|
|
$r['judge_complete']='no';
|
|
}
|
|
|
|
}
|
|
$types = explode(',', $r['types']);
|
|
$span = count($types) > 1 ? "rowspan=\"".count($types)."\"" : '';
|
|
echo "<tr><td $span>";
|
|
|
|
$name = "{$r['firstname']} {$r['lastname']}";
|
|
if(in_array('fair', $types)) {
|
|
$qq = $pdo->prepare("SELECT * FROM users_fair
|
|
LEFT JOIN fairs ON fairs.id=users_fair.fairs_id
|
|
WHERE users_id='{$r['id']}'");
|
|
|
|
$rr = $qq->fetch(PDO::FETCH_ASSOC);
|
|
$name = "{$rr['name']}".((trim($name)=='') ? '' : "<br />($name)");
|
|
}
|
|
echo "<a href=\"#\" onclick=\"return openeditor({$r['id']})\">$name</a>";
|
|
echo "</td>";
|
|
|
|
echo "<td $span>{$r['email']}</td>";
|
|
|
|
echo "<td $span>{$r['year']}</td>";
|
|
|
|
$first = true;
|
|
$complete = false;
|
|
$incomplete = false;
|
|
foreach($types as $t) {
|
|
if(!$first) echo '</tr><tr>';
|
|
echo "<td>{$user_what[$t]}</td>";
|
|
|
|
echo "<td>";
|
|
if($r["{$t}_active"] == 'yes') {
|
|
echo "<div class=\"happy\" align=\"center\">".i18n("yes")."</div>";
|
|
$userstate = 'active';
|
|
} else {
|
|
echo "<div class=\"error\" align=\"center\">".i18n("no")."</div>";
|
|
$userstate = 'inactive';
|
|
}
|
|
echo "</td>";
|
|
|
|
echo "<td>";
|
|
if(in_array($t, array('parent','committee','alumni','mentor','fair'))) {
|
|
/* Do nothing, there's nothing to complete */
|
|
} else if($r["{$t}_complete"] == 'yes') {
|
|
echo "<div class=\"happy\" align=\"center\">".i18n("yes")."</div>";
|
|
$complete = true;
|
|
} else {
|
|
echo "<div class=\"error\" align=\"center\">".i18n("no")."</div>";
|
|
$incomplete = true;
|
|
}
|
|
echo "</td>";
|
|
|
|
|
|
// Begin flagging process
|
|
|
|
echo "<td align=\"center\">";
|
|
|
|
// Must be a judge in order to be flagged
|
|
if ($t == 'judge'){
|
|
|
|
/* Determine if judge is flagged and display X icon.
|
|
Icon is clickable. Brings user to user_editor_window file.
|
|
Would preferably ALSO bring the user to the judge other tab*/
|
|
if($r['flagged_judge'] == '1') {
|
|
echo "<a title=\"".i18n("Flagged")."\" href=\"#\" onClick=\"return openeditor({$r['id']});\">";
|
|
echo "<img src=\"".$config['SFIABDIRECTORY']."/images/16/flagged.".$config['icon_extension']."\" border=0>";
|
|
echo "</a>";
|
|
|
|
// Otherwise judge is not flagged; display checkmark icon. Also clickable.
|
|
} else { echo "<a title=\"".i18n("Not flagged")."\" href=\"#\" onClick=\"return openeditor({$r['id']});\">";
|
|
echo "<img src=\"".$config['SFIABDIRECTORY']."/images/16/ok.".$config['icon_extension']."\" border=0>";
|
|
echo "</a>";
|
|
}
|
|
|
|
} else {
|
|
// Do nothing. Only judges can be flagged.
|
|
}
|
|
|
|
echo "</td>";
|
|
|
|
//end flagging process
|
|
|
|
|
|
if($first) {
|
|
if ($name == ' ')
|
|
$name = 'Noname';
|
|
|
|
/* Finish off the the first line */
|
|
// If judge not in current fair year need seperate icons so that all icons align nicely in the table
|
|
if ($t == 'judge' and $r['year'] != $config['FAIRYEAR']){
|
|
echo "<td $span align=\"center\">";
|
|
echo "      "; // aligns icons
|
|
echo "<a title = \"Edit User \" href=\"#\" onclick=\"return openeditor({$r['id']})\"><img border=0 src=\"{$config['SFIABDIRECTORY']}/images/16/edit.{$config['icon_extension']}\"></a> ";
|
|
echo "<a title = \"Delete User\" onclick=\"return confirmClick('Are you sure you wish to completely delete ". $name ." \\'s account?')\" href=\"user_list.php?action=remove&uid={$r['id']}\"><img border=0 src=\"{$config['SFIABDIRECTORY']}/images/16/button_cancel.{$config['icon_extension']}\"></a>";
|
|
echo " <a title = \"Update User to Current Fair Year\"href=\"#\" onclick=\"update({$r['id']});return false;\"><img border=0 src=\"{$config['SFIABDIRECTORY']}/images/16/update2.{$config['icon_extension']}\" height = \"17\" ></a>";
|
|
|
|
}else{
|
|
echo "<td $span align=\"center\">";
|
|
echo "<a href=\"#\" onclick=\"return openeditor({$r['id']})\"><img border=0 src=\"{$config['SFIABDIRECTORY']}/images/16/edit.{$config['icon_extension']}\"></a> ";
|
|
echo "<a onclick=\"return confirmClick('Are you sure you wish to completely delete ". $name ." \\'s account?')\" href=\"user_list.php?action=remove&uid={$r['id']}\"><img border=0 src=\"{$config['SFIABDIRECTORY']}/images/16/button_cancel.{$config['icon_extension']}\"></a>";
|
|
}
|
|
|
|
|
|
echo "</td>";
|
|
}
|
|
|
|
$first = false;
|
|
}
|
|
echo '</tr>';
|
|
|
|
if($complete){
|
|
$tally[$userstate]['complete']++;
|
|
}else if($incomplete){
|
|
$tally[$userstate]['incomplete']++;
|
|
}
|
|
}
|
|
|
|
echo "</table>";
|
|
|
|
// let's make a table with the complete/incomplete counts and the active/inacteve states
|
|
?>
|
|
<table rules="all" style="border:solid 1px; margin:2em">
|
|
<thead>
|
|
<tr><td colspan="4" align="center">List Totals</td></tr>
|
|
<tr>
|
|
<th></th>
|
|
<th>Complete</th>
|
|
<th>Incomplete</th>
|
|
<th>Total</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><strong>Active</strong></td>
|
|
<td><?=$tally['active']['complete']?></td>
|
|
<td><?=$tally['active']['incomplete']?></td>
|
|
<td><?=$tally['active']['complete'] + $tally['active']['incomplete']?></td>
|
|
</tr><tr>
|
|
<td><strong>Inactive</strong></td>
|
|
<td><?=$tally['inactive']['complete']?></td>
|
|
<td><?=$tally['inactive']['incomplete']?></td>
|
|
<td><?=$tally['inactive']['complete'] + $tally['inactive']['incomplete']?></td>
|
|
</tr><tr>
|
|
<td><strong>Total</strong></td>
|
|
<td><?=$tally['active']['complete'] + $tally['inactive']['complete']?></td>
|
|
<td><?=$tally['active']['incomplete'] + $tally['inactive']['incomplete']?></td>
|
|
<td><?=$num?></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<?php
|
|
send_footer();
|
|
?>
|