<?

/*
 * 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';
}

?>