[LON-CAPA-cvs] cvs: loncom(GCI_3) /interface lonuserutils.pm
raeburn
raeburn@source.lon-capa.org
Mon, 20 Sep 2010 00:26:45 -0000
This is a MIME encoded message
--raeburn1284942405
Content-Type: text/plain
raeburn Mon Sep 20 00:26:45 2010 EDT
Modified files: (Branch: GCI_3)
/loncom/interface lonuserutils.pm
Log:
- Customization for GCI_3.
- Backport 1.123, 1.124, 1.125.
- Simplify user interface when file upload of roster used during course creation.
- Enforce requirement that all usernames are e-mail addresses when creating new users.
- Eliminate case sensitivity - new users all lower case.
--raeburn1284942405
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20100920002645.txt"
Index: loncom/interface/lonuserutils.pm
diff -u loncom/interface/lonuserutils.pm:1.109.2.4 loncom/interface/lonuserutils.pm:1.109.2.5
--- loncom/interface/lonuserutils.pm:1.109.2.4 Tue Aug 10 04:00:16 2010
+++ loncom/interface/lonuserutils.pm Mon Sep 20 00:26:44 2010
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Utility functions for managing LON-CAPA user accounts
#
-# $Id: lonuserutils.pm,v 1.109.2.4 2010/08/10 04:00:16 raeburn Exp $
+# $Id: lonuserutils.pm,v 1.109.2.5 2010/09/20 00:26:44 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -296,7 +296,8 @@
}
sub print_upload_manager_header {
- my ($r,$datatoken,$distotal,$krbdefdom,$context,$permission,$crstype)=@_;
+ my ($r,$datatoken,$distotal,$krbdefdom,$context,$permission,$crstype,$formname,
+ $can_assign)=@_;
my $javascript;
#
if (! exists($env{'form.upfile_associate'})) {
@@ -310,9 +311,9 @@
}
}
if ($env{'form.upfile_associate'} eq 'reverse') {
- $javascript=&upload_manager_javascript_reverse_associate();
+ $javascript=&upload_manager_javascript_reverse_associate($can_assign);
} else {
- $javascript=&upload_manager_javascript_forward_associate();
+ $javascript=&upload_manager_javascript_forward_associate($can_assign);
}
#
# Deal with restored settings
@@ -326,9 +327,32 @@
$password_choice = 'int';
}
#
- my $groupslist;
+ my ($sectionjs,$groupslist);
if ($context eq 'course') {
$groupslist = &get_groupslist();
+ if ($env{'form.caller'} eq 'requestcrs') {
+ $sectionjs = <<"ENDJS";
+
+function toggleSectionsDefault() {
+ var usingsecs;
+ if (document.$formname.usesection.length > 1) {
+ for (var i=0; i<document.$formname.usesection.length; i++) {
+ if (document.$formname.usesection[i].checked) {
+ usingsecs = document.$formname.usesection[i].value;
+ }
+ }
+ }
+ if (usingsecs == 1) {
+ document.getElementById('defaultsec').style.display="block";
+ } else {
+ document.getElementById('defaultsec').style.display="none";
+ document.$formname.newsec.value = "";
+ document.$formname.sections.value = "";
+ }
+ return;
+}
+ENDJS
+ }
}
my $javascript_validations =
&javascript_validations('upload',$krbdefdom,$password_choice,undef,
@@ -341,14 +365,17 @@
."</p>\n");
$r->print('<div class="LC_left_float"><h3>'.
&mt('Identify fields in uploaded list')."</h3>\n");
- $r->print(&mt('Enter as many fields as you can.<br /> The system will inform you and bring you back to this page, <br /> if the data selected are insufficient to add users.')."<br />\n");
+ $r->print(&mt('Enter as many fields as you can.').'<br />'.
+ &mt('The system will inform you and bring you back to this page,').
+ '<br />'.&mt('if the data selected are insufficient to add users.')."<br />\n");
$r->print(&hidden_input('action','upload').
&hidden_input('state','got_file').
&hidden_input('associate','').
&hidden_input('datatoken',$datatoken).
&hidden_input('fileupload',$env{'form.fileupload'}).
&hidden_input('upfiletype',$env{'form.upfiletype'}).
- &hidden_input('upfile_associate',$env{'form.upfile_associate'}));
+ &hidden_input('upfile_associate',$env{'form.upfile_associate'}).
+ &hidden_input('caller',$env{'form.caller'}));
$r->print('<br /><label><input type="checkbox" name="noFirstLine"'.$checked.' />'.
&mt('Ignore First Line').'</label><br />');
$r->print('<br /><input type="button" value="'.&mt('Reverse Association').'" '.
@@ -357,7 +384,7 @@
$r->print("<br /><br />\n".
'<script type="text/javascript" language="Javascript">'."\n".
'// <![CDATA['."\n".
- $javascript."\n".$javascript_validations."\n".
+ $javascript."\n".$javascript_validations."\n".$sectionjs."\n".
'// ]]>'."\n".
'</script>');
}
@@ -388,9 +415,13 @@
if ($context eq 'course') {
if ($env{'request.course.sec'} eq '') {
$setsection_call = 'setSections(document.'.$param{'formname'}.",'$crstype'".');';
- $setsections_js =
- &setsections_javascript($param{'formname'},$groupslist,
- $mode,'',$crstype);
+ if ($env{'form.caller'} eq 'requestcrs') {
+ $setsections_js = &newsections_javascript($param{'formname'});
+ } else {
+ $setsections_js =
+ &setsections_javascript($param{'formname'},$groupslist,
+ $mode,'',$crstype);
+ }
} else {
$setsection_call = "'ok'";
}
@@ -518,7 +549,9 @@
END
} else {
$section_checks = §ion_check_js();
- $optional_checks = (<<END);
+
+ unless ($env{'form.caller'} eq 'requestcrs') {
+ $optional_checks = (<<END);
var message='';
if (foundname==0) {
message='$alert{'name'}';
@@ -553,6 +586,7 @@
message+='$alert{'domain'}';
}
END
+ }
if (($mode eq 'upload') && ($context eq 'domain')) {
$optional_checks .= (<<END);
@@ -564,7 +598,14 @@
}
END
}
- $optional_checks .= (<<END);
+ if ($env{'form.caller'} eq 'requestcrs') {
+ $optional_checks .= (<<END);
+ vf.state.value='enrolling';
+ $finish
+}
+END
+ } else {
+ $optional_checks .= (<<END);
if (message!='') {
message+= '\\n$alert{'continue'}';
@@ -578,6 +619,7 @@
}
}
END
+ }
}
my $result = $function_name.$auth_checks.$optional_checks."\n".
$section_checks.$authheader;
@@ -586,6 +628,31 @@
###############################################################
###############################################################
sub upload_manager_javascript_forward_associate {
+ my ($can_assign) = @_;
+ my $auth_update;
+ if (ref($can_assign) eq 'HASH') {
+ if (keys(%{$can_assign}) > 1) {
+ $auth_update = <<"END";
+ // If we set the password, make the password form below correspond to
+ // the new value.
+ if (nw==9) {
+ changed_radio('int',document.studentform);
+ set_auth_radio_buttons('int',document.studentform);
+END
+ }
+ if ($can_assign->{'krb'}) {
+ $auth_update .= " vf.krbarg.value='';\n";
+ }
+ if ($can_assign->{'int'}) {
+ $auth_update .= " vf.intarg.value='';\n";
+ }
+ if ($can_assign->{'loc'}) {
+ $auth_update .= " vf.locarg.value='';\n";
+ }
+ $auth_update .= "
+ }\n";
+ }
+
return(<<ENDPICK);
function verify(vf,sec_caller) {
var founduname=0;
@@ -662,15 +729,7 @@
}
}
}
- // If we set the password, make the password form below correspond to
- // the new value.
- if (nw==9) {
- changed_radio('int',document.studentform);
- set_auth_radio_buttons('int',document.studentform);
- vf.intarg.value='';
- vf.krbarg.value='';
- vf.locarg.value='';
- }
+ $auth_update
}
function clearpwd(vf) {
@@ -688,6 +747,29 @@
###############################################################
###############################################################
sub upload_manager_javascript_reverse_associate {
+ my ($can_assign) = @_;
+ my $auth_update;
+ if (ref($can_assign) eq 'HASH') {
+ if (keys(%{$can_assign}) > 1) {
+ $auth_update = <<"END";
+ // initial password specified, pick internal authentication
+ if (tf==8 && nw!=0) {
+ changed_radio('int',document.studentform);
+ set_auth_radio_buttons('int',document.studentform);
+END
+ }
+ if ($can_assign->{'krb'}) {
+ $auth_update .= " vf.krbarg.value='';\n";
+ }
+ if ($can_assign->{'int'}) {
+ $auth_update .= " vf.intarg.value='';\n";
+ }
+ if ($can_assign->{'loc'}) {
+ $auth_update .= " vf.locarg.value='';\n";
+ }
+ $auth_update .= "
+ }\n";
+ }
return(<<ENDPICK);
function verify(vf,sec_caller) {
var founduname=0;
@@ -727,14 +809,7 @@
if ((tf>=2) && (tf<=5) && (nw!=0)) {
eval('vf.f1.selectedIndex=0;')
}
- // intial password specified, pick internal authentication
- if (tf==8 && nw!=0) {
- changed_radio('int',document.studentform);
- set_auth_radio_buttons('int',document.studentform);
- vf.krbarg.value='';
- vf.intarg.value='';
- vf.locarg.value='';
- }
+ $auth_update
}
function clearpwd(vf) {
@@ -763,6 +838,9 @@
$env{'form.ipwd_choice'} ne '') {
$param{'curr_authtype'} = 'int';
}
+ if ($env{'form.caller'} eq 'requestcrs') {
+ $param{'caller'} = $env{'form.caller'};
+ }
my $krbform = &Apache::loncommon::authform_kerberos(%param);
my $intform = &Apache::loncommon::authform_internal(%param);
my $locform = &Apache::loncommon::authform_local(%param);
@@ -775,8 +853,11 @@
$Str .= '<h3>'.&mt('Options').'</h3>'
.&Apache::lonhtmlcommon::start_pick_box();
-
- $Str .= &Apache::lonhtmlcommon::row_title(&mt('Login Type'));
+ if ($env{'form.caller'} eq 'requestcrs') {
+ $Str .= &Apache::lonhtmlcommon::row_title(&mt('Default password'));
+ } else {
+ $Str .= &Apache::lonhtmlcommon::row_title(&mt('Login Type'));
+ }
if ($context eq 'domain') {
$Str .= '<p>'
.&mt('Change authentication for existing users in domain "[_1]" to these settings?'
@@ -790,12 +871,17 @@
.'</span></p>';
} else {
$Str .= '<p class="LC_info">'."\n".
- &mt('This will not take effect if the user already exists.').
- &Apache::loncommon::help_open_topic('Auth_Options').
- "</p>\n";
+ &mt('This will not take effect if the user already exists.');
+ my ($authnum,%can_assign) = &Apache::loncommon::get_assignable_auth($defdom);
+ if ($authnum > 1) {
+ $Str .= &Apache::loncommon::help_open_topic('Auth_Options');
+ }
+ $Str .= "</p>\n";
}
$Str .= &set_login($defdom,$krbform,$intform,$locform);
-
+ if ($env{'form.caller'} eq 'requestcrs') {
+ $Str .= '<input type="hidden" name="defaultdomain" value="gcitest" />';
+ }
my ($home_server_pick,$numlib) =
&Apache::loncommon::home_server_form_item($defdom,'lcserver',
'default','hide');
@@ -811,14 +897,14 @@
&Apache::lonhtmlcommon::row_closure();
}
- $Str .= &Apache::lonhtmlcommon::row_title(&mt('Default domain'))
- .&Apache::loncommon::select_dom_form($defdom,'defaultdomain',undef,1)
- .&Apache::lonhtmlcommon::row_closure();
-
- $Str .= &Apache::lonhtmlcommon::row_title(&mt('Starting and Ending Dates'))
- ."<p>\n".$date_table."</p>\n"
- .&Apache::lonhtmlcommon::row_closure();
-
+ unless ($env{'form.caller'} eq 'requestcrs') {
+ $Str .= &Apache::lonhtmlcommon::row_title(&mt('Default domain'))
+ .&Apache::loncommon::select_dom_form($defdom,'defaultdomain',undef,1)
+ .&Apache::lonhtmlcommon::row_closure()
+ .&Apache::lonhtmlcommon::row_title(&mt('Starting and Ending Dates'))
+ ."<p>\n".$date_table."</p>\n"
+ .&Apache::lonhtmlcommon::row_closure();
+ }
if ($context eq 'domain') {
$Str .= &Apache::lonhtmlcommon::row_title(
&mt('Settings for assigning roles'))
@@ -838,9 +924,22 @@
&mt('Default role'))
.&mt('Choose the role to assign to users without a value specified in the uploaded file.')
} elsif ($context eq 'course') {
- $Str .= &Apache::lonhtmlcommon::row_title(
+ if ($env{'form.caller'} eq 'requestcrs') {
+ $Str .= &Apache::lonhtmlcommon::row_title(&mt('Default section')).
+ &mt('Students can be assigned to different sections.').'<br />'.
+ &mt('Will you be using sections?').' '.
+ '<input type="radio" name="usesection" value="1" '.
+ 'onclick="javascript:toggleSectionsDefault()" />'.
+ ' '.&mt('Yes').'</label>'.
+ ' <label>'.
+ '<input type="radio" name="usesection" value="0" checked="checked" '.
+ 'onclick="javascript:toggleSectionsDefault()" />'.
+ ' '.&mt('No').'</label>';
+ } else {
+ $Str .= &Apache::lonhtmlcommon::row_title(
&mt('Default role and section'))
- .&mt('Choose the role and/or section(s) to assign to users without values specified in the uploaded file.');
+ .&mt('Choose the role and/or section(s) to assign to users without values specified in the uploaded file.');
+ }
} else {
$Str .= &Apache::lonhtmlcommon::row_title(
&mt('Default role and/or section(s)'))
@@ -864,11 +963,22 @@
}
} else {
my ($cnum,$cdom) = &get_course_identity();
- my $rowtitle = &mt('section');
+ my ($rowtitle,$closure);
+ if ($env{'form.caller'} eq 'requestcrs') {
+ $closure = 1;
+ $rowtitle = &mt('default section name (letters/numbers only)');
+ } else {
+ $rowtitle = &mt('section');
+ }
my $secbox = §ion_picker($cdom,$cnum,'Any',$rowtitle,
- $permission,$context,'upload',$crstype);
- $Str .= $secbox
- .&Apache::lonhtmlcommon::row_closure();
+ $permission,$context,'upload',$crstype,
+ $env{'form.caller'}).
+ &Apache::lonhtmlcommon::row_closure($closure);
+ if ($env{'form.caller'} eq 'requestcrs') {
+ $Str .= '<div id ="defaultsec" style="display: none" />'.$secbox.'</div>';
+ } else {
+ $Str .= $secbox;
+ }
my %lt;
if ($crstype eq 'Community') {
%lt = &Apache::lonlocal::texthash (
@@ -881,15 +991,19 @@
stus => 'Students selected from this list can be dropped.'
);
}
- $Str .= &Apache::lonhtmlcommon::row_title(&mt('Full Update'))
- .'<label><input type="checkbox" name="fullup" value="yes" />'
- .' '.$lt{'disp'}
- .'</label><br />'
- .$lt{'stus'}
- .&Apache::lonhtmlcommon::row_closure();
+ unless ($env{'form.caller'} eq 'requestcrs') {
+ $Str .= &Apache::lonhtmlcommon::row_title(&mt('Full Update'))
+ .'<label><input type="checkbox" name="fullup" value="yes" />'
+ .' '.$lt{'disp'}
+ .'</label><br />'
+ .$lt{'stus'}
+ .&Apache::lonhtmlcommon::row_closure();
+ }
}
if ($context eq 'course' || $context eq 'domain') {
- $Str .= &forceid_change($context);
+ unless ($env{'form.caller'} eq 'requestcrs') {
+ $Str .= &forceid_change($context);
+ }
}
$Str .= &Apache::lonhtmlcommon::end_pick_box();
@@ -933,7 +1047,7 @@
###############################################################
###############################################################
sub print_upload_manager_form {
- my ($r,$context,$permission,$crstype) = @_;
+ my ($r,$context,$permission,$crstype,$formname) = @_;
my $firstLine;
my $datatoken;
if (!$env{'form.datatoken'}) {
@@ -979,13 +1093,15 @@
my ($krbdef,$krbdefdom) =
&Apache::loncommon::get_kerberos_defaults($defdom);
#
+ my ($authnum,%can_assign) = &Apache::loncommon::get_assignable_auth($defdom);
&print_upload_manager_header($r,$datatoken,$distotal,$krbdefdom,$context,
- $permission,$crstype);
+ $permission,$crstype,$formname,\%can_assign);
my $i;
my $keyfields;
if ($total>=0) {
my @field=
(['username',&mt('Username'), $env{'form.username_choice'}],
+ ['ipwd', &mt('Initial Password'),$env{'form.ipwd_choice'}],
['names',&mt('Last Name, First Names'),$env{'form.names_choice'}],
['fname',&mt('First Name'), $env{'form.fname_choice'}],
['mname',&mt('Middle Names/Initials'),$env{'form.mname_choice'}],
@@ -993,7 +1109,6 @@
['gen', &mt('Generation'), $env{'form.gen_choice'}],
['id', &mt('Student/Employee ID'),$env{'form.id_choice'}],
['sec', &mt('Section'), $env{'form.sec_choice'}],
- ['ipwd', &mt('Initial Password'),$env{'form.ipwd_choice'}],
['email',&mt('E-mail Address'), $env{'form.email_choice'}],
['role',&mt('Role'), $env{'form.role_choice'}],
['domain',&mt('Domain'), $env{'form.domain_choice'}],
@@ -2744,7 +2859,7 @@
}
if ($role eq 'st') {
my $numsub = $stusubmissions{$in{'username'}.':'.$in{'domain'}."\0attempts"} +
- $stusubmissions{$in{'username'}.':'.$in{'domain'}."\0pilotsubs"};
+ $stusubmissions{$in{'username'}.':'.$in{'domain'}."\0surveysubs"};
if (!$numsub) {
$in{'submissions'} = 'not attempted';
} elsif ($numsub < $numparts) {
@@ -3333,18 +3448,22 @@
}
sub section_picker {
- my ($cdom,$cnum,$role,$rowtitle,$permission,$context,$mode,$crstype) = @_;
+ my ($cdom,$cnum,$role,$rowtitle,$permission,$context,$mode,$crstype,$caller) = @_;
my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum);
my $sections_select .= &course_sections(\%sections_count,$role);
my $secbox = '<p>'.&Apache::lonhtmlcommon::start_pick_box()."\n";
- if ($mode eq 'upload') {
+ if ($mode eq 'upload' && $caller ne 'requestcrs') {
my ($options,$cb_script,$coursepick) =
&default_role_selector($context,1,$crstype);
$secbox .= &Apache::lonhtmlcommon::row_title(&mt('role'),'LC_oddrow_value').
$options. &Apache::lonhtmlcommon::row_closure(1)."\n";
}
$secbox .= &Apache::lonhtmlcommon::row_title($rowtitle,'LC_oddrow_value')."\n";
- if ($env{'request.course.sec'} eq '') {
+ if ($caller eq 'requestcrs') {
+ $secbox .= '<input type="hidden" name="defaultrole" value="st" />'."\n".
+ '<input type="text" name="newsec" size="15" />'."\n".
+ '<input type="hidden" name="sections" value="" />'."\n";
+ } elsif ($env{'request.course.sec'} eq '') {
$secbox .= '<table class="LC_createuser"><tr class="LC_section_row">'."\n".
'<td align="center">'.&mt('Existing sections')."\n".
'<br />'.$sections_select.'</td><td align="center">'.
@@ -3761,13 +3880,15 @@
# Print out the initial form to get the file containing a list of users
#
sub print_first_users_upload_form {
- my ($r,$context) = @_;
+ my ($r,$context,$noheader,$caller) = @_;
my $str;
$str = '<input type="hidden" name="phase" value="two" />';
$str .= '<input type="hidden" name="action" value="upload" />';
$str .= '<input type="hidden" name="state" value="got_file" />';
- $str .= '<h3>'.&mt('Upload a file containing information about users').'</h3>'."\n";
+ unless ($noheader) {
+ $str .= '<h3>'.&mt('Upload a file containing information about users').'</h3>'."\n";
+ }
# Excel and CSV Help
$str .= '<div class="LC_left_float">'
@@ -3781,15 +3902,15 @@
.&Apache::lonhtmlcommon::row_title(&mt('File'))
.&Apache::loncommon::upfile_select_html()
.&Apache::lonhtmlcommon::row_closure()
- .&Apache::lonhtmlcommon::row_title(
- '<label for="noFirstLine">'
- .&mt('Ignore First Line')
- .'</label>')
- .'<input type="checkbox" name="noFirstLine" id="noFirstLine" />'
+ .&Apache::lonhtmlcommon::row_title(&mt('Ignore First Line, e.g., contains column titles'))
+ .'<label><input type="radio" name="noFirstLine" id="noFirstLine" value="1" /> '.&mt('Yes').'</label>'
+ .' '
+ .'<label><input type="radio" name="noFirstLine" id="FirstLineOK" value="0" checked="checked" /> '.&mt('No').'</label>'
.&Apache::lonhtmlcommon::row_closure(1)
.&Apache::lonhtmlcommon::end_pick_box();
$str .= '<p>'
+ .'<input type="hidden" name=caller" value="'.$caller.'" />'
.'<input type="submit" name="fileupload" value="'.&mt('Next').'" />'
.'</p>';
@@ -3852,9 +3973,15 @@
$crstype = &Apache::loncommon::course_type($cid);
}
}
- my ($startdate,$enddate) = &get_dates_from_form();
- if ($env{'form.makedatesdefault'}) {
- $r->print(&make_dates_default($startdate,$enddate,$context,$crstype));
+ my ($startdate,$enddate);
+ if ($env{'form.caller'} eq 'requestcrs') {
+ $startdate = $env{'course.'.$env{'request.course.id'}.'.default_enrollment_start_date'};
+ $enddate = $env{'course.'.$env{'request.course.id'}.'.default_enrollment_end_date'};
+ } else {
+ ($startdate,$enddate) = &get_dates_from_form();
+ if ($env{'form.makedatesdefault'}) {
+ $r->print(&make_dates_default($startdate,$enddate,$context,$crstype));
+ }
}
# Determine domain and desired host (home server)
my $defdom=$env{'request.role.domain'};
@@ -4020,10 +4147,15 @@
$r->print($groupwarn.'<br />');
}
}
- my (%curr_rules,%got_rules,%alerts);
+ my (%curr_rules,%got_rules,%alerts,%cancreate);
my %customroles = &my_custom_roles($crstype);
my @permitted_roles =
&roles_on_upload($context,$setting,$crstype,%customroles);
+ my %longtypes = &Apache::lonlocal::texthash(
+ official => 'Institutional',
+ unofficial => 'Non-institutional',
+ );
+ map { $cancreate{$_} = &can_create_user($domain,$context,$_); } keys(%longtypes);
# Get new users list
foreach my $line (@userdata) {
my @secs;
@@ -4169,20 +4301,68 @@
my (%rulematch,%inst_results,%idinst_results);
my $uhome=&Apache::lonnet::homeserver($username,$userdomain);
if ($uhome eq 'no_host') {
- next if ($userdomain ne $domain);
+ if ($userdomain ne $domain) {
+ $r->print('<br />'.
+ &mt('[_1]: The domain specified ([_2]) is different to that of the course.',
+ '<b>'.$username.'</b>',$userdomain).'<br />'.
+ &mt('The user does not already exist, and you may not create a new user in a different domain.'));
+ next;
+ }
$checkid = 1;
$newuser = 1;
+ my $user = $username.':'.$domain;
+ if ($username =~/^[^\@]+\@[^\@]+$/) {
+ if ($email eq '') {
+ $email = $username;
+ }
+ if (&Apache::loncommon::needs_gci_custom()) {
+ my $lc_email;
+ if ($username eq $email) {
+ $lc_email = lc($email);
+ }
+ my $lc_username = lc($username);
+ if ($lc_username ne $username) {
+ if ($username eq $email) {
+ $email = $lc_username;
+ }
+ $username = $lc_username;
+ $uhome=&Apache::lonnet::homeserver($username,$userdomain);
+ if ($uhome ne 'no_host') {
+ $newuser = 0;
+ }
+ }
+ }
+ }
+ }
+ if ($newuser) {
my $checkhash;
my $checks = { 'username' => 1 };
- $checkhash->{$username.':'.$domain} = { 'newuser' => 1, };
+ $checkhash->{$user} = { 'newuser' => 1, };
&Apache::loncommon::user_rule_check($checkhash,$checks,
\%alerts,\%rulematch,\%inst_results,\%curr_rules,
\%got_rules);
if (ref($alerts{'username'}) eq 'HASH') {
if (ref($alerts{'username'}{$domain}) eq 'HASH') {
- next if ($alerts{'username'}{$domain}{$username});
+ if ($alerts{'username'}{$domain}{$username}) {
+ $r->print('<br />'.
+ &mt('[_1]: matches the username format at your institution, but is not known to your directory service.','<b>'.$username.'</b>').'<br />'.
+ &mt('Consequently, the user was not created.'));
+ next;
+ }
}
}
+ }
+ my $usertype = 'unofficial';
+ if (ref($rulematch{$user}) eq 'HASH') {
+ if ($rulematch{$user}{'username'}) {
+ $usertype = 'official';
+ }
+ }
+ if (!$cancreate{$usertype}) {
+ r->print('<br />'.
+ &mt("[_1]: The user does not exist, and you are not permitted to create users of type: $longtypes{$usertype}.",'<b>'.$username.'</b>'));
+ next;
+ }
} else {
if ($context eq 'course' || $context eq 'author') {
if ($userdomain eq $domain ) {
@@ -4233,7 +4413,12 @@
\%got_rules);
if (ref($alerts{'id'}) eq 'HASH') {
if (ref($alerts{'id'}{$userdomain}) eq 'HASH') {
- next if ($alerts{'id'}{$userdomain}{$id});
+ if ($alerts{'id'}{$userdomain}{$id}) {
+ $r->print(&mt('[_1]: has a student/employee ID matching the format at your institution, but the ID is found by your directory service.',
+ '<b>'.$username.'</b>').'<br />'.
+ &mt('Consequently, the user was not created.'));
+ next;
+ }
}
}
}
@@ -4332,10 +4517,20 @@
$r->print("</p>\n<p>\n".&mt('Processed [quant,_1,user].',$counts{'user'}).
"</p>\n");
if ($counts{'role'} > 0) {
- $r->print("<p>\n".
- &mt('Roles added for [quant,_1,user].',$counts{'role'}).' '.&mt('If a user is currently logged-in to LON-CAPA, any new roles which are active will be available when the user next logs in.')."</p>\n");
+ if (&Apache::loncommon::needs_gci_custom()) {
+ $r->print("<p>\n".
+ &mt('[quant,_1,student] enrolled in Concept Test.',$counts{'role'}).
+ "</p>\n");
+ } else {
+ $r->print("<p>\n".
+ &mt('Roles added for [quant,_1,user].',$counts{'role'}).' '.&mt('If a user is currently logged-in to LON-CAPA, any new roles which are active will be available when the user next logs in.')."</p>\n");
+ }
} else {
- $r->print('<p>'.&mt('No roles added').'</p>');
+ if (&Apache::loncommon::needs_gci_custom()) {
+ $r->print('<p>'.&mt('No students enrolled').'</p>');
+ } else {
+ $r->print('<p>'.&mt('No roles added').'</p>');
+ }
}
if ($counts{'auth'} > 0) {
$r->print("<p>\n".
@@ -4924,7 +5119,7 @@
accr => 'A course coordinator role will be added with access to all sections.',
acor => 'A coordinator role will be added with access to all sections',
inea => 'In each course, each user may only have one student role at a time.',
- inec => 'In each community, each user may only have on member role at a time.',
+ inco => 'In each community, each user may only have on member role at a time.',
youh => 'You had selected ',
secs => 'sections.',
plmo => 'Please modify your selections so they include no more than one section.',
@@ -5021,6 +5216,46 @@
return $setsection_js;
}
+sub newsections_javascript {
+ my %alerts = &Apache::lonlocal::texthash(
+ inea => 'In each course, each user may only have one student role at a time.',
+ youh => 'You had selected ',
+ secs => 'sections.',
+ plmo => 'Please modify your selections so they include no more than one section.',
+ mayn => 'may not be used as the name for a section, as it is a reserved word.',
+ plch => 'Please choose a different section name.',
+ );
+ my $setsection_js = <<"ENDSECCODE";
+
+function setSections(formname) {
+ var newsecs = formname.newsec.value;
+ var numsplit = 0;
+ var numsec = 0;
+ if (newsecs != null && newsecs != "") {
+ numsplit = newsecs.split(/,/g);
+ numsec = numsplit.length;
+ }
+ if (numsec > 1) {
+ alert("$alerts{'inea'} $alerts{'youh'} "+numsec+" $alerts{'secs'}\\n$alerts{'plmo'}");
+ } else {
+ if (numsplit > 0) {
+ for (var j=0; j<numsplit.length; j++) {
+ if ((numsplit[j] == 'all') ||
+ (numsplit[j] == 'none')) {
+ alert("'"+numsplit[j]+"' $alerts{'mayn'}\\n$alerts{'plch'}");
+ return;
+ }
+ }
+ formname.sections.value = newsecs;
+ }
+ }
+ return 'ok';
+}
+
+ENDSECCODE
+ return $setsection_js;
+}
+
sub can_create_user {
my ($dom,$context,$usertype) = @_;
my %domconf = &Apache::lonnet::get_dom('configuration',['usercreation'],$dom);
--raeburn1284942405--