[LON-CAPA-cvs] cvs: loncom /interface createaccount.pm domainprefs.pm loncoursequeueadmin.pm loncreateuser.pm
raeburn
raeburn at source.lon-capa.org
Mon Mar 3 12:11:42 EST 2014
raeburn Mon Mar 3 17:11:42 2014 EDT
Modified files:
/loncom/interface createaccount.pm loncoursequeueadmin.pm
loncreateuser.pm domainprefs.pm
Log:
- Bug 6646
- Status types (e.g., faculty, staff, student etc.) can apply to users
creating their own accounts with an e-mail address as username.
- Different user information can be required depending on self-reported
status type.
- User information to be provided when requesting an account can be
designated as 'required' or 'optional', with client-side javascript
prompt for missing required fields.
-------------- next part --------------
Index: loncom/interface/createaccount.pm
diff -u loncom/interface/createaccount.pm:1.60 loncom/interface/createaccount.pm:1.61
--- loncom/interface/createaccount.pm:1.60 Thu Feb 20 01:00:33 2014
+++ loncom/interface/createaccount.pm Mon Mar 3 17:11:41 2014
@@ -4,7 +4,7 @@
# kerberos, or SSO) or an e-mail address. Requests to use an e-mail address as
# username may be processed automatically, or may be queued for approval.
#
-# $Id: createaccount.pm,v 1.60 2014/02/20 01:00:33 raeburn Exp $
+# $Id: createaccount.pm,v 1.61 2014/03/03 17:11:41 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -59,7 +59,7 @@
my $sso_domain = $r->subprocess_env->get('SSOUserDomain');
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
- ['token','courseid','domain']);
+ ['token','courseid','domain','type']);
&Apache::lonacc::get_posted_cgi($r);
&Apache::lonlocal::get_language_handle($r);
@@ -240,10 +240,11 @@
}
} elsif ($env{'form.create_with_email'}) {
&print_header($r,$start_page,$courseid);
+ my $usertype = &get_usertype($domain);
$output = &process_email_request($env{'form.uname'},$domain,$domdesc,
$contact_name,$contact_email,$cancreate,
$lonhost,$domconfig{'usercreation'},
- $emailusername,$courseid);
+ $emailusername,$courseid,$usertype);
} elsif (!$token) {
&print_header($r,$start_page,$courseid);
my $now=time;
@@ -261,8 +262,10 @@
if (grep(/^email(|approval)$/,@{$cancreate})) {
$r->print(&javascript_validmail());
}
+ my $usertype = &get_usertype($domain);
$output = &print_username_form($r,$domain,$domdesc,$cancreate,$now,$lonhost,
- $include,$courseid,$gotlondes,$emailusername);
+ $include,$courseid,$gotlondes,$emailusername,
+ $usertype);
}
$r->print($output);
&print_footer($r);
@@ -298,6 +301,21 @@
$r->print(&Apache::loncommon::end_page());
}
+sub get_usertype {
+ my ($domain) = @_;
+ my $usertype = 'default';
+ my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($domain);
+ if (ref($types) eq 'ARRAY') {
+ push(@{$types},'default');
+ my $posstype = $env{'form.type'};
+ $posstype =~ s/^\s+|\s$//g;
+ if (grep(/^\Q$posstype\E$/,@{$types})) {
+ $usertype = $posstype;
+ }
+ }
+ return $usertype;
+}
+
sub selfenroll_crumbs {
my ($r,$courseid,$desc) = @_;
&Apache::lonhtmlcommon::add_breadcrumb
@@ -322,20 +340,51 @@
}
sub javascript_setforms {
- my ($now,$emailusername,$captcha) = @_;
- my $setuserinfo;
+ my ($now,$emailusername,$captcha,$usertype) = @_;
+ my ($setuserinfo, at required,$requiredchk);
if (ref($emailusername) eq 'HASH') {
- foreach my $key (sort(keys(%{$emailusername}))) {
- $setuserinfo .= ' server.elements.'.$key.'.value=client.elements.'.$key.'.value;'."\n";
+ if (ref($emailusername->{$usertype}) eq 'HASH') {
+ foreach my $key (sort(keys(%{$emailusername->{$usertype}}))) {
+ if ($emailusername->{$usertype}{$key} eq 'required') {
+ push(@required,$key);
+ }
+ $setuserinfo .= ' server.elements.'.$key.'.value=client.elements.'.$key.'.value;'."\n";
+ }
+ $setuserinfo .= ' server.elements.type.value=client.elements.type.value;'."\n";
}
if ($captcha eq 'original') {
- $setuserinfo .= ' server.elements.code.value=client.elements.code.value;'."\n".
- ' server.elements.crypt.value=client.elements.crypt.value;'."\n";
+ $setuserinfo .= ' server.elements.code.value=client.elements.code.value;'."\n".
+ ' server.elements.crypt.value=client.elements.crypt.value;'."\n";
} elsif ($captcha eq 'recaptcha') {
- $setuserinfo .= ' server.elements.recaptcha_challenge_field.value=client.elements.recaptcha_challenge_field.value;'."\n".
- ' server.elements.recaptcha_response_field.value=client.elements.recaptcha_response_field.value;'."\n";
+ $setuserinfo .=
+ ' server.elements.recaptcha_challenge_field.value=client.elements.recaptcha_challenge_field.value;'."\n".
+ ' server.elements.recaptcha_response_field.value=client.elements.recaptcha_response_field.value;'."\n";
}
}
+ if (@required) {
+ my $missprompt = &mt('One or more required fields are currently blank.');
+ my $reqstr = join("','", at required);
+ $requiredchk = <<"ENDCHK";
+ var requiredfields = new Array('$reqstr');
+ missing = 0;
+ for (var i=0; i<requiredfields.length; i++) {
+ try {
+ eval("client.elements."+requiredfields[i]+".value");
+ }
+ catch(err) {
+ continue;
+ }
+ if (eval("client.elements."+requiredfields[i]+".value") == '') {
+ missing ++;
+ }
+ }
+ if (missing > 0) {
+ alert("$missprompt");
+ return false;
+ }
+
+ENDCHK
+ }
my $js = <<ENDSCRIPT;
<script type="text/javascript">
// <![CDATA[
@@ -346,6 +395,7 @@
server = document.forms[one];
if (document.forms[two]) {
client = document.forms[two];
+$requiredchk
server.elements.uname.value = client.elements.uname.value;
server.elements.udom.value = client.elements.udom.value;
@@ -359,7 +409,7 @@
client.elements.uname.value='';
client.elements.upass$now.value='';
if (context == 'email') {
- $setuserinfo
+$setuserinfo
client.elements.upasscheck$now.value='';
}
server.submit();
@@ -433,7 +483,8 @@
}
sub print_username_form {
- my ($r,$domain,$domdesc,$cancreate,$now,$lonhost,$include,$courseid,$gotlondes,$emailusername) = @_;
+ my ($r,$domain,$domdesc,$cancreate,$now,$lonhost,$include,$courseid,$gotlondes,$emailusername,
+ $usertype) = @_;
my %lt = &Apache::lonlocal::texthash (
unam => 'username',
udom => 'domain',
@@ -481,10 +532,9 @@
} else {
my $prompt = $lt{'plse'};
if (ref($emailusername) eq 'HASH') {
- foreach my $key (keys(%{$emailusername})) {
- if ($emailusername->{$key}) {
+ if (ref($emailusername->{$usertype}) eq 'HASH') {
+ if (keys(%{$emailusername->{$usertype}}) > 0) {
$prompt = $lt{'info'};
- last;
}
}
}
@@ -492,7 +542,8 @@
$lt{'yopw'}.'<br />';
}
$output .= &print_dataentry_form($r,$domain,$lonhost,$include,$now,$captchaform,
- $courseid,$gotlondes,$emailusername,$captcha);
+ $courseid,$gotlondes,$emailusername,$captcha,
+ $usertype);
}
$output .= '</div>';
}
@@ -558,7 +609,7 @@
sub process_email_request {
my ($useremail,$domain,$domdesc,$contact_name,$contact_email,$cancreate,
- $server,$settings,$emailusername,$courseid) = @_;
+ $server,$settings,$emailusername,$courseid,$usertype) = @_;
my $output;
if (ref($cancreate) eq 'ARRAY') {
if (!grep(/^email(|approval)$/,@{$cancreate})) {
@@ -612,7 +663,7 @@
}
}
$output = &send_token($domain,$useremail,$server,$domdesc,$contact_name,
- $contact_email,$courseid,$emailusername);
+ $contact_email,$courseid,$emailusername,$usertype);
}
return $output;
}
@@ -632,7 +683,8 @@
}
sub send_token {
- my ($domain,$email,$server,$domdesc,$contact_name,$contact_email,$courseid,$emailusername) = @_;
+ my ($domain,$email,$server,$domdesc,$contact_name,$contact_email,$courseid,$emailusername,
+ $usertype) = @_;
my $msg = '<h3>'.&mt('Account creation status').'</h3>'.
&mt('Thank you for your request to create a new LON-CAPA account.').
'<br /><br />';
@@ -660,9 +712,14 @@
'tmpinfo' => $tmpinfo);
if (ref($emailusername) eq 'HASH') {
- foreach my $item (keys(%{$emailusername})) {
- $info{$item} = $env{'form.'.$item};
- $info{$item} =~ s/(`)//g;
+ if (ref($emailusername->{$usertype}) eq 'HASH') {
+ foreach my $item (keys(%{$emailusername->{$usertype}})) {
+ $info{$item} = $env{'form.'.$item};
+ $info{$item} =~ s/(`)//g;
+ }
+ unless ($usertype eq 'default') {
+ $info{'inststatus'} = $usertype;
+ }
}
}
my $token = &Apache::lonnet::tmpput(\%info,$server,'createaccount');
@@ -789,7 +846,8 @@
# Stores token to store DES-key and stage during creation session
#
sub print_dataentry_form {
- my ($r,$domain,$lonhost,$include,$now,$captchaform,$courseid,$gotlondes,$emailusername,$captcha) = @_;
+ my ($r,$domain,$lonhost,$include,$now,$captchaform,$courseid,$gotlondes,$emailusername,$captcha,
+ $usertype) = @_;
my ($error,$output);
unless ($gotlondes) {
if (open(my $jsh,"<$include/londes.js")) {
@@ -797,7 +855,7 @@
$r->print($line);
}
close($jsh);
- $output = &javascript_setforms($now,$emailusername,$captcha)."\n";
+ $output = &javascript_setforms($now,$emailusername,$captcha,$usertype)."\n";
$gotlondes = 1;
}
}
@@ -813,8 +871,11 @@
$output .= '<input type="hidden" name="courseid" value="'.$courseid.'"/>'."\n";
}
if (ref($emailusername) eq 'HASH') {
- foreach my $field (sort(keys(%{$emailusername}))) {
- $output .= '<input type="hidden" name="'.$field.'" value="" />'."\n";
+ if (ref($emailusername->{$usertype}) eq 'HASH') {
+ foreach my $field (sort(keys(%{$emailusername->{$usertype}}))) {
+ $output .= '<input type="hidden" name="'.$field.'" value="" />'."\n";
+ }
+ $output .= '<input type="hidden" name="type" value="" />'."\n";
}
}
if ($captcha eq 'original') {
@@ -843,11 +904,12 @@
my $endclientform = '<input type="hidden" name="udom" value="'.$domain.'" />'."\n".
'<input type="hidden" name="lextkey" value="'.$lextkey.'" />'."\n".
'<input type="hidden" name="uextkey" value="'.$uextkey.'" />'."\n".
- '</form>';
+ '</form>'."\n".
+ '<p class="LC_info">'.&mt('Fields marked [_1]*[_2] are required.','<b>','</b>').'</p>';
my ($datatable,$rowcount) =
&Apache::loncreateuser::personal_data_display('',$domain,'email','selfcreate',
'','',$now,$captchaform,
- $emailusername);
+ $emailusername,$usertype);
if ($rowcount) {
$output .= '<div class="LC_left_float">'.$beginclientform.$datatable.$endclientform;
} else {
@@ -919,7 +981,7 @@
my $output;
if (ref($dataref) eq 'HASH') {
my ($username,$encpass,$serverid,$courseid,$id,$firstname,$middlename,$lastname,
- $generation);
+ $generation,$inststatus);
$username = $dataref->{'username'};
$encpass = $dataref->{'upass'};
$serverid = $dataref->{'serverid'};
@@ -929,6 +991,7 @@
$middlename = $dataref->{'middlename'};
$lastname = $dataref->{'lastname'};
$generation = $dataref->{'generation'};
+ $inststatus = $dataref->{'usertype'};
my $currhome = &Apache::lonnet::homeserver($username,$domain);
unless ($currhome eq 'no_host') {
@@ -967,6 +1030,9 @@
# Now that the user account exists, retrieve the homeserver, and include it in the output.
my $uhome = &Apache::lonnet::homeserver($username,$domain);
+ unless (($inststatus eq 'default') || ($inststatus eq '')) {
+ &Apache::lonnet::put('environment',{inststatus => $inststatus},$domain,$username);
+ }
$output .= '<br />'.&mt('Home server: [_1]',$uhome).' '.
&Apache::lonnet::hostname($uhome).'<br /><br />';
return ('ok',$output,$uhome);
Index: loncom/interface/loncoursequeueadmin.pm
diff -u loncom/interface/loncoursequeueadmin.pm:1.43 loncom/interface/loncoursequeueadmin.pm:1.44
--- loncom/interface/loncoursequeueadmin.pm:1.43 Wed Feb 12 20:47:40 2014
+++ loncom/interface/loncoursequeueadmin.pm Mon Mar 3 17:11:41 2014
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Utilities to administer domain course requests and course self-enroll requests
#
-# $Id: loncoursequeueadmin.pm,v 1.43 2014/02/12 20:47:40 raeburn Exp $
+# $Id: loncoursequeueadmin.pm,v 1.44 2014/03/03 17:11:41 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -876,7 +876,7 @@
if (ref($curr{$uname}) eq 'HASH') {
my ($username,$logtoken,$serverid,$encpass,$courseid,$id,$firstname,
- $middlename,$lastname,$generation);
+ $middlename,$lastname,$generation,$inststatus);
$curr{$uname}{'timestamp'} = $now;
$curr{$uname}{'adjudicator'} = $env{'user.name'}.':'.$env{'user.domain'};
$courseid = $curr{$uname}{'courseid'};
@@ -885,6 +885,7 @@
$middlename = $curr{$uname}{'middlename'};
$lastname = $curr{$uname}{'lastname'};
$generation = $curr{$uname}{'generation'};
+ $inststatus = $curr{$uname}{'usertype'};
my ($key,$caller)=split(/&/,$curr{$uname}{'tmpinfo'});
if ($caller eq 'createaccount') {
@@ -901,6 +902,9 @@
if ($uhome eq 'no_host') {
push(@warn_approves,$uname);
} else {
+ unless (($inststatus eq 'default') || ($inststatus eq '')) {
+ &Apache::lonnet::put('environment',{inststatus => $inststatus},$cdom,$uname);
+ }
&send_selfserve_notification($uname.':'.$cdom,
$approvedmsg,undef,undef,$now,
$beneficiary,$sender);
Index: loncom/interface/loncreateuser.pm
diff -u loncom/interface/loncreateuser.pm:1.395 loncom/interface/loncreateuser.pm:1.396
--- loncom/interface/loncreateuser.pm:1.395 Fri Feb 28 19:20:06 2014
+++ loncom/interface/loncreateuser.pm Mon Mar 3 17:11:41 2014
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Create a user
#
-# $Id: loncreateuser.pm,v 1.395 2014/02/28 19:20:06 bisitz Exp $
+# $Id: loncreateuser.pm,v 1.396 2014/03/03 17:11:41 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -2164,7 +2164,7 @@
sub personal_data_display {
my ($ccuname,$ccdomain,$newuser,$context,$inst_results,$rolesarray,
- $now,$captchaform,$emailusername) = @_;
+ $now,$captchaform,$emailusername,$usertype) = @_;
my ($output,%userenv,%canmodify,%canmodify_status);
my @userinfo = ('firstname','middlename','lastname','generation',
'permanentemail','id');
@@ -2206,19 +2206,24 @@
\@userinfo,$rolesarray);
} elsif ($context eq 'selfcreate') {
if ($newuser eq 'email') {
- if (ref($emailusername) eq 'HASH') {
- my ($infofields,$infotitles) = &Apache::loncommon::emailusername_info();
- @userinfo = ();
- if ((ref($infofields) eq 'ARRAY') && (ref($infotitles) eq 'HASH')) {
- foreach my $field (@{$infofields}) {
- if ($emailusername->{$field}) {
- push(@userinfo,$field);
- $canmodify{$field} = 1;
- unless ($textboxsize{$field}) {
- $textboxsize{$field} = 25;
- }
- unless ($lt{$field}) {
- $lt{$field} = $infotitles->{$field};
+ if (ref($emailusername) eq 'HASH') {
+ if (ref($emailusername->{$usertype}) eq 'HASH') {
+ my ($infofields,$infotitles) = &Apache::loncommon::emailusername_info();
+ @userinfo = ();
+ if ((ref($infofields) eq 'ARRAY') && (ref($infotitles) eq 'HASH')) {
+ foreach my $field (@{$infofields}) {
+ if ($emailusername->{$usertype}->{$field}) {
+ push(@userinfo,$field);
+ $canmodify{$field} = 1;
+ unless ($textboxsize{$field}) {
+ $textboxsize{$field} = 25;
+ }
+ unless ($lt{$field}) {
+ $lt{$field} = $infotitles->{$field};
+ }
+ if ($emailusername->{$usertype}->{$field} eq 'required') {
+ $lt{$field} .= '<b>*</b>';
+ }
}
}
}
@@ -2234,19 +2239,19 @@
$output = '<h3>'.$lt{'pd'}.'</h3>'.
&Apache::lonhtmlcommon::start_pick_box();
if (($context eq 'selfcreate') && ($newuser eq 'email')) {
- $output .= &Apache::lonhtmlcommon::row_title($lt{'email'},undef,
+ $output .= &Apache::lonhtmlcommon::row_title($lt{'email'}.'<b>*</b>',undef,
'LC_oddrow_value')."\n".
'<input type="text" name="uname" size="25" value="" autocomplete="off" />';
$rowcount ++;
$output .= &Apache::lonhtmlcommon::row_closure(1);
my $upassone = '<input type="password" name="upass'.$now.'" size="10" autocomplete="off" />';
my $upasstwo = '<input type="password" name="upasscheck'.$now.'" size="10" autocomplete="off" />';
- $output .= &Apache::lonhtmlcommon::row_title(&mt('Password'),
+ $output .= &Apache::lonhtmlcommon::row_title(&mt('Password').'<b>*</b>',
'LC_pick_box_title',
'LC_oddrow_value')."\n".
$upassone."\n".
&Apache::lonhtmlcommon::row_closure(1)."\n".
- &Apache::lonhtmlcommon::row_title(&mt('Confirm password'),
+ &Apache::lonhtmlcommon::row_title(&mt('Confirm password').'<b>*</b>',
'LC_pick_box_title',
'LC_oddrow_value')."\n".
$upasstwo.
@@ -2360,6 +2365,7 @@
$output .= &Apache::lonhtmlcommon::row_title()."\n".
'<br /><input type="submit" name="createaccount" value="'.
$submit_text.'" />'.
+ '<input type="hidden" name="type" value="'.$usertype.'" />'.
&Apache::lonhtmlcommon::row_closure(1);
}
$output .= &Apache::lonhtmlcommon::end_pick_box();
@@ -4816,26 +4822,47 @@
if (ref($domconfig{'usercreation'}) eq 'HASH') {
if (ref($domconfig{'usercreation'}{'cancreate'}) eq 'HASH') {
if (ref($domconfig{'usercreation'}{'cancreate'}{'emailusername'}) eq 'HASH') {
- my $count = scalar(keys(%{$domconfig{'usercreation'}{'cancreate'}{'emailusername'}}));
my %info =
&Apache::lonnet::get('nohist_requestedusernames',[$uname],$dom,$domconfiguser);
if (ref($info{$uname}) eq 'HASH') {
- if ((ref($infofields) eq 'ARRAY') && (ref($infotitles) eq 'HASH')) {
- $r->print('<div>'.&Apache::lonhtmlcommon::start_pick_box());
- my $num;
- foreach my $field (@{$infofields}) {
- next unless ($domconfig{'usercreation'}{'cancreate'}{'emailusername'}{$field});
- next unless ($infotitles->{$field});
- $r->print(&Apache::lonhtmlcommon::row_title($infotitles->{$field}).
- $info{$uname}{$field});
- $num ++;
- if ($count == $num) {
- $r->print(&Apache::lonhtmlcommon::row_closure(1));
- } else {
- $r->print(&Apache::lonhtmlcommon::row_closure());
+ my $usertype = $info{$uname}{'inststatus'};
+ unless ($usertype) {
+ $usertype = 'default';
+ }
+ if (ref($domconfig{'usercreation'}{'cancreate'}{'emailusername'}{$usertype}) eq 'HASH') {
+ if ((ref($infofields) eq 'ARRAY') && (ref($infotitles) eq 'HASH')) {
+ $r->print('<div>'.&Apache::lonhtmlcommon::start_pick_box());
+ my ($num,$count,$showstatus);
+ $count = scalar(keys(%{$domconfig{'usercreation'}{'cancreate'}{'emailusername'}{$usertype}}));
+ unless ($usertype eq 'default') {
+ my ($othertitle,$usertypes,$types) =
+ &Apache::loncommon::sorted_inst_types($dom);
+ if (ref($usertypes) eq 'HASH') {
+ if ($usertypes->{$usertype}) {
+ $showstatus = $usertypes->{$usertype};
+ $count ++;
+ }
+ }
+ }
+ foreach my $field (@{$infofields}) {
+ next unless ($domconfig{'usercreation'}{'cancreate'}{'emailusername'}{$usertype}{$field});
+ next unless ($infotitles->{$field});
+ $r->print(&Apache::lonhtmlcommon::row_title($infotitles->{$field}).
+ $info{$uname}{$field});
+ $num ++;
+ if ($count == $num) {
+ $r->print(&Apache::lonhtmlcommon::row_closure(1));
+ } else {
+ $r->print(&Apache::lonhtmlcommon::row_closure());
+ }
+ }
+ if ($showstatus) {
+ $r->print(&Apache::lonhtmlcommon::row_title(&mt('Status type (self-reported)')).
+ $showstatus.
+ &Apache::lonhtmlcommon::row_closure(1));
}
+ $r->print(&Apache::lonhtmlcommon::end_pick_box().'</div>');
}
- $r->print(&Apache::lonhtmlcommon::end_pick_box().'</div>');
}
}
}
Index: loncom/interface/domainprefs.pm
diff -u loncom/interface/domainprefs.pm:1.227 loncom/interface/domainprefs.pm:1.228
--- loncom/interface/domainprefs.pm:1.227 Fri Feb 28 19:20:05 2014
+++ loncom/interface/domainprefs.pm Mon Mar 3 17:11:42 2014
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set domain-wide configuration settings
#
-# $Id: domainprefs.pm,v 1.227 2014/02/28 19:20:05 bisitz Exp $
+# $Id: domainprefs.pm,v 1.228 2014/03/03 17:11:42 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -3796,7 +3796,6 @@
}
}
my %radiohash;
- my $rownum = 0;
my $numinrow = 4;
map { $radiohash{'cancreate_'.$_} = 1; } @selfcreate;
if ($position eq 'top') {
@@ -3809,18 +3808,18 @@
'cancreate_login' => 'off',
'cancreate_sso' => 'off',
);
- my $itemcount = 1;
- my $onclick;
+ my ($onclick,$itemcount);
($datatable,$itemcount) = &radiobutton_prefs(\%radiohash,\@toggles,\%defaultchecked,
\%choices,$itemcount,$onclick);
+ $$rowtotal += $itemcount;
+
my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
if (ref($usertypes) eq 'HASH') {
if (keys(%{$usertypes}) > 0) {
$datatable .= &insttypes_row($createsettings,$types,$usertypes,
$dom,$numinrow,$othertitle,
- 'statustocreate',$rownum);
- $rownum ++;
+ 'statustocreate',$$rowtotal);
$$rowtotal ++;
}
}
@@ -3832,14 +3831,13 @@
push(@{$types},'default');
$usertypes->{'default'} = $othertitle;
foreach my $status (@{$types}) {
- $rownum ++;
$datatable .= &modifiable_userdata_row('selfcreate',$status,$domconf{'usermodification'},
- $numinrow,$rownum,$usertypes);
+ $numinrow,$$rowtotal,$usertypes);
$$rowtotal ++;
}
}
} else {
- my $css_class = $rownum%2?' class="LC_odd_row"':'';
+ my $css_class = $$rowtotal%2?' class="LC_odd_row"':'';
my %choices =
&Apache::lonlocal::texthash(
email => 'Approved automatically',
@@ -3871,27 +3869,32 @@
$choices{$option}.'</label> ';
}
$$rowtotal ++;
- $rownum ++;
$datatable .= '</span></td></tr>'.
&print_requestmail($dom,'selfcreation',$createsettings,$rowtotal);
- $rownum ++;
- my ($infofields,$infotitles) = &Apache::loncommon::emailusername_info();
- $numinrow = 2;
- $datatable .= &modifiable_userdata_row('cancreate','emailusername',$settings,
- $numinrow,$rownum,undef,$infofields,$infotitles);
$$rowtotal ++;
- $rownum ++;
+ my ($infofields,$infotitles) = &Apache::loncommon::emailusername_info();
+ $numinrow = 1;
+ my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
+ $usertypes->{'default'} = $othertitle;
+ if (ref($types) eq 'ARRAY') {
+ push(@{$types},'default');
+ $usertypes->{'default'} = $othertitle;
+ foreach my $status (@{$types}) {
+ $datatable .= &modifiable_userdata_row('cancreate','emailusername_'.$status,$settings,
+ $numinrow,$$rowtotal,$usertypes,$infofields,$infotitles);
+ $$rowtotal ++;
+ }
+ }
my ($emailrules,$emailruleorder) =
&Apache::lonnet::inst_userrules($dom,'email');
if (ref($emailrules) eq 'HASH') {
if (keys(%{$emailrules}) > 0) {
$datatable .= &user_formats_row('email',$settings,$emailrules,
- $emailruleorder,$numinrow,$rownum);
- $rownum ++;
+ $emailruleorder,$numinrow,$$rowtotal);
$$rowtotal ++;
}
}
- $datatable .= &captcha_choice('cancreate',$createsettings,$rownum);
+ $datatable .= &captcha_choice('cancreate',$createsettings,$$rowtotal);
}
return $datatable;
}
@@ -4857,11 +4860,20 @@
}
sub modifiable_userdata_row {
- my ($context,$role,$settings,$numinrow,$rowcount,$usertypes,$fieldsref,$titlesref) = @_;
- my $rolename;
+ my ($context,$item,$settings,$numinrow,$rowcount,$usertypes,$fieldsref,$titlesref) = @_;
+ my ($role,$rolename,$statustype);
+ $role = $item;
if ($context eq 'cancreate') {
- if ($role eq 'emailusername') {
- $rolename = &mt('Data user provides');
+ if ($item =~ /^emailusername_(.+)$/) {
+ $statustype = $1;
+ $role = 'emailusername';
+ if (ref($usertypes) eq 'HASH') {
+ if ($usertypes->{$statustype}) {
+ $rolename = &mt('Data provided by [_1]',$usertypes->{$statustype});
+ } else {
+ $rolename = &mt('Data provided by user');
+ }
+ }
}
} elsif ($context eq 'selfcreate') {
if (ref($usertypes) eq 'HASH') {
@@ -4898,14 +4910,33 @@
if (ref($settings) eq 'HASH') {
if (ref($settings->{$context}) eq 'HASH') {
if (ref($settings->{$context}->{$role}) eq 'HASH') {
- foreach my $field (@fields) {
- if ($settings->{$context}->{$role}->{$field}) {
- $checks{$field} = ' checked="checked" ';
+ my $hashref = $settings->{$context}->{$role};
+ if ($role eq 'emailusername') {
+ if ($statustype) {
+ if (ref($settings->{$context}->{$role}->{$statustype}) eq 'HASH') {
+ $hashref = $settings->{$context}->{$role}->{$statustype};
+ if (ref($hashref) eq 'HASH') {
+ foreach my $field (@fields) {
+ if ($hashref->{$field}) {
+ $checks{$field} = $hashref->{$field};
+ }
+ }
+ }
+ }
+ }
+ } else {
+ if (ref($hashref) eq 'HASH') {
+ foreach my $field (@fields) {
+ if ($hashref->{$field}) {
+ $checks{$field} = ' checked="checked" ';
+ }
+ }
}
}
}
}
}
+
for (my $i=0; $i<@fields; $i++) {
my $rem = $i%($numinrow);
if ($rem == 0) {
@@ -4915,20 +4946,40 @@
$output .= '<tr>';
}
my $check = ' ';
- if (exists($checks{$fields[$i]})) {
- $check = $checks{$fields[$i]}
- } else {
- if ($role eq 'st') {
- if (ref($settings) ne 'HASH') {
- $check = ' checked="checked" ';
+ unless ($role eq 'emailusername') {
+ if (exists($checks{$fields[$i]})) {
+ $check = $checks{$fields[$i]}
+ } else {
+ if ($role eq 'st') {
+ if (ref($settings) ne 'HASH') {
+ $check = ' checked="checked" ';
+ }
}
}
}
$output .= '<td class="LC_left_item">'.
- '<span class="LC_nobreak"><label>'.
- '<input type="checkbox" name="canmodify_'.$role.'" '.
- 'value="'.$fields[$i].'"'.$check.'/>'.$fieldtitles{$fields[$i]}.
- '</label></span></td>';
+ '<span class="LC_nobreak">';
+ if ($role eq 'emailusername') {
+ unless ($checks{$fields[$i]} =~ /^(required|optional)$/) {
+ $checks{$fields[$i]} = 'omit';
+ }
+ foreach my $option ('required','optional','omit') {
+ my $checked='';
+ if ($checks{$fields[$i]} eq $option) {
+ $checked='checked="checked" ';
+ }
+ $output .= '<label>'.
+ '<input type="radio" name="canmodify_'.$item.'_'.$fields[$i].'" value="'.$option.'" '.$checked.'/>'.
+ &mt($option).'</label>'.(' ' x2);
+ }
+ $output .= '<i>'.$fieldtitles{$fields[$i]}.'</i>';
+ } else {
+ $output .= '<label>'.
+ '<input type="checkbox" name="canmodify_'.$role.'" '.
+ 'value="'.$fields[$i].'"'.$check.'/>'.$fieldtitles{$fields[$i]}.
+ '</label>';
+ }
+ $output .= '</span></td>';
$rem = @fields%($numinrow);
}
my $colsleft = $numinrow - $rem;
@@ -7661,6 +7712,11 @@
my ($dom,%domconfig) = @_;
my ($resulttext,$warningmsg,%curr_usercreation,%curr_usermodify,%changes,%cancreate);
my (%save_usercreate,%save_usermodify);
+ my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
+ if (ref($types) eq 'ARRAY') {
+ $usertypes->{'default'} = $othertitle;
+ push(@{$types},'default');
+ }
#
# Retrieve current domain configuration for self-creation of usernames from $domconfig{'usercreation'}.
#
@@ -7712,7 +7768,7 @@
# Populate $cancreate{'selfcreate'} array reference with types of user, for which self-creation of user accounts
# is permitted.
#
- foreach my $item ('login','sso','email') {
+ foreach my $item ('login','sso','email') {
if ($item eq 'email') {
if ($env{'form.cancreate_email'} eq 'email') {
push(@{$cancreate{'selfcreate'}},'email');
@@ -7728,20 +7784,22 @@
my (@email_rule,%userinfo,%savecaptcha);
my ($infofields,$infotitles) = &Apache::loncommon::emailusername_info();
#
-# Populate $cancreate{'emailusername'} hash ref with information types (if new user will provide data
-# value set to one), if self-creation with e-mail address permitted.
+# Populate $cancreate{'emailusername'}{$type} hash ref with information fields (if new user will provide data
+# value set to one), if self-creation with e-mail address permitted, where $type is user type: faculty, staff, student etc.
#
if (($env{'form.cancreate_email'} eq 'email') || ($env{'form.cancreate_email'} eq 'emailapproval')) {
- push(@contexts,'emailusername');
- map { $userinfo{$_} = 1; } &Apache::loncommon::get_env_multiple('form.canmodify_emailusername');
- if (ref($infofields) eq 'ARRAY') {
- foreach my $field (@{$infofields}) {
- if ($userinfo{$field}) {
- $cancreate{'emailusername'}{$field} = 1;
+ push(@contexts,'emailusername');
+ if (ref($types) eq 'ARRAY') {
+ foreach my $type (@{$types}) {
+ if (ref($infofields) eq 'ARRAY') {
+ foreach my $field (@{$infofields}) {
+ if ($env{'form.canmodify_emailusername_'.$type.'_'.$field} =~ /^(required|optional)$/) {
+ $cancreate{'emailusername'}{$type}{$field} = $1;
+ }
+ }
}
}
}
-
#
# Populate $cancreate{'notify'} hash ref with names of Domain Coordinators who are to be notified of
# queued requests for self-creation of account using e-mail address as username
@@ -7800,7 +7858,6 @@
&mt('You need to set the default authentication type to Kerberos 4 or 5 (with a Kerberos domain specified), or to Local authentication, if the localauth module has been customized in your domain to authenticate institutional logins.');
}
}
- my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
my @fields = ('lastname','firstname','middlename','generation',
'permanentemail','id');
my %fieldtitles = &Apache::loncommon::personal_data_fieldtitles();
@@ -7813,14 +7870,12 @@
#
if (($env{'form.cancreate_login'}) || ($env{'form.cancreate_sso'})) {
if (ref($types) eq 'ARRAY') {
- if (@{$types} > 0) {
+ if (@{$types} > 1) {
@{$cancreate{'statustocreate'}} = &Apache::loncommon::get_env_multiple('form.statustocreate');
push(@contexts,'statustocreate');
} else {
undef($cancreate{'statustocreate'});
}
- push(@{$types},'default');
- $usertypes->{'default'} = $othertitle;
foreach my $type (@{$types}) {
my @modifiable = &Apache::loncommon::get_env_multiple('form.canmodify_'.$type);
foreach my $field (@fields) {
@@ -7873,16 +7928,42 @@
} elsif (ref($curr_usercreation{'cancreate'}{$item}) eq 'HASH') {
if (ref($cancreate{$item}) eq 'HASH') {
foreach my $curr (keys(%{$curr_usercreation{'cancreate'}{$item}})) {
- if (!$cancreate{$item}{$curr}) {
- if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
- push(@{$changes{'cancreate'}},$item);
+ if (ref($curr_usercreation{'cancreate'}{$item}{$curr}) eq 'HASH') {
+ foreach my $field (keys(%{$curr_usercreation{'cancreate'}{$item}{$curr}})) {
+ unless ($curr_usercreation{'cancreate'}{$item}{$curr}{$field} eq $cancreate{$item}{$curr}{$field}) {
+ if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+ push(@{$changes{'cancreate'}},$item);
+ }
+ }
+ }
+ } else {
+ if (!$cancreate{$item}{$curr}) {
+ if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+ push(@{$changes{'cancreate'}},$item);
+ }
}
}
}
foreach my $field (keys(%{$cancreate{$item}})) {
- if (!$curr_usercreation{'cancreate'}{$item}{$field}) {
- if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
- push(@{$changes{'cancreate'}},$item);
+ if (ref($cancreate{$item}{$field}) eq 'HASH') {
+ foreach my $inner (keys(%{$cancreate{$item}{$field}})) {
+ if (ref($curr_usercreation{'cancreate'}{$item}{$field}) eq 'HASH') {
+ unless ($curr_usercreation{'cancreate'}{$item}{$field}{$inner} eq $cancreate{$item}{$field}{$inner}) {
+ if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+ push(@{$changes{'cancreate'}},$item);
+ }
+ }
+ } else {
+ if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+ push(@{$changes{'cancreate'}},$item);
+ }
+ }
+ }
+ } else {
+ if (!$curr_usercreation{'cancreate'}{$item}{$field}) {
+ if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+ push(@{$changes{'cancreate'}},$item);
+ }
}
}
}
@@ -7902,8 +7983,19 @@
}
}
} elsif ($item eq 'emailusername') {
- if (keys(%userinfo) > 0) {
- push(@{$changes{'cancreate'}},$item);
+ if (ref($cancreate{$item}) eq 'HASH') {
+ foreach my $type (keys(%{$cancreate{$item}})) {
+ if (ref($cancreate{$item}{$type}) eq 'HASH') {
+ foreach my $field (keys(%{$cancreate{$item}{$type}})) {
+ if ($cancreate{$item}{$type}{$field}) {
+ if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+ push(@{$changes{'cancreate'}},$item);
+ }
+ last;
+ }
+ }
+ }
+ }
}
}
}
@@ -8033,17 +8125,23 @@
$chgtext .= '</ul>';
} elsif ($type eq 'emailusername') {
if (ref($cancreate{'emailusername'}) eq 'HASH') {
- if (keys(%{$cancreate{'emailusername'}}) > 0) {
- $chgtext .= &mt('When self-creating account with e-mail as username, user will provide the following information:').
- '<ul>';
- foreach my $field (@{$infofields}) {
- if ($cancreate{'emailusername'}{$field}) {
- $chgtext .= '<li>'.$infotitles->{$field}.'</li>';
+ if (ref($types) eq 'ARRAY') {
+ foreach my $type (@{$types}) {
+ if (ref($cancreate{'emailusername'}{$type}) eq 'HASH') {
+ if (keys(%{$cancreate{'emailusername'}{$type}}) > 0) {
+ $chgtext .= &mt('When self-creating account with e-mail as username, the following information will be provided by [_1]:',$usertypes->{$type}).
+ '<ul>';
+ foreach my $field (@{$infofields}) {
+ if ($cancreate{'emailusername'}{$type}{$field}) {
+ $chgtext .= '<li>'.$infotitles->{$field}.'</li>';
+ }
+ }
+ }
+ $chgtext .= '</ul>';
+ } else {
+ $chgtext .= &mt('When self creating account with e-mail as username, no information besides e-mail address will be provided by [_1].',$usertypes->{$type}).'<br />';
}
}
- $chgtext .= '</ul>';
- } else {
- $chgtext .= &mt('When self creating account with e-mail as username, user will not provide any information besides e-mail address');
}
}
} elsif ($type eq 'notify') {
More information about the LON-CAPA-cvs
mailing list