science-ation/super/conferences.php
jacob 1e2340beb1 Some updates on the interface for creating conferences
Modified the user object, correcting some issues with judging availability and volunteer availability.
2010-11-16 19:53:26 +00:00

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") . "&nbsp;<img src=\"/icons/16/edit.png\"/></button></td>";
echo "<td><button onclick=\"dropConference({$row['id']});return false;\">" . i18n("Delete") . "&nbsp;<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 &quot;OK&quot; 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("&nbsp; 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;
}