2010-06-03 19:21:27 +00:00
< ?
/*
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 .
*/
?>
< ?
2010-11-10 23:05:24 +00:00
require ( " ../common.inc.php " );
require_once ( " ../user.inc.php " );
require_once ( " ../config_editor.inc.php " );
superuser_required ();
2010-06-03 19:21:27 +00:00
2010-11-10 23:05:24 +00:00
/*
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 (
2010-11-16 19:53:26 +00:00
'cancel' => i18n ( 'Cancel' ),
2010-11-10 23:05:24 +00:00
'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 (
2010-11-16 19:53:26 +00:00
'cancel' => i18n ( 'Cancel' ),
2010-11-10 23:05:24 +00:00
'next' => i18n ( 'Next' ),
2010-11-16 19:53:26 +00:00
'back' => i18n ( 'Back' ),
2010-11-10 23:05:24 +00:00
)
),
'selectConference' => array (
'title' => i18n ( 'Select a Conference' ),
'builder' => 'build_select_conference_step' ,
'handler' => 'handle_select_conference_step' ,
'fields' => array (
'mastercopy' ,
'endExisting' ,
'rollDates'
),
'actions' => array (
2010-11-16 19:53:26 +00:00
'cancel' => i18n ( 'Cancel' ),
2010-11-10 23:05:24 +00:00
'next' => i18n ( 'Next' ),
2010-11-16 19:53:26 +00:00
'back' => i18n ( 'Back' ),
2010-11-10 23:05:24 +00:00
)
),
'enterName' => array (
'title' => i18n ( 'Conference Name' ),
'builder' => 'build_enter_name_step' ,
'handler' => 'handle_enter_name_step' ,
'fields' => array (
'name'
),
'actions' => array (
2010-11-16 19:53:26 +00:00
'cancel' => i18n ( 'Cancel' ),
2010-11-10 23:05:24 +00:00
'next' => i18n ( 'Next' ),
2010-11-16 19:53:26 +00:00
'back' => i18n ( 'Back' ),
2010-11-10 23:05:24 +00:00
)
),
'complete' => array (
'title' => i18n ( 'Confirmation' ),
'builder' => 'build_complete_step' ,
'handler' => 'handle_complete_step' ,
'fields' => array (),
'actions' => array (
2010-11-16 19:53:26 +00:00
'cancel' => i18n ( 'Cancel' ),
2010-11-10 23:05:24 +00:00
'ok' => i18n ( 'OK' ),
2010-11-16 19:53:26 +00:00
'back' => i18n ( 'Back' ),
2010-11-10 23:05:24 +00:00
)
),
'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' ]){
2010-11-18 20:44:48 +00:00
case 'loadTable' :
draw_conferences_list ();
break ;
case 'new' :
// present them with a wizard in which to create a new conference
2010-11-10 23:05:24 +00:00
$_SESSION [ 'conference_wizard' ] = array ();
wizard_draw_step ( 'start' );
2010-11-18 20:44:48 +00:00
break ;
case 'edit' :
// give them an editor in which to modify an existing conference
2010-12-07 19:26:39 +00:00
$cid = intval ( $_POST [ 'id' ]);
if ( ! $cid ){
2010-11-18 20:44:48 +00:00
$conf = mysql_fetch_assoc ( mysql_query ( " SELECT * FROM conferences WHERE id = $cid " ));
if ( is_array ( $conf )){
echo " <table> " ;
echo " <tr><td> " . i18n ( 'Name' ) . " :</td><td><input type= \" text \" id= \" confName \" value= \" { $conf [ 'name' ] } \" ></input></td></tr> " ;
echo " <tr><td> " . i18n ( 'Conference Type' ) . " :</td><td> " ;
echo " <select id= \" confType \" > " ;
echo " <option value= \" sciencefair \" " ; if ( $conf [ 'type' ] == 'sciencefair' ) echo " SELECTED " ; echo " > " . i18n ( " Science Fair " ) . " </option> " ;
echo " <option value= \" scienceolympics \" " ; if ( $conf [ 'type' ] == 'scienceolympics' ) echo " SELECTED " ; echo " > " . i18n ( " Science Olympics " ) . " </option> " ;
echo " </select> " ;
echo " </td></tr> " ;
echo " <tr><td> " . i18n ( 'Status' ) . " :</td><td> " ;
$statuses = array ( 'pending' , 'running' , 'ended' );
echo " <select id= \" confStatus \" > " ;
foreach ( $statuses as $status ){
echo " <option value= \" $status\ " " ;
if ( $conf [ 'status' ] == $status ) echo " SELECTED " ;
echo " > $status </option> " ;
}
echo " </select> " ;
echo " </td></tr> " ;
echo " </table> " ;
}
}
break ;
case 'save' :
// save the new conference data for the conference that's being edited
2010-12-07 19:26:39 +00:00
$confId = intval ( $_POST [ 'id' ]);
if ( ! $confId ) {
2010-11-18 20:44:48 +00:00
error_ ( " invalid conference id " );
}
2010-12-07 19:26:39 +00:00
else {
// verify that the specified conference already exists
$countRecord = mysql_fetch_assoc ( mysql_query ( " SELECT COUNT(*) as tally FROM conferences WHERE id = $confId " ));
$tally = $countRecord [ 'tally' ];
if ( $tally == 1 ){
// ok, it's a valid conference id. Let's go ahead and update the data for it
$confType = mysql_real_escape_string ( $_POST [ 'confType' ]);
$confName = mysql_real_escape_string ( $_POST [ 'confName' ]);
$confStatus = mysql_real_escape_string ( $_POST [ 'confStatus' ]);
mysql_query ( " UPDATE conferences SET type=' $confType ', name=' $confName ', status=' $confStatus ' WHERE id=' $confId ' " );
$errMsg = mysql_error ();
if ( $errMsg != null ){
error_ ( " SQL error: $errMsg " );
} else {
happy_ ( " Conference updated successfully " );
}
2010-11-18 20:44:48 +00:00
} else {
2010-12-07 19:26:39 +00:00
error_ ( " nonexistant conference id " );
2010-11-18 20:44:48 +00:00
}
}
break ;
case 'delete' :
// delete the specified conference
2010-12-07 19:26:39 +00:00
$confId = intval ( $_POST [ 'id' ]);
if ( ! $confId ){
2010-11-18 20:44:48 +00:00
error_ ( " invalid conference id " );
} else {
mysql_query ( " UPDATE conferences set status='deleted' WHERE id = $confId " );
$errMsg = mysql_error ();
if ( $errMsg != null ){
error_ ( " SQL error: $errMsg " );
} else {
happy_ ( " Conference updated successfully " );
}
}
2010-11-10 23:05:24 +00:00
break ;
}
exit ;
}
send_header ( " Conferences Setup " ,
array ( 'Committee Main' => 'committee_main.php' ,
'System Setup' => '/super/index.php' )
2010-06-03 19:21:27 +00:00
, " configuration "
);
2010-11-10 23:05:24 +00:00
?>
< script type = " text/javascript " >
2010-11-16 19:53:26 +00:00
var wizard ;
2010-11-10 23:05:24 +00:00
2010-11-16 19:53:26 +00:00
function editConference ( cid ){
2010-11-18 20:44:48 +00:00
var editor = $ ( '<div></div>' );
$ . post ( 'conferences.php?action=edit' , { 'id' : cid }, function ( result ){
editor . html ( result );
editor . dialog ({
'title' : '<?=i18n("Edit")?>' ,
'modal' : 'true' ,
'buttons' : {
'<?=i18n(' Cancel ')?>' : function (){
editor . dialog ( 'close' );
editor . remove ();
},
'<?=i18n(' Ok ')?>' : function (){
$ . post (
'conferences.php?action=save' ,
{
'id' : cid ,
'confStatus' : $ ( '#confStatus' ) . val (),
'confType' : $ ( '#confType' ) . val (),
'confName' : $ ( '#confName' ) . val ()
},
function ( result ){
editor . dialog ( 'close' );
editor . remove ();
$ ( '#conferences' ) . load ( 'conferences.php?action=loadTable' );
}
);
}
}
});
});
2010-11-16 19:53:26 +00:00
}
function dropConference ( cid ){
2010-11-18 20:44:48 +00:00
var confirmation = $ ( '<div></div>' );
confirmation . append ( '<?=i18n("Are you sure you want to delete this conference?");?>' );
confirmation . dialog ({
'title' : '<?=i18n("Are you sure");?>' ,
'modal' : true ,
'buttons' : {
'<?=i18n(' No ')?>' : function (){
$ ( this ) . dialog ( 'close' );
$ ( this ) . remove ();
},
'<?=i18n(' Yes ')?>' : function (){
$ ( this ) . dialog ( 'close' );
$ . post ( 'conferences.php?action=delete' , { 'id' : cid }, function ( result ){
$ ( '#conferences' ) . load ( 'conferences.php?action=loadTable' );
});
$ ( this ) . remove ();
}
}
});
2010-11-16 19:53:26 +00:00
}
2010-11-10 23:05:24 +00:00
function openWizard (){
2010-11-16 19:53:26 +00:00
wizard = $ ( '<div></div>' );
$ ( '#conferences' ) . append ( wizard );
2010-11-23 20:58:38 +00:00
wizard . dialog ({
modal : true ,
width : 500 ,
height : 200 ,
resizable : false ,
draggable : false ,
closeOnEscape : false ,
open : function ( event , ui ) { $ ( " .ui-dialog-titlebar-close " ) . hide (); }
});
2010-11-16 19:53:26 +00:00
wizard . load ( 'conferences.php?action=new' );
2010-11-10 23:05:24 +00:00
}
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 ){
2010-11-16 19:53:26 +00:00
wizard . html ( result );
2010-11-10 23:05:24 +00:00
});
}
2010-06-03 19:21:27 +00:00
2010-11-10 23:05:24 +00:00
</ script >
2010-06-03 19:21:27 +00:00
2010-11-18 20:44:48 +00:00
< a href = '' onclick = " openWizard(); return false; " > Add a conference </ a >
< hr />
2010-11-10 23:05:24 +00:00
< div id = " conferences " >
2010-11-16 19:53:26 +00:00
< ? php draw_conferences_list (); ?>
< br />
</ div >
2010-06-03 19:21:27 +00:00
< ?
2010-11-16 19:53:26 +00:00
send_footer ();
2010-06-03 19:21:27 +00:00
2010-11-16 19:53:26 +00:00
function draw_conferences_list (){
2010-11-18 20:44:48 +00:00
echo " <table class= \" summarytable \" > " ;
echo " <thead><tr><th colspan= \" 5 \" > " . i18n ( " Conferences " ) . " </th></tr></thead> " ;
$query = mysql_query ( " SELECT * FROM `conferences` WHERE status <> 'deleted' " );
$rowNumbr = 0 ;
2010-11-16 19:53:26 +00:00
while ( $row = mysql_fetch_assoc ( $query )){
2010-11-18 20:44:48 +00:00
echo '<tr class="' ;
if (( $rowNumber ++ ) % 2 ) echo 'odd' ;
else echo 'even' ;
echo '">' ;
2010-11-16 19:53:26 +00:00
echo " <td> { $row [ 'name' ] } </td><td> { $row [ 'type' ] } </td><td> { $row [ 'status' ] } </td> " ;
2010-11-18 20:44:48 +00:00
echo " <td><img onclick= \" editConference( { $row [ 'id' ] } );return false; \" alt= \" " . i18n ( " Edit " ) . " \" src= \" /icons/16/edit.png \" /></td> " ;
if ( $row [ 'status' ] == 'running' ){
echo " <td></td> " ; // can't delete a running conference
} else {
echo " <td><img onclick= \" dropConference( { $row [ 'id' ] } );return false; \" alt= \" " . i18n ( " Delete " ) . " \" src= \" /icons/16/button_cancel.png \" /></td> " ;
}
2010-11-16 19:53:26 +00:00
echo " </tr> " ;
}
echo " </table> " ;
}
2010-06-03 19:21:27 +00:00
2010-11-10 23:05:24 +00:00
/************** 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']; " ;
}
2010-11-16 19:53:26 +00:00
// 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 '});' ;
2010-11-10 23:05:24 +00:00
// draw the title header
2010-11-16 19:53:26 +00:00
echo 'wizard.dialog("option", "title", "' . $wizard_steps [ $step ][ 'title' ] . '");' ;
echo " </script> " ;
2010-11-10 23:05:24 +00:00
if ( $message != null ){
// used for error messages (eg. empty field)
echo " <div class= \" error \" > " . $message . " </div> " ;
}
// draw the actual content of this step
2010-11-23 20:58:38 +00:00
echo " <div style= \" margin:1em \" > " ;
2010-11-10 23:05:24 +00:00
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 \" >
2010-11-16 19:53:26 +00:00
wizard . dialog ( 'close' );
2010-11-18 20:44:48 +00:00
wizard . remove ();
2010-11-10 23:05:24 +00:00
</ 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>' ;
2010-11-23 20:58:38 +00:00
echo '<div style="margin:1em">' ;
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/>' ;
echo '</div>' ;
2010-11-10 23:05:24 +00:00
}
}
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> " ;
2010-11-23 20:58:38 +00:00
echo '<div style="margin:1em">' ;
2010-11-10 23:05:24 +00:00
echo " <table><tr> " ;
echo " <td> " . i18n ( " Conference Name " ) . " </td> " ;
$val = '' ;
if ( array_key_exists ( 'name' , $_SESSION [ 'conference_wizard' ])){
$val = ' VALUE="' . $_SESSION [ 'conference_wizard' ][ 'name' ] . '" ' ;
}
2010-11-23 20:58:38 +00:00
echo " <td><input type= \" text \" size= \" 40 \" id= \" name \" $val ></input></td> " ;
2010-11-10 23:05:24 +00:00
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> " ;
2010-11-23 20:58:38 +00:00
echo " </div> " ;
2010-11-10 23:05:24 +00:00
}
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> " ;
2010-11-23 20:58:38 +00:00
echo '<div style="margin:1em">' ;
echo " <table><tr><td colspan= \" 2 \" > " ;
2010-11-10 23:05:24 +00:00
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> " ;
2010-11-23 20:58:38 +00:00
echo " </td></tr><tr><td> " ;
2010-11-10 23:05:24 +00:00
echo " <input type= \" checkbox \" value= \" yes \" name= \" endExisting \" $endchecked ></input> " ;
2010-11-23 20:58:38 +00:00
echo " </td><td> " . i18n ( " End this conference after copying it " ) . " </td></tr> " ;
2010-11-10 23:05:24 +00:00
2010-11-23 20:58:38 +00:00
echo " <tr><td> " ;
2010-11-10 23:05:24 +00:00
echo " <input type= \" checkbox \" value= \" yes \" name= \" rollDates \" $rollchecked ></input> " ;
2010-11-23 20:58:38 +00:00
echo " </td><td> " . i18n ( " Increment dates by a year " ) . " </td></tr> " ;
2010-11-10 23:05:24 +00:00
echo " </table> " ;
2010-11-23 20:58:38 +00:00
echo '</div>' ;
2010-11-10 23:05:24 +00:00
}
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> " ;
$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' ] . '" ' ;
}
2010-11-23 20:58:38 +00:00
echo " <div style= \" margin:1em \" ><input type= \" text \" size= \" 40 \" id= \" name \" $val ></input></div> " ;
2010-11-10 23:05:24 +00:00
}
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' ];
2010-11-26 16:50:17 +00:00
mysql_query ( " INSERT INTO conferences (oid, name, type, status) VALUES (1, ' " . $cname . " ', ' $ctype ', 'pending') " );
2010-11-25 20:45:44 +00:00
//if its created brand spanking new, we set the copyoriginal and copyparent to be the same as the id
$id = mysql_insert_id ();
mysql_query ( " UPDATE conferences SET copyoriginal=' $id ', copyparent=' $id ' WHERE id=' $id ' " );
2010-11-10 23:05:24 +00:00
$errorMessage = mysql_error ();
if ( $errorMessage ){
return " SQL Error:<br/> $errorMessage " ;
}
2011-02-22 21:54:34 +00:00
// Dennis mysql_insert_id returns 0 because it follows an update query (no auto increment done)
//$conferences_id = mysql_insert_id();
$conferences_id = $id ;
2010-11-10 23:05:24 +00:00
//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 ;
}
2010-11-16 19:53:26 +00:00
// 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
2010-11-10 23:05:24 +00:00
// return 'ok' on success, error message otherwise
function conferences_copy_users ( $oldConfId , $newConfId , $roles ){
2010-11-16 19:53:26 +00:00
if ( ! is_array ( $roles )){
// they must have been passed as a string
$roles = explode ( ',' , $roles );
foreach ( $roles as $idx => $val ){
$roles [ $idx ] = trim ( $val );
}
}
2010-11-10 23:05:24 +00:00
$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) . "' )
2010-11-16 19:53:26 +00:00
AND user_roles . users_id = $oldId
2010-11-10 23:05:24 +00:00
" );
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
} */
2010-11-26 16:50:17 +00:00
// start a list of all tables that have been updated
$completedTables = array ();
2010-11-10 23:05:24 +00:00
// we'll start by creating the new conference
$oldConfId = $params [ 'mastercopy' ];
$oldConf = mysql_fetch_assoc ( mysql_query ( " SELECT * FROM conferences WHERE id = { $oldConfId } " ));
2010-11-25 20:45:44 +00:00
mysql_query ( " INSERT INTO conferences (oid, name, type, status, copyoriginal, copyparent) VALUES (1, ' " . mysql_real_escape_string ( $params [ 'name' ]) . " ', ' { $oldConf [ 'type' ] } ', 'pending',' { $oldConf [ 'copyoriginal' ] } ',' { $oldConf [ 'id' ] } ') " );
2010-11-10 23:05:24 +00:00
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)."' ) " );
2010-11-26 16:50:17 +00:00
$completedTables [] = 'dates' ;
if ( mysql_error () != '' ){ wizard_draw_step ( 'error' , 'SQL error before line #' . __LINE__ . ': <br/>' . mysql_error ()); rollback ( $newConfId , $completedTables ); return false ; }
2010-11-10 23:05:24 +00:00
// 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)."' ) " );
2010-11-26 16:50:17 +00:00
$completedTables [] = 'pagetext' ;
if ( mysql_error () != '' ){ wizard_draw_step ( 'error' , 'SQL error before line #' . __LINE__ . ': <br/>' . mysql_error ()); rollback ( $newConfId , $completedTables ); return false ; }
2010-11-10 23:05:24 +00:00
// 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)."' ) " );
2010-11-26 16:50:17 +00:00
$completedTables [] = 'projectcategories' ;
if ( mysql_error () != '' ){ wizard_draw_step ( 'error' , 'SQL error before line #' . __LINE__ . ': <br/>' . mysql_error ()); rollback ( $newConfId , $completedTables ); return false ; }
2010-11-10 23:05:24 +00:00
// 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)."' ) " );
2010-11-26 16:50:17 +00:00
$completedTables [] = 'projectdivisions' ;
if ( mysql_error () != '' ){ wizard_draw_step ( 'error' , 'SQL error before line #' . __LINE__ . ': <br/>' . mysql_error ()); rollback ( $newConfId , $completedTables ); return false ; }
2010-11-10 23:05:24 +00:00
// 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)."' ) " );
2010-11-26 16:50:17 +00:00
$completedTables [] = 'projectsubdivisions' ;
if ( mysql_error () != '' ){ wizard_draw_step ( 'error' , 'SQL error before line #' . __LINE__ . ': <br/>' . mysql_error ()); rollback ( $newConfId , $completedTables ); return false ; }
2010-11-10 23:05:24 +00:00
// 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)."' ) " );
2010-11-26 16:50:17 +00:00
$completedTables [] = 'safetyquestions' ;
if ( mysql_error () != '' ){ wizard_draw_step ( 'error' , 'SQL error before line #' . __LINE__ . ': <br/>' . mysql_error ()); rollback ( $newConfId , $completedTables ); return false ; }
2010-11-10 23:05:24 +00:00
// 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 ));
$errorMessage .= roll ( $oldConfId , $newConfId , 'award_prizes' , " award_awards_id=' { $r -> id } ' " ,
array ( 'award_awards_id' => $award_awards_id ));
}
2010-11-26 16:50:17 +00:00
$completedTables [] = 'award_awards' ;
$completedTables [] = 'award_awards_projectcategories' ;
$completedTables [] = 'award_awards_projectdivisions' ;
$completedTables [] = 'award_prizes' ;
if ( $errorMessage != '' ){ wizard_draw_step ( 'error' , 'SQL error before line #' . __LINE__ . ': <br/>' . $errorMessage ); rollback ( $newConfId , $completedTables ); return false ; }
2010-11-10 23:05:24 +00:00
// 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)."' ) " );
2010-11-26 16:50:17 +00:00
$completedTables [] = 'award_types' ;
if ( mysql_error () != '' ){ wizard_draw_step ( 'error' , 'SQL error before line #' . __LINE__ . ': <br/>' . mysql_error ()); rollback ( $newConfId , $completedTables ); return false ; }
2010-11-10 23:05:24 +00:00
// 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)."' ) " );
}
2010-11-26 16:50:17 +00:00
$completedTables [] = 'schools' ;
if ( mysql_error () != '' ){ wizard_draw_step ( 'error' , 'SQL error before line #' . __LINE__ . ': <br/>' . mysql_error ()); rollback ( $newConfId , $completedTables ); return false ; }
2010-11-10 23:05:24 +00:00
// questions
$q = mysql_query ( " SELECT * FROM questions WHERE conferences_id = $oldConfId " );
2010-11-16 19:53:26 +00:00
while ( mysql_error () == '' && $r = mysql_fetch_object ( $q ))
2010-11-10 23:05:24 +00:00
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)."' ) " );
2010-11-26 16:50:17 +00:00
$completedTables [] = 'questions' ;
if ( mysql_error () != '' ){ wizard_draw_step ( 'error' , 'SQL error before line #' . __LINE__ . ': <br/>' . mysql_error ()); rollback ( $newConfId , $completedTables ); return false ; }
2010-11-10 23:05:24 +00:00
// regfee items
$errorMessage = roll ( $oldConfId , $newConfId , 'regfee_items' );
2010-11-26 16:50:17 +00:00
$completedTables [] = 'regfee_items' ;
if ( $errorMessage != '' ){ wizard_draw_step ( 'error' , 'SQL error before line #' . __LINE__ . ': <br/>' . $errorMessage ); rollback ( $newConfId , $completedTables ); return false ; }
2010-11-10 23:05:24 +00:00
// volunteer positions
$errorMessage = roll ( $oldConfId , $newConfId , 'volunteer_positions' );
2010-11-26 16:50:17 +00:00
$completedTables [] = 'volunteer_positions' ;
if ( $errorMessage != '' ){ wizard_draw_step ( 'error' , 'SQL error before line #' . __LINE__ . ': <br/>' . $errorMessage ); rollback ( $newConfId , $completedTables ); return false ; }
2010-11-10 23:05:24 +00:00
// timeslots and rounds
2010-11-26 16:50:17 +00:00
$q = mysql_query ( " SELECT snoobaloo * FROM judges_timeslots WHERE conferences_id=' $oldConfId ' AND round_id='0' " );
2010-11-10 23:05:24 +00:00
$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 ();
}
2010-11-26 16:50:17 +00:00
$completedTables [] = 'judges_timeslots' ;
if ( $errorMessage != '' ){ wizard_draw_step ( 'error' , 'SQL error before line #' . __LINE__ . ': <br/>' . $errorMessage ); rollback ( $newConfId , $completedTables ); return false ; }
2010-11-10 23:05:24 +00:00
// admin, config, and committee users
$errorMessage = conferences_copy_users ( $oldConfId , $newConfId , array ( 'admin' , 'config' , 'committee' ));
2010-11-26 16:50:17 +00:00
$completedTables [] = 'users' ;
$completedTables [] = 'user_roles' ;
if ( $errorMessage != 'ok' ){ wizard_draw_step ( 'error' , 'SQL error before line #' . __LINE__ . ': <br/>' . $errorMessage ); rollback ( $newConfId , $completedTables ); return false ; }
2010-11-10 23:05:24 +00:00
// WHEW! If we've made it this far, the conference has successfully been copied
2010-11-26 16:50:17 +00:00
// end the previous conference if applicable
if ( $params [ 'endexisting' ] == true ){
// let's go ahead and end the conference that we just copied
mysql_query ( " UPDATE conferences SET status = 'ended' WHERE id = ' $oldConfId ' " );
if ( mysql_error () != '' ){
wizard_draw_step ( 'error' , i18n ( " The conference was copied successfully, but not successfully ended. You will need to end the original conference manually. " ) . " <br/> SQL error:<br/> " . mysql_error ());
return false ;
}
}
2010-11-10 23:05:24 +00:00
return true ;
}
2010-11-26 16:50:17 +00:00
// undo all of the conference rolling over that was done by copy_conference. This only gets called if an error occurs
// while copying to the new conference. In that case, all of the newly added data relevant to the conference is deleted,
// as well as the conference itself
function rollback ( $conferences_id , $tables ){
foreach ( $tables as $table ){
mysql_query ( " DELETE FROM ` $table ` WHERE `conferences_id` = $conferences_id " );
}
mysql_query ( " DELETE FROM conferences WHERE id = $conferences_id " );
}
2010-11-10 23:05:24 +00:00
// return empty string on success, error message otherwise
2010-11-16 19:53:26 +00:00
function roll ( $oldConfId , $newConfId , $table , $where = '' , $replace = array ()){
2010-11-10 23:05:24 +00:00
/* 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 */
2010-11-23 20:58:38 +00:00
if ( $k == 'conferences_id' ) continue ;
2010-11-10 23:05:24 +00:00
$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/> " ;
2010-11-26 16:50:17 +00:00
$names = '`' . implode ( '`,`' , $fields ) . '`' ;
2010-11-10 23:05:24 +00:00
/* 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 ]) . " ' " ;
}
2010-11-16 19:53:26 +00:00
mysql_query ( " INSERT INTO ` $table ` (`conferences_id`, $names ) VALUES (' $newConfId ' $vals ) " );
2010-11-10 23:05:24 +00:00
if ( mysql_error () != '' ) $errMessage .= mysql_error () . " <br/> " ;
echo mysql_error ();
}
return $errMessage ;
}