forked from science-ation/science-ation
478 lines
17 KiB
PHP
478 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.
|
|
*/
|
|
?>
|
|
<?
|
|
require_once ('../common.inc.php');
|
|
require_once ('../user.inc.php');
|
|
user_auth_required('committee', 'admin');
|
|
require_once ('judges.inc.php');
|
|
|
|
send_header('Judging Team Members',
|
|
array('Committee Main' => 'committee_main.php',
|
|
'Administration' => 'admin/index.php',
|
|
'Judges' => 'admin/judges.php'));
|
|
?>
|
|
<script language="javascript" type="text/javascript">
|
|
function addbuttonclicked(team)
|
|
{
|
|
document.forms.judges.action.value="add";
|
|
document.forms.judges.team_num.value=team;
|
|
document.forms.judges.submit();
|
|
}
|
|
|
|
function switchjudgeinfo()
|
|
{
|
|
if(document.forms.judges["judgelist[]"].selectedIndex != -1)
|
|
{
|
|
currentname=document.forms.judges["judgelist[]"].options[document.forms.judges["judgelist[]"].selectedIndex].text;
|
|
currentid=document.forms.judges["judgelist[]"].options[document.forms.judges["judgelist[]"].selectedIndex].value;
|
|
|
|
document.forms.judges.judgeinfobutton.disabled=false;
|
|
document.forms.judges.judgeinfobutton.value=currentname;
|
|
|
|
}
|
|
else
|
|
{
|
|
document.forms.judges.judgeinfobutton.disabled=true;
|
|
document.forms.judges.judgeinfobutton.value="<? echo i18n('Judge Info') ?>";
|
|
}
|
|
|
|
}
|
|
|
|
var mousex = 0, mousey = 0;
|
|
var selectedMemberId;
|
|
|
|
function showMemberDetails(judgeId){
|
|
if(judgeId == undefined){
|
|
judgeId = document.forms.judges["judgelist[]"].options[document.forms.judges["judgelist[]"].selectedIndex].value;
|
|
}
|
|
$('#infodiv').load("judges_info.php?id=" + judgeId,
|
|
function(){ eval('doShowMemberDetails(' + judgeId + ');'); }
|
|
);
|
|
}
|
|
|
|
function editMember(memberId){
|
|
if(memberId == undefined) memberId = selectedMemberId;
|
|
hideMemberDetails();
|
|
window.open("user_editor_window.php?id="+memberId,"UserEditor","location=no,menubar=no,directories=no,toolbar=no,width=770,height=500,scrollbars=yes");
|
|
}
|
|
|
|
function hideMemberDetails(){
|
|
$('#infodiv').css("display", "none");
|
|
$('#infodivcover').css("display", "none");
|
|
}
|
|
|
|
function doShowMemberDetails(judgeId){
|
|
selectedMemberId = judgeId;
|
|
$('#infodiv').css("top", mousey + 5);
|
|
$('#infodiv').css("left", mousex + 20);
|
|
$('#infodiv').css("display", "inline");
|
|
$('#infodivcover').css("top", mousey + 5);
|
|
$('#infodivcover').css("left", mousex + 20);
|
|
$('#infodivcover').css("display", "inline");
|
|
$('#infodivcover').css("width", $('#infodiv').width());
|
|
$('#infodivcover').css("height", $('#infodiv').height());
|
|
}
|
|
|
|
jQuery(document).ready(function(){
|
|
$('#infodivcover').click(function(){ editMember(); });
|
|
$(document).mousemove(function(e){
|
|
mousex = e.pageX;
|
|
mousey = e.pageY;
|
|
});
|
|
});
|
|
|
|
</script>
|
|
<?
|
|
|
|
if (get_value_from_array($_POST, 'action') == 'add' && get_value_from_array($_POST, 'team_num') && count(get_value_from_array($_POST, 'judgelist', [])) > 0) {
|
|
// first check if this team exists.
|
|
$q = $pdo->prepare("SELECT id,name FROM judges_teams WHERE num=? AND year=?");
|
|
$q->execute([$_POST['team_num'],$config['FAIRYEAR']]);
|
|
if ($q->rowCount()) {
|
|
$r = $q->fetch(PDO::FETCH_OBJ);
|
|
$team_id = $r->id;
|
|
$team_name = $r->name;
|
|
|
|
// if the team is empty, we'll add the first person as the captain
|
|
$team = getJudgingTeam($team_id);
|
|
if (count(get_value_from_array($team, 'members', [])))
|
|
$captain = 'no';
|
|
else
|
|
$captain = 'yes';
|
|
}
|
|
$added = 0;
|
|
|
|
foreach ($_POST['judgelist'] AS $selectedjudge) {
|
|
// before we insert them, we need to make sure they dont already belong to this team. We can not have the same judge assigned to the same team multiple times.
|
|
|
|
$q = $pdo->prepare("SELECT * FROM judges_teams_link WHERE users_id=? AND judges_teams_id=?");
|
|
$q->execute([$selectedjudge,$team_id]);
|
|
if ($q->rowCount()) {
|
|
echo notice(i18n('Judge (%1) already belongs to judging team: %2', array($selectedjudge, $team_name)));
|
|
} else {
|
|
// lets make the first one we add a captain, the rest, non-captains :)
|
|
$stmt = $pdo->prepare("INSERT INTO judges_teams_link (users_id,judges_teams_id,captain,year) VALUES (?,?,?,?)");
|
|
$stmt->execute([$selectedjudge,$team_id,$captain,$config['FAIRYEAR']]);
|
|
$added++;
|
|
}
|
|
// if this is alreayd no, then who cares, but if its the first one that is going into the new team, then
|
|
// captain will be yes, and we only want the first one assigned to a new team to be the captain
|
|
// sno now we can set this back to no
|
|
$captain = 'no';
|
|
}
|
|
if ($added == 1)
|
|
$j = i18n('judge');
|
|
else
|
|
$j = i18n('judges');
|
|
|
|
echo happy(i18n('%1 %2 added to team #%3 (%4)', array($added, $j, $_POST['team_num'], $team_name)));
|
|
}
|
|
|
|
if (get_value_from_array($_GET, 'action') == 'del' && get_value_from_array($_GET, 'team_num') && get_value_from_array($_GET, 'team_id') && get_value_from_array($_GET, 'users_id')) {
|
|
$stmt = $pdo->prepare("DELETE FROM judges_teams_link WHERE users_id=? AND judges_teams_id=? AND year=?");
|
|
$stmt->execute([$_GET['users_id'],$_GET['team_id'],$config['FAIRYEAR']]);
|
|
echo happy(i18n('Removed judge from team #%1 (%2)', array($_GET['team_num'], $_GET['team_name'])));
|
|
|
|
// if there is still members left in the team, make sure we have a captain still
|
|
$q = $pdo->prepare("SELECT * FROM judges_teams_link WHERE judges_teams_id=? AND year=?");
|
|
$q->execute([$_GET['team_id'],$config['FAIRYEAR']]);
|
|
if ($q->rowCount()) {
|
|
// make sure the team still has a captain!
|
|
// FIXME: this might best come from the "i am willing to be a team captain" question under the judges profile
|
|
$gotcaptain = false;
|
|
$first = true;
|
|
while ($r = $q->fetch(PDO::FETCH_OBJ)) {
|
|
if ($first) {
|
|
$firstjudge = $r->users_id;
|
|
$first = false;
|
|
}
|
|
|
|
if ($r->captain == 'yes') {
|
|
$gotcaptain = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!$gotcaptain) {
|
|
// make the first judge the captain
|
|
$stmt = $pdo->prepare("UPDATE judges_teams_link SET captain='yes' WHERE judges_teams_id=? AND users_id=? AND year=?");
|
|
$stmt->execute([$_GET['team_id'],$firstjudge,$config['FAIRYEAR']]);
|
|
echo notice(i18n('Team captain was removed. A new team captain has been automatically assigned'));
|
|
}
|
|
}
|
|
}
|
|
|
|
if (get_value_from_array($_GET, 'action') == 'empty' && get_value_from_array($_GET, 'team_num') && get_value_from_array($_GET, 'team_id')) {
|
|
$stmt = $pdo->prepare("DELETE FROM judges_teams_link WHERE judges_teams_id=? AND year=?");
|
|
$stmt->execute([$_GET['team_id'],$config['FAIRYEAR']]);
|
|
echo happy(i18n('Emptied all judges from team #%1 (%2)', array($_GET['team_num'], $_GET['team_name'])));
|
|
}
|
|
|
|
if (get_value_from_array($_POST, 'action') == 'saveteamnames') {
|
|
if (count($_POST['team_names'])) {
|
|
foreach ($_POST['team_names'] AS $team_id => $team_name) {
|
|
$stmt = $pdo->prepare("UPDATE judges_teams SET name=? WHERE id=?");
|
|
$stmt->execute([stripslashes($team_name),$team_id]);
|
|
}
|
|
echo happy(i18n('Team names successfully saved'));
|
|
}
|
|
}
|
|
|
|
if (get_value_from_array($_GET, 'action') == 'addcaptain') {
|
|
// teams can have as many captains as they want, so just add it.
|
|
$stmt = $pdo->prepare("UPDATE judges_teams_link SET captain='yes' WHERE judges_teams_id=? AND users_id=?");
|
|
$stmt->execute([ $_GET['team_id'],$_GET['judge_id']]);
|
|
echo happy(i18n('Team captain assigned'));
|
|
}
|
|
|
|
if (get_value_from_array($_GET, 'action') == 'removecaptain') {
|
|
// teams must always have at least one captain, so if we only have one, and we are trying to remove it, dont let them!
|
|
$q = $pdo->prepare("SELECT * FROM judges_teams_link WHERE captain='yes' AND judges_teams_id=?");
|
|
$q->execute([$_GET['team_id']]);
|
|
if ($q->rowCount() < 2) {
|
|
echo error(i18n('A judge team must always have at least one captain'));
|
|
} else {
|
|
$pdo->prepare("UPDATE judges_teams_link SET captain='no' WHERE judges_teams_id=? AND users_id=?");
|
|
$pdo->execute([$_GET['team_id'],$_GET['judge_id']]);
|
|
echo happy(i18n('Team captain removed'));
|
|
}
|
|
}
|
|
|
|
if (get_value_from_array($_GET, 'action') == 'autoassignspecial') {
|
|
/* Load all the judges (judge_complete=yes, deleted=no, year=fairyear) */
|
|
$judgelist = judges_load_all();
|
|
|
|
/* Load all the teams */
|
|
$teams = array();
|
|
$q = $pdo->prepare("SELECT * FROM judges_teams WHERE year=?");
|
|
$q->execute([$config['FAIRYEAR']]);
|
|
while ($i = $q->fetch(PDO::FETCH_ASSOC)) {
|
|
$teams[$i['id']] = $i;
|
|
}
|
|
|
|
/* And the links */
|
|
$links = array();
|
|
$q = $pdo->prepare("SELECT * FROM judges_teams_link WHERE year=?");
|
|
$q->execute([$config['FAIRYEAR']]);
|
|
while ($i = $q->fetch(PDO::FETCH_ASSOC)) {
|
|
$judgelist[$i['users_id']]['teams_links'][] = $i;
|
|
}
|
|
|
|
$jlist = array();
|
|
|
|
/* Remove all judges that have a link */
|
|
foreach ($judgelist as $j) {
|
|
if (count($j['teams_links']) == 0 && $j['special_award_only'] == 'yes')
|
|
$jlist[] = $j['id'];
|
|
}
|
|
echo 'We have ' . count($jlist) . ' special awards judges to assign';
|
|
foreach ($jlist AS $jid) {
|
|
$j = $judgelist[$jid];
|
|
if (is_array($j['special_award_selected']) && count($j['special_award_selected'])) {
|
|
// assing them to ALL teams for ALL awards
|
|
foreach ($j['special_award_selected'] AS $awardid) {
|
|
echo "Looking for a team for award $awardid <br />";
|
|
// find the award id linked to a team
|
|
$q = $pdo->prepare("SELECT * FROM judges_teams_awards_link WHERE award_awards_id=? AND year=?");
|
|
$q->execute([$awardid,$config['FAIRYEAR']]);
|
|
if ($q->rowCount()) {
|
|
while ($r = $q->fetch(PDO::FETCH_OBJ)) {
|
|
$stmt = $pdo->prepare("INSERT INTO judges_teams_link (users_id,judges_teams_id,captain,year) VALUES (?,?,'yes',?)");
|
|
$stmt->execute([$jid,$r->judges_teams_id,$config['FAIRYEAR']]);
|
|
echo happy(i18n('%1 %2 to their special award(s) team(s)', array($j['firstname'], $j['lastname'])));
|
|
}
|
|
} else {
|
|
echo error(i18n('%1 %2 not assigned - No team found that is judging award id %1', array($awardid)));
|
|
}
|
|
}
|
|
} else {
|
|
echo error(i18n('%1 %2 has indicated special awards only, but didnt selected any awards', array($j['firstname'], $j['lastname'])));
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!$_SESSION['viewstate']['judges_teams_list_show'])
|
|
$_SESSION['viewstate']['judges_teams_list_show'] = 'unassigned';
|
|
// now update the judges_teams_list_show viewstate
|
|
if (get_value_from_array($_GET, 'judges_teams_list_show'))
|
|
$_SESSION['viewstate']['judges_teams_list_show'] = $_GET['judges_teams_list_show'];
|
|
|
|
echo '<form name="judges" method="post" action="judges_teams_members.php">';
|
|
echo '<input type="hidden" name="action">';
|
|
echo '<input type="hidden" name="team_id">';
|
|
echo '<input type="hidden" name="team_num">';
|
|
echo '<input type="hidden" name="team_name">';
|
|
echo '<input type="hidden" name="users_id">';
|
|
echo '<table>';
|
|
echo '<tr>';
|
|
echo '<th>' . i18n('Judges List');
|
|
echo '<br />';
|
|
echo '<input disabled="true" name="judgeinfobutton" id="judgeinfobutton" onclick="showMemberDetails()" type="button" value="' . i18n('Judge Info') . '">';
|
|
echo '</th>';
|
|
echo '<th>' . i18n('Judge Teams') . '</th>';
|
|
echo '</tr>';
|
|
echo '<tr><td valign="top">';
|
|
echo '<table width="100%"><tr>';
|
|
if ($_SESSION['viewstate']['judges_teams_list_show'] == 'all') {
|
|
echo '<td align=left><a href="judges_teams_members.php?judges_teams_list_show=unassigned">' . i18n('show unassigned') . '</a></td>';
|
|
echo '<td align=right><b>' . i18n('show all') . '</b></td>';
|
|
} else {
|
|
echo '<td align=left><b>' . i18n('show unassigned') . '</b></td>';
|
|
echo '<td align=right><a href="judges_teams_members.php?judges_teams_list_show=all">' . i18n('show all') . '</a></td>';
|
|
}
|
|
echo '</tr></table>';
|
|
|
|
/* Load all the judges (judge_complete=yes, deleted=no, year=fairyear) */
|
|
$judgelist = judges_load_all();
|
|
|
|
/* Load all the teams */
|
|
$teams = array();
|
|
$q = $pdo->prepare("SELECT * FROM judges_teams WHERE year=?");
|
|
$q->execute([$config['FAIRYEAR']]);
|
|
while ($i = $q->fetch(PDO::FETCH_ASSOC)) {
|
|
$teams[$i['id']] = $i;
|
|
}
|
|
|
|
/* And the links */
|
|
$links = array();
|
|
$q = $pdo->prepare("SELECT * FROM judges_teams_link WHERE year=?");
|
|
$q->execute([$config['FAIRYEAR']]);
|
|
while ($i = $q->fetch(PDO::FETCH_ASSOC)) {
|
|
$judgelist[$i['users_id']]['teams_links'][] = $i;
|
|
}
|
|
|
|
$jlist = array();
|
|
if ($_SESSION['viewstate']['judges_teams_list_show'] == 'unassigned') {
|
|
/* Remove all judges that have a link */
|
|
foreach ($judgelist as $j) {
|
|
if (count(get_value_from_array($j, 'teams_links', [])) == 0)
|
|
$jlist[] = $j['id'];
|
|
}
|
|
} else {
|
|
$jlist = array_keys($judgelist);
|
|
}
|
|
|
|
echo '<center>';
|
|
echo i18n('Listing %1 judges', array(count($jlist)));
|
|
echo '<br />';
|
|
echo '</center>';
|
|
show_pdo_errors_if_any($pdo);
|
|
echo '<select name="judgelist[]" onchange="switchjudgeinfo()" multiple="multiple" style="width: 250px; height: 600px;">';
|
|
|
|
foreach ($jlist as $jid) {
|
|
$u = &$judgelist[$jid];
|
|
if ($u['firstname'] && $u['lastname']) {
|
|
if ($u['special_award_only'] == 'yes') {
|
|
$sp = '[sp] ';
|
|
} else
|
|
$sp = '';
|
|
echo "<option value=\"$jid\">{$sp}{$u['firstname']} {$u['lastname']} (" . implode(' ', $u['languages']) . ")</option>\n";
|
|
}
|
|
}
|
|
unset($u);
|
|
|
|
echo '</select>';
|
|
echo '<br />';
|
|
echo "<a href=\"judges_teams_members.php?action=autoassignspecial\">Auto-Assign Special Awards Judges to Special Awards Teams</a>\n";
|
|
echo '</td>';
|
|
echo '<td valign="top">';
|
|
|
|
$teams = getJudgingTeams();
|
|
|
|
foreach ($teams AS $team) {
|
|
echo '<hr>';
|
|
|
|
echo '<table width="100%">';
|
|
echo '<tr><td valign=top width="80">';
|
|
echo '<input onclick="addbuttonclicked(\'' . $team['num'] . '\')" type="button" value="Add >>">';
|
|
echo '</td><td>';
|
|
|
|
echo "<table width=\"100%\">\n";
|
|
echo '<tr><th colspan="2" align="left">#' . $team['num'] . ': ';
|
|
echo $team['name'];
|
|
echo "</th></tr>\n";
|
|
echo '<tr><td colspan="2">';
|
|
foreach ($team['rounds'] as $ts) {
|
|
echo "{$ts['name']}: " . format_time($ts['starttime']) . ' - ' . format_time($ts['endtime']) . '<br />';
|
|
}
|
|
echo '</td></tr>';
|
|
|
|
if (count(get_value_from_array($team, 'members', []))) {
|
|
foreach ($team['members'] AS $member) {
|
|
$j = &$judgelist[$member['id']];
|
|
echo '<tr><td>';
|
|
|
|
/*
|
|
* if($team['num']=="89") {
|
|
* echo "<pre>";
|
|
* print_r($team);
|
|
* print_r($j);
|
|
* echo "</pre>";
|
|
* }
|
|
*/
|
|
|
|
$langerr = false;
|
|
$judgeerr = false;
|
|
foreach ($team['languages'] AS $teamlang) {
|
|
if (is_array($j['languages'])) {
|
|
if (!in_array($teamlang, $j['languages'])) {
|
|
$langerr = true;
|
|
break;
|
|
}
|
|
} else {
|
|
$langerr = true;
|
|
}
|
|
}
|
|
|
|
if (!$j['id']) {
|
|
$judgeerr = true;
|
|
}
|
|
|
|
echo '<a onclick="return confirmClick(\'Are you sure you want to remove this judge from this team?\')" href="judges_teams_members.php?action=del&team_id=' . $team['id'] . '&team_num=' . $team['num'] . '&users_id=' . $member['id'] . '&team_name=' . rawurlencode($team['name']) . '"><img border=0 src="' . $config['SFIABDIRECTORY'] . '/images/16/button_cancel.' . $config['icon_extension'] . '"></a>';
|
|
echo '</td><td width="100%">';
|
|
if ($langerr || $judgeerr)
|
|
echo '<span class="error" style="width: 100%; display: block;">';
|
|
if ($judgeerr) {
|
|
echo 'ERROR: this judge is assigned to the team, but they are not an active/complete judge! <br />';
|
|
}
|
|
|
|
if ($member['captain'] == 'yes') {
|
|
echo '<a title="Captain - Click to remove captain status" href="judges_teams_members.php?action=removecaptain&team_id=' . $team['id'] . '&judge_id=' . $member['id'] . '">';
|
|
echo '<img border=0 src="' . $config['SFIABDIRECTORY'] . '/images/16/bookmark.' . $config['icon_extension'] . '">';
|
|
echo '</a> ';
|
|
} else {
|
|
echo '<a title="Non-Captain - Click to make a team captain" href="judges_teams_members.php?action=addcaptain&team_id=' . $team['id'] . '&judge_id=' . $member['id'] . '">';
|
|
echo '<img border=0 src="' . $config['SFIABDIRECTORY'] . '/images/16/bookmark_disabled.' . $config['icon_extension'] . '">';
|
|
echo '</a> ';
|
|
}
|
|
echo '<a onclick="showMemberDetails(' . $member['id'] . ');">';
|
|
echo $member['firstname'] . ' ' . $member['lastname'];
|
|
if (is_array($j['languages']))
|
|
$l = is_array($j['languages']) ? join(' ', $j['languages']) : '';
|
|
|
|
echo "</a> <span style=\"font-size: 1.0em;\">($l)</span>\n";
|
|
if ($langerr || $judgeerr)
|
|
echo "</span>\n";
|
|
echo '</td></tr>';
|
|
}
|
|
|
|
echo '<tr><td colspan="2">';
|
|
echo '<a onclick="return confirmClick(\'Are you sure you want to empty all judges from this team?\')" href="judges_teams_members.php?action=empty&team_id=' . $team['id'] . '&team_num=' . $team['num'] . '&team_name=' . rawurlencode($team['name']) . '">';
|
|
echo ' ' . i18n('Empty All Members') . ' ';
|
|
echo '<img border=0 src="' . $config['SFIABDIRECTORY'] . '/images/16/button_cancel.' . $config['icon_extension'] . '">';
|
|
echo '</a>';
|
|
echo '</td></tr>';
|
|
} else {
|
|
echo '<tr><td colspan="2">';
|
|
echo error(i18n('Team has no members'), 'inline');
|
|
echo '</td></tr>';
|
|
}
|
|
|
|
echo '</table>';
|
|
|
|
echo '</td></tr></table>';
|
|
}
|
|
|
|
echo '<br />';
|
|
|
|
echo '</td></tr>';
|
|
echo '</table>';
|
|
echo '</form>';
|
|
echo '<div id="infodiv" style="font-size: 1.2em; background-color: #DDF; border:solid;'
|
|
. ' border-width:1px;'
|
|
. ' border-color: #000;'
|
|
. ' position:absolute;'
|
|
. ' top: 0px; left:0px;'
|
|
. ' overflow:hidden; display:none;"'
|
|
. '></div>';
|
|
echo '<div id="infodivcover" style="'
|
|
. ' position:absolute;'
|
|
. ' display:none;"'
|
|
. ' onmouseout="hideMemberDetails();"'
|
|
. '></div>';
|
|
|
|
send_footer();
|
|
|
|
?>
|