Copyright (C) 2005-2008 James Grant 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. */ ?> 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" ); ?>


Add a conference
"; $query = mysql_query("SELECT * FROM `conferences`"); while($row = mysql_fetch_assoc($query)){ echo ""; echo "{$row['name']}{$row['type']}{$row['status']}"; echo ""; echo ""; echo ""; } echo ""; } /* 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 ""; if($message != null){ // used for error messages (eg. empty field) echo "
" . $message . "
"; } // draw the actual content of this step echo "
"; if(function_exists($wizard_steps[$step]['builder'])){ $wizard_steps[$step]['builder'](); } echo "
"; echo ""; } } // close the wizard function wizard_close(){ unset($_SESSION['conference_wizard']); echo " "; } /************** Functions for drawing and processing individual wizard steps ************/ function build_start_step(){ echo '

' . i18n("This wizard will help you set up a new conference.") . '

'; // 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 '

' . i18n("Click next to continue") . '

'; echo ''; }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 '

' . i18n("What would you like to do?") . '

'; echo '' . i18n('Create a new conference') . '
'; echo '' . i18n('Copy an existing conference') . '
'; } } 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 "

" . i18n("Please enter the name and type of this conference.") . "

"; echo ""; echo ""; $val = ''; if(array_key_exists('name', $_SESSION['conference_wizard'])){ $val = ' VALUE="' . $_SESSION['conference_wizard']['name'] . '" '; } echo ""; echo ""; echo ""; echo ""; echo "
" . i18n("Conference Name") . "
" . i18n("Conference Type") . "
"; } 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 "

" . i18n("Please select the conference that you wish to copy.") . "

"; echo ""; echo ""; echo "
" . i18n("Conference to Copy:") . ""; echo ""; echo "
" . i18n("End this conference after copying it:") . ""; echo ""; echo "
" . i18n("Increment dates by a year:") . ""; echo ""; echo "
"; } 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 "

" . i18n("Please enter a name for this conference") . "

"; echo ""; echo ""; $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 ""; echo "
" . i18n("Conference Name") . "
"; } 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 "

"; echo i18n("All of the required information has been gathered. Click "OK" to complete the process."); echo "

"; } 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:
$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 :
" . 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) . ':
' . 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__ . ':
' . 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__ . ':
' . 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__ . ':
' . 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__ . ':
' . 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__ . ':
' . 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__ . ':
' . 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")."
"; $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__ . ':
' . $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__ . ':
' . 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__ . ':
' . 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__ . ':
' . mysql_error()); return false; } // regfee items $errorMessage = roll($oldConfId, $newConfId, 'regfee_items'); if($errorMessage != ''){ wizard_draw_step('error', 'SQL error before line #' . __LINE__ . ':
' . $errorMessage); return false; } // volunteer positions $errorMessage = roll($oldConfId, $newConfId, 'volunteer_positions'); if($errorMessage != ''){ wizard_draw_step('error', 'SQL error before line #' . __LINE__ . ':
' . $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__ . ':
' . $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__ . ':
' . $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() . "
"; $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() . "
"; echo mysql_error(); } return $errMessage; }