version 1.415, 2016/10/10 02:53:02
|
version 1.417, 2016/10/22 17:56:12
|
Line 533 sub domainrole_req {
|
Line 533 sub domainrole_req {
|
|
|
sub domadhocroles { |
sub domadhocroles { |
my ($ccuname,$ccdomain) = @_; |
my ($ccuname,$ccdomain) = @_; |
my $confname = &Apache::lonnet::get_domainconfiguser($env{'request.role.domain'}); |
my $confname = &Apache::lonnet::get_domainconfiguser($env{'request.role.domain'}); |
my %existing=&Apache::lonnet::dump('roles',$env{'request.role.domain'}, |
my %existing=&Apache::lonnet::dump('roles',$env{'request.role.domain'}, |
$confname,'rolesdef_'); |
$confname,'rolesdef_'); |
my $output; |
my $output; |
if (keys(%existing) > 0) { |
if (keys(%existing) > 0) { |
my @current; |
my @current; |
my $curradhoc = 'adhocroles.'.$env{'request.role.domain'}; |
my $curradhoc = 'adhocroles.'.$env{'request.role.domain'}; |
my %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname,$curradhoc); |
my %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname,$curradhoc); |
if ($userenv{$curradhoc}) { |
if ($userenv{$curradhoc}) { |
@current = split(/,/,$userenv{$curradhoc}); |
@current = split(/,/,$userenv{$curradhoc}); |
Line 560 sub domadhocroles {
|
Line 560 sub domadhocroles {
|
&Apache::loncommon::start_data_table_header_row(). |
&Apache::loncommon::start_data_table_header_row(). |
'<th>'.&mt('Action').'</th><th>'.&mt('Role').'</th>'. |
'<th>'.&mt('Action').'</th><th>'.&mt('Role').'</th>'. |
'<th>'.&mt('Privileges in Course').'<th>'. |
'<th>'.&mt('Privileges in Course').'<th>'. |
&Apache::loncommon::end_data_table_header_row(); |
&Apache::loncommon::end_data_table_header_row(); |
foreach my $key (sort(keys(%customroles))) { |
foreach my $key (sort(keys(%customroles))) { |
$output .= &Apache::loncommon::start_data_table_row(); |
$output .= &Apache::loncommon::start_data_table_row(); |
if (grep(/^\Q$key\E$/,@current)) { |
if (grep(/^\Q$key\E$/,@current)) { |
Line 583 sub domadhocroles {
|
Line 583 sub domadhocroles {
|
} |
} |
my @privs = split(/:/,$customroles{$key}{$level}); |
my @privs = split(/:/,$customroles{$key}{$level}); |
foreach my $item (@privs) { |
foreach my $item (@privs) { |
next if ($item eq ''); |
next if ($item eq ''); |
my ($priv,$cond) = split(/\&/,$item); |
my ($priv,$cond) = split(/\&/,$item); |
$output .= &Apache::lonnet::plaintext($priv,'Course').$suffix.'<br />'; |
$output .= &Apache::lonnet::plaintext($priv,'Course').$suffix.'<br />'; |
} |
} |
Line 737 sub print_username_entry_form {
|
Line 737 sub print_username_entry_form {
|
$helpitem = 'Course_Editing_Custom_Roles'; |
$helpitem = 'Course_Editing_Custom_Roles'; |
} elsif ($env{'form.action'} eq 'singlestudent') { |
} elsif ($env{'form.action'} eq 'singlestudent') { |
$helpitem = 'Course_Add_Student'; |
$helpitem = 'Course_Add_Student'; |
|
} elsif ($env{'form.action'} eq 'accesslogs') { |
|
$helpitem = 'Domain_User_Access_Logs'; |
} |
} |
my %breadcrumb_text = &singleuser_breadcrumb($crstype); |
my %breadcrumb_text = &singleuser_breadcrumb($crstype); |
if ($env{'form.action'} eq 'custom') { |
if ($env{'form.action'} eq 'custom') { |
Line 766 sub print_username_entry_form {
|
Line 768 sub print_username_entry_form {
|
'srst' => 'Search for a user and enroll as a student', |
'srst' => 'Search for a user and enroll as a student', |
'srme' => 'Search for a user and enroll as a member', |
'srme' => 'Search for a user and enroll as a member', |
'srad' => 'Search for a user and modify/add user information or roles', |
'srad' => 'Search for a user and modify/add user information or roles', |
|
'srva' => 'Search for a user and view access log information', |
'usr' => "Username", |
'usr' => "Username", |
'dom' => "Domain", |
'dom' => "Domain", |
'ecrp' => "Define or Edit Custom Role", |
'ecrp' => "Define or Edit Custom Role", |
Line 818 sub print_username_entry_form {
|
Line 821 sub print_username_entry_form {
|
} else { |
} else { |
$actiontext = $lt{'srst'}; |
$actiontext = $lt{'srst'}; |
} |
} |
|
} elsif ($env{'form.action'} eq 'accesslogs') { |
|
$actiontext = $lt{'srva'}; |
} |
} |
$r->print("<h3>$actiontext</h3>"); |
$r->print("<h3>$actiontext</h3>"); |
if ($env{'form.origform'} ne 'crtusername') { |
if ($env{'form.origform'} ne 'crtusername') { |
Line 826 sub print_username_entry_form {
|
Line 831 sub print_username_entry_form {
|
'<br clear="all" />'); |
'<br clear="all" />'); |
} |
} |
} |
} |
$r->print(&entry_form($defdom,$srch,$forcenewuser,$context,$response,$crstype)); |
$r->print(&entry_form($defdom,$srch,$forcenewuser,$context,$response,$crstype,1)); |
} |
} |
} |
} |
|
|
Line 869 END
|
Line 874 END
|
} |
} |
|
|
sub entry_form { |
sub entry_form { |
my ($dom,$srch,$forcenewuser,$context,$responsemsg,$crstype) = @_; |
my ($dom,$srch,$forcenewuser,$context,$responsemsg,$crstype,$fixeddom) = @_; |
my ($usertype,$inexact); |
my ($usertype,$inexact); |
if (ref($srch) eq 'HASH') { |
if (ref($srch) eq 'HASH') { |
if (($srch->{'srchin'} eq 'dom') && |
if (($srch->{'srchin'} eq 'dom') && |
Line 889 sub entry_form {
|
Line 894 sub entry_form {
|
&Apache::lonuserutils::can_create_user($dom,$context,$usertype); |
&Apache::lonuserutils::can_create_user($dom,$context,$usertype); |
my ($userpicker,$cansearch) = |
my ($userpicker,$cansearch) = |
&Apache::loncommon::user_picker($dom,$srch,$forcenewuser, |
&Apache::loncommon::user_picker($dom,$srch,$forcenewuser, |
'document.crtuser',$cancreate,$usertype); |
'document.crtuser',$cancreate,$usertype,$context,$fixeddom); |
my $srchbutton = &mt('Search'); |
my $srchbutton = &mt('Search'); |
if ($env{'form.action'} eq 'singlestudent') { |
if ($env{'form.action'} eq 'singlestudent') { |
$srchbutton = &mt('Search and Enroll'); |
$srchbutton = &mt('Search and Enroll'); |
|
} elsif ($env{'form.action'} eq 'accesslogs') { |
|
$srchbutton = &mt('Search'); |
} elsif ($cancreate && $responsemsg ne '' && $inexact) { |
} elsif ($cancreate && $responsemsg ne '' && $inexact) { |
$srchbutton = &mt('Search or Add New User'); |
$srchbutton = &mt('Search or Add New User'); |
} |
} |
Line 909 ENDBLOCK
|
Line 916 ENDBLOCK
|
} else { |
} else { |
$output = '<p>'.$userpicker.'</p>'; |
$output = '<p>'.$userpicker.'</p>'; |
} |
} |
if ($env{'form.phase'} eq '') { |
if (($env{'form.phase'} eq '') && ($env{'form.action'} ne 'accesslogs')) { |
my $defdom=$env{'request.role.domain'}; |
my $defdom=$env{'request.role.domain'}; |
my $domform = &Apache::loncommon::select_dom_form($defdom,'srchdomain'); |
my $domform = &Apache::loncommon::select_dom_form($defdom,'srchdomain'); |
my %lt=&Apache::lonlocal::texthash( |
my %lt=&Apache::lonlocal::texthash( |
Line 1025 ENDSCRIPT
|
Line 1032 ENDSCRIPT
|
'usrch' => "User Search to add/modify roles", |
'usrch' => "User Search to add/modify roles", |
'stusrch' => "User Search to enroll student", |
'stusrch' => "User Search to enroll student", |
'memsrch' => "User Search to enroll member", |
'memsrch' => "User Search to enroll member", |
|
'srcva' => "Search for a user and view access log information", |
'usel' => "Select a user to add/modify roles", |
'usel' => "Select a user to add/modify roles", |
'stusel' => "Select a user to enroll as a student", |
'stusel' => "Select a user to enroll as a student", |
'memsel' => "Select a user to enroll as a member", |
'memsel' => "Select a user to enroll as a member", |
|
'vacsel' => "Select a user to view access log", |
'username' => "username", |
'username' => "username", |
'domain' => "domain", |
'domain' => "domain", |
'lastname' => "last name", |
'lastname' => "last name", |
Line 1076 ENDSCRIPT
|
Line 1085 ENDSCRIPT
|
$r->print($lt{'stusel'}); |
$r->print($lt{'stusel'}); |
} |
} |
$r->print('</h3>'); |
$r->print('</h3>'); |
|
} elsif ($env{'form.action'} eq 'accesslogs') { |
|
$r->print("<b>$lt{'srcva'}</b><br />"); |
|
$r->print(&entry_form($srch->{'srchdomain'},$srch,undef,'accesslogs',undef,undef,1)); |
|
$r->print('<h3>'.$lt{'vacsel'}.'</h3>'); |
} |
} |
} |
} |
$r->print('<form name="usersrchform" method="post" action="">'. |
$r->print('<form name="usersrchform" method="post" action="">'. |
Line 1611 sub singleuser_breadcrumb {
|
Line 1624 sub singleuser_breadcrumb {
|
} |
} |
$breadcrumb_text{'userpicked'} = 'Select a user', |
$breadcrumb_text{'userpicked'} = 'Select a user', |
$breadcrumb_text{'modify'} = 'Set section/dates', |
$breadcrumb_text{'modify'} = 'Set section/dates', |
|
} elsif ($env{'form.action'} eq 'accesslogs') { |
|
$breadcrumb_text{'search'} = 'View access logs for a user'; |
|
$breadcrumb_text{'userpicked'} = 'Select a user', |
|
$breadcrumb_text{'activity'} = 'Activity', |
} else { |
} else { |
$breadcrumb_text{'search'} = 'Create/modify a user'; |
$breadcrumb_text{'search'} = 'Create/modify a user'; |
$breadcrumb_text{'userpicked'} = 'Select a user', |
$breadcrumb_text{'userpicked'} = 'Select a user', |
Line 2781 sub update_user_data {
|
Line 2798 sub update_user_data {
|
my @adds = &Apache::loncommon::get_env_multiple('form.adhocroleadd'); |
my @adds = &Apache::loncommon::get_env_multiple('form.adhocroleadd'); |
if (&adhocrole_changes(\%changeHash)) { |
if (&adhocrole_changes(\%changeHash)) { |
$changed{'adhocroles.'.$env{'request.role.domain'}} = $changeHash{'adhocroles.'.$env{'request.role.domain'}}; |
$changed{'adhocroles.'.$env{'request.role.domain'}} = $changeHash{'adhocroles.'.$env{'request.role.domain'}}; |
} |
} |
} |
} |
} |
} |
if ($canmodify_status{'inststatus'}) { |
if ($canmodify_status{'inststatus'}) { |
Line 3127 sub update_user_data {
|
Line 3144 sub update_user_data {
|
if (&adhocrole_changes(\%changeHash,\%userenv)) { |
if (&adhocrole_changes(\%changeHash,\%userenv)) { |
$changed{'adhocroles'} = 1; |
$changed{'adhocroles'} = 1; |
$oldsettings{'adhocroles'} = $userenv{'adhocroles.'.$env{'request.role.domain'}}; |
$oldsettings{'adhocroles'} = $userenv{'adhocroles.'.$env{'request.role.domain'}}; |
$newsettings{'adhocroles'} = $changeHash{'adhocroles.'.$env{'request.role.domain'}}; |
$newsettings{'adhocroles'} = $changeHash{'adhocroles.'.$env{'request.role.domain'}}; |
} |
} |
} |
} |
foreach my $item (@userinfo) { |
foreach my $item (@userinfo) { |
Line 3745 sub adhocrole_changes {
|
Line 3762 sub adhocrole_changes {
|
@current = split(/,/,$userenv->{$adhoc_key}); |
@current = split(/,/,$userenv->{$adhoc_key}); |
if (@dels) { |
if (@dels) { |
foreach my $curr (@current) { |
foreach my $curr (@current) { |
next if ($curr eq ''); |
next if ($curr eq ''); |
unless (grep(/\Q$curr\E$/,@dels)) { |
unless (grep(/\Q$curr\E$/,@dels)) { |
push(@saved,$curr); |
push(@saved,$curr); |
} |
} |
Line 3783 sub adhocrole_changes {
|
Line 3800 sub adhocrole_changes {
|
push(@alladhoc,@saved); |
push(@alladhoc,@saved); |
} |
} |
if (@alladhoc) { |
if (@alladhoc) { |
my $adhocstr = join(',',sort(@alladhoc)); |
my $adhocstr = join(',',sort(@alladhoc)); |
$changehashref->{$adhoc_key} = $adhocstr; |
$changehashref->{$adhoc_key} = $adhocstr; |
} elsif (@dels) { |
} elsif (@dels) { |
&Apache::lonnet::del('environment',[$adhoc_key],$env{'form.ccdomain'},$env{'form.ccuname'}); |
&Apache::lonnet::del('environment',[$adhoc_key],$env{'form.ccdomain'},$env{'form.ccuname'}); |
Line 4362 sub custom_role_editor {
|
Line 4379 sub custom_role_editor {
|
($privs{'system'},$privs{'domain'},$privs{'course'})=split(/\_/,$roledef); |
($privs{'system'},$privs{'domain'},$privs{'course'})=split(/\_/,$roledef); |
if ($privs{'system'} =~ /bre\&S/) { |
if ($privs{'system'} =~ /bre\&S/) { |
if ($context eq 'domain') { |
if ($context eq 'domain') { |
$crstype = 'Course'; |
$crstype = 'Course'; |
} elsif ($crstype eq 'Community') { |
} elsif ($crstype eq 'Community') { |
$privs{'system'} =~ s/bre\&S//; |
$privs{'system'} =~ s/bre\&S//; |
} |
} |
Line 4377 sub custom_role_editor {
|
Line 4394 sub custom_role_editor {
|
|
|
# ------------------------------------------------------- What can be assigned? |
# ------------------------------------------------------- What can be assigned? |
my %full=(); |
my %full=(); |
my %levels=( |
my %levels=( |
course => {}, |
course => {}, |
domain => {}, |
domain => {}, |
system => {}, |
system => {}, |
Line 4390 sub custom_role_editor {
|
Line 4407 sub custom_role_editor {
|
&Apache::lonuserutils::custom_role_privs(\%privs,\%full,\%levels,\%levelscurrent); |
&Apache::lonuserutils::custom_role_privs(\%privs,\%full,\%levels,\%levelscurrent); |
my ($jsback,$elements) = &crumb_utilities(); |
my ($jsback,$elements) = &crumb_utilities(); |
my @templateroles = &Apache::lonuserutils::custom_template_roles($context,$crstype); |
my @templateroles = &Apache::lonuserutils::custom_template_roles($context,$crstype); |
my $head_script = |
my $head_script = |
&Apache::lonuserutils::custom_roledefs_js($context,$crstype,$formname, |
&Apache::lonuserutils::custom_roledefs_js($context,$crstype,$formname, |
\%full,\@templateroles,$jsback); |
\%full,\@templateroles,$jsback); |
push (@{$brcrum}, |
push (@{$brcrum}, |
Line 4422 ENDCCF
|
Line 4439 ENDCCF
|
$r->print(&Apache::loncommon::end_data_table(). |
$r->print(&Apache::loncommon::end_data_table(). |
'<input type="hidden" name="action" value="'.$env{'form.action'}.'" />'. |
'<input type="hidden" name="action" value="'.$env{'form.action'}.'" />'. |
'<input type="hidden" name="startrolename" value="'.$env{'form.rolename'}. |
'<input type="hidden" name="startrolename" value="'.$env{'form.rolename'}. |
'" />'."\n".'<input type="hidden" name="currstate" value="" />'."\n". |
'" />'."\n".'<input type="hidden" name="currstate" value="" />'."\n". |
'<input type="reset" value="'.&mt("Reset").'" />'."\n". |
'<input type="reset" value="'.&mt("Reset").'" />'."\n". |
'<input type="submit" value="'.&mt('Save').'" /></form>'); |
'<input type="submit" value="'.&mt('Save').'" /></form>'); |
} |
} |
Line 4609 sub handler {
|
Line 4626 sub handler {
|
} else { |
} else { |
&Apache::lonuserutils::print_first_users_upload_form($r,$context); |
&Apache::lonuserutils::print_first_users_upload_form($r,$context); |
} |
} |
} elsif ((($env{'form.action'} eq 'singleuser') || ($env{'form.action'} |
} elsif (((($env{'form.action'} eq 'singleuser') || ($env{'form.action'} |
eq 'singlestudent')) && ($permission->{'cusr'})) { |
eq 'singlestudent')) && ($permission->{'cusr'})) || |
|
(($env{'form.action'} eq 'accesslogs') && ($permission->{'activity'}))) { |
my $phase = $env{'form.phase'}; |
my $phase = $env{'form.phase'}; |
my @search = ('srchterm','srchby','srchin','srchtype','srchdomain'); |
my @search = ('srchterm','srchby','srchin','srchtype','srchdomain'); |
&Apache::loncreateuser::restore_prev_selections(); |
&Apache::loncreateuser::restore_prev_selections(); |
Line 4619 sub handler {
|
Line 4637 sub handler {
|
$srch->{$item} = $env{'form.'.$item}; |
$srch->{$item} = $env{'form.'.$item}; |
} |
} |
if (($phase eq 'get_user_info') || ($phase eq 'userpicked') || |
if (($phase eq 'get_user_info') || ($phase eq 'userpicked') || |
($phase eq 'createnewuser')) { |
($phase eq 'createnewuser') || ($phase eq 'activity')) { |
if ($env{'form.phase'} eq 'createnewuser') { |
if ($env{'form.phase'} eq 'createnewuser') { |
my $response; |
my $response; |
if ($env{'form.srchterm'} !~ /^$match_username$/) { |
if ($env{'form.srchterm'} !~ /^$match_username$/) { |
Line 4649 sub handler {
|
Line 4667 sub handler {
|
&print_user_selection_page($r,$response,$srch,$results, |
&print_user_selection_page($r,$response,$srch,$results, |
\@search,$context,undef,$crstype, |
\@search,$context,undef,$crstype, |
$brcrum); |
$brcrum); |
} elsif ($currstate eq 'modify') { |
} elsif (($currstate eq 'modify') || ($env{'form.action'} eq 'accesslogs')) { |
my ($ccuname,$ccdomain); |
my ($ccuname,$ccdomain,$uhome); |
if (($srch->{'srchby'} eq 'uname') && |
if (($srch->{'srchby'} eq 'uname') && |
($srch->{'srchtype'} eq 'exact')) { |
($srch->{'srchtype'} eq 'exact')) { |
$ccuname = $srch->{'srchterm'}; |
$ccuname = $srch->{'srchterm'}; |
Line 4661 sub handler {
|
Line 4679 sub handler {
|
} |
} |
$ccuname =&LONCAPA::clean_username($ccuname); |
$ccuname =&LONCAPA::clean_username($ccuname); |
$ccdomain=&LONCAPA::clean_domain($ccdomain); |
$ccdomain=&LONCAPA::clean_domain($ccdomain); |
if ($env{'form.forcenewuser'}) { |
if ($env{'form.action'} eq 'accesslogs') { |
$response = ''; |
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<br /><br />\E$}) { |
|
# $response .= '<br /><br />'; |
|
# } |
|
#} |
|
&print_username_entry_form($r,$context,$response,$srch, |
|
$forcenewuser,$crstype,$brcrum); |
|
} 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') { |
} elsif ($currstate eq 'query') { |
&print_user_query_page($r,'createuser',$brcrum); |
&print_user_query_page($r,'createuser',$brcrum); |
} else { |
} else { |
Line 4677 sub handler {
|
Line 4715 sub handler {
|
} elsif ($env{'form.phase'} eq 'userpicked') { |
} elsif ($env{'form.phase'} eq 'userpicked') { |
my $ccuname = &LONCAPA::clean_username($env{'form.seluname'}); |
my $ccuname = &LONCAPA::clean_username($env{'form.seluname'}); |
my $ccdomain = &LONCAPA::clean_domain($env{'form.seludom'}); |
my $ccdomain = &LONCAPA::clean_domain($env{'form.seludom'}); |
&print_user_modification_page($r,$ccuname,$ccdomain,$srch,'', |
if ($env{'form.action'} eq 'accesslogs') { |
$context,$permission,$crstype, |
&print_useraccesslogs_display($r,$ccuname,$ccdomain,$permission,$brcrum); |
$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') { |
} elsif ($env{'form.phase'} eq 'update_user_data') { |
&update_user_data($r,$context,$crstype,$brcrum,$showcredits); |
&update_user_data($r,$context,$crstype,$brcrum,$showcredits); |
Line 5310 sub print_main_menu {
|
Line 5356 sub print_main_menu {
|
); |
); |
|
|
if ($context eq 'domain'){ |
if ($context eq 'domain'){ |
|
push(@{ $menu[0]->{items} }, # Single Users |
|
{ |
|
linktext => 'User Access Log', |
|
icon => 'document-properties.png', |
|
#help => 'User_Access_Logs', |
|
url => '/adm/createuser?action=accesslogs', |
|
permission => $permission->{'activity'}, |
|
linktitle => 'View user access log.', |
|
} |
|
); |
|
|
push(@{ $menu[2]->{items} }, #Category: Administration |
push(@{ $menu[2]->{items} }, #Category: Administration |
{ |
{ |
Line 6591 ENDSCRIPT
|
Line 6647 ENDSCRIPT
|
return; |
return; |
} |
} |
|
|
|
sub print_useraccesslogs_display { |
|
my ($r,$uname,$udom,$permission,$brcrum) = @_; |
|
my $formname = 'accesslog'; |
|
my $form = 'document.accesslog'; |
|
|
|
# set breadcrumbs |
|
my %breadcrumb_text = &singleuser_breadcrumb(); |
|
push (@{$brcrum}, |
|
{href => "javascript:backPage($form)", |
|
text => $breadcrumb_text{'search'}}); |
|
my (@prevphases,$prevphasestr); |
|
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 => 'User_Access_Logs'}); |
|
my $bread_crumbs_component = 'User Access Logs'; |
|
my $args = { bread_crumbs => $brcrum, |
|
bread_crumbs_component => 'User Management'}; |
|
|
|
# set javascript |
|
my ($jsback,$elements) = &crumb_utilities(); |
|
my $jsnav = &userlogdisplay_js($formname); |
|
|
|
my $jscript = (<<ENDSCRIPT); |
|
<script type="text/javascript"> |
|
// <![CDATA[ |
|
|
|
$jsback |
|
$jsnav |
|
|
|
// ]]> |
|
</script> |
|
|
|
ENDSCRIPT |
|
|
|
# print page header |
|
$r->print(&header($jscript,$args)); |
|
|
|
# early out unless log data can be displayed. |
|
unless ($permission->{'activity'}) { |
|
$r->print('<p class="LC_warning">' |
|
.&mt('You do not have rights to display user access logs.') |
|
.'</p>' |
|
.&earlyout_accesslog_form($formname,$prevphasestr,$udom)); |
|
return; |
|
} |
|
|
|
unless ($udom eq $env{'request.role.domain'}) { |
|
$r->print('<p class="LC_warning">' |
|
.&mt("User's domain must match role's domain") |
|
.'</p>' |
|
.&earlyout_accesslog_form($formname,$prevphasestr,$udom)); |
|
return; |
|
} |
|
|
|
if (($uname eq '') || ($udom eq '')) { |
|
$r->print('<p class="LC_warning">' |
|
.&mt('Invalid username or domain') |
|
.'</p>' |
|
.&earlyout_accesslog_form($formname,$prevphasestr,$udom)); |
|
return; |
|
} |
|
|
|
# set defaults |
|
my $now = time(); |
|
my $defstart = $now - (7*24*3600); |
|
my %defaults = ( |
|
page => '1', |
|
show => '10', |
|
activity => 'any', |
|
accesslog_start_date => $defstart, |
|
accesslog_end_date => $now, |
|
); |
|
my $more_records = 0; |
|
|
|
# set current |
|
my %curr; |
|
foreach my $item ('show','page','activity') { |
|
$curr{$item} = $env{'form.'.$item}; |
|
} |
|
my ($startdate,$enddate) = |
|
&Apache::lonuserutils::get_dates_from_form('accesslog_start_date','accesslog_end_date'); |
|
$curr{'accesslog_start_date'} = $startdate; |
|
$curr{'accesslog_end_date'} = $enddate; |
|
foreach my $key (keys(%defaults)) { |
|
if ($curr{$key} eq '') { |
|
$curr{$key} = $defaults{$key}; |
|
} |
|
} |
|
my ($minshown,$maxshown); |
|
$minshown = 1; |
|
my $count = 0; |
|
if ($curr{'show'} =~ /\D/) { |
|
$curr{'page'} = 1; |
|
} else { |
|
$maxshown = $curr{'page'} * $curr{'show'}; |
|
if ($curr{'page'} > 1) { |
|
$minshown = 1 + ($curr{'page'} - 1) * $curr{'show'}; |
|
} |
|
} |
|
|
|
# form header |
|
$r->print('<form action="/adm/createuser" method="post" name="'.$formname.'">'. |
|
&activity_display_filter($formname,\%curr)); |
|
|
|
my $showntableheader = 0; |
|
my ($nav_script,$nav_links); |
|
|
|
# table header |
|
my $tableheader = |
|
&Apache::loncommon::start_data_table_header_row() |
|
.'<th> </th>' |
|
.'<th>'.&mt('When').'</th>' |
|
.'<th>'.&mt('HostID').'</th>' |
|
.'<th>'.&mt('Event').'</th>' |
|
.'<th>'.&mt('Other data').'</th>' |
|
.&Apache::loncommon::end_data_table_header_row(); |
|
|
|
my %filters=( |
|
start => $curr{'accesslog_start_date'}, |
|
end => $curr{'accesslog_end_date'}, |
|
action => $curr{'activity'}, |
|
); |
|
|
|
my $reply = &Apache::lonnet::userlog_query($uname,$udom,%filters); |
|
unless ( ($reply =~/^timeout/) || ($reply =~/^error/) ) { |
|
my (%courses,%missing); |
|
my @results = split(/\&/,$reply); |
|
foreach my $item (reverse(@results)) { |
|
my ($timestamp,$host,$event) = split(/:/,$item); |
|
next unless ($event =~ /^(Log|Role)/); |
|
if ($curr{'show'} !~ /\D/) { |
|
if ($count >= $curr{'page'} * $curr{'show'}) { |
|
$more_records = 1; |
|
last; |
|
} |
|
} |
|
$count ++; |
|
next if ($count < $minshown); |
|
unless ($showntableheader) { |
|
$r->print($nav_script |
|
.&Apache::loncommon::start_data_table() |
|
.$tableheader); |
|
$r->rflush(); |
|
$showntableheader = 1; |
|
} |
|
my ($shown,$extra,); |
|
my ($event,$data) = split(/\s+/,&unescape($event)); |
|
if ($event eq 'Role') { |
|
my ($rolecode,$extent) = split(/\./,$data,2); |
|
next if ($extent eq ''); |
|
my ($crstype,$desc,$info); |
|
if ($extent =~ m{^/($match_domain)/($match_courseid)$}) { |
|
my ($cdom,$cnum) = ($1,$2); |
|
my $cid = $cdom.'_'.$cnum; |
|
if (exists($courses{$cid})) { |
|
$crstype = $courses{$cid}{'type'}; |
|
$desc = $courses{$cid}{'description'}; |
|
} elsif ($missing{$cid}) { |
|
$crstype = 'Course'; |
|
$desc = 'Course/Community'; |
|
} else { |
|
my %crsinfo = &Apache::lonnet::courseiddump($cdom,'.',1,'.','.',$cnum,undef,undef,'.'); |
|
if (ref($crsinfo{$cdom.'_'.$cnum}) eq 'HASH') { |
|
$courses{$cid} = $crsinfo{$cid}; |
|
$crstype = $crsinfo{$cid}{'type'}; |
|
$desc = $crsinfo{$cid}{'description'}; |
|
} else { |
|
$missing{$cid} = 1; |
|
} |
|
} |
|
$extra = &mt($crstype).': <a href="/public/'.$cdom.'/'.$cnum.'/syllabus">'.$desc.'</a>'; |
|
} elsif ($extent =~ m{^/($match_domain)/($match_username|$)}) { |
|
my ($dom,$name) = ($1,$2); |
|
if ($rolecode eq 'au') { |
|
$extra = ''; |
|
} elsif ($rolecode =~ /^(ca|aa)$/) { |
|
$extra = &mt('Authoring Space: [_1]',$name.':'.$dom); |
|
} elsif ($rolecode =~ /^(li|dg|dh|dc|sc)$/) { |
|
$extra = &mt('Domain: [_1]',$dom); |
|
} |
|
} |
|
my $rolename; |
|
if ($rolecode =~ m{^cr/($match_domain)/($match_username)/(\w+)}) { |
|
my $role = $3; |
|
my $owner = "($2:$1)"; |
|
if ($2 eq $1.'-domainconfig') { |
|
$owner = '(ad hoc)'; |
|
} |
|
$rolename = &mt('Custom role: [_1]',$role.' '.$owner); |
|
} else { |
|
$rolename = &Apache::lonnet::plaintext($rolecode,$crstype); |
|
} |
|
$shown = &mt('Role selection: [_1]',$rolename); |
|
} else { |
|
$shown = &mt($event); |
|
if ($data ne '') { |
|
$extra = &mt('Client IP address: [_1]',$data); |
|
} |
|
} |
|
$r->print( |
|
&Apache::loncommon::start_data_table_row() |
|
.'<td>'.$count.'</td>' |
|
.'<td>'.&Apache::lonlocal::locallocaltime($timestamp).'</td>' |
|
.'<td>'.$host.'</td>' |
|
.'<td>'.$shown.'</td>' |
|
.'<td>'.$extra.'</td>' |
|
.&Apache::loncommon::end_data_table_row()."\n"); |
|
} |
|
} |
|
|
|
if ($showntableheader) { # Table footer, if content displayed above |
|
$r->print(&Apache::loncommon::end_data_table(). |
|
&userlogdisplay_navlinks(\%curr,$more_records)); |
|
} else { # No content displayed above |
|
$r->print('<p class="LC_info">' |
|
.&mt('There are no records to display.') |
|
.'</p>'); |
|
} |
|
|
|
# Form Footer |
|
$r->print( |
|
'<input type="hidden" name="currstate" value="" />' |
|
.'<input type="hidden" name="accessuname" value="'.$uname.'" />' |
|
.'<input type="hidden" name="accessudom" value="'.$udom.'" />' |
|
.'<input type="hidden" name="page" value="'.$curr{'page'}.'" />' |
|
.'<input type="hidden" name="prevphases" value="'.$prevphasestr.'" />' |
|
.'<input type="hidden" name="phase" value="activity" />' |
|
.'<input type="hidden" name="action" value="accesslogs" />' |
|
.'<input type="hidden" name="srchdomain" value="'.$udom.'" />' |
|
.'<input type="hidden" name="srchby" value="'.$env{'form.srchby'}.'" />' |
|
.'<input type="hidden" name="srchtype" value="'.$env{'form.srchtype'}.'" />' |
|
.'<input type="hidden" name="srchterm" value="'.&HTML::Entities::encode($env{'form.srchterm'},'<>"&').'" />' |
|
.'<input type="hidden" name="srchin" value="'.$env{'form.srchin'}.'" />' |
|
.'</form>'); |
|
return; |
|
} |
|
|
|
sub earlyout_accesslog_form { |
|
my ($formname,$prevphasestr,$udom) = @_; |
|
my $srchterm = &HTML::Entities::encode($env{'form.srchterm'},'<>"&'); |
|
return <<"END"; |
|
<form action="/adm/createuser" method="post" name="$formname"> |
|
<input type="hidden" name="currstate" value="" /> |
|
<input type="hidden" name="prevphases" value="$prevphasestr" /> |
|
<input type="hidden" name="phase" value="activity" /> |
|
<input type="hidden" name="action" value="accesslogs" /> |
|
<input type="hidden" name="srchdomain" value="$udom" /> |
|
<input type="hidden" name="srchby" value="$env{'form.srchby'}" /> |
|
<input type="hidden" name="srchtype" value="$env{'form.srchtype'}" /> |
|
<input type="hidden" name="srchterm" value="$srchterm" /> |
|
<input type="hidden" name="srchin" value="$env{'form.srchin'}" /> |
|
</form> |
|
END |
|
} |
|
|
|
sub activity_display_filter { |
|
my ($formname,$curr) = @_; |
|
my $nolink = 1; |
|
my $output = '<table><tr><td valign="top">'. |
|
'<span class="LC_nobreak"><b>'.&mt('Actions/page:').'</b></span><br />'. |
|
&Apache::lonmeta::selectbox('show',$curr->{'show'},undef, |
|
(&mt('all'),5,10,20,50,100,1000,10000)). |
|
'</td><td> </td>'; |
|
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 .= '<td valign="top"><b>'.&mt('Window during which actions occurred:').'</b><br />'. |
|
'<table><tr><td>'.&mt('After:'). |
|
'</td><td>'.$startform.'</td></tr>'. |
|
'<tr><td>'.&mt('Before:').'</td>'. |
|
'<td>'.$endform.'</td></tr></table>'. |
|
'</td>'. |
|
'<td> </td>'. |
|
'<td valign="top"><b>'.&mt('Activities').'</b><br />'. |
|
'<select name="activity"><option value="any"'; |
|
if ($curr->{'activity'} eq 'any') { |
|
$output .= ' selected="selected"'; |
|
} |
|
$output .= '>'.&mt('Any').'</option>'."\n"; |
|
foreach my $activity ('Role','log') { |
|
my $selstr = ''; |
|
if ($activity eq $curr->{'activity'}) { |
|
$selstr = ' selected="selected"'; |
|
} |
|
$output .= '<option value="'.$activity.'"'.$selstr.'>'.$lt{$activity}.'</option>'; |
|
} |
|
$output .= '</select></td>'. |
|
'</tr></table>'; |
|
# Update Display button |
|
$output .= '<p>' |
|
.'<input type="submit" value="'.&mt('Update Display').'" />' |
|
.'</p>'; |
|
return $output; |
|
} |
|
|
sub userlogdisplay_js { |
sub userlogdisplay_js { |
my ($formname) = @_; |
my ($formname) = @_; |
return <<"ENDSCRIPT"; |
return <<"ENDSCRIPT"; |
Line 6821 sub user_search_result {
|
Line 7195 sub user_search_result {
|
$response .= '<br />'; |
$response .= '<br />'; |
} |
} |
} else { |
} else { |
unless (($context eq 'requestcrs') && ($srch->{'srchtype'} eq 'exact')) { |
unless (($context eq 'requestcrs') && ($srch->{'srchtype'} eq 'exact')) { |
my $domd_chk = &domdirectorysrch_check($srch); |
my $domd_chk = &domdirectorysrch_check($srch); |
if ($domd_chk ne 'ok') { |
if ($domd_chk ne 'ok') { |
my $instd_chk = &instdirectorysrch_check($srch); |
my $instd_chk = &instdirectorysrch_check($srch); |
Line 6860 sub user_search_result {
|
Line 7234 sub user_search_result {
|
&build_search_response($context,$srch,%srch_results); |
&build_search_response($context,$srch,%srch_results); |
} else { |
} else { |
$currstate = 'modify'; |
$currstate = 'modify'; |
|
if ($env{'form.action'} eq 'accesslogs') { |
|
$currstate = 'activity'; |
|
} |
my $uname = $srch->{'srchterm'}; |
my $uname = $srch->{'srchterm'}; |
my $udom = $srch->{'srchdomain'}; |
my $udom = $srch->{'srchdomain'}; |
$srch_results{$uname.':'.$udom} = |
$srch_results{$uname.':'.$udom} = |
Line 7147 sub build_search_response {
|
Line 7524 sub build_search_response {
|
$currstate = 'select'; |
$currstate = 'select'; |
} else { |
} else { |
if (keys(%srch_results) == 1) { |
if (keys(%srch_results) == 1) { |
$currstate = 'modify'; |
if ($env{'form.action'} eq 'accesslogs') { |
|
$currstate = 'activity'; |
|
} else { |
|
$currstate = 'modify'; |
|
} |
$response = &mt("$single{$srch->{'srchtype'}} was found for the $names{$srch->{'srchby'}} ([_1]) in $names{$srch->{'srchin'}}.",$srch->{'srchterm'}); |
$response = &mt("$single{$srch->{'srchtype'}} was found for the $names{$srch->{'srchby'}} ([_1]) in $names{$srch->{'srchin'}}.",$srch->{'srchterm'}); |
if ($srch->{'srchin'} eq 'dom' || $srch->{'srchin'} eq 'instd') { |
if ($srch->{'srchin'} eq 'dom' || $srch->{'srchin'} eq 'instd') { |
$response .= ': '.&display_domain_info($srch->{'srchdomain'}); |
$response .= ': '.&display_domain_info($srch->{'srchdomain'}); |
Line 7192 sub build_search_response {
|
Line 7573 sub build_search_response {
|
$createdom = $env{'form.coursedom'}; |
$createdom = $env{'form.coursedom'}; |
} |
} |
} |
} |
if (!($srch->{'srchby'} eq 'uname' && $srch->{'srchin'} eq 'dom' && $srch->{'srchtype'} eq 'exact' && $srch->{'srchdomain'} eq $createdom)) { |
unless (($env{'form.action'} eq 'accesslogs') || (($srch->{'srchby'} eq 'uname') && ($srch->{'srchin'} eq 'dom') && |
|
($srch->{'srchtype'} eq 'exact') && ($srch->{'srchdomain'} eq $createdom))) { |
my $cancreate = |
my $cancreate = |
&Apache::lonuserutils::can_create_user($createdom,$context); |
&Apache::lonuserutils::can_create_user($createdom,$context); |
my $targetdom = '<span class="LC_cusr_emph">'.$createdom.'</span>'; |
my $targetdom = '<span class="LC_cusr_emph">'.$createdom.'</span>'; |