science-ation/judge.inc.php
2025-02-09 18:59:35 +00:00

177 lines
4.9 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>
* Copyright (C) 2009 David Grant <dave@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.
*/
?>
<?
$preferencechoices = array(
-2 => 'Very Low',
-1 => 'Low',
0 => 'Indifferent',
1 => 'Medium',
2 => 'High'
);
function judge_status_expertise(&$u)
{
global $config, $pdo;
/*
* If the judging special awards are active, and the judge has
* selected "I am a special awards judge", then disable
* expertise checking
*/
if ($config['judges_specialaward_only_enable'] == 'yes') {
if ($u['special_award_only'] == 'yes')
return 'complete';
}
/* Check to see if they have ranked all project age categories, and all divisions */
$q = $pdo->prepare("SELECT COUNT(id) AS num FROM projectcategories WHERE year=?");
$q->execute([$config['FAIRYEAR']]);
$r = $q->fetch(PDO::FETCH_OBJ);
$numcats = $r->num;
if ($numcats != count(get_value_from_array($u, 'cat_prefs', [])))
return 'incomplete';
$q = $pdo->prepare("SELECT COUNT(id) AS num FROM projectdivisions WHERE year=?");
$q->execute([$config['FAIRYEAR']]);
$r = $q->fetch(PDO::FETCH_OBJ);
$numdivisions = $r->num;
if ($numdivisions != count($u['div_prefs']))
return 'incomplete';
return 'complete';
}
function judge_status_other(&$u)
{
global $config;
/* They must select a language to judge in */
if (count($u['languages']) < 1)
return 'incomplete';
return judge_status_questions($u);
}
function judge_status_questions($u)
{
/*
* Logic:
* - count the number of required questions and get their id's.
* - count the questions answered by the user which match those id's
* - if those counts are not the same, then the user has not answered all required questions
*/
global $config, $pdo;
// get the questions we're looking for
$q = $pdo->prepare('SELECT id FROM questions WHERE year=? AND required=yes');
$q->execute([$config['FAIRYEAR']]);
$idList = array();
while ($row = $q->fetch(PDO::FETCH_ASSOC))
$idList[] = $row['id'];
$rval = 'complete';
if (count($idList)) {
$q = $pdo->prepare('SELECT COUNT(*) AS tally FROM question_answers WHERE questions_id IN(' . implode(',', $idList) . ') AND users_id=? AND answer IS NOT NULL');
$q->execute([$u['id']]);
$row = $q->fetch(PDO::FETCH_ASSOC);
if (intval($row['tally']) != count($idList))
$rval = 'incomplete';
}
return $rval;
}
function judge_status_special_awards(&$u)
{
global $config, $pdo;
if ($config['judges_specialaward_enable'] == 'no' && $u['special_award_only'] == 'no')
return 'complete';
/*
* Complete if:
* - judge has selected (none) "no special award preferences"
* - judge has selected between min and max preferences
*/
$qq = $pdo->prepare("SELECT COUNT(id) AS num FROM judges_specialaward_sel
WHERE users_id=?");
$qq->execute([$u['id']]);
$rr = $qq->fetch(PDO::FETCH_OBJ);
$awards_selected = $rr->num;
// echo "$awards_selected awards selected, ({$config['judges_specialaward_min']} - {$config['judges_specialaward_max']})";
if ($u['special_award_only'] == 'yes') {
/* Judge for special award */
/*
* They may judge more than one award, so don't limit them
* to one
*/
if ($awards_selected >= 1)
return 'complete';
return 'incomplete';
}
if (($awards_selected >= $config['judges_specialaward_min']) &&
($awards_selected <= $config['judges_specialaward_max'])) {
return 'complete';
}
return 'incomplete';
}
function judge_status_availability(&$u)
{
global $config, $pdo;
if ($config['judges_availability_enable'] == 'no')
return 'complete';
$q = $pdo->prepare("SELECT id FROM judges_availability WHERE users_id=?");
$q->execute([$u['id']]);
if ($q->rowCount() > 0)
return 'complete';
return 'incomplete';
}
function judge_status_update(&$u)
{
global $config;
if (user_personal_info_status($u) == 'complete' &&
judge_status_expertise($u) == 'complete' &&
judge_status_other($u) == 'complete' &&
judge_status_availability($u) == 'complete' &&
judge_status_special_awards($u) == 'complete')
$u['judge_complete'] = 'yes';
else
$u['judge_complete'] = 'no';
user_save($u);
return ($u['judge_complete'] == 'yes') ? 'complete' : 'incomplete';
}
?>