forked from science-ation/science-ation
500 lines
14 KiB
PHP
500 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.
|
|
*/
|
|
|
|
$report_students_fields = array(
|
|
'pn' => array(
|
|
'name' => 'Project Number',
|
|
'header' => '#',
|
|
'width' => 0.5,
|
|
'table' => 'CAST(projects.projectnumber AS UNSIGNED)' ),
|
|
|
|
'last_name' => array(
|
|
'name' => 'Student -- Last Name',
|
|
'header' => 'Last Name',
|
|
'width' => 1.0,
|
|
'table' => 'students.lastname' ),
|
|
|
|
'first_name' => array(
|
|
'name' => 'Student -- First Name',
|
|
'header' => 'First Name',
|
|
'width' => 1.0,
|
|
'table' => 'students.firstname' ),
|
|
|
|
'name' => array(
|
|
'name' => 'Student -- Full Name (last, first)',
|
|
'header' => 'Name',
|
|
'width' => 1.75,
|
|
'table' => "CONCAT(students.lastname, ', ', students.firstname)",
|
|
'table_sort'=> 'students.lastname' ),
|
|
|
|
'namefl' => array(
|
|
'name' => 'Student -- Full Name (first last)',
|
|
'header' => 'Name',
|
|
'width' => 1.75,
|
|
'table' => "CONCAT(students.firstname, ' ', students.lastname)",
|
|
'table_sort'=> 'students.lastname' ),
|
|
|
|
'partner' => array(
|
|
'name' => 'Student -- Partner Name',
|
|
'header' => 'Partner',
|
|
'width' => 1.5,
|
|
'table' => "CONCAT(students2.lastname, ', ', students2.firstname)",
|
|
'components' => array('partner') ),
|
|
|
|
'bothnames' => array(
|
|
'name' => "Student -- Both Student Names",
|
|
'header' => 'Student(s)',
|
|
'width' => 3.0,
|
|
'table' => "CONCAT(students.firstname, ' ', students.lastname, IF(students2.lastname IS NULL,'', CONCAT(', ', students2.firstname, ' ', students2.lastname)))",
|
|
'table_sort' => 'students.lastname',
|
|
'components' => array('partner') ),
|
|
|
|
'email' => array(
|
|
'name' => 'Student -- Email',
|
|
'header' => 'Email',
|
|
'width' => 1.5,
|
|
'table' => 'students.email'),
|
|
|
|
'phone' => array(
|
|
'name' => 'Student -- Phone',
|
|
'header' => 'Phone',
|
|
'width' => 1.0,
|
|
'table' => 'students.phone'),
|
|
|
|
'grade' => array(
|
|
'name' => 'Student -- Grade',
|
|
'header' => 'Gr.',
|
|
'width' => 0.3,
|
|
'table' => 'students.grade'),
|
|
|
|
'gender' => array(
|
|
'name' => 'Student -- Gender',
|
|
'header' => 'Gender',
|
|
'width' => 0.5,
|
|
'table' => 'students.sex',
|
|
'value_map' =>array ('male' => 'Male', 'female' => 'Female')),
|
|
|
|
'birthdate' => array(
|
|
'name' => 'Student -- Birthdate',
|
|
'header' => 'Birthdate',
|
|
'width' => 0.9,
|
|
'table' => 'students.dateofbirth'),
|
|
|
|
'age' => array(
|
|
'name' => 'Student -- Age (when this report is created)',
|
|
'header' => 'Age',
|
|
'width' => 0.4,
|
|
'table' => "DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(students.dateofbirth)), '%Y')+0",
|
|
'table_sort' => 'students.dateofbirth'),
|
|
|
|
'title' => array(
|
|
'name' => 'Project -- Title',
|
|
'header' => 'Project Title',
|
|
'width' => 2.75,
|
|
'table' => 'projects.title' ),
|
|
|
|
'division' => array(
|
|
'name' => 'Project -- Division',
|
|
'header' => 'Division',
|
|
'width' => 3.0,
|
|
'table' => 'projectdivisions.division' ),
|
|
|
|
'div' => array(
|
|
'name' => 'Project -- Division Short Form' ,
|
|
'header' => 'Div',
|
|
'width' => 0.4,
|
|
'table' => 'projectdivisions.division_shortform' ),
|
|
|
|
'category' => array(
|
|
'name' => 'Project -- Category',
|
|
'header' => 'Category',
|
|
'width' => 1,
|
|
'table_sort' => 'projectcategories.id',
|
|
'table' => 'projectcategories.category' ),
|
|
|
|
'categorydivision' => array(
|
|
'name' => 'Project -- Category and Division',
|
|
'header' => 'Category/Division',
|
|
'width' => 3.5,
|
|
'table_sort' => 'projectcategories.id',
|
|
'table' => "CONCAT(projectcategories.category,' - ', projectdivisions.division)"),
|
|
|
|
'summary' => array(
|
|
'name' => 'Project -- Summary',
|
|
'header' => 'Project Summary',
|
|
'width' => 4.00,
|
|
'table' => 'projects.summary' ),
|
|
|
|
'language' => array(
|
|
'name' => 'Project -- Language',
|
|
'header' => 'Lang',
|
|
'width' => 1.00,
|
|
'table' => 'projects.language' ),
|
|
|
|
'address' => array(
|
|
'name' => 'Student Address -- Street Address',
|
|
'header' => 'Address',
|
|
'width' => 2.0,
|
|
'table' => 'students.address'),
|
|
|
|
'city' => array(
|
|
'name' => 'Student Address -- City',
|
|
'header' => 'City',
|
|
'width' => 1.5,
|
|
'table' => 'students.city' ),
|
|
|
|
'province' => array(
|
|
'name' => 'Student Address -- Province',
|
|
'header' => 'Province',
|
|
'width' => 0.75,
|
|
'table' => 'students.province' ),
|
|
|
|
'postal' => array(
|
|
'name' => 'Student Address -- Postal Code',
|
|
'header' => 'Postal',
|
|
'width' => 0.75,
|
|
'table' => 'students.postalcode' ),
|
|
|
|
'school' => array(
|
|
'name' => 'School -- Name',
|
|
'header' => 'School Name',
|
|
'width' => 2.25,
|
|
'table' => 'schools.school' ),
|
|
|
|
'schooladdr' => array(
|
|
'name' => 'School -- Full Address',
|
|
'header' => 'School Address',
|
|
'width' => 3.0,
|
|
'table' => "CONCAT(schools.address, ', ', schools.city, ', ', schools.province_code, ', ', schools.postalcode)" ),
|
|
|
|
'teacher' => array(
|
|
'name' => 'School -- Teacher Name',
|
|
'header' => 'Teacher',
|
|
'width' => 1.5,
|
|
'table' => 'students.teachername' ),
|
|
|
|
'teacheremail' => array(
|
|
'name' => 'School -- Teacher Email',
|
|
'header' => 'Teacher Email',
|
|
'width' => 2.0,
|
|
'table' => 'students.teacheremail' ),
|
|
|
|
'school_phone' => array(
|
|
'name' => 'School -- Phone',
|
|
'header' => 'School Phone',
|
|
'width' => 1,
|
|
'table' => 'schools.phone' ),
|
|
|
|
'school_fax' => array(
|
|
'name' => 'School -- Fax',
|
|
'header' => 'School Fax',
|
|
'width' => 1,
|
|
'table' => 'schools.fax' ),
|
|
|
|
|
|
'school_address' => array(
|
|
'name' => 'School Address -- Street Address',
|
|
'header' => 'Address',
|
|
'width' => 2.0,
|
|
'table' => 'schools.address'),
|
|
|
|
'school_city' => array(
|
|
'name' => 'School Address -- City',
|
|
'header' => 'City',
|
|
'width' => 1.5,
|
|
'table' => 'schools.city' ),
|
|
|
|
'school_province' => array(
|
|
'name' => 'School Address -- Province',
|
|
'header' => 'Province',
|
|
'width' => 0.75,
|
|
'table' => 'schools.province_code' ),
|
|
|
|
'school_city_prov' => array(
|
|
'name' => 'School Address -- City, Province (for mailing)',
|
|
'header' => 'City',
|
|
'width' => 1.5,
|
|
'table' => "CONCAT(schools.city, ', ', schools.province_code)" ),
|
|
|
|
'school_postal' => array(
|
|
'name' => 'School Address -- Postal Code',
|
|
'header' => 'Postal',
|
|
'width' => 0.75,
|
|
'table' => 'schools.postalcode' ),
|
|
|
|
'school_board' => array(
|
|
'name' => 'School -- Board ID',
|
|
'header' => 'Board',
|
|
'width' => 0.75,
|
|
'table' => 'schools.board' ),
|
|
|
|
'paid' => array(
|
|
'name' => 'Paid',
|
|
'header' => 'Paid',
|
|
'width' => '0.4',
|
|
'table' => 'registrations.status',
|
|
'value_map' => array ('complete' => '', 'paymentpending' => 'No')),
|
|
|
|
'tshirt' => array(
|
|
'name' => 'T-Shirt Size',
|
|
'header' => 'T-Shirt',
|
|
'width' => 0.55,
|
|
'table' => 'students.tshirt',
|
|
'value_map' => array ('none' => '', 'small' => 'Small', 'medium' => 'Medium',
|
|
'large' => 'Large', 'xlarge' => 'X-Large')),
|
|
|
|
'awards' => array(
|
|
'name' => 'Award -- Type + Name (warning: duplicates student for multiple awards!)',
|
|
'header' => 'Award Name',
|
|
'width' => 4,
|
|
'table' => "CONCAT(IF(award_types.type='Other','Special',award_types.type),' ', award_awards.name)",
|
|
'table_sort' => 'award_awards.name',
|
|
'components' => array('awards')),
|
|
|
|
'award_name' => array(
|
|
'name' => 'Award -- Name',
|
|
'header' => 'Award Name',
|
|
'width' => 4,
|
|
'table' => 'award_awards.name',
|
|
'components' => array('awards')),
|
|
|
|
'order' => array(
|
|
'name' => 'Award -- Order',
|
|
'header' => 'Award Order',
|
|
'width' => 0.5,
|
|
'table' => 'award_awards.order',
|
|
'table_sort' => 'award_awards.order',
|
|
'components' => array('awards')),
|
|
|
|
'award_type' => array(
|
|
'name' => 'Award -- Type (Divisional, Special, etc.)',
|
|
'header' => 'Award Type',
|
|
'width' => 1,
|
|
'table' => 'award_types.type',
|
|
'components' => array('awards')),
|
|
|
|
'sponsor' => array(
|
|
'name' => 'Award -- Sponsor DB ID',
|
|
'header' => 'Award Sponsor',
|
|
'width' => 1.5,
|
|
'table' => 'award_awards.award_sponsors_id',
|
|
'table_sort' => 'award_awards.award_sponsors_id',
|
|
'components' => array('awards')),
|
|
|
|
'pn_awards' => array(
|
|
'name' => 'Project Num + Award (will be unique)',
|
|
'header' => 'Award Name',
|
|
'width' => 4,
|
|
'table' => "CONCAT(projects.projectnumber,' ', award_awards.name)",
|
|
'table_sort' => 'award_awards.order',
|
|
'components' => array('awards')),
|
|
|
|
'award_prize_name' => array(
|
|
'name' => 'Award -- Prize Name',
|
|
'header' => 'Prize Name',
|
|
'width' => 2,
|
|
'table' => 'award_prizes.prize',
|
|
'components' => array('awards')),
|
|
|
|
'award_prize_fullname' => array(
|
|
'name' => 'Award -- Prize Name, Category, Division',
|
|
'header' => 'Prize Name',
|
|
'width' => 4,
|
|
'table' => "CONCAT(award_prizes.prize,' in ',projectcategories.category,' ', projectdivisions.division)",
|
|
'table_sort' => 'award_awards.category',
|
|
'components' => array('awards')),
|
|
|
|
'nom_awards' => array(
|
|
'name' => 'Award Nominations -- Award Name (warning: duplicates student for multiple awards!)',
|
|
'header' => 'Award Name',
|
|
'width' => 4,
|
|
'table' => "CONCAT(award_types.type,' -- ',award_awards.name)",
|
|
'table_sort' => 'award_awards.name',
|
|
'components' => array('awards_nominations')),
|
|
|
|
'nom_pn_awards' => array(
|
|
'name' => 'Award Nominations -- Project Num + Award Name(will be unique)',
|
|
'header' => 'Award Name',
|
|
'width' => 4,
|
|
'table' => "CONCAT(projects.projectnumber,' ', award_awards.name)",
|
|
'table_sort' => 'award_awards.name',
|
|
'components' => array('awards_nominations')),
|
|
|
|
'req_elec' => array(
|
|
'name' => 'If the project requires electricity',
|
|
'header' => 'Elec',
|
|
'width' => .5,
|
|
'table' => "projects.req_electricity",
|
|
'value_map' => array ('no' => '', 'yes' => 'Yes')),
|
|
|
|
'req_table' => array(
|
|
'name' => 'If the project requires a table',
|
|
'header' => 'Table',
|
|
'width' => .5,
|
|
'table' => "projects.req_table",
|
|
'value_map' => array ('no' => '', 'yes' => 'Yes')),
|
|
|
|
'req_special' => array(
|
|
'name' => 'Any special requirements the project has',
|
|
'header' => 'Special Requirements',
|
|
'width' => 3,
|
|
'table' => "projects.req_special"),
|
|
|
|
'emerg_name' => array(
|
|
'name' => 'Emergency Contact -- Name',
|
|
'header' => 'Emerg. Name',
|
|
'width' => 1.5,
|
|
'table' => "CONCAT(emergencycontact.firstname, ' ', emergencycontact.lastname)",
|
|
'components' => array('emergencycontacts')),
|
|
|
|
'emerg_relation' => array(
|
|
'name' => 'Emergency Contact -- Relationship',
|
|
'header' => 'Emerg. Rlt',
|
|
'width' => 1,
|
|
'table' => "emergencycontact.relation",
|
|
'components' => array('emergencycontacts')),
|
|
|
|
'emerg_phone' => array(
|
|
'name' => 'Emergency Contact -- Phone',
|
|
'header' => 'Emerg. Phone',
|
|
'width' => 1,
|
|
'table' => "CONCAT(emergencycontact.phone1, ' ', emergencycontact.phone2, ' ', emergencycontact.phone3, ' ', emergencycontact.phone4)",
|
|
'components' => array('emergencycontacts')),
|
|
|
|
'tour_assign_name' => array(
|
|
'name' => 'Tours -- Assigned Tour Name',
|
|
'header' => 'Tour',
|
|
'width' => 4,
|
|
'table' => "tours.name",
|
|
'components' => array('tours')),
|
|
|
|
'fair_year' => array (
|
|
'name' => 'Fair -- Year',
|
|
'header' => 'Year',
|
|
'width' => 0.5,
|
|
'table' => "{$config['FAIRYEAR']}"),
|
|
|
|
'fair_name' => array (
|
|
'name' => 'Fair -- Name',
|
|
'header' => 'Fair Name',
|
|
'width' => 3,
|
|
'table' => "'{$config['fairname']}'"),
|
|
|
|
'static_text' => array (
|
|
'name' => 'Static Text (useful for labels)',
|
|
'header' => '',
|
|
'width' => 0.1,
|
|
'table' => "CONCAT(' ')"),
|
|
|
|
'gvrsf_tn' => array (
|
|
'name' => 'GVRSF Project Number (Table Number)',
|
|
'header' => '#',
|
|
'width' => 0.6,
|
|
'table' => "CAST(projects.projectnumber AS UNSIGNED) AS GVRSFTBL, CONCAT(projectcategories.category_shortform, ' ', projects.projectnumber, ' ', projectdivisions.division_shortform)",
|
|
'table_sort' => 'GVRSFTBL'),
|
|
|
|
|
|
);
|
|
|
|
function report_students_fromwhere($report, $components)
|
|
{
|
|
global $config, $report_students_fields;
|
|
|
|
$fields = $report_students_fields;
|
|
$year = $report['year'];
|
|
|
|
$awards_join = '';
|
|
$awards_where = '';
|
|
|
|
if(in_array('awards', $components)) {
|
|
/* This requires some extra gymnastics */
|
|
$awards_join = "LEFT JOIN winners ON(winners.projects_id = projects.id),award_prizes,award_awards,award_types";
|
|
$awards_where = " AND winners.awards_prizes_id=award_prizes.id
|
|
AND award_prizes.award_awards_id=award_awards.id
|
|
AND award_types.id=award_awards.award_types_id
|
|
AND winners.year='$year'
|
|
AND award_awards.year='$year'
|
|
AND award_prizes.year='$year'
|
|
AND award_types.year='$year' ";
|
|
}
|
|
|
|
if(in_array('awards_nominations', $components)) {
|
|
$awards_join = "LEFT JOIN project_specialawards_link
|
|
ON(projects.id=project_specialawards_link.projects_id),
|
|
award_awards,award_types";
|
|
$awards_where = " AND project_specialawards_link.award_awards_id=award_awards.id
|
|
AND award_types.id=award_awards.award_types_id
|
|
AND award_awards.year='$year'
|
|
AND award_types.year='$year' ";
|
|
}
|
|
|
|
$partner_join = '';
|
|
if(in_array('partner', $components)) {
|
|
$partner_join = "LEFT JOIN students AS students2
|
|
ON(students2.registrations_id=students.registrations_id
|
|
AND students2.id != students.id)";
|
|
}
|
|
|
|
$tour_join = '';
|
|
$tour_where = '';
|
|
if(in_array('tours', $components)) {
|
|
$tour_join = "LEFT JOIN tours_choice ON (students.id=tours_choice.students_id AND tours_choice.rank=0), tours";
|
|
$tour_where = "AND tours.year='$year'
|
|
AND tours.id=tours_choice.tour_id";
|
|
|
|
}
|
|
|
|
$emergencycontact_join = '';
|
|
if(in_array('emergencycontacts', $components)) {
|
|
/* No need to put the year in here, students.id is unique across years */
|
|
$emergencycontact_join = "LEFT JOIN emergencycontact ON (
|
|
students.id=emergencycontact.students_id )";
|
|
}
|
|
|
|
$q = " FROM
|
|
schools, projects $awards_join, projectdivisions,
|
|
projectcategories, registrations
|
|
JOIN students ON students.registrations_id=registrations_id
|
|
$partner_join
|
|
$emergencycontact_join
|
|
$tour_join
|
|
WHERE
|
|
schools.id=students.schools_id
|
|
AND projects.registrations_id=students.registrations_id
|
|
AND projectdivisions.id=projects.projectdivisions_id
|
|
AND projectcategories.id=projects.projectcategories_id
|
|
AND (registrations.status='complete' OR registrations.status='paymentpending')
|
|
AND students.year='$year'
|
|
AND projects.year='$year'
|
|
AND registrations.year='$year'
|
|
AND projectcategories.year='$year'
|
|
AND projectdivisions.year='$year'
|
|
$awards_where
|
|
$tour_where
|
|
";
|
|
|
|
return $q;
|
|
}
|
|
|
|
?>
|