<?

/*
 * This file is part of the Science-ation project
 * Science-ation Website: https://science-ation.ca
 *
 * This file was part of the 'Science Fair In A Box' project
 *
 *
 * Copyright (C) 2005 Sci-Tech Ontario Inc <info@scitechontario.org>
 * Copyright (C) 2005 James Grant <james@lightbox.org>
 * Copyright (C) 2024 AlgoLibre Inc. <science-ation@algolibre.io>
 *
 * 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');
require_once ('../projects.inc.php');
require_once ('../fair_additional_materials.inc.php');

$auth_type = user_auth_required(array('fair', 'committee'), 'admin');

$award_awards_id = intval(get_value_from_array($_GET, 'award_awards_id'));
$action = get_value_from_array($_GET, 'action');

/* Load fairs */
$fairs = array();
$q = $pdo->prepare("SELECT * FROM fairs WHERE type='feeder' ORDER BY name");
$q->execute();
while (($f = $q->fetch(PDO::FETCH_ASSOC))) {
	$fairs[$f['id']] = $f;
}

switch ($action) {
	case 'addwinner':
		$prize_id = intval($_GET['prize_id']);
		$projects_id = intval($_GET['projects_id']);

		if (!$prize_id || !$projects_id) {
			error_('Illegal Assignment');
			exit;
		}

		// first check how many we are allowed to have
		$q = $pdo->prepare("SELECT number FROM award_prizes WHERE id=?");
		$q->execute([$prize_id]);
		show_pdo_errors_if_any($pdo);
		$r = $q->fetch(PDO::FETCH_ASSOC);
		$number = $r['number'];

		/* Get the award info */
		$q = $pdo->prepare("SELECT * FROM award_awards WHERE id=?");
		$q->execute([$award_awards_id]);
		show_pdo_errors_if_any($pdo);
		$a = $q->fetch(PDO::FETCH_ASSOC);

		/* Get the project */
		$q = $pdo->prepare("SELECT fairs_id FROM projects WHERE id=?");
		$q->execute([$projects_id]);
		show_pdo_errors_if_any($pdo);
		$p = $q->fetch(PDO::FETCH_ASSOC);
		$fairs_id = $p['fairs_id'];

		/*
		 * Quick sanity check don't let a fair user do an assignment for someone not
		 * in their fair
		 */
		if ($auth_type == 'fair' && $fairs_id != $_SESSION['fairs_id']) {
			error_('Illegal Assignemnt');
			exit;
		}

		if ($a['per_fair'] == 'yes') {
			/* Count is the number of this fair already assigned */
			$q = $pdo->prepare("SELECT COUNT(*) AS count FROM winners 
						LEFT JOIN projects ON winners.projects_id=projects.id
					WHERE 
						projects.fairs_id=?
						awards_prizes_id=?");
			$q->execute([$fairs_id,$prize_id]);
			show_pdo_errors_if_any($pdo);
			$r = $q->fetch(PDO::FETCH_ASSOC);
			$count = $r['count'];
		} else {
			/* Count is the total number assigned */
			$q = $pdo->prepare("SELECT COUNT(*) AS count FROM winners WHERE awards_prizes_id=?");
			$q->execute([$prize_id]);
			show_pdo_errors_if_any($pdo);
			$r = $q->fetch(PDO::FETCH_ASSOC);
			$count = $r['count'];
		}

		if ($count < $number) {
			$stmt = $pdo->prepare("INSERT INTO winners (awards_prizes_id,projects_id,year) VALUES (?,?,?)");
			$stmt->execute([$prize_id,$projects_id,$config['FAIRYEAR']]);
			happy_('Winning project added');
		} else {
			error_('This prize cannot accept any more winners.  Maximum: %1', $number);
		}

		exit;

	case 'deletewinner':
		$prize_id = intval($_GET['prize_id']);
		$projects_id = intval($_GET['projects_id']);

		if ($prize_id && $projects_id) {
			$stmt = $pdo->prepare("DELETE FROM winners WHERE awards_prizes_id=? AND projects_id=?");
			$stmt->execute([$prize_id,$projects_id]);
			happy_('Winning project removed');
		}
		exit;
	case 'award_load':
		$fairs_id = intval($_GET['fairs_id']);
		/* Load the award */
		$q = $pdo->prepare("SELECT 
				award_awards.id,
				award_awards.name,
				award_awards.criteria,
				award_awards.order AS awards_order,
				award_awards.per_fair,
				award_awards.external_additional_materials,
				award_awards.award_source_fairs_id,
				award_types.type
			FROM 
				award_awards ,
				award_types
			WHERE 
					award_awards.year=?
				AND\taward_awards.award_types_id=award_types.id
				AND \taward_types.year=award_awards.year
				AND\taward_awards.id=?
			");
		$q->execute([$config['FAIRYEAR'],$award_awards_id]);

		show_pdo_errors_if_any($pdo);

		if ($q->rowCount() != 1) {
			echo i18n("Invalid award to load $award_awards_id");
			exit;
		}
		$r = $q->fetch(PDO::FETCH_ASSOC);
		print_award($r, $fairs_id);
		exit;

	case 'edit_load':
		$fairs_id = intval($_GET['fairs_id']);

		/* Force the fair user to only edit their fair */
		//	if($auth_type == 'fair') $fairs_id = $_SESSION['fairs_id'];

		/* Load the award */
		$q = $pdo->prepare("SELECT 
				award_awards.id,
				award_awards.name,
				award_awards.criteria,
				award_awards.order AS awards_order,
				award_awards.per_fair,
				award_awards.external_additional_materials,
				award_awards.award_source_fairs_id,
				award_types.type
			FROM 
				award_awards ,
				award_types
			WHERE 
					award_awards.year=?
				AND\taward_awards.award_types_id=award_types.id
				AND \taward_types.year=award_awards.year
				AND\taward_awards.id=?
			");
		$q->execute([$config['FAIRYEAR'],$award_awards_id]);

		show_pdo_errors_if_any($pdo);

		if ($q->rowCount() != 1) {
			echo i18n("Invalid award to edit $award_awards_id");
			exit;
		}

		$r = $q->fetch(PDO::FETCH_ASSOC);

		$editor_data = array();

		/* Load projects */
		if ($r['type'] == 'Special') {
			$editor_data['projects_nominated'] = getProjectsNominatedForSpecialAward($r['id']);
			$editor_data['disable_nominated'] = false;
		} else {
			$editor_data['projects_nominated'] = array();
			$editor_data['disable_nominated'] = true;
		}
		$editor_data['projects_eligible'] = getProjectsEligibleForAward($r['id']);

		/* Print the award header */
		echo '<br />';
		if ($fairs_id)
			echo '<h4>' . i18n('Winners from') . ": {$fairs[$fairs_id]['name']}</h4>";
		echo "<b>{$r['type']} - {$r['name']}</b><br />";
		echo "{$r['criteria']}<br />";

		/* Print the award with editor */
		print_award($r, $fairs_id, true, $editor_data);
		exit;

	case 'additional_materials':
		$fairs_id = intval($_GET['fairs_id']);
		$q = $pdo->prepare("SELECT * FROM award_awards WHERE id=?");
		$q->execute([$award_awards_id]);
		if ($fairs_id == 0) {
			echo "Unsupported Action: Can't get additional materials for fairs_id=0.  Edit the project and set it's fair to anything except 'Local/Unspecified'.";
			exit;
		}
		$a = $q->fetch(PDO::FETCH_ASSOC);
		$q = $pdo->prepare("SELECT * FROM fairs WHERE id=?");
		$q->execute([$fairs_id]);
		$fair = $q->fetch(PDO::FETCH_ASSOC);
		$pdf = fair_additional_materials($fair, $a, $config['FAIRYEAR']);
		foreach ($pdf['header'] as $h)
			header($h);
		echo $pdf['data'];
		exit;
}

if ($auth_type == 'fair') {
	send_header('Enter Winning Projects',
		array('Science Fair Main' => 'fair_main.php'),
		'enter_winning_projects');
} else {
	send_header('Enter Winning Projects',
		array('Committee Main' => 'committee_main.php',
			'Administration' => 'admin/index.php'),
		'enter_winning_projects');
}

?>
<div id="winner_editor" title="Edit Winners" style="display: none">
	<div id="winner_content"></div>
</div>

<script language="javascript" type="text/javascript">

var award_awards_id = 0;
var fairs_id = 0;

function update_winner_content()
{
	$("#winner_content").load("<?= $_SERVER['PHP_SELF'] ?>?action=edit_load&award_awards_id="+award_awards_id+"&fairs_id="+fairs_id,{},
		function(responseText, textStatus, XMLHttpRequest) {
			/* Attach to save button */
			$("#project_save").click(function() {
				var id = award_awards_id;
				$("#debug").load("project_editor.php?action=save&award_awards_id="+id, $("#project_form").serializeArray());
			});
		}
	);
}


function popup_editor(id,fid)
{
	var w = (document.documentElement.clientWidth * 0.9);
	var h = (document.documentElement.clientHeight * 0.9);

	award_awards_id = id;
	fairs_id = fid;

	/* Show the dialog */
	$('#winner_editor').dialog('option', 'width', w);
	$('#winner_editor').dialog('option', 'height', h);
	$("#winner_editor").dialog('open');

	update_winner_content();

	return true;
}

function delete_winner(prize_id, projects_id)
{
	var conf = confirm("<?= i18n('Are you sure you want to remove this project from this prize?') ?>");
	if(conf == false) return false;

	$("#debug").load("<?= $_SERVER['PHP_SELF'] ?>?action=deletewinner&award_awards_id="+award_awards_id+"&prize_id="+prize_id+"&projects_id="+projects_id,{},
		function(responseText, textStatus, XMLHttpRequest) {
			update_winner_content();
		}
	);
}

function add_winner(prize_id)
{
	var projects_id;
	if($("#nom_"+prize_id).hasClass('text-link-selected')) {
		projects_id = $("#projects_select_"+prize_id+"_nom").val();
	} else {
		projects_id = $("#projects_select_"+prize_id+"_eli").val();
	}
	$("#debug").load("<?= $_SERVER['PHP_SELF'] ?>?action=addwinner&award_awards_id="+award_awards_id+"&prize_id="+prize_id+"&projects_id="+projects_id,{},
		function(responseText, textStatus, XMLHttpRequest) {
			update_winner_content();
		}
	);
}

function unlist_winner(projects_id)
{
	$(".projects_select option[value='"+projects_id+"']").remove();
}

function set_nom(prize_id)
{
	/* Don't try anything if this is already selected */
	if($("#nom_"+prize_id).hasClass('text-link-selected')) return false;
	/* If nominated link is disabled, set all-eligible instead */
	if($("#nom_"+prize_id).hasClass('text-link-disabled')) return set_eli(prize_id);

	/* Populate List */
	$("#projects_select_"+prize_id+"_eli").css('display', 'none');
	$("#projects_select_"+prize_id+"_nom").css('display', 'inline');

/* This was brilliant, but we need to filter select boxes by fairs_id in some cases, 
 * so keeping a master copy and duplicating it just didn't work :( 
 * Actually, we can do this now, but the code works the other way, so i'm not going
  * to change it back. :p */
/*	$("#projects_select_"+prize_id).val('');
	$("#projects_select_"+prize_id).html('');
	$("#projects_nominated > option").clone().appendTo("#projects_select_"+prize_id); */

	/* Swap selected styles */
	$("#nom_"+prize_id).addClass('text-link-selected');
	$("#eli_"+prize_id).removeClass('text-link-selected');
}

function set_eli(prize_id)
{
	/* Don't try anything if this is already selected */
	if($("#eli_"+prize_id).hasClass('text-link-selected')) {
		return false;
	}

	/* Populate List */
	$("#projects_select_"+prize_id+"_eli").css('display', 'inline');
	$("#projects_select_"+prize_id+"_nom").css('display', 'none');

	/* Swap selected styles */
	$("#nom_"+prize_id).removeClass('text-link-selected');
	$("#eli_"+prize_id).addClass('text-link-selected');
}


$(document).ready(function() {

	$("#winner_editor").dialog({
		bgiframe: true, autoOpen: false,
		modal: true, resizable: false,
		draggable: false,
		buttons: { 
/*			"<?= i18n('Cancel') ?>": function() { 
				$(this).dialog("close"); 
			},
			"<?= i18n('Save') ?>": function() { 
				save_report();	
				$(this).dialog("close"); */
			"<?= i18n('Close') ?>": function() { 
//				save_report();	
				$(this).dialog("close"); 
			} 
		},
		close: function() {
			/* Reload the row after the dialog close in case the info has changed */
			$("#winner_list_"+award_awards_id+"_"+fairs_id).load("<?= $_SERVER['PHP_SELF'] ?>?action=award_load&award_awards_id="+award_awards_id+"&fairs_id="+fairs_id);
		}
	});
});



</script>
<?

$fair_join = '';
$fair_where = '';
if ($auth_type == 'fair') {
	/*
	 * Join to fairs_award_link, and only list awards that are set
	 * as "upload winners" for this fair
	 */
	$fair_join = 'LEFT JOIN fairs_awards_link ON fairs_awards_link.award_awards_id=award_awards.id';
	$fair_where = "AND fairs_awards_link.upload_winners='yes' 
			AND fairs_awards_link.fairs_id='{$_SESSION['fairs_id']}'";
}
$q = $pdo->prepare("SELECT 
			award_awards.id,
			award_awards.name,
			award_awards.order AS awards_order,
			award_awards.per_fair,
			award_awards.external_additional_materials,
			award_awards.award_source_fairs_id,
			award_types.type,
			sponsors.organization
		FROM 
			award_awards ?,
			award_types,
			sponsors
		WHERE 
				award_awards.year=?
			AND\taward_awards.award_types_id=award_types.id
			AND\taward_types.year=?
			AND\taward_awards.sponsors_id=sponsors.id
			?
		ORDER BY awards_order");
$q->execute([$fair_join,$config['FAIRYEAR'],$config['FAIRYEAR'],$fair_where]);

show_pdo_errors_if_any($pdo);

if ($q->rowCount() == 0) {
	echo i18n('No awards to display.');
	send_footer();
	exit;
}

echo '<br />';
echo i18n('Choose an award to assign winners');
echo '<br />';
echo '<br />';

$fairs_id = ($auth_type == 'fair') ? $_SESSION['fairs_id'] : 0;

while ($r = $q->fetch(PDO::FETCH_ASSOC)) {
	if ($r['per_fair'] == 'yes' && $auth_type != 'fair') {
?>		<?= $r['type'] ?> - <?= $r['name'] ?>
		<span style="font-size: 0.8em; font-style: italic;">(<?= $r['organization'] ?>)</span><br />
<?
		foreach ($fairs as $fid => $f) {
			?>			<a title="<?= i18n('Edit winners for this award') ?>" href="#" onClick="popup_editor(<?= $r['id'] ?>,<?= $f['id'] ?>);return false;">
			<?= $f['name'] ?></a><br />
			<div id="winner_list_<?= $r['id'] ?>_<?= $fid ?>">

<?
			print_award($r, $f['id']);
			echo '</div>';
		}
	} else {
		?>		<a title="<?= i18n('Edit winners for this award') ?>" href="#" onClick="popup_editor(<?= $r['id'] ?>,<?= $fairs_id ?>);return false;">
			<?= $r['type'] ?> - <?= $r['name'] ?></a>
		<span style="font-size: 0.8em; font-style: italic;">(<?= $r['organization'] ?>)</span><br />
		<div id="winner_list_<?= $r['id'] ?>_<?= $fairs_id ?>">
<?
		print_award($r, $fairs_id);
		echo '</div>';
	}
	echo '<br />';
}

function print_award(&$r, $fairs_id, $editor = false, $editor_data = array())
{
	global $config, $auth_type;
	global $pdo;

	//	echo "fair=$fairs_id";

	/*
	 * Setup the winner filter, we don't want to restrict this
	 * to a specific fair for the 'fair' user
	 */
	$fairs_where = '';
	if ($r['per_fair'] == 'yes') {
		if ($fairs_id == 0) {
			echo "blank fairs_id for per-fair award. bug.\n";
			exit;
		}
		/* For per-fair awards, filter the results */
		$fairs_where = "AND projects.fairs_id='$fairs_id'";
	}

	/* Force the 'fair' user to only edit their own fair */
	if ($auth_type == 'fair')
		$fairs_id = $_SESSION['fairs_id'];

	/* Load prizes for this award */
	$q = $pdo->prepare("SELECT 
				award_prizes.prize,
				award_prizes.number,
				award_prizes.id,
				award_prizes.cash,
				award_prizes.scholarship
			FROM 
				award_prizes 
			WHERE 
				award_awards_id=? 
				AND award_prizes.year=?
			ORDER BY 
				`order`");
	$q->execute([$r['id'],$config['FAIRYEAR']]);
	show_pdo_errors_if_any($pdo);

	echo '<table width="100%"><tr><td>';
	$has_winners = false;
	while ($pr = $q->fetch(PDO::FETCH_OBJ)) {
		if ($editor == true) {
			echo '<br /><hr />';
		}

		echo "&nbsp;&nbsp;<b>{$pr->prize}";
		if ($pr->cash || $pr->scholarship) {
			echo ' (';
			if ($pr->cash && $pr->scholarship)
				echo "\${$pr->cash} cash / \${$pr->scholarship} scholarship";
			else if ($pr->cash)
				echo "\${$pr->cash} cash";
			else if ($pr->scholarship)
				echo "\${$pr->scholarship} scholarship";
			echo ')';
		}

		/* Load winners for this prize */
		$cq = $pdo->prepare("SELECT winners.projects_id,
					projects.projectnumber,
					projects.title,
					projects.fairs_id
				FROM 
					winners
					LEFT JOIN projects ON projects.id=winners.projects_id
				WHERE 
					winners.awards_prizes_id=?
					? ");
		$cq->execute([$pr->id,$fairs_where]);
		show_pdo_errors_if_any($pdo);
		$count = $cq->rowCount();
		//		echo "winners=$count";

		/* Print count */
		$colour = ($count < $pr->number) ? 'red' : 'green';
		echo " <font color=\"$colour\">[$count/{$pr->number}]</font>";
		echo '</b>';
		echo '<br />';

		/* List current winners for this prize */
		$winners = array();
		while ($w = $cq->fetch(PDO::FETCH_ASSOC)) {
			if ($w['projectnumber']) {
				echo '&nbsp;&nbsp;&nbsp;&nbsp;';
				if ($editor == true) {
					/* Print the delete X before the project */
					if ($auth_type == 'fair' && $w['fairs_id'] != $fairs_id) {
						/* show a blank so everything lines up */
						echo '&nbsp;&nbsp;&nbsp;&nbsp;';
					} else {
						echo "<a onclick=\"delete_winner({$pr->id},{$w['projects_id']});return false;\" href=\"#\" >";
						echo "<img style=\"vertical-align:middle\" border=0 src=\"{$config['SFIABDIRECTORY']}/images/16/button_cancel.{$config['icon_extension']}\"></a>";
						echo '&nbsp;';
					}
					$winners[] = $w['projects_id'];
				}
				$has_winners = true;
				echo "({$w['projectnumber']}) {$w['title']}";
				echo '<br />';
			} else {
				/*	echo "&nbsp;&nbsp;&nbsp;&nbsp;";
					echo "<font color=\"red\">No winner(s) specified</font>"; */
			}
		}

		/* Unlist all the winners we just printed from ALL lists */
		if ($editor == true) {
			echo '<script language="javascript" type="text/javascript">';
			foreach ($winners as $w)
				echo "unlist_winner($w);";
			echo '</script>';
		}

		/* Print the select box if we need it */
		if ($editor == true && $count < $pr->number) {
			$n_nom = 0;
			$n_eli = 0;
			?>
			<br />
			<form id="winner_<?= $pr->id ?>">
			&nbsp;&nbsp;&nbsp;
			<select id="projects_select_<?= $pr->id ?>_nom" class="projects_select" style="display:none">
			<option value=""><?= i18n('Choose a project') ?></option>
<?
			foreach ($editor_data['projects_nominated'] as $p) {
				if ($fairs_id != 0 && $p['fairs_id'] != $fairs_id)
					continue;
				echo "<option value=\"{$p['id']}\">{$p['projectnumber']} {$p['title']}</option>";
				$n_nom++;
			}
			?>			</select>
			<select id="projects_select_<?= $pr->id ?>_eli" class="projects_select" style="display:none">
			<option value=""><?= i18n('Choose a project') ?></option>
<?
			foreach ($editor_data['projects_eligible'] as $p) {
				if ($fairs_id != 0 && $p['fairs_id'] != $fairs_id)
					continue;
				echo "<option value=\"{$p['id']}\">{$p['projectnumber']} {$p['title']}</option>";
				$n_eli++;
				print_r($p);
			}
			?>			</select>
			<button id="" onClick="add_winner(<?= $pr->id ?>); return false;"><?= i18n('Add') ?></button>
			<br />&nbsp;&nbsp;&nbsp;
			<?= i18n('List') ?>: 
<?
			if ($editor_data['disable_nominated'] == true)
				$n_nom = 'N/A';
			$nom = i18n('All Nominated') . " ($n_nom)";
			$el = i18n('All Eligible') . " ($n_eli)";

			$cl = ($editor_data['disable_nominated'] == true) ? 'text-link-disabled' : '';
			?>
			<span id="nom_<?= $pr->id ?>" class="text-link <?= $cl ?>" onClick="set_nom(<?= $pr->id ?>);return false;"><?= $nom ?>
			</span> - <span id="eli_<?= $pr->id ?>" class="text-link" onClick="set_eli(<?= $pr->id ?>);return false;"><?= $el ?></span>
			</form>

			<script language="javascript" type="text/javascript">
<?  /*
			                                                                                                                                                                                                                                                                                                                                      * Start with the nominated list, unless there are none, do
			                                                                                                                                                                                                                                                                                                                                      * the eligible list by default in that case
			                                                                                                                                                                                                                                                                                                                                      */
			if ($n_nom > 0)
				echo "set_nom({$pr->id});";
			else
				echo "set_eli({$pr->id});";
			?>			</script>
<?
		}
	}
	echo '</td><td align="right">';
	if ($r['external_additional_materials'] == 1 && $editor == false && $r['award_source_fairs_id'] == NULL) {
		$d = 'disabled="disabled"';
		$a = '';
		if ($has_winners == true) {
			echo "<a href=\"{$_SERVER['PHP_SELF']}?action=additional_materials&award_awards_id={$r['id']}&fairs_id={$fairs_id}\" >";
			$d = '';
			$a = '</a>';
		}
		echo "<button $d title=\"" . i18n('Download additional material (currently only a nomination form)') . '">' . i18n('Download Additional Materials') . "</button>$a<br/>";
	}
	echo '</td></tr></table>';
}

send_footer();

?>