science-ation/user_main.php

309 lines
9.7 KiB
PHP
Raw Normal View History

<?php
/*
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-2010 James Grant <james@lightbox.org>
Copyright (C) 2007 David Grant <dave@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_once("common.inc.php");
require_once("user.inc.php");
user_auth_required();
// find out if this user actually is in this conference
$query = "SELECT COUNT(*) FROM users WHERE conferences_id = {$conference['id']}"
. " AND accounts_id = " . $_SESSION['accounts_id'];
$data = mysql_fetch_array(mysql_query($query));
if($data[0] == 0){
// They're not actually connected to this conference, let's hook 'em up
$u = user_create($_SESSION['accounts_id'], $_SESSION['conferences_id']);
$_SESSION['users_id'] = $u['id'];
}
$u = user_load($_SESSION['users_id']);
if($u && array_key_exists('action', $_GET)){
switch($_GET['action']){
case 'draw_roles':
draw_roles();
break;
case 'register':
$role = $_POST['role'];
$result = account_add_role($u['accounts_id'], $roles[$role]['id'], $_SESSION['conferences_id'], $_POST['password']);
if($result == 'ok'){
}
break;
case 'remove':
$role = $_GET['role'];
$result = account_remove_role($u['accounts_id'], $roles[$role]['id'], $_SESSION['conferences_id']);
if($result == 'ok'){
happy_(i18n("Role successfully removed."));
}else{
error_(i18n("Unable to remove role."));
}
break;
case 'activate':
$role = $_GET['role'];
if(!array_key_exists($role, $u['roles'])) {
/* Hand crafting URLs? */
echo "HALT: can't activate a role the user doesn't have";
exit;
}
$u['roles'][$role]['active'] = 'yes';
user_save($u);
happy_("{$roles[$role]['name']} role for %1 successfully activated",array($conference['name']));
echo i18n("Active");
break;
case 'deactivate':
$role = $_GET['role'];
if(!array_key_exists($role, $u['roles'])) {
/* Hand crafting URLs? */
echo "HALT: can't deactivate a role the user doesn't have";
}
$u['roles'][$role]['active'] = 'no';
user_save($u);
happy_("{$roles[$role]['name']} role for %1 successfully deactivated",array($conference['name']));
echo i18n("Deactivated");
break;
default:
break;
}
updateSessionRoles($u);
exit;
}
send_header("Main Page", array());
// throw in our javascript functions
?>
<script type="text/javascript">
function register(role){
$.post('user_main.php?action=register',
{
'role' : role,
'password' : $('#' + role + '_password').val()
},
function(result){
$('#roles').load('user_main.php?action=draw_roles');
}
);
}
function activate(role){
$("#rolestatus_"+role).load("<?=$config['SFIABDIRECTORY']?>/user_main.php?action=activate&users_id=<?=$u['id']?>&role="+role,$('#rolesform').serializeArray());
$("#activate_"+role).attr('disabled', 'disabled');
$("#deactivate_"+role).removeAttr('disabled');
$("#remove_"+role).removeAttr('disabled');
$("#rolestatus_"+role).removeClass('notice');
$("#rolestatus_"+role).addClass('happy');
return false;
}
function deactivate(role){
$("#rolestatus_"+role).load("<?=$config['SFIABDIRECTORY']?>/user_main.php?action=deactivate&users_id=<?=$u['id']?>&role="+role,$('#rolesform').serializeArray());
$("#activate_"+role).removeAttr('disabled');
$("#deactivate_"+role).attr('disabled', 'disabled');
$("#remove_"+role).attr('disabled', 'disabled');
$("#rolestatus_"+role).removeClass('happy');
$("#rolestatus_"+role).addClass('notice');
return false;
}
function remove(role){
var con = confirmClick("<?=i18n("Are you sure you want to remove this role from your account?\\nThis action cannot be undone.")?>");
if(con == true) {
$.get("<?=$config['SFIABDIRECTORY']?>/user_main.php?action=remove&users_id=<?=$u['id']?>&role="+role,function(){
$('#roles').load('user_main.php?action=draw_roles');
});
}
}
</script>
<?php
// draw the main body of the page
//only display the named greeting if we have their name
echo i18n("Hello %1",array($_SESSION['name']));
echo "<br />";
echo "<br />";
draw_roles();
send_footer();
function draw_roles(){
// get a list of all roles that this user can potentially sign up for
global $u, $config;
$rlist = array();
$q = mysql_query("SELECT * FROM roles");
$available = array();
$registered = array();
while($row = mysql_fetch_assoc($q)){
$roleid = $row['type'];
$idx = $roleid . "_registration_type";
if(array_key_exists($idx, $config)){
// this is a role that can potentially be registered for
if(is_array($u['roles']) && array_key_exists($row['type'], $u['roles'])){
$registered[$row['type']] = $row['name'];
}else{
$available[$row['type']] = $row['name'];
}
}
}
echo '<div id="roles">';
if(count($registered) > 0){
$rowNumber = 0;
echo "<h3>" . i18n("You are currently registered for the following roles") . ":</h3>";
echo '<form class="editor" id="rolesform">';
echo "<table class=\"summarytable\" style=\"width:95%;margin-bottom:1em\">";
foreach($registered as $role => $title){
echo '<tr class="';
if(($rowNumber++) % 2) echo 'odd';
else echo 'even';
echo '">';
echo "<td style=\"width:10em\"><strong>" . i18n($title) . "</strong></td>";
if($u['roles'][$role]['active'] == 'yes') {
$cs = i18n('Active');
$cl = 'happy';
$a = 'disabled="disabled"';
$d = '';
} else {
$cs = i18n('Deactivated');
$cl = 'notice';
$a = '';
$d = 'disabled="disabled"';
}
?>
<td><div class="<?=$cl?>" id="rolestatus_<?=$role?>"><?=$cs?></div></td>
<td>
<button style="width: 100px;" id="activate_<?=$role?>" <?=$a?> onclick="activate('<?=$role?>');return false;" ><?=i18n("Activate")?></button>
<button style="width: 100px;" id="deactivate_<?=$role?>" <?=$d?> onclick="deactivate('<?=$role?>');return false;" ><?=i18n("Deactivate")?></button>
<button style="width: 100px;" id="remove_<?=$role?>" <?=$d?> onclick="remove('<?=$role?>');return false;" ><?=i18n("Remove")?></button>
</td>
<?php
echo "</tr>";
}
echo "</table></form>";
}
if(count($available) > 0){
echo "<h3>" . i18n("The following roles are available") . ":</h3>";
$rowNumber = 0;
echo "<table class=\"summarytable\" style=\"width:95%\">";
foreach($available as $type => $title){
echo '<tr class="';
if(($rowNumber++) % 2) echo 'odd';
else echo 'even';
echo '">';
echo "<td style=\"width:10em\"><strong>$title</strong></td><td>";
draw_signup_form($type);
echo "</td></tr>";
}
echo "</table>";
}
echo "</div>";
}
function draw_signup_form($type){
global $config;
global $roles;
switch($type) {
case 'volunteer':
$reg_open = user_volunteer_registration_status();
$reg_mode = $config['volunteer_registration_type'];
// $reg_single_password = $config['volunteer_registration_singlepassword'];
// $password_expiry_days = $config['volunteer_password_expiry_days'];
// $welcome_email = "volunteer_welcome";
break;
/*case 'committee':
$reg_open = 'notpermitted';
$reg_mode = 'closed';
$reg_single_password = '';
$password_expiry_days = 0;
$welcome_email = false;
break;
*/
case 'teacher':
$reg_open = user_teacher_registration_status();
$reg_mode = $config['teacher_registration_type'];
break;
case 'judge':
$reg_open = user_judge_registration_status();
$reg_mode = $config['judge_registration_type'];
// $reg_single_password = $config['judge_registration_singlepassword'];
// $password_expiry_days = $config['judges_password_expiry_days'];
// $welcome_email = "judge_welcome";
break;
/*
case 'student':
$reg_open = 'closed';
// $reg_mode = $config['judge_registration_type'];
// $reg_single_password = $config['judge_registration_singlepassword'];
$password_expiry_days = 0;
$welcome_email = "register_students_welcome";
break;
*/
default:
echo "Role type '$type' is not handled";
return;
}
if($reg_open == 'open'){
switch($reg_mode){
case 'open':
echo '<p>' . i18n("Registration is open. Please click the 'Register' button if you wish to register.");
echo " &nbsp; <button onclick=\"register('" . $type . "');\">" . i18n('Register') . "</button>";
echo '</p>';
break;
case 'singlepassword':
echo '<p>';
echo i18n("{$roles[$type]['name']} Registration is protected by a password. You must know the <b>{$roles[$type]['name']} Registration Password</b> in order to register for this role. Please contact the committee to obtain the password if you wish to register.");
echo "</p><p>";
echo i18n("{$roles[$type]['name']} Password").":<input type=\"password\" size=\"20\" id=\"{$type}_password\" />";
echo "<button onclick=\"register('" . $type . "');\">" . i18n('Register') . "</button>";
echo "</p>";
break;
case 'schoolpassword':
echo "\"$reg_mode\" registration is not yet handled";
break;
case 'invite':
output_page_text("register_{$type}_invite");
break;
case 'openorinvite':
echo "\"$reg_mode\" registration is not yet handled";
break;
default:
echo "Unhandled registration mode: $reg_mode";
}
}else{
echo i18n("{$roles[$type]['name']} registration is not open");
}
}