'.$authformcurrent.
@@ -2252,7 +2442,7 @@ sub modify_login_block {
sub personal_data_display {
my ($ccuname,$ccdomain,$newuser,$context,$inst_results,$rolesarray,
- $now,$captchaform,$emailusername,$usertype) = @_;
+ $now,$captchaform,$emailusername,$usertype,$usernameset,$condition,$excluded) = @_;
my ($output,%userenv,%canmodify,%canmodify_status);
my @userinfo = ('firstname','middlename','lastname','generation',
'permanentemail','id');
@@ -2279,6 +2469,7 @@ sub personal_data_display {
'inststatus' => "Affiliation",
'email' => 'E-mail address',
'valid' => 'Validation',
+ 'username' => 'Username',
);
%canmodify_status =
@@ -2297,7 +2488,7 @@ sub personal_data_display {
if (ref($emailusername) eq 'HASH') {
if (ref($emailusername->{$usertype}) eq 'HASH') {
my ($infofields,$infotitles) = &Apache::loncommon::emailusername_info();
- @userinfo = ();
+ @userinfo = ();
if ((ref($infofields) eq 'ARRAY') && (ref($infotitles) eq 'HASH')) {
foreach my $field (@{$infofields}) {
if ($emailusername->{$usertype}->{$field}) {
@@ -2327,9 +2518,38 @@ sub personal_data_display {
$output = ''.$lt{'pd'}.''.
&Apache::lonhtmlcommon::start_pick_box();
if (($context eq 'selfcreate') && ($newuser eq 'email')) {
+ my $size = 25;
+ if ($condition) {
+ if ($condition =~ /^\@[^\@]+$/) {
+ $size = 10;
+ } else {
+ undef($condition);
+ }
+ }
+ if ($excluded) {
+ unless ($excluded =~ /^\@[^\@]+$/) {
+ undef($condition);
+ }
+ }
$output .= &Apache::lonhtmlcommon::row_title($lt{'email'}.'*',undef,
'LC_oddrow_value')."\n".
- '';
+ '';
+ if ($condition) {
+ $output .= $condition;
+ } elsif ($excluded) {
+ $output .= ' '.&mt('You must use an e-mail address that does not end with [_1]',
+ $excluded).'';
+ }
+ if ($usernameset eq 'first') {
+ $output .= ' ';
+ if ($condition) {
+ $output .= &mt('Your username in LON-CAPA will be the part of your e-mail address before [_1]',
+ $condition);
+ } else {
+ $output .= &mt('Your username in LON-CAPA will be the part of your e-mail address before the @');
+ }
+ $output .= '';
+ }
$rowcount ++;
$output .= &Apache::lonhtmlcommon::row_closure(1);
my $upassone = '';
@@ -2344,6 +2564,19 @@ sub personal_data_display {
'LC_oddrow_value')."\n".
$upasstwo.
&Apache::lonhtmlcommon::row_closure()."\n";
+ if ($usernameset eq 'free') {
+ my $onclick = "toggleUsernameDisp(this,'selfcreateusername');";
+ $output .= &Apache::lonhtmlcommon::row_title($lt{'username'},undef,'LC_oddrow_value')."\n".
+ &mt('Use e-mail address: ').
+ ''."\n".
+ (' 'x2).
+ ''."\n".
+ ''.
+ ' '.&mt('Preferred username').
+ ' '.
+ ' '."\n".&Apache::lonhtmlcommon::row_closure(1);
+ $rowcount ++;
+ }
}
foreach my $item (@userinfo) {
my $rowtitle = $lt{$item};
@@ -2534,7 +2767,7 @@ sub get_inststatuses {
# ================================================================= Phase Three
sub update_user_data {
- my ($r,$context,$crstype,$brcrum,$showcredits) = @_;
+ my ($r,$context,$crstype,$brcrum,$showcredits,$permission) = @_;
my $uhome=&Apache::lonnet::homeserver($env{'form.ccuname'},
$env{'form.ccdomain'});
# Error messages
@@ -2558,7 +2791,7 @@ sub update_user_data {
$jsback."\n".
'// ]]>'."\n".
''."\n";
- my %breadcrumb_text = &singleuser_breadcrumb($crstype);
+ my %breadcrumb_text = &singleuser_breadcrumb($crstype,$context,$env{'form.ccdomain'});
push (@{$brcrum},
{href => "javascript:backPage(document.userupdate)",
text => $breadcrumb_text{'search'},
@@ -2575,6 +2808,10 @@ sub update_user_data {
my $helpitem = 'Course_Change_Privileges';
if ($env{'form.action'} eq 'singlestudent') {
$helpitem = 'Course_Add_Student';
+ } elsif ($context eq 'author') {
+ $helpitem = 'Author_Change_Privileges';
+ } elsif ($context eq 'domain') {
+ $helpitem = 'Domain_Change_Privileges';
}
push(@{$brcrum},
{href => "javascript:backPage(document.userupdate,'$env{'form.prevphase'}','modify')",
@@ -2648,6 +2885,9 @@ sub update_user_data {
$amode='localauth';
$genpwd=$env{'form.locarg'};
$genpwd=" " if (!$genpwd);
+ } elsif ($env{'form.login'} eq 'lti') {
+ $amode='lti';
+ $genpwd=" ";
} elsif (($env{'form.login'} eq 'nochange') ||
($env{'form.login'} eq '' )) {
# There is no need to tell the user we did not change what they
@@ -2667,7 +2907,7 @@ sub update_user_data {
my (%alerts,%rulematch,%inst_results,%curr_rules);
my @userinfo = ('firstname','middlename','lastname','generation','permanentemail','id');
my @usertools = ('aboutme','blog','webdav','portfolio');
- my @requestcourses = ('official','unofficial','community','textbook','placement');
+ my @requestcourses = ('official','unofficial','community','textbook','placement','lti');
my @requestauthor = ('requestauthor');
my ($othertitle,$usertypes,$types) =
&Apache::loncommon::sorted_inst_types($env{'form.ccdomain'});
@@ -2777,12 +3017,6 @@ sub update_user_data {
$newcustom{'requestauthor'},
\%changeHash,'requestauthor');
}
- if (&Apache::lonnet::allowed('cdh',$env{'request.role.domain'})) {
- my @adds = &Apache::loncommon::get_env_multiple('form.adhocroleadd');
- if (&adhocrole_changes(\%changeHash)) {
- $changed{'adhocroles.'.$env{'request.role.domain'}} = $changeHash{'adhocroles.'.$env{'request.role.domain'}};
- }
- }
}
if ($canmodify_status{'inststatus'}) {
if (exists($env{'form.inststatus'})) {
@@ -2823,6 +3057,13 @@ sub update_user_data {
# Okay, this is a non-fatal error.
$r->print($error.&mt('You do not have the authority to modify this users authentication information.').$end);
}
+ } elsif (($env{'form.intarg'} ne '') &&
+ (&Apache::lonnet::queryauthenticate($env{'form.ccuname'},$env{'form.ccdomain'}) =~ /^internal:/) &&
+ (&Apache::lonuserutils::can_change_internalpass($env{'form.ccuname'},$env{'form.ccdomain'},$crstype,$permission))) {
+ $r->print('Modifying authentication: '.
+ &Apache::lonnet::modifyuserauth(
+ $env{'form.ccdomain'},$env{'form.ccuname'},
+ 'internal',$env{'form.intarg'}));
}
$r->rflush(); # Finish display of header before time consuming actions start
&Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state);
@@ -2846,8 +3087,7 @@ sub update_user_data {
'requestcourses.community','requestcourses.textbook',
'reqcrsotherdom.official','reqcrsotherdom.unofficial',
'reqcrsotherdom.community','reqcrsotherdom.textbook',
- 'reqcrsotherdom.placement','requestauthor',
- 'adhocroles.'.$env{'request.role.domain'}],
+ 'reqcrsotherdom.placement','requestauthor'],
$env{'form.ccdomain'},$env{'form.ccuname'});
my ($tmp) = keys(%userenv);
if ($tmp =~ /^(con_lost|error)/i) {
@@ -2986,7 +3226,6 @@ sub update_user_data {
&Apache::loncommon::default_quota($env{'form.ccdomain'},$oldinststatus,$name);
($newdefquota{$name},$newsettingstatus{$name}) = ($olddefquota{$name},$oldsettingstatus{$name});
}
- push(@disporder,'adhocroles');
my %canshow;
if (&Apache::lonnet::allowed('mpq',$env{'form.ccdomain'})) {
$canshow{'quota'} = 1;
@@ -3005,9 +3244,6 @@ sub update_user_data {
if (&Apache::lonnet::allowed('cau',$env{'form.ccdomain'})) {
$canshow{'requestauthor'} = 1;
}
- if (&Apache::lonnet::allowed('cdh',$env{'request.role.domain'})) {
- $canshow{'adhocroles'} = 1;
- }
my (%changeHash,%changed);
if ($oldinststatus eq '') {
$oldsettings{'inststatus'} = $othertitle;
@@ -3121,14 +3357,6 @@ sub update_user_data {
&tool_changes('reqcrsotherdom',\@requestcourses,\%oldsettings,\%oldsettingstext,
\%userenv,\%changeHash,\%changed,\%newsettings,\%newsettingstext);
}
- if ($userenv{'adhocroles.'.$env{'request.role.domain'}}) {
- $changeHash{'adhocroles.'.$env{'request.role.domain'}} = $userenv{'adhocroles.'.$env{'request.role.domain'}};
- }
- if (&adhocrole_changes(\%changeHash,\%userenv)) {
- $changed{'adhocroles'} = 1;
- $oldsettings{'adhocroles'} = $userenv{'adhocroles.'.$env{'request.role.domain'}};
- $newsettings{'adhocroles'} = $changeHash{'adhocroles.'.$env{'request.role.domain'}};
- }
}
foreach my $item (@userinfo) {
if ($env{'form.c'.$item} ne $userenv{$item}) {
@@ -3152,7 +3380,7 @@ sub update_user_data {
foreach my $key (keys(%changed)) {
if (($key eq 'official') || ($key eq 'unofficial') ||
($key eq 'community') || ($key eq 'textbook') ||
- ($key eq 'placement')) {
+ ($key eq 'placement') || ($key eq 'lti')) {
$newenvhash{'environment.requestcourses.'.$key} =
$changeHash{'requestcourses.'.$key};
if ($changeHash{'requestcourses.'.$key}) {
@@ -3171,9 +3399,6 @@ sub update_user_data {
&Apache::lonnet::usertools_access($env{'user.name'},$env{'user.domain'},
$key,'reload','requestauthor');
}
- } elsif ($key eq 'adhocroles') {
- $newenvhash{'adhocroles.'.$env{'request.role.domain'}} =
- $changeHash{'adhocroles.'.$env{'request.role.domain'}};
} elsif ($key ne 'quota') {
$newenvhash{'environment.tools.'.$key} =
$changeHash{'tools.'.$key};
@@ -3365,8 +3590,8 @@ sub display_userinfo {
'community' => 'Can Request Communities',
'textbook' => 'Can Request Textbook Courses',
'placement' => 'Can Request Placement Tests',
+ 'lti' => 'Can Request LTI Courses',
'requestauthor' => 'Can Request Author Role',
- 'adhocroles' => 'Ad Hoc Roles Selectable via Helpdesk Role',
'inststatus' => "Affiliation",
'prvs' => 'Previous Value:',
'chto' => 'Changed To:'
@@ -3732,70 +3957,6 @@ sub tool_changes {
return;
}
-sub adhocrole_changes {
- my ($changehashref,$userenv) = @_;
- my @adds = &Apache::loncommon::get_env_multiple('form.adhocroleadd');
- my @dels = &Apache::loncommon::get_env_multiple('form.adhocroledel');
- my (@saved,@added,@alladhoc,$changed);
- my $adhoc_key = 'adhocroles.'.$env{'request.role.domain'};
- if (!$env{'form.makeuser'}) {
- if (ref($userenv) eq 'HASH') {
- my @current;
- if ($userenv->{$adhoc_key}) {
- @current = split(/,/,$userenv->{$adhoc_key});
- if (@dels) {
- foreach my $curr (@current) {
- next if ($curr eq '');
- unless (grep(/\Q$curr\E$/,@dels)) {
- push(@saved,$curr);
- }
- }
- $changed = 1;
- } else {
- @saved = @current;
- }
- }
- }
- }
- if (@adds) {
- my $confname = &Apache::lonnet::get_domainconfiguser($env{'request.role.domain'});
- my %existing=&Apache::lonnet::dump('roles',$env{'request.role.domain'},
- $confname,'rolesdef_');
- foreach my $poss (@adds) {
- if (exists($existing{'rolesdef_'.$poss})) {
- push(@added,$poss);
- $changed = 1;
- }
- }
- }
- if (@added) {
- if (@saved) {
- foreach my $add (@added) {
- unless (grep(/^\Q$add\E$/,@saved)) {
- push(@alladhoc,$add);
- }
- }
- } else {
- push(@alladhoc,@added);
- }
- }
- if (@saved) {
- push(@alladhoc,@saved);
- }
- if (@alladhoc) {
- my $adhocstr = join(',',sort(@alladhoc));
- $changehashref->{$adhoc_key} = $adhocstr;
- } elsif (@dels) {
- &Apache::lonnet::del('environment',[$adhoc_key],$env{'form.ccdomain'},$env{'form.ccuname'});
- delete($changehashref->{$adhoc_key});
- if (($env{'form.ccdomain'} eq $env{'user.domain'}) &&
- ($env{'form.ccuname'} eq $env{'user.name'})) {
- &Apache::lonnet::delenv($adhoc_key);
- }
- }
- return $changed;
-}
-
sub update_roles {
my ($r,$context,$showcredits) = @_;
my $now=time;
@@ -4326,9 +4487,9 @@ sub build_roles {
# ========================================================== Custom Role Editor
sub custom_role_editor {
- my ($r,$brcrum,$prefix) = @_;
+ my ($r,$context,$brcrum,$prefix,$permission) = @_;
my $action = $env{'form.customroleaction'};
- my $rolename;
+ my ($rolename,$helpitem);
if ($action eq 'new') {
$rolename=$env{'form.newrolename'};
} else {
@@ -4339,14 +4500,17 @@ sub custom_role_editor {
if ($env{'request.course.id'}) {
$crstype = &Apache::loncommon::course_type();
$context = 'course';
+ $helpitem = 'Course_Editing_Custom_Roles';
} else {
$context = 'domain';
$crstype = 'course';
+ $helpitem = 'Domain_Editing_Custom_Roles';
}
$rolename=~s/[^A-Za-z0-9]//gs;
if (!$rolename || $env{'form.phase'} eq 'pickrole') {
- &print_username_entry_form($r,undef,undef,undef,undef,$crstype,$brcrum);
+ &print_username_entry_form($r,$context,undef,undef,undef,$crstype,$brcrum,
+ $permission);
return;
}
@@ -4362,7 +4526,7 @@ sub custom_role_editor {
($privs{'system'},$privs{'domain'},$privs{'course'})=split(/\_/,$roledef);
if ($privs{'system'} =~ /bre\&S/) {
if ($context eq 'domain') {
- $crstype = 'Course';
+ $crstype = 'Course';
} elsif ($crstype eq 'Community') {
$privs{'system'} =~ s/bre\&S//;
}
@@ -4377,7 +4541,7 @@ sub custom_role_editor {
# ------------------------------------------------------- What can be assigned?
my %full=();
- my %levels=(
+ my %levels=(
course => {},
domain => {},
system => {},
@@ -4390,7 +4554,7 @@ sub custom_role_editor {
&Apache::lonuserutils::custom_role_privs(\%privs,\%full,\%levels,\%levelscurrent);
my ($jsback,$elements) = &crumb_utilities();
my @templateroles = &Apache::lonuserutils::custom_template_roles($context,$crstype);
- my $head_script =
+ my $head_script =
&Apache::lonuserutils::custom_roledefs_js($context,$crstype,$formname,
\%full,\@templateroles,$jsback);
push (@{$brcrum},
@@ -4401,11 +4565,10 @@ sub custom_role_editor {
text => "Edit custom role",
faq => 282,
bug => 'Instructor Interface',
- help => 'Course_Editing_Custom_Roles'}
+ help => $helpitem}
);
my $args = { bread_crumbs => $brcrum,
bread_crumbs_component => 'User Management'};
-
$r->print(&Apache::loncommon::start_page('Custom Role Editor',
$head_script,$args).
$body_top);
@@ -4422,18 +4585,18 @@ ENDCCF
$r->print(&Apache::loncommon::end_data_table().
''.
''."\n".''."\n".
+ '" />'."\n".''."\n".
''."\n".
'');
}
# ---------------------------------------------------------- Call to definerole
sub set_custom_role {
- my ($r,$context,$brcrum,$prefix) = @_;
+ my ($r,$context,$brcrum,$prefix,$permission) = @_;
my $rolename=$env{'form.rolename'};
$rolename=~s/[^A-Za-z0-9]//gs;
if (!$rolename) {
- &custom_role_editor($r,$brcrum,$prefix);
+ &custom_role_editor($r,$context,$brcrum,$prefix,$permission);
return;
}
my ($jsback,$elements) = &crumb_utilities();
@@ -4442,6 +4605,10 @@ sub set_custom_role {
.$jsback."\n"
.'// ]]>'."\n"
.''."\n";
+ my $helpitem = 'Course_Editing_Custom_Roles';
+ if ($context eq 'domain') {
+ $helpitem = 'Domain_Editing_Custom_Roles';
+ }
push(@{$brcrum},
{href => "javascript:backPage(document.customresult,'pickrole','')",
text => "Pick custom role",
@@ -4455,7 +4622,7 @@ sub set_custom_role {
text => "Result",
faq => 282,
bug => 'Instructor Interface',
- help => 'Course_Editing_Custom_Roles'},
+ help => $helpitem,}
);
my $args = { bread_crumbs => $brcrum,
bread_crumbs_component => 'User Management'};
@@ -4526,7 +4693,8 @@ sub handler {
$r->send_http_header;
return OK;
}
- my ($context,$crstype);
+ my ($context,$crstype,$cid,$cnum,$cdom,$allhelpitems);
+
if ($env{'request.course.id'}) {
$context = 'course';
$crstype = &Apache::loncommon::course_type();
@@ -4536,6 +4704,69 @@ sub handler {
$context = 'domain';
}
+ my ($permission,$allowed) =
+ &Apache::lonuserutils::get_permission($context,$crstype);
+
+ if ($allowed) {
+ my @allhelp;
+ if ($context eq 'course') {
+ $cid = $env{'request.course.id'};
+ $cdom = $env{'course.'.$cid.'.domain'};
+ $cnum = $env{'course.'.$cid.'.num'};
+
+ if ($permission->{'cusr'}) {
+ push(@allhelp,'Course_Create_Class_List');
+ }
+ if ($permission->{'view'} || $permission->{'cusr'}) {
+ push(@allhelp,('Course_Change_Privileges','Course_View_Class_List'));
+ }
+ if ($permission->{'custom'}) {
+ push(@allhelp,'Course_Editing_Custom_Roles');
+ }
+ if ($permission->{'cusr'}) {
+ push(@allhelp,('Course_Add_Student','Course_Drop_Student'));
+ }
+ unless ($permission->{'cusr_section'}) {
+ if (&Apache::lonnet::auto_run($cnum,$cdom) && (($permission->{'cusr'}) || ($permission->{'view'}))) {
+ push(@allhelp,'Course_Automated_Enrollment');
+ }
+ if ($permission->{'selfenrolladmin'}) {
+ push(@allhelp,'Course_Approve_Selfenroll');
+ }
+ }
+ if ($permission->{'grp_manage'}) {
+ push(@allhelp,'Course_Manage_Group');
+ }
+ if ($permission->{'view'} || $permission->{'cusr'}) {
+ push(@allhelp,'Course_User_Logs');
+ }
+ } elsif ($context eq 'author') {
+ push(@allhelp,('Author_Change_Privileges','Author_Create_Coauthor_List',
+ 'Author_View_Coauthor_List','Author_User_Logs'));
+ } else {
+ if ($permission->{'cusr'}) {
+ push(@allhelp,'Domain_Change_Privileges');
+ if ($permission->{'activity'}) {
+ push(@allhelp,'Domain_User_Access_Logs');
+ }
+ push(@allhelp,('Domain_Create_Users','Domain_View_Users_List'));
+ if ($permission->{'custom'}) {
+ push(@allhelp,'Domain_Editing_Custom_Roles');
+ }
+ push(@allhelp,('Domain_Role_Approvals','Domain_Username_Approvals','Domain_Change_Logs'));
+ } elsif ($permission->{'view'}) {
+ push(@allhelp,'Domain_View_Privileges');
+ if ($permission->{'activity'}) {
+ push(@allhelp,'Domain_User_Access_Logs');
+ }
+ push(@allhelp,('Domain_View_Users_List','Domain_Change_Logs'));
+ }
+ }
+ if (@allhelp) {
+ $allhelpitems = join(',',@allhelp);
+ }
+ }
+
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
['action','state','callingform','roletype','showrole','bulkaction','popup','phase',
'username','domain','srchterm','srchdomain','srchin','srchby','srchtype','queue']);
@@ -4546,13 +4777,9 @@ sub handler {
if (($env{'form.action'} ne 'dateselect') && ($env{'form.action'} ne 'displayuserreq')) {
$brcrum = [{href=>"/adm/createuser",
text=>"User Management",
- help=>'Course_Create_Class_List,Course_Change_Privileges,Course_View_Class_List,Course_Editing_Custom_Roles,Course_Add_Student,Course_Drop_Student,Course_Automated_Enrollment,Course_Self_Enrollment,Course_Manage_Group'}
+ help=>$allhelpitems}
];
}
- #SD Following files not added to help, because the corresponding .tex-files seem to
- #be missing: Course_Approve_Selfenroll,Course_User_Logs,
- my ($permission,$allowed) =
- &Apache::lonuserutils::get_permission($context,$crstype);
if (!$allowed) {
if ($context eq 'course') {
$r->internal_redirect('/adm/viewclasslist');
@@ -4584,10 +4811,16 @@ sub handler {
$r->print(&header(undef,$args));
$r->print(&print_main_menu($permission,$context,$crstype));
} elsif ($env{'form.action'} eq 'upload' && $permission->{'cusr'}) {
+ my $helpitem = 'Course_Create_Class_List';
+ if ($context eq 'author') {
+ $helpitem = 'Author_Create_Coauthor_List';
+ } elsif ($context eq 'domain') {
+ $helpitem = 'Domain_Create_Users';
+ }
push(@{$brcrum},
{ href => '/adm/createuser?action=upload&state=',
text => 'Upload Users List',
- help => 'Course_Create_Class_List',
+ help => $helpitem,
});
$bread_crumbs_component = 'Upload Users List';
$args = {bread_crumbs => $brcrum,
@@ -4599,18 +4832,45 @@ sub handler {
if (! exists($env{'form.state'})) {
&Apache::lonuserutils::print_first_users_upload_form($r,$context);
} elsif ($env{'form.state'} eq 'got_file') {
- &Apache::lonuserutils::print_upload_manager_form($r,$context,$permission,
- $crstype,$showcredits);
+ my $result =
+ &Apache::lonuserutils::print_upload_manager_form($r,$context,
+ $permission,
+ $crstype,$showcredits);
+ if ($result eq 'missingdata') {
+ delete($env{'form.state'});
+ &Apache::lonuserutils::print_first_users_upload_form($r,$context);
+ }
} elsif ($env{'form.state'} eq 'enrolling') {
if ($env{'form.datatoken'}) {
- &Apache::lonuserutils::upfile_drop_add($r,$context,$permission,
- $showcredits);
+ my $result = &Apache::lonuserutils::upfile_drop_add($r,$context,
+ $permission,
+ $showcredits);
+ if ($result eq 'missingdata') {
+ delete($env{'form.state'});
+ &Apache::lonuserutils::print_first_users_upload_form($r,$context);
+ } elsif ($result eq 'invalidhome') {
+ $env{'form.state'} = 'got_file';
+ delete($env{'form.lcserver'});
+ my $result =
+ &Apache::lonuserutils::print_upload_manager_form($r,$context,$permission,
+ $crstype,$showcredits);
+ if ($result eq 'missingdata') {
+ delete($env{'form.state'});
+ &Apache::lonuserutils::print_first_users_upload_form($r,$context);
+ }
+ }
+ } else {
+ delete($env{'form.state'});
+ &Apache::lonuserutils::print_first_users_upload_form($r,$context);
}
} else {
&Apache::lonuserutils::print_first_users_upload_form($r,$context);
}
- } elsif ((($env{'form.action'} eq 'singleuser') || ($env{'form.action'}
- eq 'singlestudent')) && ($permission->{'cusr'})) {
+ $r->print('');
+ } elsif (((($env{'form.action'} eq 'singleuser') || ($env{'form.action'}
+ eq 'singlestudent')) && ($permission->{'cusr'})) ||
+ (($env{'form.action'} eq 'singleuser') && ($permission->{'view'})) ||
+ (($env{'form.action'} eq 'accesslogs') && ($permission->{'activity'}))) {
my $phase = $env{'form.phase'};
my @search = ('srchterm','srchby','srchin','srchtype','srchdomain');
&Apache::loncreateuser::restore_prev_selections();
@@ -4619,7 +4879,7 @@ sub handler {
$srch->{$item} = $env{'form.'.$item};
}
if (($phase eq 'get_user_info') || ($phase eq 'userpicked') ||
- ($phase eq 'createnewuser')) {
+ ($phase eq 'createnewuser') || ($phase eq 'activity')) {
if ($env{'form.phase'} eq 'createnewuser') {
my $response;
if ($env{'form.srchterm'} !~ /^$match_username$/) {
@@ -4630,7 +4890,7 @@ sub handler {
.'';
$env{'form.phase'} = '';
&print_username_entry_form($r,$context,$response,$srch,undef,
- $crstype,$brcrum,$showcredits);
+ $crstype,$brcrum,$permission);
} else {
my $ccuname =&LONCAPA::clean_username($srch->{'srchterm'});
my $ccdomain=&LONCAPA::clean_domain($srch->{'srchdomain'});
@@ -4649,8 +4909,8 @@ sub handler {
&print_user_selection_page($r,$response,$srch,$results,
\@search,$context,undef,$crstype,
$brcrum);
- } elsif ($currstate eq 'modify') {
- my ($ccuname,$ccdomain);
+ } elsif (($currstate eq 'modify') || ($env{'form.action'} eq 'accesslogs')) {
+ my ($ccuname,$ccdomain,$uhome);
if (($srch->{'srchby'} eq 'uname') &&
($srch->{'srchtype'} eq 'exact')) {
$ccuname = $srch->{'srchterm'};
@@ -4661,38 +4921,68 @@ sub handler {
}
$ccuname =&LONCAPA::clean_username($ccuname);
$ccdomain=&LONCAPA::clean_domain($ccdomain);
- if ($env{'form.forcenewuser'}) {
- $response = '';
+ if ($env{'form.action'} eq 'accesslogs') {
+ my $uhome;
+ if (($ccuname ne '') && ($ccdomain ne '')) {
+ $uhome = &Apache::lonnet::homeserver($ccuname,$ccdomain);
+ }
+ if (($uhome eq '') || ($uhome eq 'no_host')) {
+ $env{'form.phase'} = '';
+ undef($forcenewuser);
+ #if ($response) {
+ # unless ($response =~ m{\Q
\E$}) {
+ # $response .= '
';
+ # }
+ #}
+ &print_username_entry_form($r,$context,$response,$srch,
+ $forcenewuser,$crstype,$brcrum,
+ $permission);
+ } else {
+ &print_useraccesslogs_display($r,$ccuname,$ccdomain,$permission,$brcrum);
+ }
+ } else {
+ if ($env{'form.forcenewuser'}) {
+ $response = '';
+ }
+ &print_user_modification_page($r,$ccuname,$ccdomain,
+ $srch,$response,$context,
+ $permission,$crstype,$brcrum);
}
- &print_user_modification_page($r,$ccuname,$ccdomain,
- $srch,$response,$context,
- $permission,$crstype,$brcrum);
} elsif ($currstate eq 'query') {
&print_user_query_page($r,'createuser',$brcrum);
} else {
$env{'form.phase'} = '';
&print_username_entry_form($r,$context,$response,$srch,
- $forcenewuser,$crstype,$brcrum);
+ $forcenewuser,$crstype,$brcrum,
+ $permission);
}
} elsif ($env{'form.phase'} eq 'userpicked') {
my $ccuname = &LONCAPA::clean_username($env{'form.seluname'});
my $ccdomain = &LONCAPA::clean_domain($env{'form.seludom'});
- &print_user_modification_page($r,$ccuname,$ccdomain,$srch,'',
- $context,$permission,$crstype,
- $brcrum);
+ if ($env{'form.action'} eq 'accesslogs') {
+ &print_useraccesslogs_display($r,$ccuname,$ccdomain,$permission,$brcrum);
+ } else {
+ &print_user_modification_page($r,$ccuname,$ccdomain,$srch,'',
+ $context,$permission,$crstype,
+ $brcrum);
+ }
+ } elsif ($env{'form.action'} eq 'accesslogs') {
+ my $ccuname = &LONCAPA::clean_username($env{'form.accessuname'});
+ my $ccdomain = &LONCAPA::clean_domain($env{'form.accessudom'});
+ &print_useraccesslogs_display($r,$ccuname,$ccdomain,$permission,$brcrum);
}
} elsif ($env{'form.phase'} eq 'update_user_data') {
- &update_user_data($r,$context,$crstype,$brcrum,$showcredits);
+ &update_user_data($r,$context,$crstype,$brcrum,$showcredits,$permission);
} else {
&print_username_entry_form($r,$context,undef,$srch,undef,$crstype,
- $brcrum);
+ $brcrum,$permission);
}
} elsif ($env{'form.action'} eq 'custom' && $permission->{'custom'}) {
my $prefix;
if ($env{'form.phase'} eq 'set_custom_roles') {
- &set_custom_role($r,$context,$brcrum,$prefix);
+ &set_custom_role($r,$context,$brcrum,$prefix,$permission);
} else {
- &custom_role_editor($r,$brcrum,$prefix);
+ &custom_role_editor($r,$context,$brcrum,$prefix,$permission);
}
} elsif (($env{'form.action'} eq 'processauthorreq') &&
($permission->{'cusr'}) &&
@@ -4798,56 +5088,92 @@ sub handler {
unless ($usertype) {
$usertype = 'default';
}
+ my ($showstatus,$showemail,$pickstart);
+ my $numextras = 0;
+ my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
+ if ((ref($types) eq 'ARRAY') && (@{$types} > 0)) {
+ if (ref($usertypes) eq 'HASH') {
+ if ($usertypes->{$usertype}) {
+ $showstatus = $usertypes->{$usertype};
+ } else {
+ $showstatus = $othertitle;
+ }
+ if ($showstatus) {
+ $numextras ++;
+ }
+ }
+ }
+ if (($info{$uname}{'email'} ne '') && ($info{$uname}{'email'} ne $uname)) {
+ $showemail = $info{$uname}{'email'};
+ $numextras ++;
+ }
if (ref($domconfig{'usercreation'}{'cancreate'}{'emailusername'}{$usertype}) eq 'HASH') {
if ((ref($infofields) eq 'ARRAY') && (ref($infotitles) eq 'HASH')) {
+ $pickstart = 1;
$r->print(''.&Apache::lonhtmlcommon::start_pick_box());
- my ($num,$count,$showstatus);
+ my ($num,$count);
$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 ++;
- }
- }
- }
+ $count += $numextras;
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 {
+ unless ($count == $num) {
$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));
+ }
+ }
+ if ($numextras) {
+ unless ($pickstart) {
+ $r->print(' '.&Apache::lonhtmlcommon::start_pick_box());
+ $pickstart = 1;
+ }
+ if ($showemail) {
+ my $closure = '';
+ unless ($showstatus) {
+ $closure = 1;
}
- $r->print(&Apache::lonhtmlcommon::end_pick_box().' ');
+ $r->print(&Apache::lonhtmlcommon::row_title(&mt('E-mail address')).
+ $showemail.
+ &Apache::lonhtmlcommon::row_closure($closure));
+ }
+ if ($showstatus) {
+ $r->print(&Apache::lonhtmlcommon::row_title(&mt('Status type[_1](self-reported)',' ')).
+ $showstatus.
+ &Apache::lonhtmlcommon::row_closure(1));
}
}
+ if ($pickstart) {
+ $r->print(&Apache::lonhtmlcommon::end_pick_box().' ');
+ } else {
+ $r->print(''.&mt('No information to display for this account request.').' ');
+ }
+ } else {
+ $r->print(''.&mt('No information available for this account request.').' ');
}
}
}
}
- $r->print(&close_popup_form());
}
+ $r->print(&close_popup_form());
} elsif (($env{'form.action'} eq 'listusers') &&
($permission->{'view'} || $permission->{'cusr'})) {
+ my $helpitem = 'Course_View_Class_List';
+ if ($context eq 'author') {
+ $helpitem = 'Author_View_Coauthor_List';
+ } elsif ($context eq 'domain') {
+ $helpitem = 'Domain_View_Users_List';
+ }
if ($env{'form.phase'} eq 'bulkchange') {
push(@{$brcrum},
{href => '/adm/createuser?action=listusers',
text => "List Users"},
{href => "/adm/createuser",
text => "Result",
- help => 'Course_View_Class_List'});
+ help => $helpitem});
$bread_crumbs_component = 'Update Users';
$args = {bread_crumbs => $brcrum,
bread_crumbs_component => $bread_crumbs_component};
@@ -4864,7 +5190,7 @@ sub handler {
push(@{$brcrum},
{href => '/adm/createuser?action=listusers',
text => "List Users",
- help => 'Course_View_Class_List'});
+ help => $helpitem});
$bread_crumbs_component = 'List Users';
$args = {bread_crumbs => $brcrum,
bread_crumbs_component => $bread_crumbs_component};
@@ -4945,9 +5271,6 @@ sub handler {
}
} elsif ($env{'form.action'} eq 'selfenroll') {
if ($permission->{selfenrolladmin}) {
- my $cid = $env{'request.course.id'};
- my $cdom = $env{'course.'.$cid.'.domain'};
- my $cnum = $env{'course.'.$cid.'.num'};
my %currsettings = (
selfenroll_types => $env{'course.'.$cid.'.internal.selfenroll_types'},
selfenroll_registered => $env{'course.'.$cid.'.internal.selfenroll_registered'},
@@ -4989,36 +5312,58 @@ sub handler {
''.&mt('You do not have permission to configure self-enrollment').'');
}
} elsif ($env{'form.action'} eq 'selfenrollqueue') {
- push(@{$brcrum},
- {href => '/adm/createuser?action=selfenrollqueue',
- text => 'Enrollment requests',
- help => 'Course_Self_Enrollment'});
- $bread_crumbs_component = 'Enrollment requests';
- if ($env{'form.state'} eq 'done') {
+ if ($permission->{selfenrolladmin}) {
push(@{$brcrum},
{href => '/adm/createuser?action=selfenrollqueue',
- text => 'Result',
- help => 'Course_Self_Enrollment'});
- $bread_crumbs_component = 'Enrollment result';
- }
- $args = { bread_crumbs => $brcrum,
- bread_crumbs_component => $bread_crumbs_component};
- $r->print(&header(undef,$args));
- my $cid = $env{'request.course.id'};
- my $cdom = $env{'course.'.$cid.'.domain'};
- my $cnum = $env{'course.'.$cid.'.num'};
- my $coursedesc = $env{'course.'.$cid.'.description'};
- if (!exists($env{'form.state'})) {
- $r->print(''.&mt('Pending enrollment requests').''."\n");
- $r->print(&Apache::loncoursequeueadmin::display_queued_requests($context,
- $cdom,$cnum));
- } elsif ($env{'form.state'} eq 'done') {
- $r->print(''.&mt('Enrollment request processing').''."\n");
- $r->print(&Apache::loncoursequeueadmin::update_request_queue($context,
- $cdom,$cnum,$coursedesc));
+ text => 'Enrollment requests',
+ help => 'Course_Approve_Selfenroll'});
+ $bread_crumbs_component = 'Enrollment requests';
+ if ($env{'form.state'} eq 'done') {
+ push(@{$brcrum},
+ {href => '/adm/createuser?action=selfenrollqueue',
+ text => 'Result',
+ help => 'Course_Approve_Selfenroll'});
+ $bread_crumbs_component = 'Enrollment result';
+ }
+ $args = { bread_crumbs => $brcrum,
+ bread_crumbs_component => $bread_crumbs_component};
+ $r->print(&header(undef,$args));
+ my $coursedesc = $env{'course.'.$cid.'.description'};
+ if (!exists($env{'form.state'})) {
+ $r->print(''.&mt('Pending enrollment requests').''."\n");
+ $r->print(&Apache::loncoursequeueadmin::display_queued_requests($context,
+ $cdom,$cnum));
+ } elsif ($env{'form.state'} eq 'done') {
+ $r->print(''.&mt('Enrollment request processing').''."\n");
+ $r->print(&Apache::loncoursequeueadmin::update_request_queue($context,
+ $cdom,$cnum,$coursedesc));
+ }
+ } else {
+ $r->print(&header(undef,{'no_nav_bar' => 1}).
+ ''.&mt('You do not have permission to manage self-enrollment').'');
}
} elsif ($env{'form.action'} eq 'changelogs') {
- &print_userchangelogs_display($r,$context,$permission,$brcrum);
+ if ($permission->{cusr} || $permission->{view}) {
+ &print_userchangelogs_display($r,$context,$permission,$brcrum);
+ } else {
+ $r->print(&header(undef,{'no_nav_bar' => 1}).
+ ''.&mt('You do not have permission to view change logs').'');
+ }
+ } elsif ($env{'form.action'} eq 'helpdesk') {
+ if (($permission->{'owner'}) || ($permission->{'co-owner'})) {
+ if ($env{'form.state'} eq 'process') {
+ if ($permission->{'owner'}) {
+ &update_helpdeskaccess($r,$permission,$brcrum);
+ } else {
+ &print_helpdeskaccess_display($r,$permission,$brcrum);
+ }
+ } else {
+ &print_helpdeskaccess_display($r,$permission,$brcrum);
+ }
+ } else {
+ $r->print(&header(undef,{'no_nav_bar' => 1}).
+ ''.&mt('You do not have permission to view helpdesk access').'');
+ }
} else {
$bread_crumbs_component = 'User Management';
$args = { bread_crumbs => $brcrum,
@@ -5270,6 +5615,26 @@ sub print_main_menu {
listusers => 'Show and manage users in this community.',
},
);
+ if ($linkcontext eq 'domain') {
+ unless ($permission->{'cusr'}) {
+ $links{'domain'}{'singleuser'} = 'View a User';
+ $linktitles{'domain'}{'singleuser'} = 'View information about a user in the domain';
+ }
+ } elsif ($linkcontext eq 'course') {
+ unless ($permission->{'cusr'}) {
+ $links{'course'}{'singleuser'} = 'View a Course User';
+ $linktitles{'course'}{'singleuser'} = 'View information about a user in this course';
+ $links{'course'}{'listusers'} = 'List Course Users';
+ $linktitles{'course'}{'listusers'} = 'Show information about users in this course';
+ }
+ } elsif ($linkcontext eq 'community') {
+ unless ($permission->{'cusr'}) {
+ $links{'community'}{'singleuser'} = 'View a Community User';
+ $linktitles{'community'}{'singleuser'} = 'View information about a user in this community';
+ $links{'community'}{'listusers'} = 'List Community Users';
+ $linktitles{'community'}{'listusers'} = 'Show information about users in this community';
+ }
+ }
my @menu = ( {categorytitle => 'Single Users',
items =>
[
@@ -5278,7 +5643,7 @@ sub print_main_menu {
icon => 'edit-redo.png',
#help => 'Course_Change_Privileges',
url => '/adm/createuser?action=singleuser',
- permission => $permission->{'cusr'},
+ permission => ($permission->{'view'} || $permission->{'cusr'}),
linktitle => $linktitles{$linkcontext}{'singleuser'},
},
]},
@@ -5310,6 +5675,16 @@ sub print_main_menu {
);
if ($context eq 'domain'){
+ push(@{ $menu[0]->{items} }, # Single Users
+ {
+ linktext => 'User Access Log',
+ icon => 'document-properties.png',
+ #help => 'Domain_User_Access_Logs',
+ url => '/adm/createuser?action=accesslogs',
+ permission => $permission->{'activity'},
+ linktitle => 'View user access log.',
+ }
+ );
push(@{ $menu[2]->{items} }, #Category: Administration
{
@@ -5341,7 +5716,7 @@ sub print_main_menu {
icon => 'document-properties.png',
#help => 'Course_User_Logs',
url => '/adm/createuser?action=changelogs',
- permission => $permission->{'cusr'},
+ permission => ($permission->{'cusr'} || $permission->{'view'}),
linktitle => 'View change log.',
},
);
@@ -5400,7 +5775,15 @@ sub print_main_menu {
},
);
push(@{ $menu[2]->{items} }, #Category: Administration
- {
+ {
+ linktext => 'Helpdesk Access',
+ icon => 'helpdesk-access.png',
+ #help => 'Course_Helpdesk_Access',
+ url => '/adm/createuser?action=helpdesk',
+ permission => ($permission->{'owner'} || $permission->{'co-owner'}),
+ linktitle => 'Helpdesk access options',
+ },
+ {
linktext => 'Custom Roles',
icon => 'emblem-photos.png',
#help => 'Course_Editing_Custom_Roles',
@@ -5421,7 +5804,7 @@ sub print_main_menu {
icon => 'document-properties.png',
#help => 'Course_User_Logs',
url => '/adm/createuser?action=changelogs',
- permission => $permission->{'cusr'},
+ permission => ($permission->{'view'} || $permission->{'cusr'}),
linktitle => 'View change log.',
},
);
@@ -5446,7 +5829,8 @@ sub print_main_menu {
icon => 'roles.png',
#help => 'Course_Automated_Enrollment',
permission => (&Apache::lonnet::auto_run($cnum,$cdom)
- && $permission->{'cusr'}),
+ && (($permission->{'cusr'}) ||
+ ($permission->{'view'}))),
url => '/adm/populate',
linktitle => 'Automated enrollment manager.',
}
@@ -5495,7 +5879,7 @@ sub restore_prev_selections {
}
sub print_selfenroll_menu {
- my ($r,$context,$cid,$cdom,$cnum,$currsettings,$additional) = @_;
+ my ($r,$context,$cid,$cdom,$cnum,$currsettings,$additional,$readonly) = @_;
my $crstype = &Apache::loncommon::course_type();
my $formname = 'selfenroll';
my $nolink = 1;
@@ -5508,6 +5892,10 @@ sub print_selfenroll_menu {
butn => 'but no user types have been checked.',
wilf => "Please uncheck 'activate' or check at least one type.",
);
+ my $disabled;
+ if ($readonly) {
+ $disabled = ' disabled="disabled"';
+ }
&js_escape(\%alerts);
my $selfenroll_js = <<"ENDSCRIPT";
function update_types(caller,num) {
@@ -5640,12 +6028,13 @@ function validate_types(form) {
}
function check_types(num,countfail,needaction) {
- var typeidx = getIndexByName('selfenroll_types_'+num);
+ var boxname = 'selfenroll_types_'+num;
+ var typeidx = getIndexByName(boxname);
var count = 0;
if (typeidx != -1) {
- if (document.$formname.elements[typeidx].length) {
- for (var k=0; k'.&mt('Yes').''.
+ "'selfenroll_all'".');"'.$disabled.' />'.&mt('Yes').''.
' '.&mt('No').' | '.
+ "'selfenroll_all'".');"'.$disabled.' />'.&mt('No').''.
&Apache::loncommon::end_data_table_row().
&Apache::loncommon::end_data_table().
&mt('Or').'
'.
@@ -5851,10 +6240,10 @@ ENDSCRIPT
.'
'
.'';
$output .= ' '.&mt('User types:').' '
- .&selfenroll_inst_types($num,$currdom,\@currinsttypes).' | '
+ .&selfenroll_inst_types($num,$currdom,\@currinsttypes,$readonly).''
.&Apache::loncommon::end_data_table_row();
$num ++;
}
@@ -5866,10 +6255,11 @@ ENDSCRIPT
} elsif ($curr_types eq '') {
$add_domtitle = &mt('Users in other domain:');
}
+ my ($trusted,$untrusted) = &Apache::lonnet::trusted_domains('enroll',$cdom);
$output .= &Apache::loncommon::start_data_table_row()
.''.$add_domtitle.' '
.&Apache::loncommon::select_dom_form('','selfenroll_newdom',
- $includeempty,$showdomdesc)
+ $includeempty,$showdomdesc,'',$trusted,$untrusted,$readonly)
.''
.' | '.&Apache::loncommon::end_data_table_row()
.&Apache::loncommon::end_data_table();
@@ -5890,15 +6280,15 @@ ENDSCRIPT
}
if ($registered) {
$regon = ' checked="checked" ';
- $regoff = ' ';
+ $regoff = '';
} else {
- $regon = ' ';
+ $regon = '';
$regoff = ' checked="checked" ';
}
$output .= ' ';
} elsif ($item eq 'enroll_dates') {
my ($starttime,$endtime);
@@ -5920,10 +6310,10 @@ ENDSCRIPT
}
my $startform =
&Apache::lonhtmlcommon::date_setter($formname,'selfenroll_start_date',$starttime,
- undef,undef,undef,undef,undef,undef,undef,$nolink);
+ $disabled,undef,undef,undef,undef,undef,undef,$nolink);
my $endform =
&Apache::lonhtmlcommon::date_setter($formname,'selfenroll_end_date',$endtime,
- undef,undef,undef,undef,undef,undef,undef,$nolink);
+ $disabled,undef,undef,undef,undef,undef,undef,$nolink);
$output .= &selfenroll_date_forms($startform,$endform);
} elsif ($item eq 'access_dates') {
my ($starttime,$endtime);
@@ -5945,10 +6335,10 @@ ENDSCRIPT
}
my $startform =
&Apache::lonhtmlcommon::date_setter($formname,'selfenroll_start_access',$starttime,
- undef,undef,undef,undef,undef,undef,undef,$nolink);
+ $disabled,undef,undef,undef,undef,undef,undef,$nolink);
my $endform =
&Apache::lonhtmlcommon::date_setter($formname,'selfenroll_end_access',$endtime,
- undef,undef,undef,undef,undef,undef,undef,$nolink);
+ $disabled,undef,undef,undef,undef,undef,undef,$nolink);
$output .= &selfenroll_date_forms($startform,$endform);
} elsif ($item eq 'section') {
my $currsec;
@@ -5972,19 +6362,19 @@ ENDSCRIPT
next;
}
my $sections_select =
- &Apache::lonuserutils::course_sections(\%sections_count,'st',$currsec);
+ &Apache::lonuserutils::course_sections(\%sections_count,'st',$currsec,$disabled);
$output .= ''."\n";
} elsif ($item eq 'approval') {
my ($currnotified,$currapproval,%appchecked);
my %selfdescs = &Apache::lonuserutils::selfenroll_default_descs();
- if (ref($currsettings) eq 'HASH') {
+ if (ref($currsettings) eq 'HASH') {
$currnotified = $currsettings->{'selfenroll_notifylist'};
$currapproval = $currsettings->{'selfenroll_approval'};
}
@@ -6000,8 +6390,8 @@ ENDSCRIPT
for my $i (0..2) {
$output .= ''.(' 'x2);
+ $appchecked{$i}.' onclick="toggleNotify();"'.$disabled.' />'.
+ $selfdescs{'approval'}{$i}.''.(' 'x2);
}
my %advhash = &Apache::lonnet::get_course_adv_roles($cid,1);
my (@ccs,%notified);
@@ -6042,7 +6432,7 @@ ENDSCRIPT
&Apache::loncommon::start_data_table_row()
}
$output .= ' | ';
$count ++;
@@ -6092,26 +6482,28 @@ ENDSCRIPT
$nolimit = ' checked="checked" ';
}
$output .= '';
+ '