2005-01-24 18:00:03 +00:00
< ?
2025-01-29 03:30:48 +00:00
/*
* This file is part of the 'Science Fair In A Box' project
* SFIAB Website : http :// www . sfiab . ca
*
* Copyright ( C ) 2005 Sci - Tech Ontario Inc < info @ scitechontario . org >
* Copyright ( C ) 2005 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 .
*/
2005-01-24 18:00:03 +00:00
?>
2004-11-30 18:55:39 +00:00
< ?
2025-01-29 03:30:48 +00:00
require ( 'common.inc.php' );
global $pdo ;
2004-11-30 22:59:27 +00:00
2025-01-29 03:30:48 +00:00
$q = $pdo -> query ( " SELECT (NOW()>' " . $config [ 'dates' ][ 'regopen' ] . " ' AND NOW()<' " . $config [ 'dates' ][ 'regclose' ] . " ') AS datecheck,
NOW () < '" . $config[' dates '][' regopen '] . "' AS datecheckbefore ,
NOW () > '" . $config[' dates '][' regclose '] . "' AS datecheckafter " );
2025-01-28 17:33:03 -05:00
2025-01-29 03:30:48 +00:00
$datecheck = $q -> fetch ( PDO :: FETCH_OBJ );
2005-05-12 15:47:21 +00:00
2025-01-29 03:30:48 +00:00
if ( get_value_from_array ( $_POST , 'action' ) == 'new' ) {
2025-02-09 17:24:37 +00:00
$q = $pdo -> prepare ( 'SELECT email,num,id,schools_id FROM registrations WHERE email=? AND num=? AND year=?' );
$q -> execute ([ $_SESSION [ 'email' ], $_POST [ 'regnum' ], $config [ 'FAIRYEAR' ]]);
2025-01-29 03:30:48 +00:00
if ( $q -> rowCount ()) {
$r = $q -> fetch ( PDO :: FETCH_OBJ );
$_SESSION [ 'registration_number' ] = $r -> num ;
$_SESSION [ 'registration_id' ] = $r -> id ;
2025-02-09 18:41:20 +00:00
$r -> schools_id = $r -> schools_id ? ? 0 ;
2025-02-09 17:24:37 +00:00
$stmt = $pdo -> prepare ( 'INSERT INTO students (registrations_id,email,schools_id,year) VALUES (?,?,?,?)' );
$stmt -> execute ([ $r -> id , $_SESSION [ 'email' ], $r -> schools_id , $config [ 'FAIRYEAR' ]]);
2004-11-30 23:38:13 +00:00
2025-02-09 17:24:37 +00:00
$stmt = $pdo -> prepare ( " UPDATE registrations SET status='open' WHERE id=? " );
$stmt -> execute ([ $r -> id ]);
2025-01-28 17:33:03 -05:00
2025-01-29 03:30:48 +00:00
header ( 'Location: register_participants_main.php' );
2004-11-30 22:59:27 +00:00
exit ;
2025-01-29 03:30:48 +00:00
} else {
send_header ( 'Participant Registration' );
echo error ( i18n ( 'Invalid registration number (%1) for email address %2' , array ( $_POST [ 'regnum' ], $_SESSION [ 'email' ]), array ( 'registration number' , 'email address' )));
$_POST [ 'action' ] = 'login' ;
2004-11-30 22:59:27 +00:00
}
2025-01-29 03:30:48 +00:00
} else if ( get_value_from_array ( $_POST , 'action' ) == 'continue' ) {
if ( get_value_from_array ( $_POST , 'email' ))
$_SESSION [ 'email' ] = stripslashes ( $_POST [ 'email' ]);
2025-02-09 17:24:37 +00:00
$q = $pdo -> prepare ( ' SELECT
registrations . id AS regid ,
registrations . num AS regnum ,
students . id AS studentid ,
students . firstname
FROM registrations
JOIN students ON students . registrations_id = registrations . id
WHERE students . email = ?
AND registrations . num = ?
AND registrations . year = ?
AND students . year = ? ' );
$q -> execute ([
$_SESSION [ 'email' ],
intval ( $_POST [ 'regnum' ]),
$config [ 'FAIRYEAR' ],
$config [ 'FAIRYEAR' ]
]);
2004-11-30 23:38:13 +00:00
2025-01-29 03:30:48 +00:00
if ( $q -> rowCount ()) {
$r = $q -> fetch ( PDO :: FETCH_OBJ );
$_SESSION [ 'registration_number' ] = $r -> regnum ;
$_SESSION [ 'registration_id' ] = $r -> regid ;
$_SESSION [ 'students_id' ] = $r -> studentid ;
header ( 'Location: register_participants_main.php' );
2004-11-30 23:38:13 +00:00
exit ;
2025-01-29 03:30:48 +00:00
} else {
send_header ( 'Participant Registration' );
echo error ( i18n ( 'Invalid registration number (%1) for email address %2' , array ( $_POST [ 'regnum' ], $_SESSION [ 'email' ]), array ( 'registration number' , 'email address' )));
$_POST [ 'action' ] = 'login' ;
2004-11-30 23:38:13 +00:00
}
2025-01-29 03:30:48 +00:00
} else if ( get_value_from_array ( $_GET , 'action' ) == 'resend' && get_value_from_array ( $_SESSION , 'email' )) {
// first see if the email matches directly from the registrations table
2025-02-09 17:24:37 +00:00
$q = $pdo -> prepare ( ' SELECT registrations . num FROM
2005-11-24 20:21:55 +00:00
registrations
WHERE
2025-02-09 17:24:37 +00:00
registrations . email = ?
AND registrations . year = ? ' );
$q -> execute ([ $_SESSION [ 'email' ], $config [ 'FAIRYEAR' ]]);
2025-01-29 03:30:48 +00:00
if ( $q -> rowCount ())
$r = $q -> fetch ( PDO :: FETCH_OBJ );
2010-03-16 16:49:40 +00:00
else {
2025-01-29 03:30:48 +00:00
// no match from registrations, so lets see if it matches from the students table
2025-02-09 17:24:37 +00:00
$q = $pdo -> prepare ( ' SELECT registrations . num FROM
2005-11-24 20:21:55 +00:00
registrations ,
students
WHERE
2025-02-09 17:24:37 +00:00
students . email = ?
2005-11-24 20:21:55 +00:00
AND students . registrations_id = registrations . id
2025-02-09 17:24:37 +00:00
AND registrations . year = ? ' );
$q -> execute ([ $_SESSION [ 'email' ], $config [ 'FAIRYEAR' ]]);
2025-01-29 03:30:48 +00:00
$r = $q -> fetch ( PDO :: FETCH_OBJ );
2005-11-24 20:21:55 +00:00
}
2004-12-02 17:53:31 +00:00
2025-01-29 03:30:48 +00:00
if ( $r ) {
email_send ( 'register_participants_resend_regnum' , $_SESSION [ 'email' ], array (), array ( 'REGNUM' => $r -> num ));
send_header ( 'Participant Registration' );
echo notice ( i18n ( 'Your registration number has been resent to your email address <b>%1</b>' , array ( $_SESSION [ 'email' ]), array ( 'email address' )));
} else {
send_header ( 'Participant Registration' );
echo error ( i18n ( 'Could not find a registration for your email address' ));
2005-11-24 20:21:55 +00:00
}
2025-01-29 03:30:48 +00:00
} else if ( get_value_from_array ( $_GET , 'action' ) == 'logout' ) {
unset ( $_SESSION [ 'email' ]);
2004-12-02 23:15:42 +00:00
unset ( $_SESSION [ 'registration_number' ]);
unset ( $_SESSION [ 'registration_id' ]);
2025-01-29 03:30:48 +00:00
send_header ( 'Participant Registration' );
echo notice ( i18n ( 'You have been successfully logged out' ));
}
// if they've alreayd logged in, and somehow wound back up here, take them back to where they should be
if ( get_value_from_array ( $_SESSION , 'registration_number' ) && get_value_from_array ( $_SESSION , 'registration_id' ) && get_value_from_array ( $_SESSION , 'email' )) {
header ( 'Location: register_participants_main.php' );
2007-05-10 19:18:01 +00:00
exit ;
2025-01-29 03:30:48 +00:00
}
2004-11-30 23:38:13 +00:00
2025-01-29 03:30:48 +00:00
send_header ( 'Participant Registration' );
2004-11-30 22:59:27 +00:00
2025-01-29 03:30:48 +00:00
if ( get_value_from_array ( $_POST , 'action' ) == 'login' && ( get_value_from_array ( $_POST , 'email' ) || get_value_from_array ( $_SESSION , 'email' ))) {
if ( get_value_from_array ( $_POST , 'email' ))
2025-02-09 18:41:20 +00:00
$_SESSION [ 'email' ] = stripslashes ( $_POST [ 'email' ]);
2004-11-30 22:59:27 +00:00
2025-01-29 03:30:48 +00:00
echo '<form method="post" action="register_participants.php">' ;
2004-11-30 22:59:27 +00:00
2025-01-29 03:30:48 +00:00
$allownew = true ;
$showform = true ;
2005-11-24 20:21:55 +00:00
2025-01-29 03:30:48 +00:00
// first, check if they have any registrations waiting to be opened
$q = $pdo -> prepare ( " SELECT * FROM `registrations` WHERE `email` = :email AND `status` = 'new' AND `year` = :year " );
$q -> bindParam ( ':email' , $_SESSION [ 'email' ], PDO :: PARAM_STR );
$q -> bindParam ( ':year' , $config [ 'FAIRYEAR' ], PDO :: PARAM_INT );
2005-11-24 20:21:55 +00:00
2025-01-29 03:30:48 +00:00
$q -> execute ();
2024-11-25 18:06:33 -05:00
2025-01-29 03:30:48 +00:00
if ( $q -> rowCount () > 0 ) {
echo i18n ( 'Please enter your <b>registration number</b> that you received in your email, in order to begin your new registration' );
echo '<input type="hidden" name="action" value="new">' ;
$allownew = false ;
} else {
// check if they have an already open registration
$q = $pdo -> prepare ( " SELECT
2005-11-24 20:21:55 +00:00
students . email ,
registrations . status ,
registrations . id
FROM
2024-11-25 18:06:33 -05:00
students , registrations
2004-11-30 22:59:27 +00:00
WHERE
2024-11-25 18:06:33 -05:00
students . email = : email
AND students . year = : year
AND registrations . year = : year
AND registrations . status IN ( 'open' , 'paymentpending' , 'complete' )
AND students . registrations_id = registrations . id " );
2025-01-29 03:30:48 +00:00
$q -> bindParam ( ':email' , $_SESSION [ 'email' ], PDO :: PARAM_STR );
$q -> bindParam ( ':year' , $config [ 'FAIRYEAR' ], PDO :: PARAM_INT );
2005-11-24 20:21:55 +00:00
2025-01-29 03:30:48 +00:00
$q -> execute ();
2005-11-24 20:21:55 +00:00
2025-01-29 03:30:48 +00:00
if ( $q -> rowCount () > 0 ) {
$r = $q -> fetch ( PDO :: FETCH_OBJ );
// print_r($r);
echo i18n ( 'Please enter your <b>registration number</b> in order to login' );
echo '<input type="hidden" name="action" value="continue">' ;
$allownew = false ;
echo '<br />' ;
} else {
// they dont have a 'new' and they dont have an 'open/paymentpending/complete' so that means that they want to create a new one... BUT...
if ( $config [ 'participant_registration_type' ] == 'invite' ) {
$allownew = false ;
$showform = false ;
echo i18n ( 'Participant registration is by invite only. You can not create a new account. If you have been invited by your school/region, you need to use the same email address that you were invited with.' );
echo '<br />' ;
echo '<br />' ;
echo '<a href="register_participants.php">Back to Participant Registration</a>' ;
} else if ( $config [ 'participant_registration_type' ] == 'singlepassword' ) {
$showsinglepasswordform = true ;
if ( get_value_from_array ( $_POST , 'singlepassword' )) {
if ( $_POST [ 'singlepassword' ] == $config [ 'participant_registration_singlepassword' ]) {
$allownew = true ;
$showform = true ;
$showsinglepasswordform = false ;
} else {
echo error ( i18n ( 'Invalid registration password, please try again' ));
$allownew = false ;
$showform = false ;
2005-11-24 20:21:55 +00:00
}
}
2025-01-29 03:30:48 +00:00
if ( $showsinglepasswordform ) {
echo i18n ( 'Participant registration is protected by a password. You must know the <b>registration password</b> in order to create an account.' );
echo '<br />' ;
echo '<br />' ;
echo '<input type="hidden" name="action" value="login">' ;
echo i18n ( 'Email Address:' ) . ' ' . $_SESSION [ 'email' ] . '<br />' ;
echo i18n ( 'Registration Password:' );
echo '<input type="text" size="10" name="singlepassword">' ;
echo '<br />' ;
echo '<br />' ;
echo '<input type="submit" value="' . i18n ( 'Submit' ) . '">' ;
echo '</form>' ;
$allownew = false ;
$showform = false ;
2005-11-24 20:21:55 +00:00
}
2025-01-29 03:30:48 +00:00
} else if ( $config [ 'participant_registration_type' ] == 'schoolpassword' ) {
$showschoolpasswordform = true ;
if ( $_POST [ 'schoolpassword' ] && $_POST [ 'schoolid' ]) {
2025-02-09 17:24:37 +00:00
$q = $pdo -> prepare ( 'SELECT registration_password FROM schools WHERE id=? AND year=?' );
$q -> execute ([ $_POST [ 'schoolid' ], $config [ 'FAIRYEAR' ]]);
2025-01-29 03:30:48 +00:00
$r = $q -> fetch ( PDO :: FETCH_OBJ );
if ( $_POST [ 'schoolpassword' ] == $r -> registration_password ) {
$allownew = true ;
$showform = true ;
$showschoolpasswordform = false ;
$schoolidquery = " ' " . $_POST [ 'schoolid' ] . " ' " ;
} else {
echo error ( i18n ( 'Invalid school registration password, please try again' ));
$allownew = false ;
$showform = false ;
2005-11-24 20:21:55 +00:00
}
}
2025-01-29 03:30:48 +00:00
if ( $showschoolpasswordform ) {
echo i18n ( 'Participant registration is protected by a password for each school. You must know your <b>school registration password</b> in order to create an account.' );
echo '<br />' ;
echo '<br />' ;
echo '<input type="hidden" name="action" value="login">' ;
echo i18n ( 'Email Address:' ) . ' ' . $_SESSION [ 'email' ] . '<br />' ;
echo i18n ( 'School: ' );
2025-02-09 17:24:37 +00:00
$q = $pdo -> prepare ( 'SELECT id,school FROM schools WHERE year=? ORDER BY school' );
$q -> execute ([ $config [ 'FAIRYEAR' ]]);
2025-01-29 03:30:48 +00:00
echo '<select name="schoolid">' ;
echo '<option value="">' . i18n ( 'Choose your school' ) . " </option> \n " ;
while ( $r = $q -> fetch ( PDO :: FETCH_OBJ ))
2005-11-24 20:21:55 +00:00
echo " <option value= \" $r->id\ " > $r -> school </ option > \n " ;
2025-01-29 03:30:48 +00:00
echo '</select>' ;
echo '<br />' ;
echo i18n ( 'School Registration Password: ' );
echo '<input type="text" size="10" name="schoolpassword">' ;
echo '<br />' ;
echo '<br />' ;
echo '<input type="submit" value="' . i18n ( 'Submit' ) . '">' ;
echo '</form>' ;
$allownew = false ;
$showform = false ;
2005-11-24 20:21:55 +00:00
}
2025-01-29 03:30:48 +00:00
} else if ( $config [ 'participant_registration_type' ] == 'open' ) {
// thats fine, continue on and create them the account.
} else if ( $config [ 'participant_registration_type' ] == 'openorinvite' ) {
// thats fine too, continue on and create them the account.
} else {
echo error ( i18n ( 'There is an error with the SFIAB configuration. participant_registration_type is not defined. Contact the fair organizers to get this fixed.' ));
$allownew = false ;
$showform = false ;
2005-11-24 20:21:55 +00:00
}
}
2004-11-30 22:59:27 +00:00
}
2005-11-24 20:21:55 +00:00
2025-01-29 03:30:48 +00:00
if ( $allownew ) {
if ( $datecheck -> datecheck == 0 ) {
if ( $datecheck -> datecheckbefore )
echo error ( i18n ( 'Registration is not open yet. You can not create a new account' ));
else if ( $datecheck -> datecheckafter )
echo error ( i18n ( 'Registration is now closed. You can not create a new account' ));
$showform = false ;
echo '<A href="register_participants.php">Back to Participant Registration Login Page</a>' ;
} else {
// they can only create a new registraiton if they have a valid email address, so lets do a quick ereg check on their email
if ( isEmailAddress ( $_SESSION [ 'email' ])) {
$regnum = 0 ;
// now create the new registration record, and assign a random/unique registration number to then.
2010-03-16 16:49:40 +00:00
do {
2025-01-29 03:30:48 +00:00
// random number between
// 100000 and 999999 (six digit integer)
$regnum = rand ( 100000 , 999999 );
2025-02-09 17:24:37 +00:00
$q = $pdo -> prepare ( 'SELECT * FROM registrations WHERE num=? AND year=?' );
$q -> execute ([ $regnum , $config [ 'FAIRYEAR' ]]);
2025-01-29 03:30:48 +00:00
} while ( $q -> rowCount () > 0 );
if ( ! $schoolidquery )
$schoolidquery = 'null' ;
// actually insert it
2025-02-10 03:39:30 +00:00
$stmt = $pdo -> prepare ( 'INSERT INTO registrations (num, email, start, status, schools_id, year) VALUES (?, ?, NOW(), ?, ?, ?)' );
2025-02-09 17:24:37 +00:00
$stmt -> execute ([
$regnum ,
$_SESSION [ 'email' ],
'new' ,
2025-02-09 18:41:20 +00:00
$schoolidquery ,
2025-02-09 17:24:37 +00:00
$config [ 'FAIRYEAR' ]
]);
2006-02-14 21:50:41 +00:00
2025-01-29 03:30:48 +00:00
email_send ( 'new_participant' , $_SESSION [ 'email' ], array (), array ( 'REGNUM' => $regnum , 'EMAIL' => $_SESSION [ 'email' ]));
2006-02-14 21:50:41 +00:00
2025-01-29 03:30:48 +00:00
echo i18n ( 'You have been identified as a new registrant. An email has been sent to <b>%1</b> which contains your new <b>registration number</b>. Please check your email to obtain your <b>registration number</b> and then enter it below:' , array ( $_SESSION [ 'email' ]), array ( 'email address' ));
echo '<input type="hidden" name="action" value="new">' ;
} else {
echo error ( i18n ( 'The email address you entered (%1) appears to be invalid. You must use a proper email address in order to create an account' , array ( $_SESSION [ 'email' ])));
echo '<a href="register_participants.php">' . i18n ( 'Return to participant registration' ) . '</a>' ;
$showform = false ;
2006-02-14 21:50:41 +00:00
}
2005-05-12 15:47:21 +00:00
}
2004-11-30 22:59:27 +00:00
}
2025-01-29 03:30:48 +00:00
if ( $showform ) {
echo '<br />' ;
echo '<br />' ;
echo i18n ( 'Registration Number:' );
echo '<input type="text" size="10" name="regnum">' ;
echo '<br />' ;
echo '<br />' ;
echo '<input type="submit" value="' . i18n ( 'Submit' ) . '">' ;
echo '</form>' ;
echo '<br />' ;
echo i18n ( 'If you have lost or forgotten your <b>registration number</b>, please <a href="register_participants.php?action=resend">click here to resend</a> it to your email address' );
2005-05-12 15:47:21 +00:00
}
2025-01-29 03:30:48 +00:00
} else {
// Lets check the date - if we are AFTER 'regopen' and BEFORE 'regclose' then we can login
// otherwise, registration is closed - no logins!
// this will return 1 if its between the dates, 0 otherwise.
if ( $datecheck -> datecheck == 0 ) {
if ( $datecheck -> datecheckbefore )
echo notice ( i18n ( 'Registration for the %1 %2 is not open yet. Registration will open on %3.' , array ( $config [ 'FAIRYEAR' ], $config [ 'fairname' ], format_datetime ( $config [ 'dates' ][ 'regopen' ])), array ( 'fair year' , 'fair name' , 'registration open date' )));
else if ( $datecheck -> datecheckafter ) {
echo notice ( i18n ( 'Registration for the %1 %2 is now closed. Existing registrants can login and view (read only) their information, as well as apply for special awards (if applicable).' , array ( $config [ 'FAIRYEAR' ], $config [ 'fairname' ]), array ( 'fair year' , 'fair name' )));
echo i18n ( 'Please enter your email address to login' );
2005-11-24 20:21:55 +00:00
}
2025-01-29 03:30:48 +00:00
echo '<br />' ;
echo '<br />' ;
$buttontext = i18n ( 'Login' );
} else {
if ( $config [ 'participant_registration_type' ] == 'invite' ) {
echo i18n ( 'Registration is by invitation only. As soon as you are invited by your school or the science fair committee, you will receive a welcoming email with your Registration Number' );
echo '<br />' ;
echo '<br />' ;
echo i18n ( 'Please enter your email address to:' );
echo '<ul>' ;
} else {
echo i18n ( 'Please enter your email address to :' );
echo '<ul>' ;
echo '<li>' . i18n ( 'Begin a new registration' ) . '</li>' ;
2005-11-24 20:21:55 +00:00
}
2025-01-29 03:30:48 +00:00
echo '<li>' . i18n ( 'Continue a previously started registration' ) . '</li>' ;
echo '<li>' . i18n ( 'Modify an existing registration' ) . '</li>' ;
echo '</ul>' ;
echo i18n ( 'You must enter a valid email address. We will be emailing you information which you will need to complete the registration process!' );
echo '<br />' ;
echo '<br />' ;
$buttontext = i18n ( 'Begin' );
2005-03-29 19:21:14 +00:00
}
2005-05-12 15:47:21 +00:00
2025-01-29 03:30:48 +00:00
// only show the email login box if registration is open, or we're past the registration deadline (so they can login and view / apply for special awards). if we're before the registration deadline then they cant create an account or login anwyays so no point in showing the box
if ( ! $datecheck -> datecheckbefore ) {
?>
2005-05-12 15:47:21 +00:00
< form method = " post " action = " register_participants.php " >
< input type = " hidden " name = " action " value = " login " />
2025-01-29 03:30:48 +00:00
< ? = i18n ( 'Email' ) ?> : <input type="text" name="email" size="30" />
< input type = " submit " value = " <?= $buttontext ?> " />
2005-05-12 15:47:21 +00:00
</ form >
< ?
2006-09-17 14:32:42 +00:00
}
2025-01-29 03:30:48 +00:00
}
send_footer ();
2004-11-30 18:55:39 +00:00
?>