<? /* * 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-2009 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'); require_once ('../config_editor.inc.php'); user_auth_required('committee', 'config'); send_header('Year Rollover', array('Committee Main' => 'committee_main.php', 'SFIAB Configuration' => 'config/index.php'), 'rollover_fair_year'); ?> <script language="javascript" type="text/javascript"> function confirmYearRollover() { var currentyear=<?= $config['FAIRYEAR'] ?>; var nextyear=document.forms.rollover.nextfairyear.value; if(nextyear<currentyear) alert('You cannot roll backwards in years!'); else if(nextyear==currentyear) alert('You cannot roll to the same year!'); else { var okay=confirm('Are you sure you want to roll the FAIRYEAR from '+currentyear+' to '+nextyear+'? This can not be undone and should only be done if you are absolutely sure!'); if(okay) return true; } return false; } </script> <? function roll($currentfairyear, $newfairyear, $table, $where = '', $replace = array()) { global $pdo; /* * Field Type Null Key Default Extra * id int(10) unsigned NO PRI NULL auto_increment * sponsors_id int(10) unsigned NO MUL 0 * award_source_fairs_id int(10) unsigned YES NULL */ /* Get field list for this table */ $q = $pdo->prepare("SHOW COLUMNS IN `$table`"); $q->execute(); show_pdo_errors_if_any($pdo); while (($c = $q->fetch(PDO::FETCH_ASSOC))) { $col[$c['Field']] = $c; } /* Record fields we care about */ $fields = array(); $keys = array_keys($col); foreach ($keys as $k) { /* Skip id field */ if ($col[$k]['Extra'] == 'auto_increment') continue; /* Skip year field */ if ($k == 'year') continue; $fields[] = $k; } if ($where == '') $where = '1'; /* Get data */ $q = $pdo->prepare("SELECT * FROM $table WHERE year='$currentfairyear' AND $where"); $q->execute(); show_pdo_errors_if_any($pdo); $names = '`' . join('`,`', $fields) . '`'; /* Process data */ while ($r = $q->fetch(PDO::FETCH_ASSOC)) { $vals = ''; foreach ($fields as $f) { if (array_key_exists($f, $replace)) $vals .= ',' . $pdo->quote($replace[$f]); else if ($col[$f]['Null'] == 'YES' && $r[$f] == NULL) $vals .= ',NULL'; else $vals .= ',' . $pdo->quote($r[$f]); } $stmt = $pdo->prepare("INSERT INTO `$table`(`year`,$names) VALUES ('$newfairyear'$vals)"); $stmt->execute(); show_pdo_errors_if_any($pdo); } } if (get_value_from_array($_POST, 'action') == 'rollover' && get_value_from_array($_POST, 'nextfairyear')) { $newfairyear = intval(get_value_from_array($_POST, 'nextfairyear')); $currentfairyear = intval($config['FAIRYEAR']); $cy = $currentfairyear; $ny = $newfairyear; if ($newfairyear < $currentfairyear) echo error(i18n('You cannot roll backwards in years!')); else if ($newfairyear == $currentfairyear) echo error(i18n('You cannot roll to the same year!')); else { // okay here we go! this is going to get to be a pretty big script me thinks! // first, lets do all of the configuration variables echo i18n('Rolling configuration variables') . '<br />'; config_update_variables($newfairyear, $currentfairyear); // now the dates echo i18n('Rolling dates') . '<br />'; $q = $pdo->prepare("SELECT DATE_ADD(date,INTERVAL 365 DAY) AS newdate,name,description FROM dates WHERE year='$currentfairyear'"); $q->execute(); show_pdo_errors_if_any($pdo); while ($r = $q->fetch(PDO::FETCH_OBJ)) { $stmt = $pdo->prepare("INSERT INTO dates (date,name,description,year) VALUES ( '" . $r->newdate . "', '" . $r->name . "', '" . $r->description . "', '" . $newfairyear . "')"); $stmt->execute(); show_pdo_errors_if_any($pdo); } // page text echo i18n('Rolling page texts') . '<br />'; $q = $pdo->prepare("SELECT * FROM pagetext WHERE year='$currentfairyear'"); $q->execute(); show_pdo_errors_if_any($pdo); while ($r = $q->fetch(PDO::FETCH_OBJ)) { $stmt = $pdo->prepare("INSERT INTO pagetext (textname,textdescription,text,lastupdate,year,lang) VALUES ( '" . $r->textname . "', '" . $r->textdescription . "', '" . $r->text . "', '" . $r->lastupdate . "', '" . $newfairyear . "', '" . $r->lang . "')"); $stmt->execute(); show_pdo_errors_if_any($pdo); } echo i18n('Rolling project categories') . '<br />'; // project categories $q = $pdo->prepare("SELECT * FROM projectcategories WHERE year='$currentfairyear'"); $q->execute(); show_pdo_errors_if_any($pdo); while ($r = $q->fetch(PDO::FETCH_OBJ)) { $stmt = $pdo->prepare("INSERT INTO projectcategories (id,category,category_shortform,mingrade,maxgrade,year) VALUES ( '" . $r->id . "', '" . $r->category . "', '" . $r->category_shortform . "', '" . $r->mingrade . "', '" . $r->maxgrade . "', '" . $newfairyear . "')"); $stmt->execute(); show_pdo_errors_if_any($pdo); } echo i18n('Rolling project divisions') . '<br />'; // project divisions $q = $pdo->prepare("SELECT * FROM projectdivisions WHERE year='$currentfairyear'"); $q->execute(); show_pdo_errors_if_any($pdo); while ($r = $q->fetch(PDO::FETCH_OBJ)) { $stmt = $pdo->prepare("INSERT INTO projectdivisions (id,division,division_shortform,cwsfdivisionid,year) VALUES ( '" . $r->id . "', '" . $r->division . "', '" . $r->division_shortform . "', '" . $r->cwsfdivisionid . "', '" . $newfairyear . "')"); $stmt->execute(); show_pdo_errors_if_any($pdo); } echo i18n('Rolling project category-division links') . '<br />'; // project categories divisions links $q = $pdo->prepare("SELECT * FROM projectcategoriesdivisions_link WHERE year='$currentfairyear'"); $q->execute(); show_pdo_errors_if_any($pdo); while ($r = $q->fetch(PDO::FETCH_OBJ)) { $stmt = $pdo->prepare("INSERT INTO projectcategoriesdivisions_link (projectdivisions_id,projectcategories_id,year) VALUES ( '" . $r->projectdivisions_id . "', '" . $r->projectcategories_id . "', '" . $newfairyear . "')"); $stmt->execute(); show_pdo_errors_if_any($pdo); } echo i18n('Rolling project sub-divisions') . '<br />'; // project subdivisions $q = $pdo->prepare("SELECT * FROM projectsubdivisions WHERE year='$currentfairyear'"); $q->execute(); show_pdo_errors_if_any($pdo); while ($r = $q->fetch(PDO::FETCH_OBJ)) { $stmt = $pdo->prepare("INSERT INTO projectsubdivisions (id,projectdivisions_id,subdivision,year) VALUES ( '" . $r->id . "', '" . $r->projectsubdivisions_id . "', '" . $r->subdivision . "', '" . $newfairyear . "')"); $stmt->execute(); show_pdo_errors_if_any($pdo); } echo i18n('Rolling safety questions') . '<br />'; // safety questions $q = $pdo->prepare("SELECT * FROM safetyquestions WHERE year='$currentfairyear'"); $q->execute(); show_pdo_errors_if_any($pdo); while ($r = $q->fetch(PDO::FETCH_OBJ)) { $stmt = $pdo->prepare("INSERT INTO safetyquestions (question,type,required,ord,year) VALUES ( '" . $r->question . "', '" . $r->type . "', '" . $r->required . "', '" . $r->ord . "', '" . $newfairyear . "')"); $stmt->execute(); show_pdo_errors_if_any($pdo); } echo i18n('Rolling awards') . '<br />'; // awards $q = $pdo->prepare("SELECT * FROM award_awards WHERE year='$currentfairyear'"); $q->execute(); show_pdo_errors_if_any($pdo); while ($r = $q->fetch(PDO::FETCH_OBJ)) { /* Roll the one award */ roll($cy, $ny, 'award_awards', "id='{$r->id}'"); $award_awards_id = $pdo->lastInsertId(); roll($cy, $ny, 'award_awards_projectcategories', "award_awards_id='{$r->id}'", array('award_awards_id' => $award_awards_id)); roll($cy, $ny, 'award_awards_projectdivisions', "award_awards_id='{$r->id}'", array('award_awards_id' => $award_awards_id)); echo i18n(' Rolling award prizes') . '<br />'; roll($cy, $ny, 'award_prizes', "award_awards_id='{$r->id}'", array('award_awards_id' => $award_awards_id)); } echo i18n('Rolling award types') . '<br />'; // award types $q = $pdo->prepare("SELECT * FROM award_types WHERE year='$currentfairyear'"); $q->execute(); show_pdo_errors_if_any($pdo); while ($r = $q->fetch(PDO::FETCH_OBJ)) { $stmt = $pdo->prepare("INSERT INTO award_types (id,type,`order`,year) VALUES ( '" . $r->id . "', '" . $r->type . "', '" . $r->order . "', '" . $newfairyear . "')"); $stmt->execute(); show_pdo_errors_if_any($pdo); } echo i18n('Rolling schools') . '<br />'; // award types $q = $pdo->prepare("SELECT * FROM schools WHERE year='$currentfairyear'"); $q->execute(); show_pdo_errors_if_any($pdo); while ($r = $q->fetch(PDO::FETCH_OBJ)) { $puid = ($r->principal_uid == null) ? 'NULL' : ("'" . intval($r->principal_uid) . "'"); $shuid = ($r->sciencehead_uid == null) ? 'NULL' : ("'" . intval($r->sciencehead_uid) . "'"); $stmt = $pdo->prepare('INSERT INTO schools (school,schoollang,schoollevel,board,district,phone,fax,address,city,province_code,postalcode,principal_uid,schoolemail,sciencehead_uid,accesscode,lastlogin,junior,intermediate,senior,registration_password,projectlimit,projectlimitper,year) VALUES ( ' . $pdo->quote($r->school) . ', ' . $pdo->quote($r->schoollang) . ', ' . $pdo->quote($r->schoollevel) . ', ' . $pdo->quote($r->board) . ', ' . $pdo->quote($r->district) . ', ' . $pdo->quote($r->phone) . ', ' . $pdo->quote($r->fax) . ', ' . $pdo->quote($r->address) . ', ' . $pdo->quote($r->city) . ', ' . $pdo->quote($r->province_code) . ', ' . $pdo->quote($r->postalcode) . ",$puid, " . $pdo->quote($r->schoolemail) . ",$shuid, " . $pdo->quote($r->accesscode) . ', NULL, ' . $pdo->quote($r->junior) . ', ' . $pdo->quote($r->intermediate) . ', ' . $pdo->quote($r->senior) . ', ' . $pdo->quote($r->registration_password) . ', ' . $pdo->quote($r->projectlimit) . ', ' . $pdo->quote($r->projectlimitper) . ', ' . $newfairyear . ')'); $stmt->execute(); show_pdo_errors_if_any($pdo); } echo i18n('Rolling questions') . '<br />'; $q = $pdo->prepare("SELECT * FROM questions WHERE year='$currentfairyear'"); $q->execute(); show_pdo_errors_if_any($pdo); while ($r = $q->fetch(PDO::FETCH_OBJ)) { $stmt = $pdo->prepare("INSERT INTO questions (id,year,section,db_heading,question,type,required,ord) VALUES ( '', '$newfairyear', " . $pdo->quote($r->section) . ', ' . $pdo->quote($r->db_heading) . ', ' . $pdo->quote($r->question) . ', ' . $pdo->quote($r->type) . ', ' . $pdo->quote($r->required) . ', ' . $pdo->quote($r->ord) . ')'); $stmt->execute(); show_pdo_errors_if_any($pdo); } // regfee items echo i18n('Rolling registration fee items') . '<br />'; roll($cy, $ny, 'regfee_items'); // volunteer positions echo i18n('Rolling volunteer positions') . '<br />'; roll($cy, $ny, 'volunteer_positions'); // timeslots and rounds echo i18n('Rolling judging timeslots and rounds') . '<br />'; $q = $pdo->prepare("SELECT * FROM judges_timeslots WHERE year='$currentfairyear' AND round_id='0'"); $q->execute(); show_pdo_errors_if_any($pdo); while ($r = $q->fetch(PDO::FETCH_ASSOC)) { $d = $newfairyear - $currentfairyear; $stmt = $pdo->prepare("INSERT INTO judges_timeslots (`year`,`round_id`,`type`,`date`,`starttime`,`endtime`,`name`) VALUES ('$newfairyear','0','{$r['type']}',DATE_ADD('{$r['date']}', INTERVAL $d YEAR), '{$r['starttime']}','{$r['endtime']}','{$r['name']}')"); $stmt->execute(); show_pdo_errors_if_any($pdo); $round_id = $pdo->lastInsertId(); $qq = $pdo->prepare("SELECT * FROM judges_timeslots WHERE round_id='{$r['id']}'"); $qq->execute(); show_pdo_errors_if_any($pdo); while ($rr = $qq->fetch(PDO::FETCH_ASSOC)) { $stmt = $pdo->prepare("INSERT INTO judges_timeslots (`year`,`round_id`,`type`,`date`,`starttime`,`endtime`) VALUES ('$newfairyear','$round_id','timeslot',DATE_ADD('{$rr['date']}', INTERVAL $d YEAR), '{$rr['starttime']}','{$rr['endtime']}')"); $stmt->execute(); show_pdo_errors_if_any($pdo); } } echo '<br /><br />'; $stmt = $pdo->prepare("UPDATE config SET val='$newfairyear' WHERE var='FAIRYEAR' AND year=0"); $stmt->execute(); show_pdo_errors_if_any($pdo); echo happy(i18n('Fair year has been rolled over from %1 to %2', array($currentfairyear, $newfairyear))); send_footer(); exit; } } echo '<br />'; echo '<a href="backuprestore.php">' . i18n('You should consider making a database backup before rolling over, just in case!') . "</a><br />\n"; echo '<br />'; echo '<form name="rollover" method="post" action="rollover.php" onsubmit="return confirmYearRollover()">'; echo '<input type="hidden" name="action" value="rollover" />'; echo i18n('Current Fair Year') . ': <b>' . $config['FAIRYEAR'] . '</b><br />'; $nextfairyear = $config['FAIRYEAR'] + 1; echo i18n('Next Fair Year') . ": <input size=\"8\" type=\"text\" name=\"nextfairyear\" value=\"$nextfairyear\" />"; echo '<br />'; echo '<input type="submit" value="' . i18n('Rollover Fair Year') . '" />'; echo '</form>'; send_footer(); ?>