--- loncom/interface/loncreateuser.pm 2014/02/19 17:12:52 1.394
+++ loncom/interface/loncreateuser.pm 2024/02/29 21:43:33 1.406.2.20.2.5
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Create a user
#
-# $Id: loncreateuser.pm,v 1.394 2014/02/19 17:12:52 raeburn Exp $
+# $Id: loncreateuser.pm,v 1.406.2.20.2.5 2024/02/29 21:43:33 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -71,6 +71,7 @@ use Apache::longroup;
use Apache::lonuserutils;
use Apache::loncoursequeueadmin;
use LONCAPA qw(:DEFAULT :match);
+use HTML::Entities;
my $loginscript; # piece of javascript used in two separate instances
my $authformnop;
@@ -80,7 +81,7 @@ my $authformfsys;
my $authformloc;
sub initialize_authen_forms {
- my ($dom,$formname,$curr_authtype,$mode) = @_;
+ my ($dom,$formname,$curr_authtype,$mode,$readonly) = @_;
my ($krbdef,$krbdefdom) = &Apache::loncommon::get_kerberos_defaults($dom);
my %param = ( formname => $formname,
kerb_def_dom => $krbdefdom,
@@ -101,6 +102,9 @@ sub initialize_authen_forms {
$param{'mode'} = $mode;
}
}
+ if ($readonly) {
+ $param{'readonly'} = 1;
+ }
$loginscript = &Apache::loncommon::authform_header(%param);
$authformkrb = &Apache::loncommon::authform_kerberos(%param);
$authformnop = &Apache::loncommon::authform_nochange(%param);
@@ -123,14 +127,82 @@ sub auth_abbrev {
# ====================================================
sub user_quotas {
- my ($ccuname,$ccdomain) = @_;
+ my ($ccuname,$ccdomain,$name) = @_;
my %lt = &Apache::lonlocal::texthash(
- 'usrt' => "User Tools",
'cust' => "Custom quota",
'chqu' => "Change quota",
);
-
- my $quota_javascript = <<"END_SCRIPT";
+ my ($output,$longinsttype);
+ my ($usertypes,$order) = &Apache::lonnet::retrieve_inst_usertypes($ccdomain);
+ my %titles = &Apache::lonlocal::texthash (
+ portfolio => "Disk space allocated to user's portfolio files",
+ author => "Disk space allocated to user's Authoring Space",
+ );
+ my ($currquota,$quotatype,$inststatus,$defquota) =
+ &Apache::loncommon::get_user_quota($ccuname,$ccdomain,$name);
+ if ($longinsttype eq '') {
+ if ($inststatus ne '') {
+ if ($usertypes->{$inststatus} ne '') {
+ $longinsttype = $usertypes->{$inststatus};
+ }
+ }
+ }
+ my ($showquota,$custom_on,$custom_off,$defaultinfo,$colspan);
+ $custom_on = ' ';
+ $custom_off = ' checked="checked" ';
+ $colspan = ' colspan="2"';
+ if ($quotatype eq 'custom') {
+ $custom_on = $custom_off;
+ $custom_off = ' ';
+ $showquota = $currquota;
+ if ($longinsttype eq '') {
+ $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,[_2]as determined by the user's institutional".
+ " affiliation ([_3]).",$defquota,'
',$longinsttype);
+ }
+ } else {
+ if ($longinsttype eq '') {
+ $defaultinfo = &mt('For this user, the default quota is [_1]'
+ .' MB.',$defquota);
+ } else {
+ $defaultinfo = &mt("For this user, the default quota of [_1]".
+ " MB,[_2]is determined by the user's institutional".
+ " affiliation ([_3]).",$defquota,'
',$longinsttype);
+ }
+ }
+
+ if (&Apache::lonnet::allowed('mpq',$ccdomain)) {
+ $output .= '
'.$custom_access.' | '."\n". + &Apache::loncommon::end_data_table_row()."\n"; + unless (&Apache::lonnet::allowed('udp',$ccdomain)) { + $output .= &Apache::loncommon::start_data_table_row()."\n". + ''.
+ $lt{'chse'}.': '.(' ' x3).
+ ' '. + ' | '.
+ &Apache::loncommon::end_data_table_row()."\n";
}
- $custdisp .= '
'.$userpicker.'
'; + } + if (($env{'form.phase'} eq '') && ($env{'form.action'} ne 'accesslogs') && + (!(($env{'form.action'} eq 'singleuser') && ($context eq 'domain') && + (!&Apache::lonnet::allowed('mau',$env{'request.role.domain'}))))) { my $defdom=$env{'request.role.domain'}; my $domform = &Apache::loncommon::select_dom_form($defdom,'srchdomain'); my %lt=&Apache::lonlocal::texthash( @@ -946,9 +1147,13 @@ ENDSCRIPT 'usrch' => "User Search to add/modify roles", 'stusrch' => "User Search to enroll student", 'memsrch' => "User Search to enroll member", + 'srcva' => "Search for a user and view access log information", + 'usrvu' => "User Search to view user roles", 'usel' => "Select a user to add/modify roles", + 'suvr' => "Select a user to view roles", 'stusel' => "Select a user to enroll as a student", 'memsel' => "Select a user to enroll as a member", + 'vacsel' => "Select a user to view access log", 'username' => "username", 'domain' => "domain", 'lastname' => "last name", @@ -958,12 +1163,16 @@ ENDSCRIPT if ($context eq 'requestcrs') { $r->print(''
.&mt('There are no records to display.')
@@ -6352,15 +7364,378 @@ sub print_userchangelogs_display {
return;
}
-sub userlogdisplay_nav {
- my ($formname,$curr,$more_records) = @_;
- my ($nav_script,$nav_links);
- if (ref($curr) eq 'HASH') {
- # Create Navigation:
- # Navigation Script
- $nav_script = <<"ENDSCRIPT";
+sub print_useraccesslogs_display {
+ my ($r,$uname,$udom,$permission,$brcrum) = @_;
+ my $formname = 'accesslog';
+ my $form = 'document.accesslog';
+
+# set breadcrumbs
+ my %breadcrumb_text = &singleuser_breadcrumb('','domain',$udom);
+ my $prevphasestr;
+ if ($env{'form.popup'}) {
+ $brcrum = [];
+ } else {
+ push (@{$brcrum},
+ {href => "javascript:backPage($form)",
+ text => $breadcrumb_text{'search'}});
+ my @prevphases;
+ if ($env{'form.prevphases'}) {
+ @prevphases = split(/,/,$env{'form.prevphases'});
+ $prevphasestr = $env{'form.prevphases'};
+ }
+ if (($env{'form.phase'} eq 'userpicked') || (grep(/^userpicked$/,@prevphases))) {
+ push(@{$brcrum},
+ {href => "javascript:backPage($form,'get_user_info','select')",
+ text => $breadcrumb_text{'userpicked'}});
+ if ($env{'form.phase'} eq 'userpicked') {
+ $prevphasestr = 'userpicked';
+ }
+ }
+ }
+ push(@{$brcrum},
+ {href => '/adm/createuser?action=accesslogs',
+ text => 'User access logs',
+ help => 'Domain_User_Access_Logs'});
+ my $bread_crumbs_component = 'User Access Logs';
+ my $args = { bread_crumbs => $brcrum,
+ bread_crumbs_component => 'User Management'};
+ if ($env{'form.popup'}) {
+ $args->{'no_nav_bar'} = 1;
+ $args->{'bread_crumbs_nomenu'} = 1;
+ }
+
+# set javascript
+ my ($jsback,$elements) = &crumb_utilities();
+ my $jsnav = &userlogdisplay_js($formname);
+
+ my $jscript = (< '
+ .&mt('You do not have rights to display user access logs.')
+ .' '
+ .&mt("User's domain must match role's domain")
+ .' '
+ .&mt('Invalid username or domain')
+ .' '
+ .&mt('You need to be a privileged user to display user access logs for [_1]',
+ &Apache::loncommon::aboutmewrapper(&Apache::loncommon::plainname($uname,$udom),
+ $uname,$udom))
+ .' '
+ .''
+ .' ';
- if (($curr->{'page'} > 1) || ($more_records)) {
- if ($curr->{'page'} > 1) {
- $nav_links .= ' ';
- }
- if ($more_records) {
- $nav_links .= '';
- }
+}
+
+sub userlogdisplay_navlinks {
+ my ($curr,$more_records) = @_;
+ return unless(ref($curr) eq 'HASH');
+ # Navigation Buttons
+ my $nav_links = ' ';
+ if (($curr->{'page'} > 1) || ($more_records)) {
+ if (($curr->{'page'} > 1) && ($curr->{'show'} !~ /\D/)) {
+ $nav_links .= ' ';
+ }
+ if ($more_records) {
+ $nav_links .= '';
}
- $nav_links .= '
';
+ # Update Display button
+ $output .= ''.
+ ''.&mt('Actions/page:').'
'.
+ &Apache::lonmeta::selectbox('show',$curr->{'show'},undef,
+ (&mt('all'),5,10,20,50,100,1000,10000)).
+ ' ';
+ my $startform =
+ &Apache::lonhtmlcommon::date_setter($formname,'accesslog_start_date',
+ $curr->{'accesslog_start_date'},undef,
+ undef,undef,undef,undef,undef,undef,$nolink);
+ my $endform =
+ &Apache::lonhtmlcommon::date_setter($formname,'accesslog_end_date',
+ $curr->{'accesslog_end_date'},undef,
+ undef,undef,undef,undef,undef,undef,$nolink);
+ my %lt = &Apache::lonlocal::texthash (
+ activity => 'Activity',
+ Role => 'Role selection',
+ log => 'Log-in or Logout',
+ );
+ $output .= ''.&mt('Window during which actions occurred:').' '.
+ '
'.
+ '
'.
+ ' '.
+ ''.&mt('After:').
+ ' '.$startform.' '.&mt('Before:').' '.
+ ''.$endform.' '.
+ ''.&mt('Activities').' '.
+ '
'.
+ '
';
+ return $output;
+}
+
+sub userlogdisplay_js {
+ my ($formname) = @_;
+ return <<"ENDSCRIPT";
+
function chgPage(caller) {
if (caller == 'previous') {
document.$formname.page.value --;
@@ -6371,28 +7746,30 @@ function chgPage(caller) {
document.$formname.submit();
return;
}
-// ]]>
-
ENDSCRIPT
- # Navigation Buttons
- $nav_links = '