Fix all participant emails in communication module

Make queries for communications easier, all you need is a users.id queried, the system will find everything else for you
Add ability to use [PASSWORD], [USERNAME], [EMAIL] (tries accounts.email first, if its not there, it uses accounts.pendingemail), in _ANY_ email.  [REGNUM] also added but will obviously only work for participants
Add "all" section to the tabs list for user editor, so a user without any roles can still get the basic pages like "account",  "roles", and "personal info"
Put count on participant invitations for teachers (and superusers)
Fix a bug where changing a password for a different user didnt work (it changed YOURS!)
This commit is contained in:
james 2011-03-22 04:37:51 +00:00
parent 5147b3a62b
commit 23d8765fa6
10 changed files with 109 additions and 37 deletions

View File

@ -34,6 +34,13 @@ if($_POST['show_types'])
require_once('judges.inc.php'); require_once('judges.inc.php');
if($_GET['action']=="join" && $_GET['accounts_id']) {
//we're making this user join this conference
echo "joining {$_GET['accounts_id']} with {$conference['id']}";
$u = user_create(intval($_GET['accounts_id']), $conference['id']);
echo happy(i18n("User joined conference"));
}
send_header("Account List", send_header("Account List",
array('Committee Main' => 'committee_main.php', array('Committee Main' => 'committee_main.php',
'Administration' => 'admin/index.php') 'Administration' => 'admin/index.php')
@ -93,17 +100,20 @@ if($_POST['show_types'])
echo "<td>"; echo "<td>";
$u=user_load_by_accounts_id($r['id']); $u=user_load_by_accounts_id($r['id']);
if($u) { if($u) {
//we can edit them even if they dont have any roles, duh
echo "<b>";
echo "<a href=\"#\" onclick=\"return openeditor({$u['id']})\">";
if($u['firstname'] || $u['lastname']) {
echo $u['firstname']." ".$u['lastname'];
}
else {
echo i18n("No name specified");
}
echo "</a>";
echo "</b>";
echo "<br />";
if(count($u['roles'])) { if(count($u['roles'])) {
echo "<b>";
echo "<a href=\"#\" onclick=\"return openeditor({$u['id']})\">";
if($u['firstname'] || $u['lastname']) {
echo $u['firstname']." ".$u['lastname'];
}
else {
echo i18n("No name specified");
}
echo "</a>";
echo "</b>";
echo "<table>"; echo "<table>";
foreach($u['roles'] AS $r=>$rd) { foreach($u['roles'] AS $r=>$rd) {
echo "<tr><td>"; echo "<tr><td>";
@ -121,7 +131,8 @@ if($_POST['show_types'])
} }
} }
else { else {
echo "no user record for this conference"; echo "no user record for this conference. ";
echo " <a href=\"account_list.php?action=join&accounts_id={$r['id']}\">click to join conference</a>";
} }
echo "</td>"; echo "</td>";
echo "</tr>"; echo "</tr>";

View File

@ -1,11 +1,13 @@
<? <?
$mailqueries=array( $mailqueries=array(
"myself"=>array("name"=>"Yourself (for testing)","query"=>"SELECT users.id FROM users WHERE users.id='{$_SESSION['users_id']}'"),
"committee_all"=>array("name"=>"Committee members (all)","query"=> "committee_all"=>array("name"=>"Committee members (all)","query"=>
"SELECT firstname, lastname, organization, email FROM users "SELECT users.id FROM users
JOIN accounts ON users.accounts_id=accounts.id
JOIN user_roles ON user_roles.users_id = users.id JOIN user_roles ON user_roles.users_id = users.id
JOIN roles ON roles.id = user_roles.roles_id JOIN roles ON roles.id = user_roles.roles_id
WHERE roles.type = 'committee' AND users.deleted = 'no' WHERE roles.type = 'committee' AND accounts.deleted = 'no' "),
GROUP BY users.id"),
/* The WHERE clause evaluates which rows to add to the GROUP /* The WHERE clause evaluates which rows to add to the GROUP
BY, the HAVING clase evaluates which grouped rows show up. We BY, the HAVING clase evaluates which grouped rows show up. We
@ -58,31 +60,67 @@
AND user_roles.active='yes' AND user_roles.active='yes'
ORDER BY email"), ORDER BY email"),
"participants_complete_thisconference"=>array("name"=>"Participants complete for this conference","query"=> "participants_all_thisconference"=>array("name"=>"Participants (all) for this conference","query"=>
"SELECT firstname, lastname, students.email FROM students,registrations WHERE students.registrations_id=registrations.id AND registrations.conferences_id='".$conference['id']."' AND ( registrations.status='complete' OR registrations.status='paymentpending') ORDER BY students.email"), "SELECT users.id
FROM users
JOIN user_roles ON user_roles.users_id=users.id
JOIN roles ON user_roles.roles_id=roles.id
WHERE users.conferences_id='{$conference['id']}'
AND roles.type='participant'"),
"participants_complete_paymentpending_thisconference"=>array("name"=>"Participants complete for this conference but payment pending","query"=> "participants_complete_thisconference"=>array("name"=>"Participants complete/paymentpending for this conference","query"=>
"SELECT firstname, lastname, students.email FROM students,registrations WHERE students.registrations_id=registrations.id AND registrations.conferences_id='".$conference['id']."' AND registrations.status!='complete' AND registrations.status='paymentpending' ORDER BY students.email"), "SELECT users.id FROM users
JOIN registrations ON users.registrations_id=registrations.id
JOIN user_roles ON user_roles.users_id = users.id
JOIN roles ON roles.id = user_roles.roles_id
WHERE roles.type = 'participant'
AND registrations.conferences_id='".$conference['id']."'
AND ( registrations.status='complete' OR registrations.status='paymentpending')"),
"participants_complete_paymentpending_thisconference"=>array("name"=>"Participants payment pending for this conference","query"=>
"SELECT users.id FROM users
JOIN registrations ON users.registrations_id=registrations.id
JOIN user_roles ON user_roles.users_id = users.id
JOIN roles ON roles.id = user_roles.roles_id
WHERE roles.type = 'participant'
AND registrations.conferences_id='".$conference['id']."'
AND registrations.status='paymentpending'"),
"participants_notcomplete_thisconference"=>array("name"=>"Participants not complete for this conference","query"=> "participants_notcomplete_thisconference"=>array("name"=>"Participants not complete for this conference","query"=>
"SELECT firstname, lastname, students.email FROM students,registrations WHERE students.registrations_id=registrations.id AND registrations.conferences_id='".$conference['id']."' AND registrations.status!='complete' AND registrations.status!='new' ORDER BY students.email"), "SELECT users.id
FROM users
JOIN user_roles ON user_roles.users_id=users.id
JOIN roles ON user_roles.roles_id=roles.id
LEFT JOIN registrations ON users.registrations_id=registrations.id
WHERE users.conferences_id='{$conference['id']}'
AND roles.type='participant'
AND (registrations.status IS NULL OR registrations.status='open' OR registrations.status='new')"),
/* // FIXME - not sure if this has a sensible equivalent when dealing with "conferences" rather than fair years /* // FIXME - not sure if this has a sensible equivalent when dealing with "conferences" rather than fair years
"participants_complete_lastyear"=>array("name"=>"Participants complete last year","query"=> "participants_complete_lastyear"=>array("name"=>"Participants complete last year","query"=>
"SELECT firstname, lastname, students.email FROM students,registrations WHERE students.registrations_id=registrations.id AND registrations.year='".($config['FAIRYEAR']-1)."' AND ( registrations.status='complete' OR registrations.status='paymentpending') ORDER BY students.email"), "SELECT firstname, lastname, students.email FROM students,registrations WHERE students.registrations_id=registrations.id AND registrations.year='".($config['FAIRYEAR']-1)."' AND ( registrations.status='complete' OR registrations.status='paymentpending') ORDER BY students.email"),
*/
"participants_complete_allconferences"=>array("name"=>"Participants complete for all conferences","query"=> "participants_complete_allconferences"=>array("name"=>"Participants complete for all conferences","query"=>
"SELECT DISTINCT firstname, lastname, students.email FROM students,registrations WHERE students.registrations_id=registrations.id AND ( registrations.status='complete' OR registrations.status='paymentpending') ORDER BY students.email"),
"SELECT users.id, users.firstname, users.lastname, accounts.email FROM users
JOIN accounts on users.accounts_id=accounts.id
JOIN registrations ON users.registrations_id=registrations.id
JOIN user_roles ON user_roles.users_id = users.id
JOIN roles ON roles.id = user_roles.roles_id
WHERE roles.type = 'participant'
AND (registrations.status='complete' OR registrations.status='paymentpending') ORDER BY accounts.email"),
*/
"participants_cwsf_thisconference"=>array("name"=>"CWSF Winners for this conference","query"=>" "participants_cwsf_thisconference"=>array("name"=>"CWSF Winners for this conference","query"=>"
SELECT DISTINCT students.firstname, students.lastname, students.email SELECT users.id
FROM award_awards FROM award_awards
JOIN award_prizes ON award_prizes.award_awards_id=award_awards.id JOIN award_prizes ON award_prizes.award_awards_id=award_awards.id
JOIN winners ON winners.awards_prizes_id=award_prizes.id JOIN winners ON winners.awards_prizes_id=award_prizes.id
JOIN projects ON winners.projects_id=projects.id JOIN projects ON winners.projects_id=projects.id
JOIN registrations ON projects.registrations_id=registrations.id JOIN registrations ON projects.registrations_id=registrations.id
JOIN students ON students.registrations_id=registrations.id JOIN users ON users.registrations_id=registrations.id
WHERE award_awards.cwsfaward='1' AND winners.conferences_id='".$conference['id']."' WHERE award_awards.cwsfaward='1'
ORDER BY students.email"), AND winners.conferences_id='".$conference['id']."' "),
"sponsors"=>array("name"=>"Organization sponsors","query"=> "sponsors"=>array("name"=>"Organization sponsors","query"=>
"SELECT id, organization, email FROM sponsors WHERE email!='' ORDER BY email"), "SELECT id, organization, email FROM sponsors WHERE email!='' ORDER BY email"),

View File

@ -803,7 +803,9 @@ case "email_get_list":
$urllogin = "$urlmain/login.php"; $urllogin = "$urlmain/login.php";
while($r=mysql_fetch_object($recipq)) { while($r=mysql_fetch_object($recipq)) {
if($r->uid) if($r->id)
$u=user_load($r->id);
else if($r->uid)
$u=user_load_by_uid($r->uid); $u=user_load_by_uid($r->uid);
else if($r->users_uid) else if($r->users_uid)
$u=user_load_by_uid($r->users_uid); $u=user_load_by_uid($r->users_uid);
@ -816,27 +818,45 @@ case "email_get_list":
"FIRSTNAME"=>$r->firstname, "FIRSTNAME"=>$r->firstname,
"LASTNAME"=>$r->lastname, "LASTNAME"=>$r->lastname,
"NAME"=>$r->firstname." ".$r->lastname, "NAME"=>$r->firstname." ".$r->lastname,
"EMAIL"=>$r->email,
"ORGANIZATION"=>$r->organization, "ORGANIZATION"=>$r->organization,
"URLMAIN"=>$urlmain, "URLMAIN"=>$urlmain,
"URLLOGIN"=>$urllogin, "URLLOGIN"=>$urllogin,
); );
} }
if($u) { if($u) {
$a=account_load($u['accounts_id']);
$apassword=account_get_password($u['accounts_id']);
if($a['email']) {
$e=$a['email'];
}
else if ($a['pendingemail']) {
$e=$a['pendingemail'];
}
else {
$e="";
}
if($u['registrations_id']) {
$regq=mysql_query("SELECT num FROM registrations WHERE id='{$u['registrations_id']}'");
$regr=mysql_fetch_assoc($regq);
}
$replacements=array( $replacements=array(
"FAIRNAME"=>$config['fairname'], "FAIRNAME"=>$config['fairname'],
"SALUTATION"=>$u['salutation'], "SALUTATION"=>$u['salutation'],
"FIRSTNAME"=>$u['firstname'], "FIRSTNAME"=>$u['firstname'],
"LASTNAME"=>$u['lastname'], "LASTNAME"=>$u['lastname'],
"NAME"=>$u['name'], "NAME"=>$u['name'],
"EMAIL"=>$u['email'], "EMAIL"=>$e,
"USERNAME"=>$a['username'],
"PASSWORD"=>$apassword,
"REGNUM"=>$regq['num'],
"ORGANIZATION"=>$u['sponsor']['organization'], "ORGANIZATION"=>$u['sponsor']['organization'],
"URLMAIN"=>$urlmain, "URLMAIN"=>$urlmain,
"URLLOGIN"=>$urllogin, "URLLOGIN"=>$urllogin,
); );
$toname=$u['name']; $toname=$u['name'];
$toemail=$u['email']; $toemail=$e;
} }
if($toemail) { if($toemail) {

View File

@ -92,6 +92,7 @@ LRP 180 99765 5967 4 1 3/4 x 1/2 80 */
/* FIXME: put these in a databse */ /* FIXME: put these in a databse */
/* All dimensions are in millimeters */ /* All dimensions are in millimeters */
$report_stock = array(); $report_stock = array();
$report_stock['fullpage'] = array('name' => 'Letter 8.5 x 11 (3/4" margin)', $report_stock['fullpage'] = array('name' => 'Letter 8.5 x 11 (3/4" margin)',
'page_format' => 'LETTER', 'page_format' => 'LETTER',
'page_orientation' => 'P', 'page_orientation' => 'P',

View File

@ -233,10 +233,10 @@ if( ($_POST['action']=="invitenew" || $_POST['action']=="inviteexisting") && tri
echo "<br />"; echo "<br />";
echo "<br />"; echo "<br />";
if($_SESSION['superuser']=="yes") { if($_SESSION['superuser']=="yes") {
echo "<h2>".i18n("The following participants have been invited from all school (you're a superuser!)")."</h2>\n"; echo "<h2>".i18n("The following %1 participants have been invited from all schools (you're a superuser!)",array(mysql_num_rows($q)))."</h2>\n";
} }
else { else {
echo "<h2>".i18n("The following participants have been invited from your school")."</h2>\n"; echo "<h2>".i18n("The following %1 participants have been invited from your school",array(mysql_num_rows($q)))."</h2>\n";
} }
echo "<table class=\"tableview\">\n"; echo "<table class=\"tableview\">\n";
echo "<thead>"; echo "<thead>";

View File

@ -1181,8 +1181,7 @@ function user_create($accounts_id, $conferences_id=0)
$q = mysql_query("SELECT id FROM users WHERE accounts_id='$accounts_id' AND conferences_id='$conferences_id'"); $q = mysql_query("SELECT id FROM users WHERE accounts_id='$accounts_id' AND conferences_id='$conferences_id'");
echo mysql_error(); echo mysql_error();
if(mysql_num_rows($q)) { if(mysql_num_rows($q)) {
echo "ERROR: user_create called for a user that already exists.\n"; return "ERROR: user_create called for a user that already exists.\n";
exit;
} }
$fields = array( $fields = array(

View File

@ -132,7 +132,7 @@ case 'save':
else if(account_valid_password($pass1) == false) else if(account_valid_password($pass1) == false)
error_("The password contains invalid characters or is not long enough"); error_("The password contains invalid characters or is not long enough");
else { else {
account_set_password($_SESSION['accounts_id'], $pass); account_set_password($accounts_id, $pass);
unset($_SESSION['password_expired']); unset($_SESSION['password_expired']);
happy_('Password has been successfully updated'); happy_('Password has been successfully updated');

View File

@ -104,6 +104,7 @@ if(!array_key_exists($selected, $tabs)) {
else else
$selected = ''; $selected = '';
} }
$types[]="all";
$fields = array(); $fields = array();
$required = array(); $required = array();

View File

@ -15,7 +15,7 @@ $tabs = array(
'personal' => array( 'personal' => array(
'label' => 'Personal', 'label' => 'Personal',
'name' => 'Personal Information', 'name' => 'Personal Information',
'types' => array('teacher','participant','judge','committee','volunteer','sponsor','fair','admin','config'), 'types' => array('all'),
'file' => 'user_personal.php', 'file' => 'user_personal.php',
'status_func' => 'user_personal_info_status', 'status_func' => 'user_personal_info_status',
'enabled' => true, 'enabled' => true,
@ -78,7 +78,7 @@ $tabs = array(
'account' => array( 'account' => array(
'label' => 'Account/Login', 'label' => 'Account/Login',
'name' => 'Change Username/Email/Password', 'name' => 'Change Username/Email/Password',
'types' => array('teacher','participant','judge','committee','volunteer','sponsor','fair'), 'types' => array('all'),
'file' => 'user_account.php', 'file' => 'user_account.php',
'status_func' => false, 'status_func' => false,
'enabled' => true, 'enabled' => true,
@ -86,7 +86,7 @@ $tabs = array(
'roles' => array( 'roles' => array(
'label' => 'Roles', 'label' => 'Roles',
'name' => 'Add/Remove Roles', 'name' => 'Add/Remove Roles',
'types' => array('teacher','participant','judge','committee','volunteer','sponsor','fair','admin','config'), 'types' => array('all'),
'file' => 'user_roles.php', 'file' => 'user_roles.php',
'status_func' => false, 'status_func' => false,
'enabled' => true, 'enabled' => true,

View File

@ -127,6 +127,8 @@ if(!array_key_exists($selected, $tabs)) {
$selected = 'personal'; $selected = 'personal';
} }
$types[]="all";
if($_GET['sub'] == 1) { if($_GET['sub'] == 1) {
$_SESSION['embed'] = true; $_SESSION['embed'] = true;