forked from science-ation/science-ation
998fe35d67
number, and an option to create numbers automatically - Completely remove all references (hopefully) to the Tour ID - Add a Tour type report - Rework the student report query so it actually makes sense. It really should be a whole bunch of left joins based on the students. Using comma (cross) joins creates situations where if the right side of the join doesn't have information, it wipes out the left side. (Happened before with emergency contact info). - Remove the (two) old custom tour reports - Add 4 new tour reports to the database: - ALL tours for the committee, tour list for students, student emergency contact info for tour coordinators, and a list of tour assignments for students
497 lines
14 KiB
PHP
497 lines
14 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("../common.inc.php");
|
|
require_once("../user.inc.php");
|
|
user_auth_required('committee', 'admin');
|
|
|
|
require_once('reports_students.inc.php');
|
|
require_once('reports_judges.inc.php');
|
|
require_once('reports_awards.inc.php');
|
|
require_once('reports_committees.inc.php');
|
|
require_once('reports_schools.inc.php');
|
|
require_once('reports_volunteers.inc.php');
|
|
require_once('reports_tours.inc.php');
|
|
require_once('reports.inc.php');
|
|
|
|
$fields = array();
|
|
$locs = array('X' => 'x', 'Y' => 'y', 'W' => 'w', 'H' => 'h', 'Lines' => 'lines');
|
|
|
|
function field_selector($name, $id, $selected)
|
|
{
|
|
global $fields;
|
|
echo "<select name=\"$name\" id=\"$id\">";
|
|
echo "<option value=\"\" />-- None --</option>";
|
|
foreach($fields as $k=>$f) {
|
|
$sel = ($selected == $k) ? 'selected=\"selected\"': '' ;
|
|
echo "<option value=\"$k\" $sel >{$f['name']}</option>";
|
|
}
|
|
echo "</select>";
|
|
}
|
|
|
|
function selector($name, $a, $selected)
|
|
{
|
|
echo "<select name=\"$name\">";
|
|
foreach($a as $v=>$val) {
|
|
$sel = ($selected == $v) ? 'selected=\"selected\"' : '';
|
|
echo "<option value=\"$v\" $sel>$val</option>";
|
|
}
|
|
echo '</select>';
|
|
}
|
|
/*
|
|
<script type="text/javascript">
|
|
function reportChange()
|
|
{
|
|
var index = document.forms.report.report.selectedIndex;
|
|
|
|
document.getElementById('report').submit();
|
|
return;
|
|
|
|
|
|
/* Clean out existing settings
|
|
<?foreach($fields as $k=>$f) {
|
|
echo "document.getElementById('$k').checked=false;\n";
|
|
}?>
|
|
document.getElementById('group0').value = '';
|
|
document.getElementById('group1').value = '';
|
|
// document.getElementById('group2').value = '';
|
|
document.getElementById('sort0').value = '';
|
|
document.getElementById('sort1').value = '';
|
|
document.getElementById('sort2').value = '';
|
|
document.getElementById('distinct0').value = '';
|
|
document.getElementById('type').value = 'pdf';
|
|
document.getElementById('group_new_page').value = 'no';
|
|
|
|
/* Load appropriate settings
|
|
if(index == 0) {
|
|
/* Do nothing
|
|
}
|
|
<?$x=1;
|
|
foreach($reports as $r) {
|
|
echo "else if(index == $x) {\n";
|
|
foreach($r['cols'] as $c) {
|
|
echo "document.getElementById('$c').checked=true;\n";
|
|
}
|
|
$i = 0;
|
|
foreach($r['sort'] as $c) {
|
|
echo "document.getElementById('sort$i').value='$c';\n";
|
|
$i++;
|
|
}
|
|
$i = 0;
|
|
foreach($r['group'] as $c) {
|
|
echo "document.getElementById('group$i').value='$c';\n";
|
|
$i++;
|
|
}
|
|
if(is_array($r['distinct'])) {
|
|
$i = 0;
|
|
foreach($r['distinct'] as $c) {
|
|
echo "document.getElementById('distinct$i').value='$c';\n";
|
|
$i++;
|
|
}
|
|
}
|
|
if(is_array($r['option'])) {
|
|
foreach($r['option'] as $k=>$v) {
|
|
echo "document.getElementById('$k').value='$v';\n";
|
|
}
|
|
}
|
|
$x++;
|
|
echo "}\n";
|
|
}
|
|
?>
|
|
|
|
}
|
|
|
|
</script>
|
|
*/
|
|
|
|
function parse_fields($f)
|
|
{
|
|
global $locs;
|
|
$ret = array();
|
|
if(!is_array($_POST[$f])) return array();
|
|
$x = 0;
|
|
foreach($_POST[$f] as $o=>$d) {
|
|
if(is_array($d)) {
|
|
$a = array();
|
|
foreach($d as $l=>$v) {
|
|
/* Scrub the array data */
|
|
$floatloc = array_values($locs);
|
|
if($l == 'field' || $l == 'value') {
|
|
$v = stripslashes($v);
|
|
} else if(in_array($l, $floatloc)) {
|
|
$v = floatval($v);
|
|
} else if($l == 'face') {
|
|
$v = ($v == 'bold') ? 'bold' : '';
|
|
} else if($l == 'align') {
|
|
$aligns = array('left', 'right', 'center');
|
|
if(!in_array($v, $aligns)) {
|
|
echo "Invalid alignment $v";
|
|
exit;
|
|
}
|
|
} else if($l == 'valign') {
|
|
$aligns = array('vtop', 'vbottom', 'vcenter');
|
|
if(!in_array($v, $aligns)) {
|
|
echo "Invalid valignment $v";
|
|
exit;
|
|
}
|
|
}
|
|
$a[$l] = $v;
|
|
}
|
|
if(trim($a['field']) == '') continue;
|
|
$ret[$x] = $a;
|
|
} else {
|
|
if(trim($d) == '') continue;
|
|
$ret[$x]['field'] = stripslashes($d);
|
|
}
|
|
$x++;
|
|
}
|
|
return $ret;
|
|
}
|
|
function parse_options($f)
|
|
{
|
|
$ret = array();
|
|
if(!is_array($_POST[$f])) return array();
|
|
foreach($_POST[$f] as $c=>$v) {
|
|
if(trim($c) == '') continue;
|
|
$ret[$c] = stripslashes($v);
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
/* Decode the report */
|
|
$report = array();
|
|
$report['id'] = intval($_POST['id']);
|
|
$report['name'] = stripslashes($_POST['name']);
|
|
$report['creator'] = stripslashes($_POST['creator']);
|
|
$report['desc'] = stripslashes($_POST['desc']);
|
|
$report['type'] = stripslashes($_POST['type']);
|
|
$report['col'] = parse_fields('col');
|
|
$report['group'] = parse_fields('group');
|
|
$report['sort'] = parse_fields('sort');
|
|
$report['distinct'] = parse_fields('distinct');
|
|
$report['option'] = parse_options('option');
|
|
$report['filter'] = parse_fields('filter');
|
|
|
|
// print("<pre>");print_r($_POST);print("</pre>");
|
|
// print("<pre>");print_r($report);print("</pre>");
|
|
|
|
$loadaction = $_POST['loadaction'];
|
|
$colaction = $_POST['colaction'];
|
|
$repaction = $_POST['repaction'];
|
|
|
|
$repaction_save = $repaction;
|
|
/* Sort out priorities */
|
|
if($loadaction != '') {
|
|
$report = report_load(intval($_POST['id']));
|
|
$colaction = '';
|
|
$repaction = '';
|
|
}
|
|
if($colaction != '') {
|
|
$repaction = '';
|
|
}
|
|
|
|
if($repaction == 'try') {
|
|
/* Generate the report from what was passed through POST */
|
|
report_gen($report);
|
|
exit;
|
|
}
|
|
|
|
send_header("Reports Editor",
|
|
array('Committee Main' => 'committee_main.php',
|
|
'Administration' => 'admin/index.php')
|
|
);
|
|
|
|
if($repaction == 'save') {
|
|
/* Save the report */
|
|
$report['id'] = report_save($report);
|
|
echo happy(i18n("Report Saved"));
|
|
}
|
|
|
|
if($repaction == 'del') {
|
|
report_delete($report['id']);
|
|
echo happy(i18n("Report Deleted"));
|
|
}
|
|
|
|
if($repaction == 'dupe') {
|
|
$report['id'] = 0;
|
|
$report['id'] = report_save($report);
|
|
echo happy(i18n("Report Duplicated"));
|
|
}
|
|
|
|
if($repaction == 'export') {
|
|
echo "<pre>";
|
|
$q = mysql_query("SELECT system_report_id FROM reports WHERE 1 ORDER BY system_report_id DESC");
|
|
$r = mysql_fetch_assoc($q);
|
|
$sid = $r['system_report_id'] + 1;
|
|
$n = mysql_escape_string($report['name']);
|
|
$c = mysql_escape_string($report['creator']);
|
|
$d = mysql_escape_string($report['desc']);
|
|
$t = mysql_escape_string($report['type']);
|
|
|
|
echo "INSERT INTO `reports` (`id`, `system_report_id`, `name`, `desc`, `creator`, `type`) VALUES\n";
|
|
echo "\t('', '$sid', '$n', '$d', '$c', '$t');\n";
|
|
|
|
echo "INSERT INTO `reports_items` (`id`, `reports_id`, `type`, `ord`, `field`, `value`, `x`, `y`, `w`, `h`, `lines`, `face`, `align`) VALUES ";
|
|
|
|
/* Do the options */
|
|
$x = 0;
|
|
foreach($report['option'] as $k=>$v) {
|
|
echo "\n\t('', LAST_INSERT_ID(), 'option', $x, '$k', '$v', 0, 0, 0, 0, 0, '', ''),";
|
|
$x++;
|
|
}
|
|
/* Do the fields */
|
|
$fields = array('col', 'group', 'sort', 'distinct', 'filter');
|
|
$first = true;
|
|
foreach($fields as $f) {
|
|
foreach($report[$f] as $x=>$v) {
|
|
$k = $v['field'];
|
|
$vx = intval($v['x']);
|
|
$vy = intval($v['y']);
|
|
$vw = intval($v['w']);
|
|
$vh = intval($v['h']);
|
|
$vlines = intval($v['lines']);
|
|
$face = $v['face'];
|
|
$align = $v['align']. ' ' . $v['valign'];
|
|
$value=mysql_escape_string(stripslashes($v['value']));
|
|
if(!$first) echo ',';
|
|
$first = false;
|
|
echo "\n\t('', LAST_INSERT_ID(), '$f', $x, '$k', '$value', $vx, $vy, $vw, $vh, $vlines, '$face', '$align')";
|
|
}
|
|
}
|
|
echo ";\n";
|
|
echo "</pre>";
|
|
}
|
|
|
|
|
|
|
|
/* ---- Setup ------ */
|
|
|
|
$n_columns = intval($_POST['ncolumns']);
|
|
$n = count($report['col']) + 1;
|
|
if($n > $n_columns) $n_columns = $n;
|
|
if($colaction == 'add') $n_columns+=3;
|
|
|
|
$fieldvar = "report_{$report['type']}s_fields";
|
|
if(isset($$fieldvar)) $fields = $$fieldvar;
|
|
|
|
|
|
echo "<br />";
|
|
|
|
echo "<form method=\"post\" name=\"reportload\" action=\"reports_editor.php\" onChange=\"document.reportload.submit()\">";
|
|
echo "<input type=\"hidden\" name=\"loadaction\" value=\"load\" />";
|
|
echo "<select name=\"id\" id=\"report\">";
|
|
echo "<option value=\"0\">".i18n("Create New Report")."</option>\n";
|
|
|
|
$reports = report_load_all();
|
|
$x=0;
|
|
foreach($reports as $r) {
|
|
$sel = ($report['id'] == $r['id']) ? 'selected=\"selected\"' : '';
|
|
echo "<option value=\"{$r['id']}\" $sel>{$r['name']}</option>\n";
|
|
}
|
|
echo "</select>";
|
|
echo "<input type=\"submit\" value=\"Load\"></form>";
|
|
echo "<hr />";
|
|
|
|
|
|
echo "<form method=\"post\" name=\"report\" action=\"reports_editor.php\">";
|
|
echo "<input type=\"hidden\" name=\"id\" value=\"{$report['id']}\" />";
|
|
echo "<input type=\"hidden\" name=\"ncolumns\" value=\"$n_columns\" />";
|
|
|
|
echo "<h4>Report Information</h4>";
|
|
echo "<table>";
|
|
echo "<tr><td>Name: </td>";
|
|
echo "<td><input type=\"text\" name=\"name\" size=\"80\" value=\"{$report['name']}\" /></td>";
|
|
echo "</tr>";
|
|
echo "<tr><td>Created By: </td>";
|
|
echo "<td><input type=\"text\" name=\"creator\" size=\"80\" value=\"{$report['creator']}\" /></td>";
|
|
echo "</tr>";
|
|
echo "<tr><td>Description: </td>";
|
|
echo "<td><textarea name=\"desc\" rows=\"3\" cols=\"60\">{$report['desc']}</textarea></td>";
|
|
echo "</tr>";
|
|
echo "<tr><td>Type: </td>";
|
|
echo "<td>";
|
|
selector('type', array('student' => 'Student Report', 'judge' => 'Judge Report',
|
|
'award' => 'Award Report', 'committee' => 'Committee Member Report',
|
|
'school' => 'School Report', 'volunteer' => 'Volunteer Report',
|
|
'tour' => 'Tour Report'),
|
|
|
|
$report['type']);
|
|
|
|
echo "</td>";
|
|
echo "</tr></table>";
|
|
|
|
echo "<h4>Report Data</h4>";
|
|
echo "<table>";
|
|
$x=0;
|
|
//only go through the columns if there are columns to go through
|
|
if(count($report['col'])) {
|
|
foreach($report['col'] as $o=>$d) {
|
|
echo "<tr><td>Column ".($x + 1).": </td>";
|
|
echo "<td>";
|
|
if(intval($x) != intval($o)) {
|
|
echo ("WARNING, out of order!");
|
|
}
|
|
field_selector("col[$o][field]", "col$o", $d['field']);
|
|
echo "</td></tr>";
|
|
$x++;
|
|
}
|
|
}
|
|
for(;$x<$n_columns;$x++) {
|
|
echo "<tr><td>Column ".($x + 1).": </td>";
|
|
echo "<td>";
|
|
field_selector("col[$x][field]", "col$x", '');
|
|
echo "</td></tr>";
|
|
|
|
}
|
|
echo "<tr><td></td>";
|
|
echo "<td align=\"right\">";
|
|
echo "<select name=\"colaction\"><option value=\"\"></option><option value=\"add\">Add more columns</option></select>";
|
|
echo "<input type=\"submit\" value=\"Go\">";
|
|
echo "</td></tr>";
|
|
echo "</table>\n";
|
|
|
|
echo "<h4>Label Data Locations</h4>";
|
|
echo "<table>";
|
|
$x=0;
|
|
|
|
if($report['option']['type'] == 'label') {
|
|
|
|
foreach($report['col'] as $o=>$d) {
|
|
$f = $d['field'];
|
|
echo "<tr><td align=\"right\">Loc ".($o+1).": </td>";
|
|
echo "<td>";
|
|
foreach($locs as $k=>$v) {
|
|
echo "$k=<input type=\"text\" size=\"3\" name=\"col[$x][$v]\" value=\"{$d[$v]}\">";
|
|
}
|
|
echo 'Face=';
|
|
selector("col[$x][face]", array('' => '', 'bold' => 'Bold'), $d['face']);
|
|
echo 'Align';
|
|
selector("col[$x][align]", array('center' => 'Center', 'left' => 'Left', 'right' => 'Right'),
|
|
$d['align']);
|
|
echo 'vAlign';
|
|
selector("col[$x][valign]", array('vcenter' => 'Center', 'vtop' => 'Top', 'vbottom' => 'Bottom'),
|
|
$d['valign']);
|
|
if($f == 'static_text') {
|
|
echo "<br />Text=<input type=\"text\" size=\"40\" name=\"col[$x][value]\" value=\"{$d['value']}\">";
|
|
} else {
|
|
echo "<input type=\"hidden\" name=\"col[$x][value]\" value=\"\">";
|
|
}
|
|
|
|
$x++;
|
|
}
|
|
for(;$x<$n_columns;$x++) {
|
|
echo "<tr><td align=\"right\">Loc ".($x+1).": </td>";
|
|
echo "<td>";
|
|
foreach($locs as $k=>$v) {
|
|
echo "$k=<input type=\"text\" size=\"3\" name=\"col[$x][$v]\" value=\"0\">";
|
|
}
|
|
echo 'Face=';
|
|
selector("col[$x][face]", array('' => '', 'bold' => 'Bold'), '');
|
|
echo 'Align';
|
|
selector("col[$x][align]", array('center' => 'Center', 'left' => 'Left', 'right' => 'Right'),
|
|
'center');
|
|
echo 'vAlign';
|
|
selector("col[$x][valign]", array('vcenter' => 'Center', 'vtop' => 'Top', 'vbottom' => 'Bottom'),
|
|
'top');
|
|
echo "<input type=\"hidden\" name=\"col[$x][value]\" value=\"\">";
|
|
echo "</td></tr>";
|
|
}
|
|
}
|
|
echo "</table>\n";
|
|
|
|
|
|
|
|
echo "<h4>Grouping</h4>";
|
|
for($x=0;$x<2;$x++) {
|
|
echo "Group By".($x + 1).": ";
|
|
$f = $report['group'][$x]['field'];
|
|
field_selector("group[$x]", "group$x", $f);
|
|
echo "<br />";
|
|
}
|
|
echo "<h4>Sorting</h4>";
|
|
for($x=0;$x<3;$x++) {
|
|
echo "Sort By".($x + 1).": ";
|
|
$f = $report['sort'][$x]['field'];
|
|
field_selector("sort[$x]", "sort$x",$f);
|
|
echo "<br />";
|
|
}
|
|
echo "<h4>Distinct</h4>";
|
|
echo "Distinct Column: ";
|
|
$x=0;
|
|
$f = $report['distinct'][$x]['field'];
|
|
field_selector("distinct[$x]", "distinct0", $f);
|
|
|
|
echo "<h4>Filtering</h4>";
|
|
echo "<table>";
|
|
for($x=0;$x<3;$x++) {
|
|
echo "<tr><td>Filter".($x + 1).":</td><td>";
|
|
field_selector("filter[$x][field]", "filter$x",$report['filter'][$x]['field']);
|
|
echo "<br />";
|
|
selector("filter[$x][x]", $filter_ops,$report['filter'][$x]['x']);
|
|
$v = $report['filter'][$x]['value'];
|
|
echo "Text=<input type=\"text\" size=\"20\" name=\"filter[$x][value]\" value=\"$v\">";
|
|
echo "</td></tr>";
|
|
}
|
|
echo "</table>";
|
|
|
|
echo "<h4>Options</h4>";
|
|
foreach($report_options as $ok=>$o) {
|
|
echo "{$o['desc']}: <select name=\"option[$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><br />\n";
|
|
}
|
|
|
|
echo "<br />";
|
|
if($report['system_report_id'] != 0) {
|
|
echo notice(i18n('This is a system report, it cannot be changed or deleted. To save changes you have made to it, please select the \'Save as a new report\' option.'));
|
|
}
|
|
echo "<select name=\"repaction\">";
|
|
if($report['system_report_id'] == 0) {
|
|
$sel = ($repaction_save == 'save') ? "selected=\"selected\"" : '';
|
|
echo " <option value=\"save\" $sel>Save this report</option>";
|
|
$sel = ($repaction_save == 'try') ? "selected=\"selected\"" : '';
|
|
echo " <option value=\"try\" $sel>Try this report</option>";
|
|
echo " <option value=\"export\">Export this report</option>";
|
|
echo " <option value=\"\" ></option>";
|
|
echo " <option value=\"dupe\" >Save as a new report(duplicate)</option>";
|
|
echo " <option value=\"\" ></option>";
|
|
echo " <option value=\"del\" >Delete this report</option>";
|
|
} else {
|
|
echo " <option value=\"dupe\" >Save as a new report(duplicate)</option>";
|
|
$sel = ($repaction_save == 'try') ? "selected=\"selected\"" : '';
|
|
echo " <option value=\"try\" $sel>Try this report</option>";
|
|
echo " <option value=\"export\">Export this report</option>";
|
|
}
|
|
|
|
echo "</select>";
|
|
echo "<input type=\"submit\" value=\"Go\">";
|
|
|
|
echo "</form>";
|
|
|
|
send_footer();
|
|
?>
|