--- loncom/interface/loncreateuser.pm 2007/12/31 01:58:17 1.225
+++ loncom/interface/loncreateuser.pm 2008/07/13 00:15:14 1.252
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Create a user
#
-# $Id: loncreateuser.pm,v 1.225 2007/12/31 01:58:17 raeburn Exp $
+# $Id: loncreateuser.pm,v 1.252 2008/07/13 00:15:14 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -76,30 +76,30 @@ my $authformfsys;
my $authformloc;
sub initialize_authen_forms {
- my ($dom,$curr_authtype,$mode) = @_;
- my ($krbdefdom)=( $ENV{'SERVER_NAME'}=~/(\w+\.\w+)$/);
- $krbdefdom= uc($krbdefdom);
- my %param = ( formname => 'document.cu',
+ my ($dom,$formname,$curr_authtype,$mode) = @_;
+ my ($krbdef,$krbdefdom) = &Apache::loncommon::get_kerberos_defaults($dom);
+ my %param = ( formname => $formname,
kerb_def_dom => $krbdefdom,
+ kerb_def_auth => $krbdef,
domain => $dom,
);
my %abv_auth = &auth_abbrev();
- if ($curr_authtype =~ /^(krb4|krb5|internal|localauth|unix):$/) {
+ if ($curr_authtype =~ /^(krb4|krb5|internal|localauth|unix):(.*)$/) {
my $long_auth = $1;
+ my $curr_autharg = $2;
my %abv_auth = &auth_abbrev();
$param{'curr_authtype'} = $abv_auth{$long_auth};
if ($long_auth =~ /^krb(4|5)$/) {
$param{'curr_kerb_ver'} = $1;
+ $param{'curr_autharg'} = $curr_autharg;
}
if ($mode eq 'modifyuser') {
$param{'mode'} = $mode;
}
}
-# no longer static due to configurable kerberos defaults
-# $loginscript = &Apache::loncommon::authform_header(%param);
+ $loginscript = &Apache::loncommon::authform_header(%param);
+ $authformkrb = &Apache::loncommon::authform_kerberos(%param);
$authformnop = &Apache::loncommon::authform_nochange(%param);
-# no longer static due to configurable kerberos defaults
-# $authformkrb = &Apache::loncommon::authform_kerberos(%param);
$authformint = &Apache::loncommon::authform_internal(%param);
$authformfsys = &Apache::loncommon::authform_filesystem(%param);
$authformloc = &Apache::loncommon::authform_local(%param);
@@ -156,21 +156,21 @@ END_SCRIPT
$custom_off = ' ';
$showquota = $currquota;
if ($longinsttype eq '') {
- $defaultinfo = &mt('For this user, the default quota would be [_1]
- Mb.',$defquota);
+ $defaultinfo = &mt('For this user, the default quota would be [_1]'
+ .' Mb.',$defquota);
} else {
- $defaultinfo = &mt("For this user, the default quota would be [_1]
- Mb, as determined by the user's institutional
- affiliation ([_2]).",$defquota,$longinsttype);
+ $defaultinfo = &mt("For this user, the default quota would be [_1]".
+ " Mb, as determined by the user's institutional".
+ " affiliation ([_2]).",$defquota,$longinsttype);
}
} else {
if ($longinsttype eq '') {
- $defaultinfo = &mt('For this user, the default quota is [_1]
- Mb.',$defquota);
+ $defaultinfo = &mt('For this user, the default quota is [_1]'
+ .' Mb.',$defquota);
} else {
- $defaultinfo = &mt("For this user, the default quota of [_1]
- Mb, is determined by the user's institutional
- affiliation ([_2]).",$defquota,$longinsttype);
+ $defaultinfo = &mt("For this user, the default quota of [_1]".
+ " Mb, is determined by the user's institutional".
+ " affiliation ([_2]).",$defquota,$longinsttype);
}
}
my $output = $quota_javascript.
@@ -220,6 +220,7 @@ sub print_username_entry_form {
my %loaditems = (
'onload' => "javascript:setFormElements(document.$formtoset)",
);
+ my %breadcrumb_text = &singleuser_breadcrumb();
my $start_page =
&Apache::loncommon::start_page('User Management',
$jscript,{'add_entries' => \%loaditems,});
@@ -230,7 +231,7 @@ sub print_username_entry_form {
} else {
&Apache::lonhtmlcommon::add_breadcrumb
({href=>"javascript:backPage(document.crtuser)",
- text=>"Single user search",
+ text=>$breadcrumb_text{'search'},
faq=>282,bug=>'Instructor Interface',});
}
my $helpitem = 'Course_Change_Privileges';
@@ -245,21 +246,14 @@ sub print_username_entry_form {
my $choice=&Apache::loncommon::select_form('make new role','rolename',
('make new role' => 'Generate new role ...',%existingroles));
my %lt=&Apache::lonlocal::texthash(
- 'srch' => "User Search",
- or => "or",
+ 'srst' => 'Search for a user and enroll as a student',
+ 'srad' => 'Search for a user and modify/add user information or roles',
'usr' => "Username",
'dom' => "Domain",
'ecrp' => "Edit Custom Role Privileges",
'nr' => "Name of Role",
'cre' => "Custom Role Editor",
- 'mod' => "to modify user information or add/modify roles",
- 'enrl' => "to enroll one student",
);
- my $help = &Apache::loncommon::help_open_menu(undef,undef,282,'Instructor Interface');
- my $sellink=&Apache::loncommon::selectstudent_link('crtuser','srchterm','srchdomain');
- if ($sellink) {
- $sellink = "$lt{'or'} ".$sellink;
- }
$r->print($start_page."\n".$crumbs);
if ($env{'form.action'} eq 'custom') {
if (&Apache::lonnet::allowed('mcr','/')) {
@@ -274,12 +268,12 @@ $lt{'nr'}: $choice print("
-
$lt{'srch'} $sellink $actiontext ");
+$actiontext ");
if ($env{'form.origform'} ne 'crtusername') {
$r->print("\n".$response);
}
@@ -291,7 +285,7 @@ ENDCUSTOM
sub entry_form {
my ($dom,$srch,$forcenewuser,$context,$responsemsg) = @_;
my %domconf = &Apache::lonnet::get_dom('configuration',['usercreation'],$dom);
- my $usertype;
+ my ($usertype,$inexact);
if (ref($srch) eq 'HASH') {
if (($srch->{'srchin'} eq 'dom') &&
($srch->{'srchby'} eq 'uname') &&
@@ -301,6 +295,8 @@ sub entry_form {
my ($rules,$ruleorder) =
&Apache::lonnet::inst_userrules($srch->{'srchdomain'},'username');
$usertype = &Apache::lonuserutils::check_usertype($srch->{'srchdomain'},$srch->{'srchterm'},$rules);
+ } else {
+ $inexact = 1;
}
}
my $cancreate =
@@ -309,6 +305,11 @@ sub entry_form {
&Apache::loncommon::user_picker($dom,$srch,$forcenewuser,
'document.crtuser',$cancreate,$usertype);
my $srchbutton = &mt('Search');
+ if ($env{'form.action'} eq 'singlestudent') {
+ $srchbutton = &mt('Search and Enroll');
+ } elsif ($cancreate && $responsemsg ne '' && $inexact) {
+ $srchbutton = &mt('Search or Add New User');
+ }
my $output = <<"ENDBLOCK";
ENDBLOCK
- if ($cancreate && $env{'form.phase'} eq '') {
+ if ($env{'form.phase'} eq '') {
my $defdom=$env{'request.role.domain'};
my $domform = &Apache::loncommon::select_dom_form($defdom,'srchdomain');
- my $helpcrt=&Apache::loncommon::help_open_topic('Course_Change_Privileges');
my %lt=&Apache::lonlocal::texthash(
+ 'enro' => 'Enroll one student',
+ 'admo' => 'Add/modify a single user',
+ 'crea' => 'create new user if required',
+ 'uskn' => "username is known",
'crnu' => 'Create a new user',
'usr' => 'Username',
'dom' => 'in domain',
- 'cra' => 'Create user',
+ 'enrl' => 'Enroll',
+ 'cram' => 'Create/Modify user',
);
+ my $sellink=&Apache::loncommon::selectstudent_link('crtusername','srchterm','srchdomain');
+ my ($title,$buttontext,$showresponse);
+ if ($env{'form.action'} eq 'singlestudent') {
+ $title = $lt{'enro'};
+ $buttontext = $lt{'enrl'};
+ } else {
+ $title = $lt{'admo'};
+ $buttontext = $lt{'cram'};
+ }
+ if ($cancreate) {
+ $title .= ' ('.$lt{'crea'}.') ';
+ } else {
+ $title .= ' ('.$lt{'uskn'}.') ';
+ }
+ if ($env{'form.origform'} eq 'crtusername') {
+ $showresponse = $responsemsg;
+ }
$output .= <<"ENDDOCUMENT";
+
@@ -381,7 +405,7 @@ END
# =================================================================== Phase two
sub print_user_selection_page {
- my ($r,$response,$srch,$srch_results,$operation,$srcharray,$context) = @_;
+ my ($r,$response,$srch,$srch_results,$srcharray,$context) = @_;
my @fields = ('username','domain','lastname','firstname','permanentemail');
my $sortby = $env{'form.sortby'};
@@ -416,27 +440,22 @@ ENDSCRIPT
'permanentemail' => "permanent e-mail",
);
$r->print(&Apache::loncommon::start_page('User Management',$jscript));
- if ($operation eq 'createuser') {
- &Apache::lonhtmlcommon::add_breadcrumb
- ({href=>"javascript:backPage(document.usersrchform,'','')",
- text=>"Create/modify user",
- faq=>282,bug=>'Instructor Interface',},
- {href=>"javascript:backPage(document.usersrchform,'get_user_info','select')",
- text=>"Select User",
- faq=>282,bug=>'Instructor Interface',});
+
+ my %breadcrumb_text = &singleuser_breadcrumb();
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>"javascript:backPage(document.usersrchform,'','')",
+ text=>$breadcrumb_text{'search'},
+ faq=>282,bug=>'Instructor Interface',},
+ {href=>"javascript:backPage(document.usersrchform,'get_user_info','select')",
+ text=>$breadcrumb_text{'userpicked'},
+ faq=>282,bug=>'Instructor Interface',});
+ if ($env{'form.action'} eq 'singleuser') {
$r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management',
'Course_Change_Privileges'));
$r->print("$lt{'usrch'} ");
$r->print(&entry_form($srch->{'srchdomain'},$srch,undef,$context));
$r->print(''.$lt{'usel'}.' ');
- } elsif ($operation eq 'enrollstudent') {
- &Apache::lonhtmlcommon::add_breadcrumb
- ({href=>"javascript:backPage(document.usersrchform,'','')",
- text=>"Create/modify student",
- faq=>282,bug=>'Instructor Interface',},
- {href=>"javascript:backPage(document.usersrchform,'get_user_info','select')",
- text=>"Select Student",
- faq=>282,bug=>'Instructor Interface',});
+ } elsif ($env{'form.action'} eq 'singlestudent') {
$r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management',
'Course_Add_Student'));
$r->print($jscript."$lt{'stusrch'} ");
@@ -515,8 +534,7 @@ sub print_user_modification_page {
$formname = 'cu';
}
my %abv_auth = &auth_abbrev();
- my ($curr_authtype,%rulematch,%inst_results,$curr_kerb_ver,$newuser,
- %alerts,%curr_rules,%got_rules);
+ my (%rulematch,%inst_results,$newuser,%alerts,%curr_rules,%got_rules);
my $uhome=&Apache::lonnet::homeserver($ccuname,$ccdomain);
if ($uhome eq 'no_host') {
my $usertype;
@@ -571,32 +589,10 @@ sub print_user_modification_page {
}
} else {
$newuser = 0;
- my $currentauth =
- &Apache::lonnet::queryauthenticate($ccuname,$ccdomain);
- if ($currentauth =~ /^(krb4|krb5|unix|internal|localauth):/) {
- $curr_authtype = $abv_auth{$1};
- if ($currentauth =~ /^krb(4|5)/) {
- $curr_kerb_ver = $1;
- }
- }
}
if ($response) {
$response = ' '.$response;
}
- my $defdom=$env{'request.role.domain'};
-
- my ($krbdef,$krbdefdom) =
- &Apache::loncommon::get_kerberos_defaults($defdom);
-
- my %param = ( formname => 'document.cu',
- kerb_def_dom => $krbdefdom,
- kerb_def_auth => $krbdef,
- curr_authtype => $curr_authtype,
- curr_kerb_ver => $curr_kerb_ver,
- domain => $ccdomain,
- );
- $loginscript = &Apache::loncommon::authform_header(%param);
- $authformkrb = &Apache::loncommon::authform_kerberos(%param);
my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition();
my $dc_setcourse_code = '';
@@ -607,9 +603,12 @@ sub print_user_modification_page {
my $js = &validation_javascript($context,$ccdomain,$pjump_def,
$groupslist,$newuser,$formname,\%loaditem);
+ my $args = {'add_entries' => \%loaditem};
+ if ($env{'form.popup'}) {
+ $args->{'no_nav_bar'} = 1;
+ }
my $start_page =
- &Apache::loncommon::start_page('User Management',
- $js,{'add_entries' => \%loaditem,});
+ &Apache::loncommon::start_page('User Management',$js,$args);
my %breadcrumb_text = &singleuser_breadcrumb();
&Apache::lonhtmlcommon::add_breadcrumb
({href=>"javascript:backPage($form)",
@@ -654,7 +653,7 @@ ENDFORMINFO
# Current user has quota modification privileges
$portfolioform = ' '.&portfolio_quota($ccuname,$ccdomain);
}
- &initialize_authen_forms($ccdomain);
+ &initialize_authen_forms($ccdomain,$formname);
my %lt=&Apache::lonlocal::texthash(
'cnu' => 'Create New User',
'ast' => 'as a student',
@@ -775,8 +774,7 @@ ENDCHANGEUSER
$r->print(&Apache::lonuserutils::forceid_change($context));
}
$r->print('');
- my $user_auth_text =
- &user_authentication($ccuname,$ccdomain,$krbdefdom,\%abv_auth);
+ my $user_auth_text = &user_authentication($ccuname,$ccdomain,$formname);
my $user_quota_text;
if (&Apache::lonnet::allowed('mpq',$ccdomain)) {
# Current user has quota modification privileges
@@ -840,7 +838,7 @@ ENDNOPORTPRIV
if ($addrolesdisplay) {
$r->print(' print(' onClick="verify_message(this.form)" \>'."\n");
+ $r->print(' onClick="auth_check()" \>'."\n");
} else {
$r->print('onClick="this.form.submit()" \>'."\n");
}
@@ -867,7 +865,7 @@ sub singleuser_breadcrumb {
$breadcrumb_text{'userpicked'} = 'Select a user',
$breadcrumb_text{'modify'} = 'Set section/dates',
} else {
- $breadcrumb_text{'search'} = 'Create/modify user';
+ $breadcrumb_text{'search'} = 'Create/modify a user';
$breadcrumb_text{'userpicked'} = 'Select a user',
$breadcrumb_text{'modify'} = 'Set user role',
}
@@ -897,26 +895,28 @@ sub validation_javascript {
if ($context eq 'domain') {
my $dcdom = $env{'request.role.domain'};
$loaditem->{'onload'} = "document.cu.coursedesc.value='';";
- $dc_setcourse_code = &Apache::lonuserutils::dc_setcourse_js('cu','singleuser');
+ $dc_setcourse_code =
+ &Apache::lonuserutils::dc_setcourse_js('cu','singleuser',$context);
} else {
- $nondc_setsection_code =
- &Apache::lonuserutils::setsections_javascript($formname,$groupslist);
+ my $checkauth;
+ if (($newuser) || (&Apache::lonnet::allowed('mau',$ccdomain))) {
+ $checkauth = 1;
+ }
+ if ($context eq 'course') {
+ $nondc_setsection_code =
+ &Apache::lonuserutils::setsections_javascript($formname,$groupslist,
+ undef,$checkauth);
+ }
+ if ($checkauth) {
+ $nondc_setsection_code .=
+ &Apache::lonuserutils::verify_authen($formname,$context);
+ }
}
my $js = &user_modification_js($pjump_def,$dc_setcourse_code,
$nondc_setsection_code,$groupslist);
-
my ($jsback,$elements) = &crumb_utilities();
- my $javascript_validations;
- if ((&Apache::lonnet::allowed('mau',$ccdomain)) || ($newuser)) {
- my ($krbdef,$krbdefdom) =
- &Apache::loncommon::get_kerberos_defaults($ccdomain);
- $javascript_validations =
- &Apache::lonuserutils::javascript_validations('createuser',$krbdefdom,undef,
- undef,$ccdomain);
- }
$js .= "\n".
- '';
+ '';
return $js;
}
@@ -1241,22 +1241,9 @@ sub new_domain_roles {
}
sub user_authentication {
- my ($ccuname,$ccdomain,$krbdefdom,$abv_auth) = @_;
+ my ($ccuname,$ccdomain,$formname) = @_;
my $currentauth=&Apache::lonnet::queryauthenticate($ccuname,$ccdomain);
- my ($loginscript,$outcome);
- if ($currentauth=~/^(krb)(4|5):(.*)/) {
- my $long_auth = $1.$2;
- my $curr_kerb_ver = $2;
- my $krbdefdom=$3;
- my $curr_authtype = $abv_auth->{$long_auth};
- my %param = ( formname => 'document.cu',
- kerb_def_dom => $krbdefdom,
- domain => $ccdomain,
- curr_authtype => $curr_authtype,
- curr_kerb_ver => $curr_kerb_ver,
- );
- $loginscript = &Apache::loncommon::authform_header(%param);
- }
+ my $outcome;
# Check for a bad authentication type
if ($currentauth !~ /^(krb4|krb5|unix|internal|localauth):/) {
# bad authentication scheme
@@ -1268,7 +1255,8 @@ sub user_authentication {
'ld' => "Login Data"
);
if (&Apache::lonnet::allowed('mau',$ccdomain)) {
- &initialize_authen_forms($ccdomain);
+ &initialize_authen_forms($ccdomain,$formname);
+
my $choices = &Apache::lonuserutils::set_login($ccdomain,$authformkrb,$authformint,$authformloc);
$outcome = <
@@ -1289,7 +1277,7 @@ $lt{'uuas'} ($currentauth). $lt{'adcs'}.
ENDBADAUTH
}
} else { # Authentication type is valid
- &initialize_authen_forms($ccdomain,$currentauth,'modifyuser');
+ &initialize_authen_forms($ccdomain,$formname,$currentauth,'modifyuser');
my ($authformcurrent,$can_modify,@authform_others) =
&modify_login_block($ccdomain,$currentauth);
if (&Apache::lonnet::allowed('mau',$ccdomain)) {
@@ -1333,6 +1321,7 @@ ENDBADAUTH
$outcome .= <$lt{'ccld'}
$lt{'yodo'} $lt{'ifch'}: $ccdomain
+
ENDNOPRIV
}
}
@@ -1407,18 +1396,29 @@ sub modify_login_block {
}
sub personal_data_display {
- my ($ccuname,$ccdomain,$newuser,$context,$inst_results) = @_;
- my ($output,$showforceid,%userenv,%canmodify);
+ my ($ccuname,$ccdomain,$newuser,$context,$inst_results,$rolesarray) = @_;
+ my ($output,$showforceid,%userenv,%canmodify,@inststatuses);
my @userinfo = ('firstname','middlename','lastname','generation',
'permanentemail','id');
- if (!$newuser) {
+ my $rowcount = 0;
+ my $editable = 0;
+ if ($context eq 'selfcreate') {
+ if (ref($inst_results) eq 'HASH') {
+ @inststatuses = &get_inststatuses($inst_results);
+ if (@inststatuses == 0) {
+ @inststatuses = ('default');
+ }
+ $rolesarray = \@inststatuses;
+ }
+ }
+ if (!$newuser || $context eq 'selfcreate') {
# Get the users information
%userenv = &Apache::lonnet::get('environment',
['firstname','middlename','lastname','generation',
'permanentemail','id'],$ccdomain,$ccuname);
%canmodify =
&Apache::lonuserutils::can_modify_userinfo($context,$ccdomain,
- \@userinfo);
+ \@userinfo,$rolesarray);
}
my %lt=&Apache::lonlocal::texthash(
'pd' => "Personal Data",
@@ -1443,40 +1443,74 @@ sub personal_data_display {
&Apache::lonhtmlcommon::start_pick_box();
foreach my $item (@userinfo) {
my $rowtitle = $lt{$item};
+ my $hiderow = 0;
if ($item eq 'generation') {
$rowtitle = $genhelp.$rowtitle;
}
- $output .= &Apache::lonhtmlcommon::row_title($rowtitle,undef,'LC_oddrow_value')."\n";
+ my $row = &Apache::lonhtmlcommon::row_title($rowtitle,undef,'LC_oddrow_value')."\n";
if ($newuser) {
if (ref($inst_results) eq 'HASH') {
if ($inst_results->{$item} ne '') {
- $output .= ' '.$inst_results->{$item};
+ $row .= ' '.$inst_results->{$item};
} else {
- $output .= ' ';
+ if ($context eq 'selfcreate') {
+ if ($canmodify{$item}) {
+ $row .= ' ';
+ $editable ++;
+ } else {
+ $hiderow = 1;
+ }
+ }
}
} else {
- $output .= ' ';
+ if ($context eq 'selfcreate') {
+ if ($canmodify{$item}) {
+ $row .= ' ';
+ $editable ++;
+ } else {
+ $hiderow = 1;
+ }
+ }
}
} else {
if ($canmodify{$item}) {
- $output .= ' ';
+ $row .= ' ';
} else {
- $output .= $userenv{$item};
+ $row .= $userenv{$item};
}
if ($item eq 'id') {
$showforceid = $canmodify{$item};
}
}
- $output .= &Apache::lonhtmlcommon::row_closure(1);
+ $row .= &Apache::lonhtmlcommon::row_closure(1);
+ if (!$hiderow) {
+ $output .= $row;
+ $rowcount ++;
+ }
}
$output .= &Apache::lonhtmlcommon::end_pick_box();
if (wantarray) {
- return ($output,$showforceid);
+ if ($context eq 'selfcreate') {
+ return($output,$rowcount,$editable);
+ } else {
+ return ($output,$showforceid);
+ }
} else {
return $output;
}
}
+sub get_inststatuses {
+ my ($insthashref) = @_;
+ my @inststatuses = ();
+ if (ref($insthashref) eq 'HASH') {
+ if (ref($insthashref->{'inststatus'}) eq 'ARRAY') {
+ @inststatuses = @{$insthashref->{'inststatus'}};
+ }
+ }
+ return @inststatuses;
+}
+
# ================================================================= Phase Three
sub update_user_data {
my ($r,$context) = @_;
@@ -1501,7 +1535,13 @@ sub update_user_data {
my $jscript = ''."\n";
my %breadcrumb_text = &singleuser_breadcrumb();
- $r->print(&Apache::loncommon::start_page($title,$jscript));
+ my $args;
+ if ($env{'form.popup'}) {
+ $args->{'no_nav_bar'} = 1;
+ } else {
+ $args = undef;
+ }
+ $r->print(&Apache::loncommon::start_page($title,$jscript,$args));
&Apache::lonhtmlcommon::add_breadcrumb
({href=>"javascript:backPage(document.userupdate)",
text=>$breadcrumb_text{'search'},
@@ -1651,6 +1691,27 @@ sub update_user_data {
$r->print(&mt('Generating user').': '.$result);
$uhome = &Apache::lonnet::homeserver($env{'form.ccuname'},
$env{'form.ccdomain'});
+ if (($uhome ne 'no_host') && ($env{'form.customquota'} == 1)) {
+ my (%changeHash,$newportfolioquota);
+ if ($env{'form.portfolioquota'} eq '') {
+ $newportfolioquota = 0;
+ } else {
+ $newportfolioquota = $env{'form.portfolioquota'};
+ $newportfolioquota =~ s/[^\d\.]//g;
+ }
+ my $quotachanged = "a_admin($newportfolioquota,\%changeHash);
+ if ($quotachanged) {
+ $changeHash{'firstname'} = $env{'form.cfirstname'};
+ $changeHash{'middlename'} = $env{'form.cmiddlename'};
+ $changeHash{'lastname'} = $env{'form.clastname'};
+ $changeHash{'generation'} = $env{'form.cgeneration'};
+ $changeHash{'id'} = $env{'form.cid'};
+ $changeHash{'permanentemail'} = $env{'form.cpermanentemail'};
+ my $quotachgresult =
+ &Apache::lonnet::put('environment',\%changeHash,
+ $env{'form.ccdomain'},$env{'form.ccuname'});
+ }
+ }
$r->print(' '.&mt('Home server').': '.$uhome.' '.
&Apache::lonnet::hostname($uhome));
} elsif (($env{'form.login'} ne 'nochange') &&
@@ -1970,7 +2031,7 @@ END
foreach my $key (keys(%changeHash)) {
$newenvhash{'environment.'.$key} = $changeHash{$key};
}
- &Apache::lonnet::appenv(%newenvhash);
+ &Apache::lonnet::appenv(\%newenvhash);
}
} else { # error occurred
$r->print(''.&mt('Unable to successfully change environment for').' '.
@@ -2025,12 +2086,14 @@ END
&mt('Contact your helpdesk for more information.',"javascript:helpMenu('display')").' ');
}
$r->print($no_forceid_alert.
- &Apache::lonuserutils::print_namespacing_alerts($env{'form.ccdomain'},\%alerts, \%curr_rules));
+ &Apache::lonuserutils::print_namespacing_alerts($env{'form.ccdomain'},\%alerts,\%curr_rules));
}
if ($env{'form.action'} eq 'singlestudent') {
- &enroll_single_student($r,$uhome,$amode,$genpwd,$now,$newuser);
+ &enroll_single_student($r,$uhome,$amode,$genpwd,$now,$newuser,$context);
+ $r->print(''.
+ &mt('Enroll Another Student').'
');
} else {
- my @rolechanges = &update_roles($r);
+ my @rolechanges = &update_roles($r,$context);
if ($namechanged) {
if ($context eq 'course') {
if (@userroles > 0) {
@@ -2046,12 +2109,22 @@ END
}
}
}
+ my $userinfo = &Apache::loncommon::plainname($env{'form.ccuname'},
+ $env{'form.ccdomain'});
+ if ($env{'form.popup'}) {
+ $r->print(''.&mt('Close window').'
');
+ } else {
+ $r->print(''
+ .&mt('Modify this user: [_1]',''.$env{'form.ccuname'}.':'.$env{'form.ccdomain'}.' ('.$userinfo.') ').' '
+ .(' 'x5).''
+ .&mt('Create/Modify Another User').'
');
+ }
}
$r->print(&Apache::loncommon::end_page());
}
sub update_roles {
- my ($r) = @_;
+ my ($r,$context) = @_;
my $now=time;
my @rolechanges;
my %disallowed;
@@ -2067,7 +2140,7 @@ sub update_roles {
my $result =
&Apache::lonnet::revokerole($env{'form.ccdomain'},
$env{'form.ccuname'},
- $scope,$role);
+ $scope,$role,'','',$context);
$r->print(&mt('Revoking [_1] in [_2]: [_3]',
$role,$scope,''.$result.' ').' ');
if ($role eq 'st') {
@@ -2086,7 +2159,7 @@ sub update_roles {
$r->print(&mt('Revoking custom role:').
' '.$4.' by '.$3.':'.$2.' in '.$1.': '.
&Apache::lonnet::revokecustomrole($env{'form.ccdomain'},
- $env{'form.ccuname'},$1,$2,$3,$4).
+ $env{'form.ccuname'},$1,$2,$3,$4,'','',$context).
' ');
if (!grep(/^cr$/,@rolechanges)) {
push(@rolechanges,'cr');
@@ -2099,7 +2172,8 @@ sub update_roles {
my $result =
&Apache::lonnet::assignrole($env{'form.ccdomain'},
$env{'form.ccuname'},
- $scope,$role,$now,0,1);
+ $scope,$role,$now,0,1,'',
+ $context);
$r->print(&mt('Deleting [_1] in [_2]: [_3]',$role,$scope,
''.$result.' ').' ');
if ($role eq 'st') {
@@ -2120,7 +2194,7 @@ sub update_roles {
$rolename,$rnam,$rdom,$url).': '.
&Apache::lonnet::assigncustomrole($env{'form.ccdomain'},
$env{'form.ccuname'},$url,$rdom,$rnam,$rolename,$now,
- 0,1).' ');
+ 0,1,$context).' ');
if (!grep(/^cr$/,@rolechanges)) {
push(@rolechanges,'cr');
}
@@ -2152,7 +2226,8 @@ sub update_roles {
}
} else {
my $result=&Apache::lonnet::assignrole($env{'form.ccdomain'},
- $env{'form.ccuname'},$url,$role,0,$now);
+ $env{'form.ccuname'},$url,$role,0,$now,'','',
+ $context);
$output = &mt('Re-enabling [_1] in [_2]: [_3] ',
$role,$url,$result).' ';
}
@@ -2166,7 +2241,7 @@ sub update_roles {
my ($url,$rdom,$rnam,$rolename) = ($1,$2,$3,$4);
my $result = &Apache::lonnet::assigncustomrole(
$env{'form.ccdomain'}, $env{'form.ccuname'},
- $url,$rdom,$rnam,$rolename,0,$now);
+ $url,$rdom,$rnam,$rolename,0,$now,undef,$context);
$r->print(&mt('Re-enabling custom role [_1] by [_2]@[_3] in [_4] : [_5] ',
$rolename,$rnam,$rdom,$url,$result).' ');
if (!grep(/^cr$/,@rolechanges)) {
@@ -2193,7 +2268,7 @@ sub update_roles {
my %sections = ();
my $num_sections = &build_roles($env{'form.sec_'.$full},\%sections,$5);
if ($num_sections == 0) {
- $r->print(&Apache::loncommon::commit_customrole($udom,$uname,$url,$three,$four,$five,$start,$end));
+ $r->print(&Apache::loncommon::commit_customrole($udom,$uname,$url,$three,$four,$five,$start,$end,$context));
} else {
my %curr_groups =
&Apache::longroup::coursegroups($one,$two);
@@ -2204,7 +2279,7 @@ sub update_roles {
next;
}
my $securl = $url.'/'.$sec;
- $r->print(&Apache::loncommon::commit_customrole($udom,$uname,$securl,$three,$four,$five,$start,$end));
+ $r->print(&Apache::loncommon::commit_customrole($udom,$uname,$securl,$three,$four,$five,$start,$end,$context));
}
}
if (!grep(/^cr$/,@rolechanges)) {
@@ -2226,7 +2301,7 @@ sub update_roles {
my %sections = ();
my $num_sections = &build_roles($env{'form.sec_'.$one.'_'.$two.'_'.$three},\%sections,$three);
if ($num_sections == 0) {
- $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$url,$three,$start,$end,$one,$two,''));
+ $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$url,$three,$start,$end,$one,$two,'',$context));
} else {
my %curr_groups =
&Apache::longroup::coursegroups($one,$two);
@@ -2240,13 +2315,13 @@ sub update_roles {
next;
}
my $securl = $url.'/'.$sec;
- $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$securl,$three,$start,$end,$one,$two,$sec));
+ $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$securl,$three,$start,$end,$one,$two,$sec,$context));
} else {
$emptysec = 1;
}
}
if ($emptysec) {
- $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$url,$three,$start,$end,$one,$two,''));
+ $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$url,$three,$start,$end,$one,$two,'',$context));
}
}
if (!grep(/^\Q$three\E$/,@rolechanges)) {
@@ -2268,19 +2343,19 @@ sub update_roles {
my %sections = ();
my $num_sections = &build_roles($env{'form.sec_'.$one.'_'.$two},\%sections,$two);
if ($num_sections == 0) {
- $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$url,$two,$start,$end,$one,undef,''));
+ $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$url,$two,$start,$end,$one,undef,'',$context));
} else {
my $emptysec = 0;
foreach my $sec (sort {$a cmp $b} keys %sections) {
if ($sec ne '') {
my $securl = $url.'/'.$sec;
- $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$securl,$two,$start,$end,$one,undef,$sec));
+ $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$securl,$two,$start,$end,$one,undef,$sec,$context));
} else {
$emptysec = 1;
}
}
if ($emptysec) {
- $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$url,$two,$start,$end,$one,undef,''));
+ $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$url,$two,$start,$end,$one,undef,'',$context));
}
}
if (!grep(/^\Q$two\E$/,@rolechanges)) {
@@ -2308,7 +2383,7 @@ sub update_roles {
}
sub enroll_single_student {
- my ($r,$uhome,$amode,$genpwd,$now,$newuser) = @_;
+ my ($r,$uhome,$amode,$genpwd,$now,$newuser,$context) = @_;
$r->print(''.&mt('Enrolling Student').' ');
# Remove non alphanumeric values from section
@@ -2323,7 +2398,7 @@ sub enroll_single_student {
$env{'form.ccuname'},$env{'form.cid'},$env{'form.cfirstname'},
$env{'form.cmiddlename'},$env{'form.clastname'},
$env{'form.generation'},$env{'form.sections'},$enddate,
- $startdate,'manual',undef,$env{'request.course.id'});
+ $startdate,'manual',undef,$env{'request.course.id'},'',$context);
if ($enroll_result =~ /^ok/) {
$r->print(&mt('[_1] enrolled',$env{'form.ccuname'}.':'.$env{'form.ccdomain'}));
if ($env{'form.sections'} ne '') {
@@ -2532,7 +2607,7 @@ sub custom_role_editor {
'crl' => "Course Level",
'dml' => "Domain Level",
'ssl' => "System Level");
- $r->print('Select a Template ');
+ $r->print(&mt('Select a Template').' ');
$r->print('');
@@ -2643,7 +2718,7 @@ sub make_button_code {
}
# ---------------------------------------------------------- Call to definerole
sub set_custom_role {
- my ($r) = @_;
+ my ($r,$context) = @_;
my $rolename=$env{'form.rolename'};
$rolename=~s/[^A-Za-z0-9]//gs;
if (!$rolename) {
@@ -2718,7 +2793,7 @@ sub set_custom_role {
$url,
$env{'user.domain'},
$env{'user.name'},
- $rolename));
+ $rolename,undef,undef,undef,$context));
}
$r->print(''.&mt('Create or edit another custom role').'
');
@@ -2742,7 +2817,8 @@ sub handler {
$context = 'domain';
}
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
- ['action','state','callingform','roletype','showrole','bulkaction']);
+ ['action','state','callingform','roletype','showrole','bulkaction','popup','phase',
+ 'username','domain','srchterm','srchdomain','srchin','srchby','srchtype']);
&Apache::lonhtmlcommon::clear_breadcrumbs();
if ($env{'form.action'} ne 'dateselect') {
&Apache::lonhtmlcommon::add_breadcrumb
@@ -2799,7 +2875,6 @@ sub handler {
foreach my $item (@search) {
$srch->{$item} = $env{'form.'.$item};
}
-
if (($phase eq 'get_user_info') || ($phase eq 'userpicked') ||
($phase eq 'createnewuser')) {
if ($env{'form.phase'} eq 'createnewuser') {
@@ -2822,14 +2897,8 @@ sub handler {
$currstate = $env{'form.currstate'};
}
if ($currstate eq 'select') {
- my $operation;
- if ($env{'form.action'} eq 'singleuser') {
- $operation = 'createuser';
- } elsif ($env{'form.action'} eq 'singlestudent') {
- $operation = 'enrollstudent';
- }
&print_user_selection_page($r,$response,$srch,$results,
- $operation,\@search,$context);
+ \@search,$context);
} elsif ($currstate eq 'modify') {
my ($ccuname,$ccdomain);
if (($srch->{'srchby'} eq 'uname') &&
@@ -2851,6 +2920,7 @@ sub handler {
} elsif ($currstate eq 'query') {
&print_user_query_page($r,'createuser');
} else {
+ $env{'form.phase'} = '';
&print_username_entry_form($r,$context,$response,$srch,
$forcenewuser);
}
@@ -2867,7 +2937,7 @@ sub handler {
}
} elsif ($env{'form.action'} eq 'custom' && $permission->{'custom'}) {
if ($env{'form.phase'} eq 'set_custom_roles') {
- &set_custom_role($r);
+ &set_custom_role($r,$context);
} else {
&custom_role_editor($r);
}
@@ -2951,6 +3021,35 @@ sub handler {
''.&mt('You do not have permission to modify dates or sections for users').' '.
&Apache::loncommon::end_page());
}
+ } elsif ($env{'form.action'} eq 'selfenroll') {
+ $r->print(&header());
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>'/adm/createuser?action=selfenroll',
+ text=>"Configure Self-enrollment"});
+ if (!exists($env{'form.state'})) {
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs('Configure Self-enrollment',
+ 'Course_Self_Enrollment'));
+ $r->print(''.&mt('Self-enrollment with a student role').' '."\n");
+ &print_selfenroll_menu($r,$context,$permission);
+ } elsif ($env{'form.state'} eq 'done') {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>'/adm/createuser?action=selfenroll',
+ text=>"Result"});
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs('Self-enrollment result',
+ 'Course_Self_Enrollment'));
+ $r->print(''.&mt('Self-enrollment with a student role').' '."\n");
+ &update_selfenroll_config($r,$context,$permission);
+ }
+ $r->print(&Apache::loncommon::end_page());
+ } elsif ($env{'form.action'} eq 'changelogs') {
+ $r->print(&header());
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>'/adm/createuser?action=changelogs',
+ text=>"User Management Logs"});
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Changes',
+ 'Course_User_Logs'));
+ &print_userchangelogs_display($r,$context,$permission);
+ $r->print(&Apache::loncommon::end_page());
} else {
$r->print(&header());
$r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management'));
@@ -3054,24 +3153,44 @@ sub print_main_menu {
});
if (!exists($permission->{'cusr_section'})) {
push(@courselinks,
- { text => 'Automated Student Enrollment Manager',
+ { text => 'Automated Enrollment Manager',
+ help => 'Course_Automated_Enrollment',
permission => (&Apache::lonnet::auto_run($cnum,$cdom)
&& $permission->{'cusr'}),
url => '/adm/populate',
- });
+ },
+ { text => 'Configure User Self-enrollment',
+ help => 'Course_Self_Enrollment',
+ action => 'selfenroll',
+ permission => $permission->{'cusr'},
+ });
}
push(@courselinks,
{ text => 'Manage Course Groups',
help => 'Course_Manage_Group',
permission => $permission->{'grp_manage'},
url => '/adm/coursegroups?refpage=cusr',
- });
+ },
+ { text => 'View Change Logs',
+ help => 'Course_User_Logs',
+ action => 'changelogs',
+ permission => $permission->{'cusr'},
+ },);
+# { text => 'View Log-in History',
+# help => 'Course_User_Logins',
+# action => 'logins',
+# permission => $permission->{'cusr'},
+# });
push(@menu,@courselinks);
}
my $menu_html = '';
foreach my $menu_item (@menu) {
next if (! $menu_item->{'permission'});
$menu_html.='';
+ if (exists($menu_item->{'help'})) {
+ $menu_html.=
+ &Apache::loncommon::help_open_topic($menu_item->{'help'});
+ }
$menu_html.='';
if (exists($menu_item->{'url'})) {
$menu_html.=qq{};
@@ -3080,10 +3199,6 @@ sub print_main_menu {
qq{ };
}
$menu_html.= &mt($menu_item->{'text'}).' ';
- if (exists($menu_item->{'help'})) {
- $menu_html.=
- &Apache::loncommon::help_open_topic($menu_item->{'help'});
- }
$menu_html.='
';
}
return $menu_html;
@@ -3100,6 +3215,674 @@ sub restore_prev_selections {
\%saveable_parameters);
}
+sub print_selfenroll_menu {
+ my ($r,$context,$permission) = @_;
+ my $formname = 'enrollstudent';
+ my $nolink = 1;
+ my ($row,$lt) = &get_selfenroll_titles();
+ my $groupslist = &Apache::lonuserutils::get_groupslist();
+ my $setsec_js =
+ &Apache::lonuserutils::setsections_javascript($formname,$groupslist);
+ my %alerts = &Apache::lonlocal::texthash(
+ acto => 'Activation of self-enrollment was selected for the following domain(s)',
+ butn => 'but no user types have been checked.',
+ wilf => "Please uncheck 'activate' or check at least one type.",
+ );
+ my $selfenroll_js = <<"ENDSCRIPT";
+function update_types(caller,num) {
+ var delidx = getIndexByName('selfenroll_delete');
+ var actidx = getIndexByName('selfenroll_activate');
+ if (caller == 'selfenroll_all') {
+ var selall;
+ for (var i=0; i 0) {
+ var msg = "$alerts{'acto'}\\n";
+ var loopend = needaction.length -1;
+ if (loopend > 0) {
+ for (var m=0; m'."\n".
+ $setsec_js."\n".$selfenroll_js."\n".
+ ''."\n".
+ ''.$lt->{'selfenroll'}.' '."\n".
+ '';
+ $r->print($output);
+ return;
+}
+
+sub new_selfenroll_dom_row {
+ my ($newdom,$num) = @_;
+ my $domdesc = &Apache::lonnet::domain($newdom);
+ my $output;
+ if ($domdesc ne '') {
+ $output .= &Apache::loncommon::start_data_table_row()
+ .''.&mt('Domain:').' '.$domdesc
+ .' ('.$newdom.') '
+ .' '
+ .&mt('Activate').' ';
+ my @currinsttypes;
+ $output .= ''.&mt('User types:').' '
+ .&selfenroll_inst_types($num,$newdom,\@currinsttypes).' '
+ .&Apache::loncommon::end_data_table_row();
+ }
+ return $output;
+}
+
+sub selfenroll_inst_types {
+ my ($num,$currdom,$currinsttypes) = @_;
+ my $output;
+ my $numinrow = 4;
+ my $count = 0;
+ my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($currdom);
+ my $othervalue = 'any';
+ if ((ref($types) eq 'ARRAY') && (ref($usertypes) eq 'HASH')) {
+ if (keys(%{$usertypes}) > 0) {
+ $othervalue = 'other';
+ }
+ $output .= '';
+ }
+ return $output;
+}
+
+sub selfenroll_date_forms {
+ my ($startform,$endform) = @_;
+ my $output .= &Apache::lonhtmlcommon::start_pick_box()."\n".
+ &Apache::lonhtmlcommon::row_title(&mt('Start date'),
+ 'LC_oddrow_value')."\n".
+ $startform."\n".
+ &Apache::lonhtmlcommon::row_closure(1).
+ &Apache::lonhtmlcommon::row_title(&mt('End date'),
+ 'LC_oddrow_value')."\n".
+ $endform."\n".
+ &Apache::lonhtmlcommon::row_closure(1).
+ &Apache::lonhtmlcommon::end_pick_box();
+ return $output;
+}
+
+sub print_userchangelogs_display {
+ my ($r,$context,$permission) = @_;
+ my $formname = 'roleslog';
+ my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+ my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+ my %roleslog=&Apache::lonnet::dump('nohist_rolelog',$cdom,$cnum);
+ if ((keys(%roleslog))[0]=~/^error\:/) { undef(%roleslog); }
+
+ $r->print('');
+ return;
+}
+
+sub role_display_filter {
+ my ($formname,$cdom,$cnum,$curr,$version) = @_;
+ my $context = 'course';
+ my $nolink = 1;
+ my $output = ''.
+ ''.&mt('Changes/page:').' '.
+ &Apache::lonmeta::selectbox('show',$curr->{'show'},undef,
+ (&mt('all'),5,10,20,50,100,1000,10000)).
+ ' ';
+ my $startform =
+ &Apache::lonhtmlcommon::date_setter($formname,'rolelog_start_date',
+ $curr->{'rolelog_start_date'},undef,
+ undef,undef,undef,undef,undef,undef,$nolink);
+ my $endform =
+ &Apache::lonhtmlcommon::date_setter($formname,'rolelog_end_date',
+ $curr->{'rolelog_end_date'},undef,
+ undef,undef,undef,undef,undef,undef,$nolink);
+ my %lt = &rolechg_contexts();
+ $output .= ''.&mt('Window during which changes occurred:').' '.&mt('After:').
+ ' '.$startform.' '.&mt('Before:').' '.
+ $endform.'
'.
+ ''.&mt('Role:').' '.
+ '{'role'} eq 'any') {
+ $output .= ' selected="selected"';
+ }
+ $output .= '>'.&mt('Any').' '."\n";
+ my @roles = &Apache::lonuserutils::course_roles($context,undef,1);
+ foreach my $role (@roles) {
+ my $plrole;
+ if ($role eq 'cr') {
+ $plrole = &mt('Custom Role');
+ } else {
+ $plrole=&Apache::lonnet::plaintext($role);
+ }
+ my $selstr = '';
+ if ($role eq $curr->{'role'}) {
+ $selstr = ' selected="selected"';
+ }
+ $output .= ' '.$plrole.' ';
+ }
+ $output .= ' '.
+ &mt('Context:').' ';
+ foreach my $chgtype ('any','auto','updatenow','createcourse','course','domain','selfenroll') {
+ my $selstr = '';
+ if ($curr->{'chgcontext'} eq $chgtype) {
+ $output .= $selstr = ' selected="selected"';
+ }
+ if (($chgtype eq 'auto') || ($chgtype eq 'updatenow')) {
+ next if (!&Apache::lonnet::auto_run($cnum,$cdom));
+ }
+ $output .= ''.$lt{$chgtype}.' '."\n";
+ }
+ $output .= '
'.
+ ''.
+ &mt('[_1]Note:[_2] Only changes made from servers running LON-CAPA 2.6.99.0 or later are displayed.');
+ if ($version) {
+ $output .= ' '.&mt('This server is version [_3].','',' ',$version); }
+ $output .= ' ';
+ return $output;
+}
+
+sub rolechg_contexts {
+ my %lt = &Apache::lonlocal::texthash (
+ any => 'Any',
+ auto => 'Automated enrollment',
+ updatenow => 'Roster Update',
+ createcourse => 'Course Creation',
+ course => 'User Management in course',
+ domain => 'User Management in domain',
+ selfenroll => 'Self-enrolled',
+ );
+ return %lt;
+}
+
#-------------------------------------------------- functions for &phase_two
sub user_search_result {
my ($context,$srch) = @_;
@@ -3132,7 +3915,13 @@ sub user_search_result {
if (($srch->{'srchin'} eq 'dom') || ($srch->{'srchin'} eq 'crs') ||
($srch->{'srchin'} eq 'alc')) {
if ($srch->{'srchby'} eq 'uname') {
- if ($srch->{'srchterm'} !~ /^$match_username$/) {
+ my $unamecheck = $srch->{'srchterm'};
+ if ($srch->{'srchtype'} eq 'contains') {
+ if ($unamecheck !~ /^\w/) {
+ $unamecheck = 'a'.$unamecheck;
+ }
+ }
+ if ($unamecheck !~ /^$match_username$/) {
$response = &mt('You must specify a valid username. Only the following are allowed: letters numbers - . @');
}
}
@@ -3341,11 +4130,15 @@ sub directorysrch_check {
my ($insttypes,$order) = &Apache::lonnet::retrieve_inst_usertypes($srch->{'srchdomain'});
my @longtypes;
foreach my $item (@usertypes) {
- push (@longtypes,$insttypes->{$item});
+ if (defined($insttypes->{$item})) {
+ push (@longtypes,$insttypes->{$item});
+ } elsif ($item eq 'default') {
+ push (@longtypes,&mt('other'));
+ }
}
my $insttype_str = join(', ',@longtypes);
return &mt('Institutional directory search in domain: [_1] is not available to your user type: ',$showdom).$insttype_str;
- }
+ }
} else {
$can_search = 1;
}
@@ -3466,7 +4259,7 @@ sub build_search_response {
&Apache::lonuserutils::can_create_user($env{'request.role.domain'},$context);
if ($cancreate) {
my $showdom = &display_domain_info($env{'request.role.domain'});
- $response .= ' '.&mt("To add a new user (you can only create new users in your current role's domain - [_1] ):",$env{'request.role.domain'}).''.&mt("Set 'Domain/institution to search' to: [_1] ",$showdom).' '.&mt("Set 'Search criteria' to: 'username is ...... in selected LON-CAPA domain'").' '.&mt('Provide the proposed username').' '.&mt('Search').' ';
+ $response .= ' '.&mt("To add a new user (you can only create new users in your current role's domain - [_1] ):",$env{'request.role.domain'}).''.&mt("Set 'Domain/institution to search' to: [_1] ",$showdom).' '.&mt("Set 'Search criteria' to: 'username is ...... in selected LON-CAPA domain'").' '.&mt('Provide the proposed username').' '.&mt('Search').' ';
} else {
my $helplink = ' href="javascript:helpMenu('."'display'".')"';
$response .= ' '.&mt("You are not authorized to create new users in your current role's domain - [_1] .",$env{'request.role.domain'}).' '.&mt('Contact the helpdesk if you need to create a new user.',$helplink).' ';
@@ -3702,7 +4495,7 @@ sub course_level_dc {
' '.
' '.$lt{'new'}.' '.
' '.
- ' '.
+ ' '.
' '.
'';
$otheritems .= < 0) {
+ @types = sort(@types);
+ my $typestr = join(',',@types);
+ my $typedom = $env{'form.selfenroll_dom_'.$num};
+ $latesttypes[$newnum] = $typedom.':'.$typestr;
+ $currdoms{$typedom} = 1;
+ $newnum ++;
+ }
+ }
+ for (my $j=0; $j<$env{'form.selfenroll_types_total'}; $j++) { if ((!grep(/^$j$/,@deletedoms)) && (!grep(/^$j$/,@activations))) {
+ my @types = &Apache::loncommon::get_env_multiple('form.selfenroll_types_'.$j);
+ if (@types > 0) {
+ @types = sort(@types);
+ my $typestr = join(',',@types);
+ my $typedom = $env{'form.selfenroll_dom_'.$j};
+ $latesttypes[$newnum] = $typedom.':'.$typestr;
+ $currdoms{$typedom} = 1;
+ $newnum ++;
+ }
+ }
+ }
+ if ($env{'form.selfenroll_newdom'} ne '') {
+ my $typedom = $env{'form.selfenroll_newdom'};
+ if ((!defined($currdoms{$typedom})) &&
+ (&Apache::lonnet::domain($typedom) ne '')) {
+ my $typestr;
+ my ($othertitle,$usertypes,$types) =
+ &Apache::loncommon::sorted_inst_types($typedom);
+ my $othervalue = 'any';
+ if ((ref($types) eq 'ARRAY') && (ref($usertypes) eq 'HASH')) {
+ if (@{$types} > 0) {
+ $othervalue = 'other';
+ $typestr = join(',',(@{$types},$othervalue));
+ }
+ $typestr = $othervalue;
+ } else {
+ $typestr = $othervalue;
+ }
+ $latesttypes[$newnum] = $typedom.':'.$typestr;
+ $newnum ++ ;
+ }
+ }
+ my $selfenroll_types = join(';',@latesttypes);
+ if ($selfenroll_types ne $curr_types) {
+ $changes{'internal.selfenroll_types'} = $selfenroll_types;
+ }
+ }
+ } else {
+ my $curr_val =
+ $env{'course.'.$env{'request.course.id'}.'.internal.selfenroll_'.$item};
+ my $newval = $env{'form.selfenroll_'.$item};
+ if ($item eq 'section') {
+ $newval = $env{'form.sections'};
+ if (defined($curr_groups{$newval})) {
+ $newval = $curr_val;
+ $warning{$item} = &mt('Section for self-enrolled users unchanged as the proposed section is a group').' '.&mt('Group names and section names must be distinct');
+ } elsif ($newval eq 'all') {
+ $newval = $curr_val;
+ $warning{$item} = &mt("Section for self-enrolled users unchanged, as 'all' is a reserved section name.");
+ }
+ if ($newval eq '') {
+ $newval = 'none';
+ }
+ }
+ if ($newval ne $curr_val) {
+ $changes{'internal.selfenroll_'.$item} = $newval;
+ }
+ }
+ }
+ if (keys(%warning) > 0) {
+ foreach my $item (@{$row}) {
+ if (exists($warning{$item})) {
+ $r->print($warning{$item}.' ');
+ }
+ }
+ }
+ if (keys(%changes) > 0) {
+ my $putresult = &Apache::lonnet::put('environment',\%changes,$cdom,$cnum);
+ if ($putresult eq 'ok') {
+ if ((exists($changes{'internal.selfenroll_types'})) ||
+ (exists($changes{'internal.selfenroll_start_date'})) ||
+ (exists($changes{'internal.selfenroll_end_date'}))) {
+ my %crsinfo = &Apache::lonnet::courseiddump($cdom,'.',1,'.','.',
+ $cnum,undef,undef,'Course');
+ my $chome = &Apache::lonnet::homeserver($cnum,$cdom);
+ if (ref($crsinfo{$env{'request.course.id'}}) eq 'HASH') {
+ foreach my $item ('selfenroll_types','selfenroll_start_date','selfenroll_end_date') {
+ if (exists($changes{'internal.'.$item})) {
+ $crsinfo{$env{'request.course.id'}}{$item} =
+ $changes{'internal.'.$item};
+ }
+ }
+ my $crsputresult =
+ &Apache::lonnet::courseidput($cdom,\%crsinfo,
+ $chome,'notime');
+ }
+ }
+ $r->print(&mt('The following changes were made to self-enrollment settings:').'');
+ foreach my $item (@{$row}) {
+ my $title = $item;
+ if (ref($lt) eq 'HASH') {
+ $title = $lt->{$item};
+ }
+ if ($item eq 'enroll_dates') {
+ foreach my $type ('start','end') {
+ if (exists($changes{'internal.selfenroll_'.$type.'_date'})) {
+ my $newdate = &Apache::lonlocal::locallocaltime($changes{'internal.selfenroll_'.$type.'_date'});
+ $r->print(''.&mt('[_1]: "[_2]" set to "[_3]".',
+ $title,$type,$newdate).' ');
+ }
+ }
+ } elsif ($item eq 'access_dates') {
+ foreach my $type ('start','end') {
+ if (exists($changes{'internal.selfenroll_'.$type.'_access'})) {
+ my $newdate = &Apache::lonlocal::locallocaltime($changes{'internal.selfenroll_'.$type.'_access'});
+ $r->print(''.&mt('[_1]: "[_2]" set to "[_3]".',
+ $title,$type,$newdate).' ');
+ }
+ }
+ } else {
+ if (exists($changes{'internal.selfenroll_'.$item})) {
+ my $newval = $changes{'internal.selfenroll_'.$item};
+ if ($item eq 'types') {
+ if ($newval eq '') {
+ $newval = &mt('None');
+ } elsif ($newval eq '*') {
+ $newval = &mt('Any user in any domain');
+ }
+ } elsif ($item eq 'registered') {
+ if ($newval eq '1') {
+ $newval = &mt('Yes');
+ } elsif ($newval eq '0') {
+ $newval = &mt('No');
+ }
+ }
+ $r->print(''.&mt('"[_1]" set to "[_2]".',$title,$newval).' '."\n");
+ }
+ }
+ }
+ $r->print(' ');
+ my %newenvhash;
+ foreach my $key (keys(%changes)) {
+ $newenvhash{'course.'.$env{'request.course.id'}.'.'.$key} = $changes{$key};
+ }
+ &Apache::lonnet::appenv(\%newenvhash);
+ } else {
+ $r->print(&mt('An error occurred when saving changes to self-enrollment settings in this course.').' '.&mt('The error was: [_1].',$putresult));
+ }
+ } else {
+ $r->print(&mt('No changes were made to the existing self-enrollment settings in this course.'));
+ }
+ } else {
+ $r->print(&mt('No changes were made to the existing self-enrollment settings in this course.'));
+ }
+ return;
+}
+
+sub get_selfenroll_titles {
+ my @row = ('types','registered','enroll_dates','access_dates','section');
+ my %lt = &Apache::lonlocal::texthash (
+ types => 'Users allowed to self-enroll in this course',
+ registered => 'Restrict self-enrollment to students officially registered for the course',
+ enroll_dates => 'Dates self-enrollment available',
+ access_dates => 'Course access dates for self-enrolled users',
+ section => 'Section assigned to self-enrolled users',
+ );
+ return (\@row,\%lt);
+}
+
#---------------------------------------------- end functions for &phase_two
#--------------------------------- functions for &phase_two and &phase_three