science-ation/admin/award_awards.php
2025-02-22 02:29:51 +00:00

1212 lines
43 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 ('awards.inc.php');
$_GET['action'] = $_GET['action'] ?? '';
switch ($_GET['action']) {
case 'awardinfo_load':;
$id = intval(get_value_from_array($_GET, 'id'));
$q = $pdo->prepare('SELECT * FROM award_awards WHERE id=?');
$q->execute([$id]);
$ret = $q->fetch(PDO::FETCH_ASSOC);
// json_encode NEEDS UTF8 DATA, but we store it in the database as ISO :(
foreach ($ret AS $k => $v) {
$ret[$k] = iconv('ISO-8859-1', 'UTF-8', get_value_or_default($v, ''));
}
// echo iconv("ISO-8859-1","UTF-8",json_encode($ret));
echo json_encode($ret);
exit;
case 'award_delete':
$id = intval($_GET['id']);
award_delete($id);
exit;
case 'awardinfo_save':
/* Scrub the data while we save it */
$id = intval($_POST['id']);
try {
if ($id == -1) {
$q = $pdo->prepare("INSERT INTO award_awards (year,self_nominate,schedule_judges)
VALUES (?,'yes','yes')");
$q->execute([$config['FAIRYEAR']]);
$id = $pdo->lastInsertId();
/* Set the award_id in the client */
echo "<script type=\"text/javascript\">award_id=$id;</script>";
}
$q = "UPDATE award_awards SET
award_types_id='" . intval($_POST['award_types_id']) . "',
presenter='" . iconv('UTF-8', 'ISO-8859-1', stripslashes($_POST['presenter'])) . "',
excludefromac='" . (($_POST['excludefromac'] == 1) ? 1 : 0) . "',
cwsfaward='" . (($_POST['cwsfaward'] == 1) ? 1 : 0) . "',
self_nominate='" . (($_POST['self_nominate'] == 'yes') ? 'yes' : 'no') . "',
schedule_judges='" . (($_POST['schedule_judges'] == 'yes') ? 'yes' : 'no') . "',
description='" . iconv('UTF-8', 'ISO-8859-1', stripslashes($_POST['description'])) . "' ";
if (array_key_exists('name', $_POST)) {
/*
* These values may be disabled, if they name key exists, assume
* they aren't disabled and save them too
*/
$q .= ",name=" . $pdo->quote($_POST['name']) . ",
criteria='" . iconv('UTF-8', 'ISO-8859-1', stripslashes($_POST['criteria'])) . "'";
if (isset($_POST['sponsors_id']) || $_POST['sponsors_id'] != '' || intval($_POST['sponsors_id']) != -1) {
$q .= ", sponsors_id=" . intval($_POST['sponsors_id']) . " ";
}
}
$q .= " WHERE id=$id";
error_log('query: ' . $q);
$q = $pdo->prepare($q);
$q->execute();
happy_('Award Created');
happy_('Award information saved');
} catch (PDOException $exception) {
error_('Award not created');
error_('Award information failed to save');
error_log($exception);
}
exit;
case 'eligibility_load':
$id = intval($_GET['id']);
// select the current categories that this award is linked to
$ret = array('categories' => array(), 'divisions' => array());
try {
$q = $pdo->prepare('SELECT * FROM award_awards_projectcategories WHERE award_awards_id=?');
$q->execute([$id]);
while ($r = $q->fetch(PDO::FETCH_ASSOC)) {
$ret['categories'][] = $r['projectcategories_id'];
}
// select the current categories that this award is linked to
$q = $pdo->prepare('SELECT * FROM award_awards_projectdivisions WHERE award_awards_id=?');
$q->execute([$id]);
while ($r = $q->fetch(PDO::FETCH_ASSOC)) {
$ret['divisions'][] = $r['projectdivisions_id'];
}
echo json_encode($ret);
} catch (PDOException $exception) {
error_log($exception);
}
exit;
case 'eligibility_save':
$id = intval($_POST['award_awards_id']);
// now add the new ones
if (!is_array($_POST['categories']) || !is_array($_POST['divisions'])) {
error_('Invalid data');
exit;
}
try {
// wipe out any old award-category links
$q = $pdo->prepare('DELETE FROM award_awards_projectcategories WHERE award_awards_id=?');
$q->execute([$id]);
foreach ($_POST['categories'] AS $key => $cat) {
$c = intval($cat);
$q = $pdo->prepare('INSERT INTO award_awards_projectcategories (award_awards_id, projectcategories_id, year)
VALUES (:id, :c, :year)');
$q->bindParam(':id', $id, PDO::PARAM_INT);
$q->bindParam(':c', $c, PDO::PARAM_INT);
$q->bindParam(':year', $config['FAIRYEAR'], PDO::PARAM_INT);
$q->execute();
}
// wipe out any old award-divisions links
$q = $pdo->prepare('DELETE FROM award_awards_projectdivisions WHERE award_awards_id=?');
$q->execute([$id]);
// now add the new ones
foreach ($_POST['divisions'] AS $key => $div) {
$d = intval($div);
$q = $pdo->prepare('INSERT INTO award_awards_projectdivisions (award_awards_id, projectdivisions_id, year)
VALUES (:id, :d, :year)');
$q->bindParam(':id', $id, PDO::PARAM_INT);
$q->bindParam(':d', $d, PDO::PARAM_INT);
$q->bindParam(':year', $config['FAIRYEAR'], PDO::PARAM_INT);
$q->execute();
show_pdo_errors_if_any($pdo);
}
happy_('Eligibility information saved');
} catch (PDOException $exception) {
error_('Eligibility information failed to save');
}
exit;
case 'prize_order':
$order = 0;
try {
foreach ($_GET['prizelist'] as $position => $id) {
if ($id == '')
continue;
$order++;
$q = $pdo->prepare('UPDATE `award_prizes` SET `order`=? WHERE `id`=?');
$q->execute([$order, $id]);
}
happy_('Order Updated.');
} catch (PDOException $exception) {
error_('Order failed to update');
error_log($exception);
}
exit;
case 'award_order':
$order = 0;
try {
foreach ($_GET['awardlist'] as $position => $id) {
if ($id == '')
continue;
$order++;
$q = $pdo->prepare('UPDATE `award_awards` SET `order`=? WHERE `id`=?');
$q->execute([$order, $id]);
}
happy_('Order updated');
} catch (PDOException $exception) {
error_('Order failed to update');
error_log($exception);
}
exit;
case 'prizeinfo_load':
$id = intval($_GET['id']);
if ($id == -1) {
$q = $pdo->prepare("SELECT * FROM award_prizes WHERE year='-1' AND award_awards_id='0' ORDER BY `order`");
$q->execute();
} else {
$q = $pdo->prepare('SELECT * FROM award_prizes WHERE award_awards_id=? ORDER BY `order`');
$q->execute([$id]);
}
while ($r = $q->fetch(PDO::FETCH_ASSOC)) {
foreach ($r AS $k => $v) {
$r[$k] = iconv('ISO-8859-1', 'UTF-8', $v);
}
$ret[] = $r;
}
echo json_encode($ret);
exit;
case 'prize_load':
$id = intval($_GET['id']);
$q = $pdo->prepare('SELECT * FROM award_prizes WHERE id=?');
$q->execute([$id]);
$ret = $q->fetch(PDO::FETCH_ASSOC);
foreach ($ret AS $k => $v) {
$ret[$k] = iconv('ISO-8859-1', 'UTF-8', $v);
}
echo json_encode($ret);
exit;
case 'prize_create':
$aaid = intval($_GET['award_awards_id']);
$year = $config['FAIRYEAR'];
if ($aaid == -1) {
$aaid = 0;
$year = -1;
}
try {
$q = $pdo->prepare('INSERT INTO award_prizes (award_awards_id, year) VALUES (:aaid, :year)');
$q->bindParam(':aaid', $aaid, PDO::PARAM_INT);
$q->bindParam(':year', $year, PDO::PARAM_INT);
$q->execute();
$ret = array('id' => $pdo->lastInsertId());
echo json_encode($ret);
} catch (PDOException $exception) {
error_log($exception);
}
exit;
case 'prize_save':
$id = intval($_POST['id']);
try {
$q = $pdo->prepare('UPDATE award_prizes SET
prize = :prize,
cash = :cash,
scholarship = :scholarship,
value = :value,
number = :number,
excludefromac = :excludefromac,
trophystudentkeeper = :trophystudentkeeper,
trophystudentreturn = :trophystudentreturn,
trophyschoolkeeper = :trophyschoolkeeper,
trophyschoolreturn = :trophyschoolreturn
WHERE id = :id');
$q->bindParam(':prize', stripslashes(iconv('UTF-8', 'ISO-8859-1', $_POST['prize'])), PDO::PARAM_STR);
$q->bindValue(':cash', intval($_POST['cash']), PDO::PARAM_INT);
$q->bindValue(':scholarship', intval($_POST['scholarship']), PDO::PARAM_INT);
$q->bindValue(':value', intval($_POST['value']), PDO::PARAM_INT);
$q->bindValue(':number', intval($_POST['number']), PDO::PARAM_INT);
$q->bindValue(':excludefromac', ($_POST['excludefromac'] == 1) ? 1 : 0, PDO::PARAM_INT);
$q->bindValue(':trophystudentkeeper', ($_POST['trophystudentkeeper'] == 1) ? 1 : 0, PDO::PARAM_INT);
$q->bindValue(':trophystudentreturn', ($_POST['trophystudentreturn'] == 1) ? 1 : 0, PDO::PARAM_INT);
$q->bindValue(':trophyschoolkeeper', ($_POST['trophyschoolkeeper'] == 1) ? 1 : 0, PDO::PARAM_INT);
$q->bindValue(':trophyschoolreturn', ($_POST['trophyschoolreturn'] == 1) ? 1 : 0, PDO::PARAM_INT);
$q->bindValue(':id', $id, PDO::PARAM_INT);
$q->execute();
happy_('Prize saved');
} catch (PDOException $exception) {
error_('Prize failed to save');
error_log($exception);
}
exit;
case 'prize_delete':
$id = intval($_GET['id']);
award_prize_delete($id);
happy_('Prize deleted');
exit;
case 'feeder_load':
$id = intval($_GET['id']);
/* Prepare two lists of fair IDs, for which fairs can upload and download this award */
$q = $pdo->prepare('SELECT * FROM fairs_awards_link WHERE award_awards_id=?');
$q->execute([$id]);
$ul = array();
$dl = array();
while ($r = $q->fetch(PDO::FETCH_ASSOC)) {
if ($r['upload_winners'] == 'yes')
$ul[$r['fairs_id']] = true;
if ($r['download_award'] == 'yes')
$dl[$r['fairs_id']] = true;
}
$q = $pdo->prepare('SELECT * FROM award_awards WHERE id=?');
$q->execute([$id]);
$a = $q->fetch(PDO::FETCH_ASSOC);
?>
<h4><?= i18n('Feeder Fairs') ?></h4>
<form id="feeder_form">
<input type="hidden" id="feeder_id" name="award_awards_id" value="<?= $a['id'] ?>"/>
<? $ch = $a['per_fair'] == 'yes' ? 'checked="checked"' : ''; ?>
<p><input type="checkbox" name="per_fair" value="yes" <?= $ch ?> />
<?= i18n('Treat this award as a separate award for each feeder fair (instead of as a single award across the whole system). This will allow winners to be assigned to prizes for each feeder fair. If disabled, only a single group if winners will be permitted across all feeder fairs.') ?></p>
<? $ch = (count($ul) || count($dl)) ? 'checked="checked"' : ''; ?>
<p><input type="checkbox" id="feeder_enable" name="enable" value="yes" <?= $ch ?> />
<?= i18n('Allow feeder fairs to download this award.') ?></p>
<div id="feeder_en">
<table class="editor">
<tr><td><?= i18n('Unique Name') ?>:</td>
<td><input type="text" name="identifier" value="<?= $a['external_identifier'] ?>" size="40" maxlength="128" /></td></tr>
<? $ch = $a['external_additional_materials'] ? 'checked="checked"' : ''; ?>
<tr><td><input type="checkbox" name="register_winners" value="1" <?= $ch ?> /></td>
<td><?= i18n('Winners uploaded by a feeder fair should be registered as participants at this fair (both download award and upload winners should be turned on below)') ?></td></tr>
<? $ch = $a['external_register_winners'] ? 'checked="checked"' : ''; ?>
<tr><td><input type="checkbox" name="additional_materials" value="1" <?= $ch ?> /></td>
<td><?= i18n('There is additional material for this award (e.g. forms, instructions). If a feeder fair assigns a winner to this award, they will be told they need to contact this fair to get the additional material.') ?></td></tr>
</table>
<p><?= i18n('Select which feeder fairs can download this award and upload winners.') ?></p>
<table class="tableview">
<tr><th><?= i18n('Fair') ?></th>
<th style="width: 5em"><?= i18n('Download Award') ?></th>
<th style="width: 5em"><?= i18n('Upload Winners') ?></th>
</tr>
<?
$q = $pdo->prepare("SELECT * FROM fairs WHERE type='feeder'");
$q->execute();
while ($r = $q->fetch(PDO::FETCH_ASSOC)) {
echo "<tr><td style=\"padding-left:1em;padding-right:1em\">{$r['name']}</td>";
$ch = $dl[$r['id']] == true ? 'checked="checked"' : '';
echo "<td style=\"text-align:center\"><input type=\"checkbox\" name=\"feeder_dl[]\" value=\"{$r['id']}\" $ch ></td>";
$ch = $ul[$r['id']] == true ? 'checked="checked"' : '';
echo "<td style=\"text-align:center\"><input type=\"checkbox\" name=\"feeder_ul[]\" value=\"{$r['id']}\" $ch ></td>";
echo '</tr>';
}
?>
</table>
</div>
<br />
<button id="feeder_save"><?= i18n('Save') ?></button>
</form>
<?
exit;
case 'feeder_save':
$id = intval($_POST['award_awards_id']);
$dl = is_array($_POST['feeder_dl']) ? $_POST['feeder_dl'] : array();
$ul = is_array($_POST['feeder_ul']) ? $_POST['feeder_ul'] : array();
/* Prepare a fair-wise list */
$data = array();
foreach ($dl AS $fairs_id) {
$data[$fairs_id]['dl'] = true;
}
foreach ($ul AS $fairs_id) {
$data[$fairs_id]['ul'] = true;
}
/* Now save each one */
try {
$q = $pdo->prepare('DELETE FROM fairs_awards_link WHERE award_awards_id=?');
$q->execute([$id]);
show_pdo_errors_if_any($pdo);
foreach ($data as $fairs_id => $f) {
$dl = ($f['dl'] == true) ? 'yes' : 'no';
$ul = ($f['ul'] == true) ? 'yes' : 'no';
$q = $pdo->prepare('INSERT INTO fairs_awards_link (award_awards_id,fairs_id,download_award,upload_winners)
VALUES (?,?,?,?)');
$q->execute([$id, $fairs_id, $dl, $ul]);
show_pdo_errors_if_any($pdo);
}
$ident = stripslashes($_POST['identifier']);
$per_fair = $_POST['per_fair'] == 'yes' ? 'yes' : 'no';
$mat = intval($_POST['additional_materials']);
$w = intval($_POST['register_winners']);
$q = $pdo->prepare('UPDATE award_awards SET external_identifier=?,
external_additional_materials=?,
external_register_winners=?,
per_fair=?
WHERE id=?');
$q->execute([$ident, $mat, $w, $per_fair, $id]);
happy_('Feeder Fair information saved');
} catch (PDOException $exception) {
error_('Feeder Fair information failed to save');
error_log($exception);
}
exit;
}
send_header('Awards Management',
array('Committee Main' => 'committee_main.php',
'Administration' => 'admin/index.php',
'Awards Main' => 'admin/awards.php'));
?>
<script type="text/javascript">
var award_id = 0;
var award_tab_update = new Array();
function update_awardinfo()
{
if(award_tab_update['awardinfo'] == award_id) return;
award_tab_update['awardinfo'] = award_id;
// alert(award_id);
if(award_id == -1) {
// $("#awardinfo input:text").val('');
/* New award, set defaults and clear everythign else */
$("#awardinfo_id").val(-1);
$("#awardinfo_name").val("");
$("#awardinfo_sponsors_id").val(-1);
$("#awardinfo_presenter").val("");
$("#awardinfo_description").val("");
$("#awardinfo_criteria").val("");
$("#awardinfo_award_types_id").val(5);
// For some reason, with checkboxes, these have to be arrays
$("#awardinfo_excludefromac").val([]);
$("#awardinfo_cwsfaward").val([]);
$("#awardinfo_selfnominate").val(["yes"]);
$("#awardinfo_schedulejudges").val(["yes"]);
return;
}
/* Enable all fields */
$("#awardinfo *").prop('disabled',false);
$.getJSON(`<?= $_SERVER['PHP_SELF'] ?>?action=awardinfo_load&id=${award_id}`,
function(json){
$("#awardinfo_id").val(json.id);
$("#awardinfo_name").val(json.name);
$("#awardinfo_award_source_fairs_id").val(json.award_source_fairs_id);
$("#awardinfo_sponsors_id").val(json.sponsors_id);
$("#awardinfo_presenter").val(json.presenter);
$("#awardinfo_description").val(json.description);
$("#awardinfo_criteria").val(json.criteria);
$("#awardinfo_award_types_id").val(json.award_types_id);
// For some reason, with checkboxes, these have to be arrays
$("#awardinfo_excludefromac").val([json.excludefromac]);
$("#awardinfo_cwsfaward").val([json.cwsfaward]);
$("#awardinfo_selfnominate").val([json.self_nominate]);
$("#awardinfo_schedulejudges").val([json.schedule_judges]);
/* Disable fields we don't want the user to edit
* for downloaded awards */
if (json.award_source_fairs_id>0) {
$("#awardinfo_name").attr('disabled', 'disabled');
$("#awardinfo_sponsors_id").attr('disabled', 'disabled');
$("#awardinfo_criteria").attr('disabled', 'disabled');
}
/* Update the dialog title */
$('#popup_editor').dialog('option', 'title', "<?= i18n('Award') ?>: " + $('#awardinfo_name').val());
/* Update the status */
if ($('#awardinfo_award_source_fairs_id').val() != 0) {
$('#popup_status').html("<?= addslashes(notice(i18n('This award was downloaded, some fields are not edittable'))) ?>");
} else {
$('#popup_status').html("");
}
});
}
function awardinfo_save()
{
var reload = (award_id == -1) ? true : false;
/* This is sneaky, we're going to make the awardinfo_save possibly emit
* javascript to set a new award_id, so it will ALWAYS be correct
* after the .load finishes */
$("#debug").load("<? $_SERVER['PHP_SELF'] ?>?action=awardinfo_save", $("#awardinfo").serializeArray(),
function(responseText, textStatus, XMLHttpRequest)
{
/* At this point, award_id has been updated by the load */
/* We want to do this AFTER the load completes.
* Somehow, the value of reload properly makes
* it into this function */
if(reload) {
$("#popup_editor").dialog('close');
popup_editor(award_id, '');
}
});
return false;
}
function update_eligibility()
{
if(award_tab_update['eligibility'] == award_id) return;
award_tab_update['eligibility'] = award_id;
$.getJSON("<?= $_SERVER['PHP_SELF'] ?>?action=eligibility_load&id="+award_id,
function(json){
$("[name=categories\\[\\]]").val(json.categories);
$("[name=divisions\\[\\]]").val(json.divisions);
});
}
function prizelist_refresh()
{
//FIXME Table DnD remove CANNOT reorder prizes now or open to edit, create new award not working either (test the rest of the software)
$("#prizelist").tableDnD({
onDrop: function(table, row) {
var order = $.tableDnD.serialize();
$("#prizeinfo_info").load("<?= $_SERVER['PHP_SELF'] ?>?action=prize_order&"+order);
/* Change the order */
var rows = table.tBodies[0].rows;
for (var i=0; i<rows.length; i++) {
$("#prizelist_order_"+rows[i].id).html(i);
}
},
dragHandle: "drag_handle"
});
}
function update_prizeinfo()
{
/* We can't do this filtering here, sometimes we need to fiorce
* a prizeinfo reload */
// if(award_tab_update['prizeinfo'] == award_id) return;
// award_tab_update['prizeinfo'] = award_id;
/* This also works for the prize template, id=-1 */
$.getJSON("<?= $_SERVER['PHP_SELF'] ?>?action=prizeinfo_load&id="+award_id,
function(json) {
$(".prizelist_tr").remove();
for( var i in json ) {
var p = json[i];
var oc = " onclick=\"edit_prize("+p.id+");\" ";
$("#prizelist").append("<tr class=\"prizelist_tr\" id=\""+p.id+"\"><td class=\"drag_handle\" style=\"cursor:move; text-align:center;\" id=\"prizelist_order_"+p.id+"\">"+p.order+"</td>"+
"<td style=\"cursor:pointer; text-align:center;\" "+oc+" >"+p.number+"</td>"+
"<td style=\"cursor:pointer;\" "+oc+" >"+p.prize+"</td>"+
"<td style=\"cursor:pointer; width:4em; text-align:right; padding-left:2em; padding-right:2em;\" "+oc+">"+p.cash+"</td>"+
"<td style=\"cursor:pointer; width:4em; text-align:right; padding-left:2em; padding-right:2em;\" "+oc+">"+p.scholarship+"</td>"+
"<td style=\"cursor:pointer; width:4em; text-align:right; padding-left:2em; padding-right:2em;\" "+oc+">"+p.value+"</td>"+
"<td style=\"text-align:center;\">"+
"<a onclick=\"edit_prize("+p.id+");\" href=\"#\"><img border=\"0\" src=\"<?= $config['SFIABDIRECTORY'] ?>/images/16/edit.<?= $config['icon_extension'] ?>\"></a>&nbsp;"+
"<a onclick=\"prize_delete("+p.id+");\" href=\"#\" ><img border=0 src=\"<?= $config['SFIABDIRECTORY'] ?>/images/16/button_cancel.<?= $config['icon_extension'] ?>\"></a>"+
"</td></tr>");
}
prizelist_refresh();
});
}
function edit_prize(id)
{
$.getJSON("<?= $_SERVER['PHP_SELF'] ?>?action=prize_load&id="+id,
function(json){
$("#prizeinfo_edit_header").html("<?= i18n('Edit Prize') ?>");
$("#prizeinfo_id").val(json.id);
$("#prizeinfo_prize").val(json.prize);
$("#prizeinfo_cash").val(json.cash);
$("#prizeinfo_scholarship").val(json.scholarship);
$("#prizeinfo_value").val(json.value);
$("#prizeinfo_number").val(json.number);
$("#prizeinfo_trophystudentkeeper").val([json.trophystudentkeeper]);
$("#prizeinfo_trophystudentreturn").val([json.trophystudentreturn]);
$("#prizeinfo_trophyschoolreturn").val([json.trophyschoolreturn]);
$("#prizeinfo_trophyschoolkeeper").val([json.trophyschoolkeeper]);
$("#prizeinfo_excludefromac").val([json.excludefromac]);
$(".prizeinfo").removeAttr("disabled");
$("#prizeinfo_save").removeAttr("disabled");
});
}
function eligibility_save()
{
$("#eligibility_award_awards_id").val(award_id);
$("#debug").load("<? $_SERVER['PHP_SELF'] ?>?action=eligibility_save", $("#eligibility").serializeArray());
return false;
}
function prize_save()
{
$("#debug").load("<? $_SERVER['PHP_SELF'] ?>?action=prize_save", $("#prizeinfo").serializeArray(),
function(responseText, textStatus, XMLHttpRequest)
{
update_prizeinfo();
});
return false;
}
function prize_delete(id)
{
console.log("hi" + id);
var confirm = confirmClick('Are you sure you want to delete this prize?');
if(confirm == true) {
$("#prizeinfo_info").load("<? $_SERVER['PHP_SELF'] ?>?action=prize_delete&id="+id,null,
function(responseText, textStatus, XMLHttpRequest)
{
$(".prizelist_tr#"+id).fadeTo('slow', 0);
$(".prizelist_tr#"+id).remove();
prizelist_refresh();
});
}
return 0;
}
function prize_create()
{
$.getJSON("<?= $_SERVER['PHP_SELF'] ?>?action=prize_create&award_awards_id="+award_id,
function(json){
$(".prizeinfo").val("");
$("#prizeinfo_id").val(json.id);
$("#prizeinfo_edit_header").html("<?= i18n('New Prize') ?>");
$(".prizeinfo").removeAttr("disabled");
$("#prizeinfo_save").removeAttr("disabled");
update_prizeinfo();
});
}
function update_feeder()
{
if(award_tab_update['feeder'] == award_id) return;
award_tab_update['feeder'] = award_id;
$("#editor_tab_feeder").load("<?= $_SERVER['PHP_SELF'] ?>?action=feeder_load&id="+award_id, '',
function(responseText, textStatus, XMLHttpRequest) {
/* Register buttons and handlers */
$("#feeder_enable").on("change", function() {
update_feeder_enable();
});
$("#feeder_save").on("click", function() {
$("#debug").load("<? $_SERVER['PHP_SELF'] ?>?action=feeder_save", $("#feeder_form").serializeArray());
return false;
});
update_feeder_enable();
});
}
function update_feeder_enable()
{
var checked = $('#feeder_enable:checkbox').is(':checked');
if(checked==true) {
$('#feeder_en *').removeAttr('disabled');
} else {
$("#feeder_en *").attr('disabled', 'disabled');
$('#feeder_enable').removeAttr('disabled');
}
}
/* Setup the popup window */
$(document).ready(function() {
$("#popup_editor").dialog({
bgiframe: true, autoOpen: false,
modal: true, resizable: false,
draggable: false,
create: function() {
var $tabs = $('#editor_tabs').tabs();
var selected = $tabs.tabs('option', 'selected');
if(award_id == -1 && selected== 0) {
notice_("<?= i18n('New Award Cancelled') ?>");
}
}
});
$("#editor_tabs").tabs({
create: function(event, ui) {
update_awardinfo();
update_eligibility();
update_prizeinfo();
update_feeder();
},
activate: function( event, ui ) {
update_awardinfo();
update_eligibility();
update_prizeinfo();
update_feeder();
},
active: -1
});
})
</script>
<?
/* Begin popup */
?>
<div id="popup_editor" title="Award Editor" style="display: none">
<div id="popup_status"></div>
<div id="editor_tabs">
<ul><li><a href="#editor_tab_awardinfo"><span><?= i18n('Award Info') ?></span></a></li>
<li><a href="#editor_tab_eligibility"><span><?= i18n('Eligibility') ?></span></a></li>
<li><a href="#editor_tab_prizes"><span><?= i18n('Prizes') ?></span></a></li>
<li><a href="#editor_tab_feeder"><span><?= i18n('Feeder Fairs') ?></span></a></li>
</ul>
<div id="editor_tab_awardinfo">
<h4><?= i18n('Award Info') ?></h4>
<form>
<? /*
* We dont' want to ever change this, but we want it's value, so put it in
* a form by itself
*/
?>
<input type="hidden" name="award_source_fairs_id" id="awardinfo_award_source_fairs_id" value="0" />
</form>
<form id="awardinfo">
<input type="hidden" name="id" id="awardinfo_id" value="0" />
<table class="editor">
<tr><td><?= i18n('Name') ?>:</td>
<td><input class="translatable" type="text" id="awardinfo_name" name="name" value="Loading..." size="50" maxlength="128">
</td></tr>
<tr><td><?= i18n('Sponsor') ?>:</td><td>
<?
$sq = $pdo->prepare('SELECT id,organization FROM sponsors ORDER BY organization');
$sq->execute();
echo '<select id="awardinfo_sponsors_id" name="sponsors_id">';
echo '<option hidden value="-1">' . i18n('Choose a sponsor') . "</option>\n";
while ($sr = $sq->fetch(PDO::FETCH_OBJ)) {
echo "<option value=\"$sr->id\">" . i18n($sr->organization) . '</option>';
}
?>
</select></td></tr>
<tr><td><?= i18n('Presenter') ?>:</td>
<td><input type="text" id="awardinfo_presenter" name="presenter" value="Loading..." size="50" maxlength="128" />
</td></tr>
<tr><td><?= i18n('Type') ?>:</td><td>
<?
$tq = $pdo->prepare('SELECT id,type FROM award_types WHERE year=? ORDER BY type');
$tq->execute([$config['FAIRYEAR']]);
echo '<select id="awardinfo_award_types_id" name="award_types_id">';
// only show the "choose a type" option if we are adding,if we are editing, then they must have already chosen one.
echo $firsttype;
while ($tr = $tq->fetch(PDO::FETCH_OBJ)) {
echo "<option value=\"$tr->id\">" . i18n($tr->type) . '</option>';
}
?>
</select></td></tr>
<tr><td><label><?= i18n('Criteria') ?>:</label></td>
<td><textarea class="translatable" id="awardinfo_criteria" name="criteria" rows="3" cols="50">Loading...</textarea></td></tr>
<tr><td><?= i18n('Description') ?>:</td>
<td><textarea class="translatable" id="awardinfo_description" name="description" rows="3" cols="50">Loading...</textarea></td></tr>
</table>
<h4>Options</h4>
<table class="editor">
<tr> <td><input type="checkbox" id="awardinfo_excludefromac" name="excludefromac" value="1"></td>
<td><?= i18n('Exclude this award from the award ceremony script') ?></td>
</tr><tr>
<td><input type="checkbox" id="awardinfo_cwsfaward" name="cwsfaward" value="1"></td>
<td><?= i18n('This award identifies the students that will be attending the Canada-Wide Science Fair') ?></td>
</tr><tr>
<td><input type="checkbox" id="awardinfo_selfnominate" name="self_nominate" value="yes"></td>
<td><?= i18n('Students can self-nominate for this award (this is usually checked for special awards)') ?></td>
</tr><tr>
<td><input type="checkbox" id="awardinfo_schedulejudges" name="schedule_judges" value="yes"></td>
<td><?= i18n('Allow the Automatic Judge Scheduler to assign judges to this award (usually checked)') ?></td>
</tr></table>
<input type="submit" onClick="awardinfo_save();return false;" value="Save" />
</form>
</div>
<? /* Next Tab */ ?>
<div id="editor_tab_eligibility">
<h4><?= i18n('Eligibility') ?></h4>
<br />
<form id="eligibility">
<input type="hidden" id="eligibility_award_awards_id" name="award_awards_id" value="" />
<table class="editor">
<tr><td><?= i18n('Age Categories') ?>:</td><td>
<?
// if(count($currentcategories)==0) $class="class=\"error\""; else $class="";
// now select all the categories so we can list them all
$cq = $pdo->prepare('SELECT * FROM projectcategories WHERE year = :year ORDER BY mingrade');
$cq->bindParam(':year', $config['FAIRYEAR'], PDO::PARAM_INT);
$cq->execute();
show_pdo_errors_if_any($pdo);
while ($cr = $cq->fetch(PDO::FETCH_OBJ)) {
echo "<input type=\"checkbox\" id=\"eligibility_categories_{$cr->id}\" name=\"categories[]\" value=\"$cr->id\" />" . i18n($cr->category) . '<br />';
}
?>
</td></tr>
<tr><td><?= i18n('Divisions') ?>:</td><td>
<?
$dq = $pdo->prepare('SELECT * FROM projectdivisions WHERE year = :year ORDER BY division');
$dq->bindParam(':year', $config['FAIRYEAR'], PDO::PARAM_INT);
$dq->execute();
while ($dr = $dq->fetch(PDO::FETCH_OBJ)) {
echo "<input type=\"checkbox\" id=\"eligibility_divisions_{$dr->id}\" name=\"divisions[]\" value=\"$dr->id\" />" . i18n($dr->division) . '<br />';
}
// if(count($currentcategories)==0 || count($currentdivisions)==0)
// echo "<tr><td colspan=\"2\" class=\"error\">".i18n("At least one age category and one division must be selected")."</td></tr>";
?>
</td></tr></table>
<input type="submit" onClick="eligibility_save();return false;" value="Save" />
</form>
</div>
<? /* Next Tab */ ?>
<div id="editor_tab_prizes">
<h4><?= i18n('Prizes') ?></h4>
<br />
<table id="prizelist" class="tableview">
<tr class="nodrop nodrag">
<th style="width:4em"><?= i18n('Script Order') ?></th>
<th><?= i18n('# Available') ?></th>
<th style="width: 15em"><?= i18n('Prize Description') ?></th>
<th><?= i18n('Cash') ?></th>
<th><?= i18n('Scholarship') ?></th>
<th><?= i18n('Value') ?></th>
<th><?= i18n('Actions') ?></th>
</tr></table>
<br >
<br >
<hr>
<br /><h4 id="prizeinfo_edit_header">Click on a prize to edit</h4><br />
<form id="prizeinfo">
<input type="hidden" id="prizeinfo_id" name="id" value=""/>
<input type="hidden" id="prizeinfo_award_awards_id" name="award_awards_id" value=""/>
<table class="editor">
<tr>
<td><?= i18n('Number available') ?>:</td>
<td><input type="text" id="prizeinfo_number" class="prizeinfo" name="number" value="" size="3" maxlength="5" disabled="disabled" /></td>
</tr><tr>
<td><?= i18n('Prize Description') ?>:</td>
<td><input type="text" id="prizeinfo_prize" class="prizeinfo translatable" name="prize" value="" size="40" maxlength="128" disabled="disabled"/></td>
</tr><tr>
<td><?= i18n('Cash Amount') ?> ($):</td>
<td><input type="text" id="prizeinfo_cash" class="prizeinfo" name="cash" value="" size="10" maxlength="10" disabled="disabled" /></td>
</tr><tr>
<td><?= i18n('Scholarship Amount') ?> ($):</td>
<td><input type="text" id="prizeinfo_scholarship" class="prizeinfo" name="scholarship" value="" size="10" maxlength="10" disabled="disabled" /></td>
</tr><tr>
<td><?= i18n('Prize Value') ?> ($):</td>
<td><input type="text" id="prizeinfo_value" class="prizeinfo" name="value" value="" size="10" maxlength="10" disabled="disabled" /></td>
</tr><tr>
<td><?= i18n('Plaque/Trophy') ?>:</td>
<td>
<table>
<tr> <td style="width:5%;"><input type="checkbox" id="prizeinfo_trophystudentkeeper" class="prizeinfo" name="trophystudentkeeper" value="1" disabled="disabled"></td>
<td style="width:45%"><?= i18n('Student(s) keeper trophy') ?></td>
<td style="width:5%;"><input type="checkbox" id="prizeinfo_trophystudentreturn" class="prizeinfo" name="trophystudentreturn" value="1" disabled="disabled"></td>
<td style="width:45%"><?= i18n('Student(s) annual return/reuse trophy') ?></td>
</tr><tr>
<td style="width:5%;"><input type="checkbox" id="prizeinfo_trophyschoolkeeper" class="prizeinfo" name="trophyschoolkeeper" value="1" disabled="disabled"></td>
<td style="width:45%;"><?= i18n('School keeper trophy') ?></td>
<td style="width:5%;"><input type="checkbox" id="prizeinfo_trophyschoolreturn" class="prizeinfo" name="trophyschoolreturn" value="1" disabled="disabled"></td>
<td style="width:45%;"><?= i18n('School annual return/reuse trophy') ?></td>
</tr></table></td>
</tr><tr>
<td><?= i18n('Awards Ceremony') ?>:</td>
<td><input type="checkbox" id="prizeinfo_excludefromac" class="prizeinfo" name="excludefromac" value="1" disabled="disabled"><?= i18n('Exclude this prize from the award ceremony script') ?></td>
</tr>
</table>
</form>
<br />
<form>
<input type="submit" onClick="prize_create();return false;" value="<?= i18n('Create New Prize') ?>" />
<input type="submit" id="prizeinfo_save" onClick="prize_save();return false;" value="<?= i18n('Save Prize') ?>" disabled="disabled" />
</form>
</div>
<? /* Next Tab */ ?>
<div id="editor_tab_feeder"></div>
<? /* End tabs, end popup */ ?>
</div></div>
<?
/*
* Here's all the code for the award list, except for the AJAX queries which are
* at the top of this file
*/
?>
<script type="text/javascript">
function popup_editor(id, mode)
{
var w = (document.documentElement.clientWidth * 0.8);
var h = (document.documentElement.clientHeight * 0.8);
award_id = id;
/* We don't really need this, but we'll force all the tabs to reload on
* activation anyway */
award_tab_update = new Array();
/* Force no tabs to be selected, need to set collapsible
* to true first */
$('#editor_tabs').tabs('option', 'collapsible', true);
$('#editor_tabs').tabs('option', 'selected', -1);
/* Then we'll select a tab to force a reload */
switch(mode) {
case 'new':
$('#editor_tabs').tabs('option', 'disabled', [1, 2, 3]);
$('#editor_tabs').tabs('option','active', 0);
break;
case 'template':
$('#editor_tabs').tabs('option', 'disabled', [0, 1, 3]);
$('#editor_tabs').tabs('option', 'active', 2);
break;
default:
$('#editor_tabs').tabs('option', 'disabled', []);
$('#editor_tabs').tabs('option','active', 0);
break;
}
/* Don't let anything collapse */
$('#editor_tabs').tabs('option', 'collapsible', false);
/* Force an awardinfo update, there's some info in there that we want now */
update_awardinfo();
/* Show the dialog */
$('#popup_editor').dialog('option', 'width', w);
$('#popup_editor').dialog('option', 'height', h);
$("#popup_editor").dialog('open');
return true;
}
function awardlist_refresh()
{
$("#awardlist").tableDnD({
onDrop: function(table, row) {
var order = $.tableDnD.serialize();
// $(row).fadeTo('fast',1);
$("#award_info").load("<?= $_SERVER['PHP_SELF'] ?>?action=award_order&"+order);
/* Change the order */
var rows = table.tBodies[0].rows;
for (var i=0; i<rows.length; i++) {
$("#awardlist_order_"+rows[i].id).html(i);
}
},
onDragStart: function(table, row) {
// $(row).fadeTo('fast',0.2);
},
dragHandle: "drag_handle"
});
}
function award_delete(id)
{
var conf = confirmClick('<?= i18n('Are you sure you want to remove this award?') ?>');
if(conf == true) {
$("#info_info").load("<? $_SERVER['PHP_SELF'] ?>?action=award_delete&id="+id);
/* The TRs need to have just a numeric ID, which could conflict with other lists, so
* tag each TR with a class too, and select both the class and the ID */
$(".awardlist_tr#"+id).fadeTo('slow', 0);
$(".awardlist_tr#"+id).remove();
/* Rows changed, need to refresh the drag list */
awardlist_refresh();
}
}
$(document).ready(function() {
awardlist_refresh();
});
</script>
<div id="info_info"></div>
<?
/* List filtering */
if (get_value_from_array($_GET, 'sponsors_id') && $_GET['sponsors_id'] != 'all')
$_SESSION['sponsors_id'] = $_GET['sponsors_id'];
else if (get_value_from_array($_GET, 'sponsors_id') == 'all')
unset($_SESSION['sponsors_id']);
if (get_value_from_array($_GET, 'award_types_id') && $_GET['award_types_id'] != 'all')
$_SESSION['award_types_id'] = $_GET['award_types_id'];
else if (get_value_from_array($_GET, 'award_types_id') == 'all')
unset($_SESSION['award_types_id']);
/*
* if($_GET['award_sponsors_confirmed'] && $_GET['award_sponsors_confirmed']!="all")
* $_SESSION['award_sponsors_confirmed']=$_GET['award_sponsors_confirmed'];
*
* if($_GET['sponsors_id']=="all")
* unset($_SESSION['sponsors_id']);
* if($_GET['award_types_id']=="all")
* unset($_SESSION['award_types_id']);
* if($_GET['award_sponsors_confirmed']=="all")
* unset($_SESSION['award_sponsors_confirmed']);
*/
$award_types_id = get_value_from_array($_SESSION, 'award_types_id');
$sponsors_id = get_value_from_array($_SESSION, 'sponsors_id');
// $award_sponsors_confirmed=$_SESSION['award_sponsors_confirmed'];
echo '<br />';
echo i18n('Filter By:');
echo '<form method="get" action="award_awards.php" name="filterchange">';
echo '<table><tr><td colspan="2">';
$q = $pdo->prepare('SELECT id,organization FROM sponsors ORDER BY organization');
$q->execute();
echo '<select name="sponsors_id" onchange="document.forms.filterchange.submit()">';
echo '<option value="all">' . i18n('All Sponsors') . '</option>';
while ($r = $q->fetch(PDO::FETCH_OBJ)) {
if ($r->id == $sponsors_id) {
$sel = 'selected="selected"';
$sponsors_organization = $r->organization;
} else
$sel = '';
echo "<option $sel value=\"$r->id\">" . i18n($r->organization) . '</option>';
}
echo '</select>';
echo '</td></tr>';
echo '<tr><td>';
$q = $pdo->prepare('SELECT id, type FROM award_types WHERE year = :year ORDER BY type');
$q->bindParam(':year', $config['FAIRYEAR'], PDO::PARAM_INT);
$q->execute();
echo '<select name="award_types_id" onchange="document.forms.filterchange.submit()">';
echo '<option value="all">' . i18n('All Award Types') . '</option>';
while ($r = $q->fetch(PDO::FETCH_OBJ)) {
if ($r->id == $award_types_id) {
$sel = 'selected="selected"';
$award_types_type = $r->type;
} else
$sel = '';
echo "<option $sel value=\"$r->id\">" . i18n($r->type) . '</option>';
}
echo '</select>';
echo '</td><td>';
/*
* //FIXME: 'confirmed' no longer exists, we need to lookup their sponsorship record and check the status there, either pending, confirmed or received, dunno if it makes sense to put that here or not..
*
* echo "<select name=\"award_sponsors_confirmed\" onchange=\"document.forms.filterchange.submit()\">";
* if($award_sponsors_confirmed=="all") $sel="selected=\"selected\""; else $sel="";
* echo "<option value=\"all\">".i18n("Any Status")."</option>";
* if($award_sponsors_confirmed=="yes") $sel="selected=\"selected\""; else $sel="";
* echo "<option $sel value=\"yes\">".i18n("Confirmed Only")."</option>";
* if($award_sponsors_confirmed=="no") $sel="selected=\"selected\""; else $sel="";
* echo "<option $sel value=\"no\">".i18n("Unconfirmed Only")."</option>";
* echo "</select>";
*/
echo '</form>';
echo '</td></tr>';
echo '</table>';
?>
<br />
<form>
<input type="button" onClick="popup_editor(-1, 'new');" value="<?= i18n('Create New Award') ?>" />
<input type="button" onClick="popup_editor(-1, 'template');" value="<?= i18n('Edit Generic Prize Template') ?>" />
</form>
<br /><br />
<?
$where_asi = $where_asi ?? '';
$where_ati = $where_ati ?? '';
if ($sponsors_id)
$where_asi = "AND sponsors_id='$sponsors_id'";
if ($award_types_id)
$where_ati = "AND award_types_id='$award_types_id'";
// if($award_sponsors_confirmed) $where_asc="AND award_sponsors.confirmed='$award_sponsors_confirmed'";
$orderby = $orderby ?? '';
if (!$orderby)
$orderby = 'ORDER BY `order`';
$q = $pdo->prepare("SELECT
award_awards.id,
award_awards.name,
award_awards.order,
award_awards.award_source_fairs_id,
award_types.type,
sponsors.organization
FROM
award_awards
LEFT JOIN sponsors ON sponsors.id = award_awards.sponsors_id
LEFT JOIN award_types ON award_types.id = award_awards.award_types_id
WHERE
award_awards.year=?
$where_asi
$where_ati
AND award_types.year=?
$orderby
");
$q->execute([$config['FAIRYEAR'], $config['FAIRYEAR']]);
show_pdo_errors_if_any($pdo);
if ($q->rowCount()) {
//echo '* ' . i18n('Click on the Script Order and drag to re-order the awards');
echo '<table id="awardlist" class="tableview" >';
echo '<tr class="nodrop nodrag">';
echo ' <th>' . i18n('Order') . '</th>';
echo ' <th>' . i18n('Sponsor') . '</th>';
echo ' <th>' . i18n('Type') . '</th>';
echo ' <th>' . i18n('Name') . '</th>';
echo ' <th>' . i18n('Prizes') . '</th>';
echo ' <th>' . i18n('Actions') . '</th>';
echo "</tr>\n";
$hasexternal = false;
while ($r = $q->fetch(PDO::FETCH_OBJ)) {
if ($r->award_source_fairs_id) {
$cl = 'externalaward';
$hasexternal = true;
} else
$cl = '';
$eh = "style=\"cursor:pointer;\" onclick=\"popup_editor({$r->id},'');\"";
echo "<tr class=\"$cl awardlist_tr\" id=\"{$r->id}\" >\n";
echo " <td id=\"awardlist_order_{$r->id}\" class=\"drag_handle\" style=\"cursor:move; text-align:right;\">{$r->order}</td>\n";
echo " <td $eh>{$r->organization}</td>\n";
echo " <td $eh>{$r->type}</td>\n";
echo " <td $eh>{$r->name}</td>\n";
$numq = $pdo->prepare('SELECT SUM(number) AS num FROM award_prizes WHERE award_awards_id=?');
$numq->execute([$r->id]);
$numr = $numq->fetch(PDO::FETCH_ASSOC);
if (!$numr['num'])
$numr['num'] = 0;
echo " <td $eh align=\"center\">{$numr['num']}</td>";
echo ' <td align="center">';
// echo "<img border=\"0\" src=\"{$config['SFIABDIRECTORY']}/images/16/edit.{$config['icon_extension']}\">";
// echo "&nbsp;";
echo "<a onclick=\"award_delete({$r->id});\" href=\"#\" ><img border=0 src=\"{$config['SFIABDIRECTORY']}/images/16/button_cancel.{$config['icon_extension']}\"></a>";
echo " </td>\n";
echo "</tr>\n";
}
if ($hasexternal)
echo '<tr class="externalaward"><td colspan="6">' . i18n('Indicates award imported from an external source') . '</td></tr>';
echo "</table>\n";
echo '</form>';
}
echo '<br />';
// echo "<a href=\"award_prizes.php?award_awards_id=-1\">Edit prizes for the generic prize template</a>";
if ($_GET['action'] == 'edit_prize_template') {
?><script type="text/javascript">
$(document).ready(function() {
popup_editor(-1,'template');
});
</script>
<?
}
send_footer();
?>