science-ation/admin/reports_gen.php
2025-02-10 19:54:20 +00:00

305 lines
10 KiB
PHP

<?
/*
* This file is part of the 'Science Fair In A Box' project
* Science-ation Website: https://science-ation.ca/
*
* 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');
user_auth_required('committee', 'admin');
require_once('reports.inc.php');
$id = intval($_GET['id']);
$type = stripslashes($_GET['type']);
$stock = stripslashes($_GET['stock']);
$year = intval($_GET['year']);
$include_incomplete_registrations = ($_GET['include_incomplete_registrations'] == 'yes') ? 'yes' : '';
$show_options = array_key_exists('show_options', $_GET);
if ($year < 1000)
$year = $config['FAIRYEAR'];
/* If it's a system report, turn that into the actual report id */
if (array_key_exists('sid', $_GET)) {
$sid = intval($_GET['sid']);
$q = $pdo->prepare("SELECT id FROM reports WHERE system_report_id='$sid'");
$q->execute();
$r = $q->fetch(PDO::FETCH_OBJ);
$id = $r['id'];
}
$report = report_load($id);
/* Add a custom filter if specified */
$filter_args = '';
if (is_array($_GET['filter'])) {
foreach ($_GET['filter'] as $f => $v) {
$report['filter'][] = array('field' => $v['field'], 'x' => $v['x'], 'value' => $v['value']);
$filter_args .= "&filter[$f][field]={$v['field']}&filter[$f][x]={$v['x']}&filter[$f][value]={$v['value']}";
}
}
switch ($_GET['action']) {
case 'dialog_gen':
if ($id < 0) {
$u = "{$config['SFIABDIRECTORY']}/{$report_custom[-$id]['custom_url']}";
?>
<script type="text/javascript">
window.location.href = "<?= $u ?>";
</script>
<?
exit;
}
?>
<div id="report_dialog_gen" title="Generate Report" style="display: none">
<div id="report_gen_tabs">
<ul>
<li><a href="#report_gen_tab_info"><span><?= i18n('Report Information') ?></span></a></li>
<li><a href="#report_gen_tab_advanced"><span><?= i18n('Advanced Options') ?></span></a></li>
</ul>
<form id="report_dialog_form">
<div id="report_gen_tab_info">
<input type="hidden" name="id" value="<?= $id ?>" />
<table class="editor" style="width:95%">
<tr>
<td colspan="2"><br />
<h3><?= i18n('Report Information') ?></h3><br />
</td>
</tr>
<tr>
<td class="label"><b><?= i18n('Report Name') ?></b>:</td>
<td class="input"><?= $report['name'] ?></b></td>
</tr>
<tr>
<td class="label"><b><?= i18n('Description') ?></b>:</td>
<td class="input"><?= $report['desc'] ?></b></td>
</tr>
<tr>
<td class="label"><b><?= i18n('Created By') ?></b>:</td>
<td class="input"><?= $report['creator'] ?></td>
</tr>
<tr>
<?
/* See if the report is in this committee member's list */
$q = $pd->prepare("SELECT * FROM reports_committee
\t\t\t\tWHERE users_id='{$_SESSION['users_uid']}'
AND reports_id='{$report['id']}'");
$q->execute();
if ($q->rowCount() > 0) {
$i = $q->fetch(PDO::FETCH_ASSOC);
?>
<td colspan="2">
<hr />
<h3><?= i18n('My Reports Info') ?></h3>
</td>
</tr>
<tr>
<td class="label"><b><?= i18n('Category') ?></b>:</td>
<td class="input"><?= $i['category'] ?></b></td>
</tr>
<tr>
<td class="label"><b><?= i18n('Comment') ?></b>:</td>
<td class="input"><?= $i['comment'] ?></b></td>
</tr>
<tr>
<? } ?>
<td colspan="2"><br />
<hr />
<h3><?= i18n('Report Options') ?></h3><br />
</td>
</tr>
<?
$format = $report['options']['type'];
$stock = $report['options']['stock'];
$year = $config['FAIRYEAR'];
/* Out of all the report optins, we really only want these ones */
$option_keys = array('type', 'stock');
foreach ($report_options as $ok => $o) {
if (!in_array($ok, $option_keys))
continue;
echo "<tr><td class=\"label\"><b>{$o['desc']}</b>:</td>";
echo "<td class=\"input\"><select name=\"$ok\" id=\"$ok\">";
foreach ($o['values'] as $k => $v) {
$sel = ($report['option'][$ok] == $k) ? 'selected="selected"' : '';
echo "<option value=\"$k\" $sel>" . htmlspecialchars($v) . '</option>';
}
echo "</select></td></tr>\n";
}
/* Find all the years */
$q = $pdo->prepare('SELECT DISTINCT year FROM config WHERE year>1000 ORDER BY year DESC');
$q->execute();
echo '<tr><td class="label"><b>' . i18n('Year') . '</b>:</td>';
echo '<td class="input"><select name="year" id="year">';
while ($i = $q->fetch(PDO::FETCH_ASSOC)) {
$y = $i['year'];
$sel = ($config['FAIRYEAR'] == $y) ? 'selected="selected"' : '';
echo "<option value=\"$y\" $sel>$y</option>";
}
echo "</select></td></tr>\n";
?>
</table>
</div>
<div id="report_gen_tab_advanced">
<table class="editor" style="width:95%">
<tr>
<td colspan="2"><br />
<h4><?= i18n('Advanced Options') ?></h4><br />
</td>
</tr>
<tr>
<td class="label"><input type="checkbox" name="include_incomplete_registrations" value="yes" /></td>
<td class="input"><?= i18n('Include student and project data from incomplete registrations. The registration only needs to have a division and category selected.') ?></td>
</table>
</div>
</form>
</div>
</div>
<script type="text/javascript">
$("#report_gen_tabs").tabs();
$("#report_dialog_gen").dialog({
bgiframe: true,
autoOpen: true,
modal: true,
resizable: false,
draggable: false,
width: 800, //(document.documentElement.clientWidth * 0.8);
height: 600, //(document.documentElement.clientHeight * 0.7),
close: function() {
$(this).dialog('destroy');
$('#report_dialog_gen').remove();
},
buttons: {
"<?= i18n('Cancel') ?>": function() {
$('#report_dialog_gen').dialog("close");
return false;
},
"<?= i18n('Download Report') ?>": function() {
var dlargs = $('#report_dialog_form').serialize() + "<?= $filter_args ?>";
var dlurl = "<?= $config['SFIABDIRECTORY'] ?>/admin/reports_gen.php?" + dlargs;
$('#debug').html(dlurl);
// alert(dlurl);
// $('#content').attr('src',dlurl);
window.location.href = dlurl;
$('#report_dialog_gen').dialog("close");
return false;
}
}
});
</script>
<?
exit;
}
if ($show_options == false) {
if ($id && $year) {
$report['year'] = $year;
if ($type != '')
$report['option']['type'] = $type;
if ($stock != '')
$report['option']['stock'] = $stock;
if ($include_incomplete_registrations != '')
$report['option']['include_incomplete_registrations'] = 'yes';
report_gen($report);
} else {
exit;
header('Location: reports.php');
}
exit;
}
send_header('Report Options', array(
'Committee Main' => 'committee_main.php',
'My Reports' => 'admin/reports.php'
));
echo '<form method=\"get\" action="reports_gen.php">';
echo "<input type=\"hidden\" name=\"id\" value=\"$id\">";
echo '<table class="tableedit">';
echo '<tr><td><b>' . i18n('Report&nbsp;Name') . '</b>:</td>';
echo "<td>{$report['name']}</td></tr>";
echo '<tr><td><b>' . i18n('Description') . '</b>:</td>';
echo "<td>{$report['desc']}</td></tr>";
echo '<tr><td><b>' . i18n('Created By') . '</b>:</td>';
echo "<td>{$report['creator']}</td></tr>";
echo '<tr><td colspan="2"><hr /></td></tr>';
/* See if the report is in this committee member's list */
$q = $pdo->prepare("SELECT * FROM reports_committee
\t\t\tWHERE users_id='{$_SESSION['users_uid']}'
AND reports_id='{$report['id']}'");
$q->execute();
echo '<tr><td colspan="2"><h3>' . i18n('My Reports Info') . '</h3></td></tr>';
if ($q->rowCount() > 0) {
/* Yes, it is */
$i = $q->fetch(PDO::FETCH_OBJ);
echo '<tr><td><b>' . i18n('Category') . '</b>:</td>';
echo "<td>{$i->category}</td></tr>";
echo '<tr><td><b>' . i18n('Comment') . '</b>:</td>';
echo "<td>{$i->comment}</td></tr>";
} else {
echo '<tr><td></td><td>' . i18n("This report is NOT in your 'My Reports' list.") . '</td></tr>';
}
echo '<tr><td colspan="2"><hr /></td></tr>';
echo '<tr><td colspan="2"><h3>' . i18n('Report Options') . '</h3></td></tr>';
$format = $report['options']['type'];
$stock = $report['options']['stock'];
$year = $config['FAIRYEAR'];
/* Out of all the report optoins, we really only want these ones */
$option_keys = array('type', 'stock');
foreach ($report_options as $ok => $o) {
if (!in_array($ok, $option_keys))
continue;
echo "<tr><td><b>{$o['desc']}</b>:</td>";
echo "<td><select name=\"$ok\" id=\"$ok\">";
foreach ($o['values'] as $k => $v) {
$sel = ($report['option'][$ok] == $k) ? 'selected="selected"' : '';
echo "<option value=\"$k\" $sel>$v</option>";
}
echo '</select></td></tr>';
}
/* Find all the years */
$q = $pdo->prepare('SELECT DISTINCT year FROM config WHERE year>1000 ORDER BY year DESC');
$q->execute();
echo '<tr><td><b>' . i18n('Year') . '</b>:</td>';
echo '<td><select name="year" id="year">';
while ($i = $q->fetch(PDO::FETCH_ASSOC)) {
$y = $i['year'];
$sel = ($config['FAIRYEAR'] == $y) ? 'selected="selected"' : '';
echo "<option value=\"$y\" $sel>$y</option>";
}
echo '</select></td></tr>';
echo '</table>';
echo '<br />';
echo '<input type="submit" value="' . i18n('Generate Report') . '" />';
echo '</form>';
send_footer();
?>