forked from science-ation/science-ation
1e2340beb1
Modified the user object, correcting some issues with judging availability and volunteer availability.
867 lines
30 KiB
PHP
867 lines
30 KiB
PHP
<?
|
|
/*
|
|
This file is part of the 'Science Fair In A Box' project
|
|
SFIAB Website: http://www.sfiab.ca
|
|
|
|
Copyright (C) 2005-2006 Sci-Tech Ontario Inc <info@scitechontario.org>
|
|
Copyright (C) 2005-2008 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");
|
|
superuser_required();
|
|
|
|
/*
|
|
Define the steps used in the setup wizard. It's flow is:
|
|
|
|
start __
|
|
|-> selectNameType -> complete
|
|
|
|
|
|-> selectConference -> enterName -> complete
|
|
*/
|
|
$wizard_steps = array(
|
|
'start' => array(
|
|
'title' => i18n('Add a Conference'),
|
|
'builder' => 'build_start_step',
|
|
'handler' => 'handle_start_step',
|
|
'fields' => array(
|
|
'method'
|
|
),
|
|
'actions' => array(
|
|
'cancel' => i18n('Cancel'),
|
|
'next' => i18n('Next'),
|
|
)
|
|
),
|
|
'selectNameType' => array(
|
|
'title' => i18n('Conference Name and Type'),
|
|
'builder' => 'build_select_nametype_step',
|
|
'handler' => 'handle_select_nametype_step',
|
|
'fields' => array(
|
|
'name',
|
|
'type'
|
|
),
|
|
'actions' => array(
|
|
'cancel' => i18n('Cancel'),
|
|
'next' => i18n('Next'),
|
|
'back' => i18n('Back'),
|
|
)
|
|
),
|
|
'selectConference' => array(
|
|
'title' => i18n('Select a Conference'),
|
|
'builder' => 'build_select_conference_step',
|
|
'handler' => 'handle_select_conference_step',
|
|
'fields' => array(
|
|
'mastercopy',
|
|
'endExisting',
|
|
'rollDates'
|
|
),
|
|
'actions' => array(
|
|
'cancel' => i18n('Cancel'),
|
|
'next' => i18n('Next'),
|
|
'back' => i18n('Back'),
|
|
)
|
|
),
|
|
'enterName' => array(
|
|
'title' => i18n('Conference Name'),
|
|
'builder' => 'build_enter_name_step',
|
|
'handler' => 'handle_enter_name_step',
|
|
'fields' => array(
|
|
'name'
|
|
),
|
|
'actions' => array(
|
|
'cancel' => i18n('Cancel'),
|
|
'next' => i18n('Next'),
|
|
'back' => i18n('Back'),
|
|
)
|
|
|
|
),
|
|
'complete' => array(
|
|
'title' => i18n('Confirmation'),
|
|
'builder' => 'build_complete_step',
|
|
'handler' => 'handle_complete_step',
|
|
'fields' => array(),
|
|
'actions' => array(
|
|
'cancel' => i18n('Cancel'),
|
|
'ok' => i18n('OK'),
|
|
'back' => i18n('Back'),
|
|
)
|
|
),
|
|
'error' => array(
|
|
'title' => i18n('Error'),
|
|
'builder' => null,
|
|
'handler' => 'wizard_close',
|
|
'fields' => array(),
|
|
'actions' => array('close' => i18n('Close'))
|
|
)
|
|
);
|
|
|
|
// check for a step submitted by the wizard
|
|
if(array_key_exists('formAction', $_POST)){
|
|
if(array_key_exists('formStep', $_POST)){
|
|
$stepName = $_POST['formStep'];
|
|
$wizard_steps[$stepName]['handler']();
|
|
}
|
|
exit();
|
|
}
|
|
|
|
// check for an action by the normal method
|
|
if(array_key_exists('action', $_GET)){
|
|
switch($_GET['action']){
|
|
case 'new': // this is a request to create a new conference
|
|
$_SESSION['conference_wizard'] = array();
|
|
wizard_draw_step('start');
|
|
break;
|
|
}
|
|
exit;
|
|
}
|
|
|
|
send_header("Conferences Setup",
|
|
array('Committee Main' => 'committee_main.php',
|
|
'System Setup' => '/super/index.php')
|
|
,"configuration"
|
|
);
|
|
?>
|
|
<script type="text/javascript">
|
|
var wizard;
|
|
$(document).ready(function() {
|
|
// $('#wizardBackdrop').fadeTo(0, 0);
|
|
|
|
});
|
|
|
|
function editConference(cid){
|
|
alert('edit ' + cid);
|
|
}
|
|
|
|
function dropConference(cid){
|
|
alert('drop ' + cid);
|
|
}
|
|
|
|
function openWizard(){
|
|
$('#addAnchor').hide();
|
|
/*
|
|
$('#wizardWrapper').css({'display':'block'});
|
|
$('#wizardBackdrop').css({'display':'block'});
|
|
$('#wizardBackdrop').fadeTo('slow', 0.8);
|
|
*/
|
|
wizard = $('<div></div>');
|
|
$('#conferences').append(wizard);
|
|
wizard.dialog();
|
|
wizard.load('conferences.php?action=new');
|
|
}
|
|
|
|
function handleSubmit(action){
|
|
var params = {'formAction' : action};
|
|
for(n in fields){
|
|
// is it a checked check box?
|
|
val = $('input:checkbox[name=' + fields[n] + ']:checked').val();
|
|
if(val == undefined){
|
|
// is it an unchecked checkbox?
|
|
val = $('input:checkbox[name=' + fields[n] + ']:unchecked').val();
|
|
if(val != undefined) val = 'no';
|
|
}
|
|
if(val == undefined){
|
|
// perhaps it's a radio button
|
|
val = $('input:radio[name=' + fields[n] + ']:checked').val();
|
|
}
|
|
if(val == undefined){
|
|
// other, then?
|
|
val = $('#' + fields[n]).val();
|
|
}
|
|
if(val != undefined){
|
|
params[fields[n]] = val;
|
|
}
|
|
}
|
|
// the relevant parameters have been pulled out of the form, now submit them
|
|
$.post('conferences.php', params, function(result){
|
|
wizard.html(result);
|
|
});
|
|
}
|
|
|
|
</script>
|
|
|
|
<div id="conferences">
|
|
<?php draw_conferences_list(); ?>
|
|
<br/>
|
|
<hr/>
|
|
<a id="addAnchor" href='' onclick="openWizard(); return false;">Add a conference</a>
|
|
</div>
|
|
<?
|
|
send_footer();
|
|
|
|
function draw_conferences_list(){
|
|
echo "<table>";
|
|
$query = mysql_query("SELECT * FROM `conferences`");
|
|
while($row = mysql_fetch_assoc($query)){
|
|
echo "<tr>";
|
|
echo "<td>{$row['name']}</td><td>{$row['type']}</td><td>{$row['status']}</td>";
|
|
echo "<td><button onclick=\"editConference({$row['id']});return false;\">" . i18n("Edit") . " <img src=\"/icons/16/edit.png\"/></button></td>";
|
|
echo "<td><button onclick=\"dropConference({$row['id']});return false;\">" . i18n("Delete") . " <img src=\"/icons/16/button_cancel.png\"/></button></td>";
|
|
echo "</tr>";
|
|
}
|
|
echo "</table>";
|
|
}
|
|
/*
|
|
require("../tableeditor.class.php");
|
|
|
|
$editor=new TableEditor("conferences",
|
|
array(
|
|
"name"=>"Conference Name",
|
|
"type"=>"Type",
|
|
"status"=>"Status"
|
|
)
|
|
);
|
|
|
|
$editor->setPrimaryKey("id");
|
|
$editor->setDefaultSortField("id");
|
|
$editor->setRecordType("Conference");
|
|
$editor->execute();
|
|
*/
|
|
/************** Wizard handling functions *************/
|
|
// draw an individual step in the wizard
|
|
function wizard_draw_step($step, $message = null){
|
|
global $wizard_steps;
|
|
if(array_key_exists($step, $wizard_steps)){
|
|
// tell the client what fields we expect to have sent back
|
|
echo "<script type=\"text/javascript\">";
|
|
if(count($wizard_steps[$step]['fields']) > 0){
|
|
echo "var fields=['formStep','" . implode("','", $wizard_steps[$step]['fields']) . "'];";
|
|
}else{
|
|
echo "var fields=['formStep'];";
|
|
}
|
|
|
|
// add the appropriate buttons
|
|
echo 'wizard.dialog("option","buttons", {';
|
|
$doneone = false;
|
|
foreach($wizard_steps[$step]['actions'] as $tag => $label){
|
|
if($doneone) echo ",";
|
|
else $doneone = true;
|
|
echo '"' . $label . '":function(){handleSubmit("' . $tag . '");}';
|
|
}
|
|
echo '});';
|
|
|
|
// draw the title header
|
|
echo 'wizard.dialog("option", "title", "' . $wizard_steps[$step]['title'] . '");';
|
|
echo "</script>";
|
|
|
|
if($message != null){
|
|
// used for error messages (eg. empty field)
|
|
echo "<div class=\"error\">" . $message . "</div>";
|
|
}
|
|
|
|
// draw the actual content of this step
|
|
echo "<div class=\"wizard_content\">";
|
|
if(function_exists($wizard_steps[$step]['builder'])){
|
|
$wizard_steps[$step]['builder']();
|
|
}
|
|
echo "</div>";
|
|
|
|
echo "<input type=\"hidden\" id=\"formStep\" value=\"$step\"></input>";
|
|
}
|
|
}
|
|
|
|
// close the wizard
|
|
function wizard_close(){
|
|
unset($_SESSION['conference_wizard']);
|
|
echo "
|
|
<script type=\"text/javascript\">
|
|
wizard.dialog('close');
|
|
$('#addAnchor').show();
|
|
</script>
|
|
";
|
|
}
|
|
|
|
/************** Functions for drawing and processing individual wizard steps ************/
|
|
function build_start_step(){
|
|
echo '<p>' . i18n("This wizard will help you set up a new conference.") . '<p>';
|
|
// find out if any conferences already exist
|
|
$tally = mysql_result(mysql_query("SELECT COUNT(*) FROM conferences"), 0);
|
|
if($tally == 0){
|
|
// no conferences, so just let them continue
|
|
echo '<p>' . i18n("Click next to continue") . '</p>';
|
|
echo '<input type="hidden" id="method" value="create">';
|
|
}else{
|
|
$copy_selected = '';
|
|
$create_selected = 'checked';
|
|
if(array_key_exists('method', $_SESSION['conference_wizard'])){
|
|
if($_SESSION['conference_wizard']['method'] == 'copy'){
|
|
$copy_selected = 'checked';
|
|
$create_selected = '';
|
|
}
|
|
}else{
|
|
}
|
|
echo '<p>' . i18n("What would you like to do?") . '</p>';
|
|
echo '<input type="radio" name="method" value="create" ' . $create_selected . '>' . i18n('Create a new conference') . '</input><br/>';
|
|
echo '<input type="radio" name="method" value="copy" ' . $copy_selected . '>' . i18n('Copy an existing conference') . '</input><br/>';
|
|
}
|
|
}
|
|
|
|
function handle_start_step(){
|
|
if($_POST['formAction'] == 'cancel'){
|
|
wizard_close();
|
|
}else{
|
|
$_SESSION['conference_wizard']['method'] = $_POST['method'];
|
|
switch($_POST['method']){
|
|
case 'create':
|
|
wizard_draw_step('selectNameType');
|
|
break;
|
|
case 'copy':
|
|
wizard_draw_step('selectConference');
|
|
break;
|
|
default:
|
|
wizard_close();
|
|
$save = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
function build_select_nametype_step(){
|
|
global $conference_types;
|
|
echo "<p>" . i18n("Please enter the name and type of this conference.") . "</p>";
|
|
echo "<table><tr>";
|
|
echo "<td>" . i18n("Conference Name") . "</td>";
|
|
$val = '';
|
|
if(array_key_exists('name', $_SESSION['conference_wizard'])){
|
|
$val = ' VALUE="' . $_SESSION['conference_wizard']['name'] . '" ';
|
|
}
|
|
echo "<td><input type=\"text\" id=\"name\"$val></input></td>";
|
|
echo "</tr><tr>";
|
|
echo "<td>" . i18n("Conference Type") . "</td>";
|
|
echo "<td><select id=\"type\">";
|
|
if(array_key_exists('type', $_SESSION['conference_wizard'])){
|
|
$selectedType = $_SESSION['conference_wizard']['type'];
|
|
}else{
|
|
$selectedType = 'sciencefair';
|
|
}
|
|
foreach($conference_types as $type => $title){
|
|
if($type == $selectedType) $selected = " SELECTED ";
|
|
else $selected = "";
|
|
echo "<option value=\"$type\"$selected>$title</option>";
|
|
}
|
|
echo "</select></td>";
|
|
echo "</tr></table>";
|
|
}
|
|
|
|
function handle_select_nametype_step(){
|
|
if($_POST['formAction'] == 'cancel'){
|
|
wizard_close();
|
|
}else{
|
|
|
|
$_SESSION['conference_wizard']['type'] = $_POST['type'];
|
|
$_SESSION['conference_wizard']['name'] = $_POST['name'];
|
|
|
|
if($_POST['formAction'] == 'back'){
|
|
wizard_draw_step('start');
|
|
}else{
|
|
if($_POST['name'] == ''){
|
|
wizard_draw_step('selectNameType', i18n('A name for the conference is required'));
|
|
}else{
|
|
wizard_draw_step('complete');
|
|
// handle_complete_step();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function build_select_conference_step(){
|
|
// get our default/entered values
|
|
$selectedID = -1;
|
|
$endchecked = '';
|
|
$rollchecked = ' checked ';
|
|
if(array_key_exists('mastercopy', $_SESSION['conference_wizard'])){
|
|
$selectedID = $_SESSION['conference_wizard']['mastercopy'];
|
|
if($_SESSION['conference_wizard']['endExisting'] == 'yes'){
|
|
$endchecked = ' checked ';
|
|
}
|
|
if($_SESSION['conference_wizard']['rollDates'] == 'no'){
|
|
$rollchecked = '';
|
|
}
|
|
}
|
|
|
|
echo "<p>" . i18n("Please select the conference that you wish to copy.") . "</p>";
|
|
echo "<table><tr><td>" . i18n("Conference to Copy:") . "</td><td>";
|
|
echo "<select id=\"mastercopy\">";
|
|
$query = mysql_query("SELECT * FROM conferences ORDER BY id DESC");
|
|
while($row = mysql_fetch_assoc($query)){
|
|
$id = $row['id'];
|
|
if($id == $selectedID) $selected = " SELECTED ";
|
|
else if($selectedID == -1) { $selected = " SELECTED "; $selectedID = -2; } // select the first one
|
|
else $selected = "";
|
|
echo "<option $selected value=\"{$row['id']}\">{$row['name']}</option>";
|
|
}
|
|
echo "</select>";
|
|
echo "</td></tr><tr><td>" . i18n("End this conference after copying it:") . "</td><td>";
|
|
echo "<input type=\"checkbox\" value=\"yes\" name=\"endExisting\" $endchecked ></input>";
|
|
echo "</td></tr>";
|
|
|
|
echo "<tr><td>" . i18n("Increment dates by a year:") . "</td><td>";
|
|
echo "<input type=\"checkbox\" value=\"yes\" name=\"rollDates\" $rollchecked ></input>";
|
|
echo "</td></tr>";
|
|
|
|
echo "</table>";
|
|
}
|
|
|
|
function handle_select_conference_step(){
|
|
if($_POST['formAction'] == 'cancel'){
|
|
wizard_close();
|
|
}else{
|
|
$_SESSION['conference_wizard']['mastercopy'] = $_POST['mastercopy'];
|
|
$_SESSION['conference_wizard']['endExisting'] = $_POST['endExisting'];
|
|
$_SESSION['conference_wizard']['rollDates'] = $_POST['rollDates'];
|
|
|
|
if($_POST['formAction'] == 'back'){
|
|
wizard_draw_step('start');
|
|
}else{
|
|
wizard_draw_step('enterName');
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
function build_enter_name_step(){
|
|
echo "<p>" . i18n("Please enter a name for this conference") . "</p>";
|
|
echo "<table><tr>";
|
|
echo "<td>" . i18n("Conference Name") . "</td>";
|
|
$val = '';
|
|
if(array_key_exists('name', $_SESSION['conference_wizard'])){
|
|
// get the value previously answered
|
|
$val = ' VALUE="' . $_SESSION['conference_wizard']['name'] . '" ';
|
|
}else if(array_key_exists('mastercopy', $_SESSION['conference_wizard'])){
|
|
// get the name of the conference we're copying
|
|
$query = "SELECT name FROM conferences WHERE id = {$_SESSION['conference_wizard']['mastercopy']}";
|
|
$result = mysql_fetch_assoc(mysql_query($query));
|
|
$val = ' VALUE="' . $result['name'] . '" ';
|
|
}
|
|
echo "<td><input type=\"text\" id=\"name\"$val></input></td>";
|
|
echo "</tr></table>";
|
|
}
|
|
|
|
function handle_enter_name_step(){
|
|
if($_POST['formAction'] == 'cancel'){
|
|
wizard_close();
|
|
}else{
|
|
$_SESSION['conference_wizard']['name'] = $_POST['name'];
|
|
|
|
if($_POST['formAction'] == 'back'){
|
|
wizard_draw_step('selectConference');
|
|
}else{
|
|
if($_POST['name'] == ''){
|
|
wizard_draw_step('enterName', i18n('A name for the conference is required'));
|
|
}else{
|
|
wizard_draw_step('complete');
|
|
}
|
|
// handle_complete_step();
|
|
}
|
|
}
|
|
}
|
|
|
|
function build_complete_step(){
|
|
echo "<p>";
|
|
echo i18n("All of the required information has been gathered. Click "OK" to complete the process.");
|
|
echo "</p>";
|
|
}
|
|
|
|
function handle_complete_step(){
|
|
// print_r($_SESSION);
|
|
if($_POST['formAction'] == 'cancel'){
|
|
wizard_close();
|
|
}else if($_POST['formAction'] == 'back'){
|
|
if($_SESSION['conference_wizard']['method'] == 'copy'){
|
|
wizard_draw_step('enterName');
|
|
}else{
|
|
wizard_draw_step('selectNameType');
|
|
}
|
|
}else{
|
|
switch($_SESSION['conference_wizard']['method']){
|
|
case 'create':
|
|
$result = create_conference($_SESSION['conference_wizard']);
|
|
if(is_numeric($result)){
|
|
wizard_close();
|
|
}else{
|
|
wizard_draw_step('error', $result);
|
|
}
|
|
break;
|
|
case 'copy':
|
|
if(copy_conference($_SESSION['conference_wizard'])){
|
|
wizard_close();
|
|
}
|
|
break;
|
|
}
|
|
|
|
}
|
|
}
|
|
// returns the id of the created conference if successful, error message otherwise
|
|
function create_conference($params){
|
|
$cname = mysql_real_escape_string($params['name']);
|
|
$ctype = $params['type'];
|
|
mysql_query("INSERT INTO conferences (oid, name, type, status) VALUES (1, '" . mysql_real_escape_string($cname) . "', '$ctype', 'pending')");
|
|
$errorMessage = mysql_error();
|
|
if($errorMessage){
|
|
return "SQL Error:<br/>$errorMessage";
|
|
}
|
|
$conferences_id = mysql_insert_id();
|
|
|
|
//copy over the award_types defaults
|
|
$q=mysql_query("SELECT * FROM award_types WHERE conferences_id='-1'");
|
|
while($r=mysql_fetch_object($q)) {
|
|
mysql_query("INSERT INTO award_types (id,type,`order`, conferences_id) VALUES ('$r->id','$r->type','$r->order','".$conferences_id."')");
|
|
}
|
|
|
|
// add this administrator's admin user account for the new conference
|
|
$u = user_create($_SESSION['accounts_id'], $conferences_id);
|
|
$q = mysql_query("SELECT id FROM roles WHERE `type` IN('admin', 'config')");
|
|
while($row = mysql_fetch_assoc($q)){
|
|
mysql_query("
|
|
INSERT INTO user_roles (accounts_id, users_id, roles_id, active, complete)
|
|
VALUES({$_SESSION['accounts_id']}, {$u['id']}, {$row['id']}, 'yes', 'yes')
|
|
");
|
|
}
|
|
|
|
user_add_role($u, 'admin');
|
|
user_add_role($u, 'config');
|
|
|
|
return $conferences_id;
|
|
}
|
|
|
|
// copy users of the specified roles from conference oldConfId to conference newConfId
|
|
// roles can be passed as a single comma delimited string, or as an array of strings
|
|
// return 'ok' on success, error message otherwise
|
|
function conferences_copy_users($oldConfId, $newConfId, $roles){
|
|
if(!is_array($roles)){
|
|
// they must have been passed as a string
|
|
$roles = explode(',', $roles);
|
|
foreach($roles as $idx => $val){
|
|
$roles[$idx] = trim($val);
|
|
}
|
|
}
|
|
|
|
$query = mysql_query("
|
|
SELECT * FROM users WHERE users.id IN(
|
|
SELECT DISTINCT(users.id) FROM users
|
|
JOIN user_roles ON user_roles.users_id = users.id
|
|
JOIN roles on roles.id = user_roles.roles_id
|
|
WHERE roles.`type` IN ('" . implode("','", $roles) . "')
|
|
AND users.conferences_id = $oldConfId
|
|
)
|
|
");
|
|
|
|
$keys = '';
|
|
while(mysql_error() == '' && $row = mysql_fetch_assoc($query)){
|
|
// first we copy the user
|
|
$oldId = $row['id'];
|
|
unset($row['id']);
|
|
if($keys == ''){
|
|
$keyList = array_keys($row);
|
|
$keys = "`" . implode("`,`", $keyList) . "`";
|
|
}
|
|
$row['conferences_id'] = $newConfId;
|
|
$values = "'" . implode("','", $row) . "'";
|
|
mysql_query("INSERT INTO users ($keys) VALUES ($values)");
|
|
$uid = mysql_insert_id();
|
|
$aid = $row['accounts_id'];
|
|
// now copy their applicable roles
|
|
$q2 = mysql_query("
|
|
SELECT roles_id, active, complete FROM user_roles
|
|
JOIN roles ON roles.id = user_roles.roles_id
|
|
WHERE roles.`type` IN('" . implode("','", $roles) . "')
|
|
AND user_roles.users_id = $oldId
|
|
");
|
|
while(mysql_error() == '' && $row2 = mysql_fetch_assoc($q2)){
|
|
mysql_query("
|
|
INSERT INTO user_roles(`accounts_id`, `users_id`, `roles_id`, `active`, `complete`)
|
|
VALUES($aid, $uid, {$row2['roles_id']}, '{$row2['active']}', '{$row2['complete']}')
|
|
");
|
|
}
|
|
}
|
|
|
|
if(mysql_error() != '') return "SQL error :<br/>" . mysql_error();
|
|
return 'ok';
|
|
|
|
}
|
|
|
|
// copy a conference - returns true on success, false otherwise. Gives the wizard an error message one occurs
|
|
function copy_conference($params){
|
|
/* $params: {
|
|
mastercopy => id of conf to copy
|
|
endExisting => end it after copying
|
|
rollDates => increment the dates by a year
|
|
name => the new name
|
|
}*/
|
|
|
|
// we'll start by creating the new conference
|
|
$oldConfId = $params['mastercopy'];
|
|
$oldConf = mysql_fetch_assoc(mysql_query("SELECT * FROM conferences WHERE id = {$oldConfId}"));
|
|
|
|
mysql_query("INSERT INTO conferences (oid, name, type, status) VALUES (1, '" . mysql_real_escape_string($params['name']) . "', '{$oldConf['type']}', 'pending')");
|
|
if(mysql_error() != ''){ wizard_draw_step('error', 'SQL error on line #' . (__LINE__ - 1) . ': <br/>' . mysql_error()); return false; }
|
|
$newConfId = mysql_insert_id();
|
|
|
|
// then copy the configuration variables
|
|
config_update_variables($newConfId, $oldConfId);
|
|
|
|
// now the dates
|
|
if($params['rollDates'] == 'yes'){
|
|
$q=mysql_query("SELECT DATE_ADD(date,INTERVAL 365 DAY) AS newdate, name, description FROM dates WHERE conferences_id = $oldConfId");
|
|
}else{
|
|
$q=mysql_query("SELECT date AS newdate, name, description FROM dates WHERE conferences_id = $oldConfId");
|
|
}
|
|
while(mysql_error() == '' && $r = mysql_fetch_object($q))
|
|
mysql_query("INSERT INTO dates (date,name,description,conferences_id) VALUES (
|
|
'".mysql_real_escape_string($r->newdate)."',
|
|
'".mysql_real_escape_string($r->name)."',
|
|
'".mysql_real_escape_string($r->description)."',
|
|
'".mysql_real_escape_string($newConfId)."')");
|
|
if(mysql_error() != ''){ wizard_draw_step('error', 'SQL error before line #' . __LINE__ . ': <br/>' . mysql_error()); return false; }
|
|
|
|
// page text
|
|
$q = mysql_query("SELECT * FROM pagetext WHERE conferences_id = $oldConfId");
|
|
while(mysql_error() == '' && $r=mysql_fetch_object($q))
|
|
mysql_query("INSERT INTO pagetext (textname,textdescription,text,lastupdate,conferences_id,lang) VALUES (
|
|
'".mysql_real_escape_string($r->textname)."',
|
|
'".mysql_real_escape_string($r->textdescription)."',
|
|
'".mysql_real_escape_string($r->text)."',
|
|
'".mysql_real_escape_string($r->lastupdate)."',
|
|
'".mysql_real_escape_string($newConfId)."',
|
|
'".mysql_real_escape_string($r->lang)."')");
|
|
if(mysql_error() != ''){ wizard_draw_step('error', 'SQL error before line #' . __LINE__ . ': <br/>' . mysql_error()); return false; }
|
|
|
|
// project categories
|
|
$q = mysql_query("SELECT * FROM projectcategories WHERE conferences_id = $oldConfId");
|
|
while(mysql_error() == '' && $r=mysql_fetch_object($q))
|
|
mysql_query("INSERT INTO projectcategories (id,category,category_shortform,mingrade,maxgrade,conferences_id) VALUES (
|
|
'".mysql_real_escape_string($r->id)."',
|
|
'".mysql_real_escape_string($r->category)."',
|
|
'".mysql_real_escape_string($r->category_shortform)."',
|
|
'".mysql_real_escape_string($r->mingrade)."',
|
|
'".mysql_real_escape_string($r->maxgrade)."',
|
|
'".mysql_real_escape_string($newConfId)."')");
|
|
if(mysql_error() != ''){ wizard_draw_step('error', 'SQL error before line #' . __LINE__ . ': <br/>' . mysql_error()); return false; }
|
|
|
|
// project divisions
|
|
$q=mysql_query("SELECT * FROM projectdivisions WHERE conferences_id=$oldConfId");
|
|
while(mysql_error() == '' && $r=mysql_fetch_object($q))
|
|
mysql_query("INSERT INTO projectdivisions (id,division,division_shortform,cwsfdivisionid,conferences_id) VALUES (
|
|
'".mysql_real_escape_string($r->id)."',
|
|
'".mysql_real_escape_string($r->division)."',
|
|
'".mysql_real_escape_string($r->division_shortform)."',
|
|
'".mysql_real_escape_string($r->cwsfdivisionid)."',
|
|
'".mysql_real_escape_string($newConfId)."')");
|
|
if(mysql_error() != ''){ wizard_draw_step('error', 'SQL error before line #' . __LINE__ . ': <br/>' . mysql_error()); return false; }
|
|
|
|
// project subdivisions
|
|
$q=mysql_query("SELECT * FROM projectsubdivisions WHERE conferences_id=$oldConfId");
|
|
while(mysql_error() == '' && $r=mysql_fetch_object($q))
|
|
mysql_query("INSERT INTO projectsubdivisions (id,projectdivisions_id,subdivision,conferences_id) VALUES (
|
|
'".mysql_real_escape_string($r->id)."',
|
|
'".mysql_real_escape_string($r->projectsubdivisions_id)."',
|
|
'".mysql_real_escape_string($r->subdivision)."',
|
|
'".mysql_real_escape_string($newConfId)."')");
|
|
if(mysql_error() != ''){ wizard_draw_step('error', 'SQL error before line #' . __LINE__ . ': <br/>' . mysql_error()); return false; }
|
|
|
|
// safety questions
|
|
$q=mysql_query("SELECT * FROM safetyquestions WHERE conferences_id=$oldConfId");
|
|
while(mysql_error() == '' && $r=mysql_fetch_object($q))
|
|
mysql_query("INSERT INTO safetyquestions (question,type,required,ord,conferences_id) VALUES (
|
|
'".mysql_real_escape_string($r->question)."',
|
|
'".mysql_real_escape_string($r->type)."',
|
|
'".mysql_real_escape_string($r->required)."',
|
|
'".mysql_real_escape_string($r->ord)."',
|
|
'".mysql_real_escape_string($newConfId)."')");
|
|
if(mysql_error() != ''){ wizard_draw_step('error', 'SQL error before line #' . __LINE__ . ': <br/>' . mysql_error()); return false; }
|
|
|
|
// awards
|
|
$q=mysql_query("SELECT * FROM award_awards WHERE conferences_id=$oldConfId");
|
|
$errorMessage = mysql_error();
|
|
while($errorMessage == '' && $r=mysql_fetch_object($q)) {
|
|
/* Roll the one award */
|
|
$errorMessage .= roll($oldConfId, $newConfId, 'award_awards', "id='{$r->id}'");
|
|
$award_awards_id=mysql_insert_id();
|
|
|
|
$errorMessage .= roll($oldConfId, $newConfId, 'award_awards_projectcategories', "award_awards_id='{$r->id}'",
|
|
array('award_awards_id' => $award_awards_id));
|
|
|
|
$errorMessage .= roll($oldConfId, $newConfId, 'award_awards_projectdivisions', "award_awards_id='{$r->id}'",
|
|
array('award_awards_id' => $award_awards_id));
|
|
echo i18n(" Rolling award prizes")."<br />";
|
|
$errorMessage .= roll($oldConfId, $newConfId, 'award_prizes', "award_awards_id='{$r->id}'",
|
|
array('award_awards_id' => $award_awards_id));
|
|
}
|
|
if($errorMessage != ''){ wizard_draw_step('error', 'SQL error before line #' . __LINE__ . ': <br/>' . $errorMessage); return false; }
|
|
|
|
// award types
|
|
$q=mysql_query("SELECT * FROM award_types WHERE conferences_id = $oldConfId");
|
|
while(mysql_error() == '' && $r=mysql_fetch_object($q))
|
|
mysql_query("INSERT INTO award_types (id,type,`order`,conferences_id) VALUES (
|
|
'".mysql_real_escape_string($r->id)."',
|
|
'".mysql_real_escape_string($r->type)."',
|
|
'".mysql_real_escape_string($r->order)."',
|
|
'".mysql_real_escape_string($newConfId)."')");
|
|
if(mysql_error() != ''){ wizard_draw_step('error', 'SQL error before line #' . __LINE__ . ': <br/>' . mysql_error()); return false; }
|
|
|
|
// schools
|
|
$q=mysql_query("SELECT * FROM schools WHERE conferences_id=$oldConfId");
|
|
while(mysql_error() == '' && $r=mysql_fetch_object($q)) {
|
|
$puid = ($r->principal_uid == null) ? 'NULL' : ("'".intval($r->principal_uid)."'");
|
|
$shuid = ($r->sciencehead_uid == null) ? 'NULL' : ("'".intval($r->sciencehead_uid)."'");
|
|
|
|
|
|
mysql_query("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,conferences_id) VALUES (
|
|
'".mysql_real_escape_string($r->school)."',
|
|
'".mysql_real_escape_string($r->schoollang)."',
|
|
'".mysql_real_escape_string($r->schoollevel)."',
|
|
'".mysql_real_escape_string($r->board)."',
|
|
'".mysql_real_escape_string($r->district)."',
|
|
'".mysql_real_escape_string($r->phone)."',
|
|
'".mysql_real_escape_string($r->fax)."',
|
|
'".mysql_real_escape_string($r->address)."',
|
|
'".mysql_real_escape_string($r->city)."',
|
|
'".mysql_real_escape_string($r->province_code)."',
|
|
'".mysql_real_escape_string($r->postalcode)."',$puid,
|
|
'".mysql_real_escape_string($r->schoolemail)."',$shuid,
|
|
'".mysql_real_escape_string($r->accesscode)."',
|
|
NULL,
|
|
'".mysql_real_escape_string($r->junior)."',
|
|
'".mysql_real_escape_string($r->intermediate)."',
|
|
'".mysql_real_escape_string($r->senior)."',
|
|
'".mysql_real_escape_string($r->registration_password)."',
|
|
'".mysql_real_escape_string($r->projectlimit)."',
|
|
'".mysql_real_escape_string($r->projectlimitper)."',
|
|
'".mysql_real_escape_string($newConfId)."')");
|
|
}
|
|
if(mysql_error() != ''){ wizard_draw_step('error', 'SQL error before line #' . __LINE__ . ': <br/>' . mysql_error()); return false; }
|
|
|
|
// questions
|
|
$q = mysql_query("SELECT * FROM questions WHERE conferences_id = $oldConfId");
|
|
while(mysql_error() == '' && $r=mysql_fetch_object($q))
|
|
mysql_query("INSERT INTO questions (id,conferences_id,section,db_heading,question,type,required,ord) VALUES (
|
|
'',
|
|
'$newConfId',
|
|
'".mysql_real_escape_string($r->section)."',
|
|
'".mysql_real_escape_string($r->db_heading)."',
|
|
'".mysql_real_escape_string($r->question)."',
|
|
'".mysql_real_escape_string($r->type)."',
|
|
'".mysql_real_escape_string($r->required)."',
|
|
'".mysql_real_escape_string($r->ord)."')");
|
|
if(mysql_error() != ''){ wizard_draw_step('error', 'SQL error before line #' . __LINE__ . ': <br/>' . mysql_error()); return false; }
|
|
|
|
// regfee items
|
|
$errorMessage = roll($oldConfId, $newConfId, 'regfee_items');
|
|
if($errorMessage != ''){ wizard_draw_step('error', 'SQL error before line #' . __LINE__ . ': <br/>' . $errorMessage); return false; }
|
|
|
|
// volunteer positions
|
|
$errorMessage = roll($oldConfId, $newConfId, 'volunteer_positions');
|
|
if($errorMessage != ''){ wizard_draw_step('error', 'SQL error before line #' . __LINE__ . ': <br/>' . $errorMessage); return false; }
|
|
|
|
// timeslots and rounds
|
|
$q = mysql_query("SELECT * FROM judges_timeslots WHERE conferences_id='$oldConfId' AND round_id='0'");
|
|
$errorMessage = mysql_error();
|
|
while($errorMessage == '' && $r=mysql_fetch_assoc($q)) {
|
|
if($params['rollDates'] == 'yes'){
|
|
mysql_query("INSERT INTO judges_timeslots (`conferences_id`,`round_id`,`type`,`date`,`starttime`,`endtime`,`name`)
|
|
VALUES ('$newConfId','0','{$r['type']}',DATE_ADD('{$r['date']}', INTERVAL 1 YEAR),
|
|
'{$r['starttime']}','{$r['endtime']}','{$r['name']}')");
|
|
}else{
|
|
mysql_query("INSERT INTO judges_timeslots (`conferences_id`,`round_id`,`type`,`date`,`starttime`,`endtime`,`name`)
|
|
VALUES ('$newConfId','0','{$r['type']}','{$r['date']}',
|
|
'{$r['starttime']}','{$r['endtime']}','{$r['name']}')");
|
|
}
|
|
$errorMessage .= mysql_error();
|
|
$round_id = mysql_insert_id();
|
|
$qq = mysql_query("SELECT * FROM judges_timeslots WHERE round_id='{$r['id']}'");
|
|
if($params['rollDates'] == 'yes'){
|
|
while($rr=mysql_fetch_assoc($qq) && mysql_error() == '')
|
|
mysql_query("INSERT INTO judges_timeslots (`conferences_id`,`round_id`,`type`,`date`,`starttime`,`endtime`)
|
|
VALUES ('$newConfId','$round_id','timeslot',DATE_ADD('{$rr['date']}', INTERVAL 1 YEAR),
|
|
'{$rr['starttime']}','{$rr['endtime']}')");
|
|
}else{
|
|
while($rr=mysql_fetch_assoc($qq) && mysql_error() == '')
|
|
mysql_query("INSERT INTO judges_timeslots (`conferences_id`,`round_id`,`type`,`date`,`starttime`,`endtime`)
|
|
VALUES ('$newConfId','$round_id','timeslot','{$rr['date']}',
|
|
'{$rr['starttime']}','{$rr['endtime']}')");
|
|
}
|
|
$errorMessage .= mysql_error();
|
|
}
|
|
if($errorMessage != ''){ wizard_draw_step('error', 'SQL error before line #' . __LINE__ . ': <br/>' . $errorMessage); return false; }
|
|
|
|
|
|
// admin, config, and committee users
|
|
$errorMessage = conferences_copy_users($oldConfId, $newConfId, array('admin', 'config', 'committee'));
|
|
if($errorMessage != 'ok'){ wizard_draw_step('error', 'SQL error before line #' . __LINE__ . ': <br/>' . $errorMessage); return false; }
|
|
|
|
|
|
// WHEW! If we've made it this far, the conference has successfully been copied
|
|
return true;
|
|
}
|
|
|
|
// return empty string on success, error message otherwise
|
|
function roll($oldConfId, $newConfId, $table, $where='', $replace=array()){
|
|
/* 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
|
|
*/
|
|
|
|
$errMessage = '';
|
|
|
|
/* Get field list for this table */
|
|
$q = mysql_query("SHOW COLUMNS IN `$table`");
|
|
while(($c = mysql_fetch_assoc($q))) {
|
|
$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;
|
|
/* Skip conferences_id field */
|
|
if($k == 'year') continue;
|
|
|
|
$fields[] = $k;
|
|
}
|
|
|
|
if($where == '') $where='1';
|
|
|
|
/* Get data */
|
|
$q=mysql_query("SELECT * FROM $table WHERE conferences_id='$oldConfId' AND $where");
|
|
if(mysql_error() != '') $errMessage .= mysql_error() . "<br/>";
|
|
|
|
$names = '`'.join('`,`', $fields).'`';
|
|
|
|
/* Process data */
|
|
while($r=mysql_fetch_assoc($q)) {
|
|
$vals = '';
|
|
foreach($fields as $f) {
|
|
if(array_key_exists($f, $replace))
|
|
$vals .= ",'".mysql_real_escape_string($replace[$f])."'";
|
|
else if($col[$f]['Null'] == 'YES' && $r[$f] == NULL)
|
|
$vals .= ',NULL';
|
|
else
|
|
$vals .= ",'".mysql_real_escape_string($r[$f])."'";
|
|
}
|
|
mysql_query("INSERT INTO `$table` (`conferences_id`, $names) VALUES ('$newConfId'$vals)");
|
|
if(mysql_error() != '') $errMessage .= mysql_error() . "<br/>";
|
|
echo mysql_error();
|
|
}
|
|
|
|
return $errMessage;
|
|
}
|