forked from science-ation/science-ation
177 lines
4.9 KiB
PHP
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';
|
|
}
|
|
|
|
?>
|