version 1.237, 2008/03/08 03:48:41
|
version 1.239, 2008/05/12 17:52:09
|
Line 1986 END
|
Line 1986 END
|
foreach my $key (keys(%changeHash)) { |
foreach my $key (keys(%changeHash)) { |
$newenvhash{'environment.'.$key} = $changeHash{$key}; |
$newenvhash{'environment.'.$key} = $changeHash{$key}; |
} |
} |
&Apache::lonnet::appenv(%newenvhash); |
&Apache::lonnet::appenv(\%newenvhash); |
} |
} |
} else { # error occurred |
} else { # error occurred |
$r->print('<span class="LC_error">'.&mt('Unable to successfully change environment for').' '. |
$r->print('<span class="LC_error">'.&mt('Unable to successfully change environment for').' '. |
Line 2041 END
|
Line 2041 END
|
&mt('Contact your <a href="[_1]">helpdesk</a> for more information.',"javascript:helpMenu('display')").'<br />'); |
&mt('Contact your <a href="[_1]">helpdesk</a> for more information.',"javascript:helpMenu('display')").'<br />'); |
} |
} |
$r->print($no_forceid_alert. |
$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') { |
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('<p><a href="javascript:backPage(document.userupdate)">'. &mt('Enroll Another Student').'</a></p>'); |
$r->print('<p><a href="javascript:backPage(document.userupdate)">'. |
|
&mt('Enroll Another Student').'</a></p>'); |
} else { |
} else { |
my @rolechanges = &update_roles($r); |
my @rolechanges = &update_roles($r,$context); |
if ($namechanged) { |
if ($namechanged) { |
if ($context eq 'course') { |
if ($context eq 'course') { |
if (@userroles > 0) { |
if (@userroles > 0) { |
Line 2075 END
|
Line 2076 END
|
} |
} |
|
|
sub update_roles { |
sub update_roles { |
my ($r) = @_; |
my ($r,$context) = @_; |
my $now=time; |
my $now=time; |
my @rolechanges; |
my @rolechanges; |
my %disallowed; |
my %disallowed; |
Line 2091 sub update_roles {
|
Line 2092 sub update_roles {
|
my $result = |
my $result = |
&Apache::lonnet::revokerole($env{'form.ccdomain'}, |
&Apache::lonnet::revokerole($env{'form.ccdomain'}, |
$env{'form.ccuname'}, |
$env{'form.ccuname'}, |
$scope,$role); |
$scope,$role,'','',$context); |
$r->print(&mt('Revoking [_1] in [_2]: [_3]', |
$r->print(&mt('Revoking [_1] in [_2]: [_3]', |
$role,$scope,'<b>'.$result.'</b>').'<br />'); |
$role,$scope,'<b>'.$result.'</b>').'<br />'); |
if ($role eq 'st') { |
if ($role eq 'st') { |
Line 2110 sub update_roles {
|
Line 2111 sub update_roles {
|
$r->print(&mt('Revoking custom role:'). |
$r->print(&mt('Revoking custom role:'). |
' '.$4.' by '.$3.':'.$2.' in '.$1.': <b>'. |
' '.$4.' by '.$3.':'.$2.' in '.$1.': <b>'. |
&Apache::lonnet::revokecustomrole($env{'form.ccdomain'}, |
&Apache::lonnet::revokecustomrole($env{'form.ccdomain'}, |
$env{'form.ccuname'},$1,$2,$3,$4). |
$env{'form.ccuname'},$1,$2,$3,$4,'','',$context). |
'</b><br />'); |
'</b><br />'); |
if (!grep(/^cr$/,@rolechanges)) { |
if (!grep(/^cr$/,@rolechanges)) { |
push(@rolechanges,'cr'); |
push(@rolechanges,'cr'); |
Line 2123 sub update_roles {
|
Line 2124 sub update_roles {
|
my $result = |
my $result = |
&Apache::lonnet::assignrole($env{'form.ccdomain'}, |
&Apache::lonnet::assignrole($env{'form.ccdomain'}, |
$env{'form.ccuname'}, |
$env{'form.ccuname'}, |
$scope,$role,$now,0,1); |
$scope,$role,$now,0,1,'', |
|
$context); |
$r->print(&mt('Deleting [_1] in [_2]: [_3]',$role,$scope, |
$r->print(&mt('Deleting [_1] in [_2]: [_3]',$role,$scope, |
'<b>'.$result.'</b>').'<br />'); |
'<b>'.$result.'</b>').'<br />'); |
if ($role eq 'st') { |
if ($role eq 'st') { |
Line 2176 sub update_roles {
|
Line 2178 sub update_roles {
|
} |
} |
} else { |
} else { |
my $result=&Apache::lonnet::assignrole($env{'form.ccdomain'}, |
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]: <b>[_3]</b>', |
$output = &mt('Re-enabling [_1] in [_2]: <b>[_3]</b>', |
$role,$url,$result).'<br />'; |
$role,$url,$result).'<br />'; |
} |
} |
Line 2332 sub update_roles {
|
Line 2335 sub update_roles {
|
} |
} |
|
|
sub enroll_single_student { |
sub enroll_single_student { |
my ($r,$uhome,$amode,$genpwd,$now,$newuser) = @_; |
my ($r,$uhome,$amode,$genpwd,$now,$newuser,$context) = @_; |
$r->print('<h3>'.&mt('Enrolling Student').'</h3>'); |
$r->print('<h3>'.&mt('Enrolling Student').'</h3>'); |
|
|
# Remove non alphanumeric values from section |
# Remove non alphanumeric values from section |
Line 2347 sub enroll_single_student {
|
Line 2350 sub enroll_single_student {
|
$env{'form.ccuname'},$env{'form.cid'},$env{'form.cfirstname'}, |
$env{'form.ccuname'},$env{'form.cid'},$env{'form.cfirstname'}, |
$env{'form.cmiddlename'},$env{'form.clastname'}, |
$env{'form.cmiddlename'},$env{'form.clastname'}, |
$env{'form.generation'},$env{'form.sections'},$enddate, |
$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/) { |
if ($enroll_result =~ /^ok/) { |
$r->print(&mt('<b>[_1]</b> enrolled',$env{'form.ccuname'}.':'.$env{'form.ccdomain'})); |
$r->print(&mt('<b>[_1]</b> enrolled',$env{'form.ccuname'}.':'.$env{'form.ccdomain'})); |
if ($env{'form.sections'} ne '') { |
if ($env{'form.sections'} ne '') { |
Line 2989 sub handler {
|
Line 2992 sub handler {
|
&update_selfenroll_config($r,$context); |
&update_selfenroll_config($r,$context); |
} |
} |
$r->print(&Apache::loncommon::end_page()); |
$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 { |
} else { |
$r->print(&header()); |
$r->print(&header()); |
$r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management')); |
$r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management')); |
Line 3109 sub print_main_menu {
|
Line 3121 sub print_main_menu {
|
help => 'Course_Manage_Group', |
help => 'Course_Manage_Group', |
permission => $permission->{'grp_manage'}, |
permission => $permission->{'grp_manage'}, |
url => '/adm/coursegroups?refpage=cusr', |
url => '/adm/coursegroups?refpage=cusr', |
|
}, |
|
{ text => 'View Log-in History', |
|
help => 'Course_User_Logins', |
|
action => 'logins', |
|
permission => $permission->{'cusr'}, |
|
}, |
|
{ text => 'View Change Logs', |
|
help => 'Course_User_Logs', |
|
action => 'changelogs', |
|
permission => $permission->{'cusr'}, |
}); |
}); |
push(@menu,@courselinks); |
push(@menu,@courselinks); |
} |
} |
Line 3264 sub selfenroll_date_forms {
|
Line 3286 sub selfenroll_date_forms {
|
return $output; |
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('<form action="/adm/createuser" method="post" name="'.$formname.'">'); |
|
my %saveable_parameters = ('show' => 'scalar',); |
|
&Apache::loncommon::store_course_settings('roles_log', |
|
\%saveable_parameters); |
|
&Apache::loncommon::restore_course_settings('roles_log', |
|
\%saveable_parameters); |
|
# set defaults |
|
my $now = time(); |
|
my $defstart = $now - (7*24*3600); #7 days ago |
|
my %defaults = ( |
|
page => '1', |
|
show => '10', |
|
role => 'any', |
|
chgcontext => 'any', |
|
rolelog_start_date => $defstart, |
|
rolelog_end_date => $now, |
|
); |
|
my $more_records = 0; |
|
|
|
# set current |
|
my %curr; |
|
foreach my $item ('show','page','role','chgcontext') { |
|
$curr{$item} = $env{'form.'.$item}; |
|
} |
|
my ($startdate,$enddate) = |
|
&Apache::lonuserutils::get_dates_from_form('rolelog_start_date','rolelog_end_date'); |
|
$curr{'rolelog_start_date'} = $startdate; |
|
$curr{'rolelog_end_date'} = $enddate; |
|
foreach my $key (keys(%defaults)) { |
|
if ($curr{$key} eq '') { |
|
$curr{$key} = $defaults{$key}; |
|
} |
|
} |
|
my (%whodunit,%changed); |
|
$r->print(&role_display_filter($formname,$cdom,$cnum,\%curr)); |
|
my $showntablehdr = 0; |
|
my $tablehdr = &Apache::loncommon::start_data_table(). |
|
&Apache::loncommon::start_data_table_header_row(). |
|
'<th> </th><th>'.&mt('When').'</th><th>'.&mt('Who made the change'). |
|
'</th><th>'.&mt('Changed User').'</th><th>'.&mt('Role').'</th><th>'.&mt('Section').'</th><th>'. |
|
&mt('Context').'</th><th>'.&mt('Start').'</th><th>'.&mt('End').'</th>'. |
|
&Apache::loncommon::end_data_table_header_row(); |
|
my ($minshown,$maxshown); |
|
my $minshown = 1; |
|
my $count = 0; |
|
if ($curr{'show'} ne &mt('all')) { |
|
$maxshown = $curr{'page'} * $curr{'show'}; |
|
if ($curr{'page'} > 1) { |
|
$minshown = 1 + ($curr{'page'} - 1) * $curr{'show'}; |
|
} |
|
} |
|
foreach my $id (sort { $roleslog{$b}{'exe_time'}<=>$roleslog{$a}{'exe_time'} } (keys(%roleslog))) { |
|
next if (($roleslog{$id}{'exe_time'} < $curr{'rolelog_start_date'}) || |
|
($roleslog{$id}{'exe_time'} > $curr{'rolelog_end_date'})); |
|
if ($curr{'show'} ne &mt('all')) { |
|
if ($count >= $curr{'page'} * $curr{'show'}) { |
|
$more_records = 1; |
|
last; |
|
} |
|
} |
|
if ($curr{'role'} ne 'any') { |
|
next if ($roleslog{$id}{'logentry'}{'role'} ne $curr{'role'}); |
|
} |
|
if ($curr{'chgcontext'} ne 'any') { |
|
if ($curr{'chgcontext'} eq 'selfenroll') { |
|
next if (!$roleslog{$id}{'logentry'}{'selfenroll'}); |
|
} else { |
|
next if ($roleslog{$id}{'logentry'}{'context'} ne $curr{'chgcontext'}); |
|
} |
|
} |
|
$count ++; |
|
next if ($count < $minshown); |
|
if (!$showntablehdr) { |
|
$r->print($tablehdr); |
|
$showntablehdr = 1; |
|
} |
|
if ($whodunit{$roleslog{$id}{'exe_uname'}.':'.$roleslog{$id}{'exe_udom'}} eq '') { |
|
$whodunit{$roleslog{$id}{'exe_uname'}.':'.$roleslog{$id}{'exe_udom'}} = |
|
&Apache::loncommon::plainname($roleslog{$id}{'exe_uname'},$roleslog{$id}{'exe_udom'}); |
|
} |
|
if ($changed{$roleslog{$id}{'uname'}.':'.$roleslog{$id}{'udom'}} eq '') { |
|
$changed{$roleslog{$id}{'uname'}.':'.$roleslog{$id}{'udom'}} = |
|
&Apache::loncommon::plainname($roleslog{$id}{'uname'},$roleslog{$id}{'udom'}); |
|
} |
|
my $sec = $roleslog{$id}{'logentry'}{'section'}; |
|
if ($sec eq '') { |
|
$sec = &mt('None'); |
|
} |
|
my ($rolestart,$roleend); |
|
if ($roleslog{$id}{'delflag'}) { |
|
$rolestart = &mt('deleted'); |
|
$roleend = &mt('deleted'); |
|
} else { |
|
$rolestart = $roleslog{$id}{'logentry'}{'start'}; |
|
$roleend = $roleslog{$id}{'logentry'}{'end'}; |
|
if ($rolestart eq '' || $rolestart == 0) { |
|
$rolestart = &mt('No start date'); |
|
} else { |
|
$rolestart = &Apache::lonlocal::locallocaltime($rolestart); |
|
} |
|
if ($roleend eq '' || $roleend == 0) { |
|
$roleend = &mt('No end date'); |
|
} else { |
|
$roleend = &Apache::lonlocal::locallocaltime($roleend); |
|
} |
|
} |
|
my $chgcontext = $roleslog{$id}{'logentry'}{'context'}; |
|
if ($roleslog{$id}{'logentry'}{'selfenroll'}) { |
|
$chgcontext = 'selfenroll'; |
|
} |
|
my %lt = &rolechg_contexts(); |
|
if ($chgcontext ne '' && $lt{$chgcontext} ne '') { |
|
$chgcontext = $lt{$chgcontext}; |
|
} |
|
$r->print(&Apache::loncommon::start_data_table_row().'<td>'.$count.'</td><td>'.&Apache::lonlocal::locallocaltime($roleslog{$id}{'exe_time'}).'</td><td>'.$whodunit{$roleslog{$id}{'exe_uname'}.':'.$roleslog{$id}{'exe_udom'}}.'</td><td>'.$changed{$roleslog{$id}{'uname'}.':'.$roleslog{$id}{'udom'}}.'</td><td>'.&Apache::lonnet::plaintext($roleslog{$id}{'logentry'}{'role'}).'</td><td>'.$sec.'</td><td>'.$chgcontext.'</td><td>'.$rolestart.'</td><td>'.$roleend.'</td>'.&Apache::loncommon::end_data_table_row()."\n"); |
|
} |
|
if ($showntablehdr) { |
|
$r->print(&Apache::loncommon::end_data_table().'<br />'); |
|
if (($curr{'page'} > 1) || ($more_records)) { |
|
$r->print('<table><tr>'); |
|
if ($curr{'page'} > 1) { |
|
$r->print('<td><a href="javascript:chgPage('."'previous'".');">'.&mt('Previous [_1] changes',$curr{'show'}).'</a></td>'); |
|
} |
|
if ($more_records) { |
|
$r->print('<td><a href="javascript:chgPage('."'next'".');">'.&mt('Next [_1] changes',$curr{'show'}).'</a></td>'); |
|
} |
|
$r->print('</tr></table>'); |
|
$r->print(<<"ENDSCRIPT"); |
|
<script type="text/javascript"> |
|
function chgPage(caller) { |
|
if (caller == 'previous') { |
|
document.$formname.page.value --; |
|
} |
|
if (caller == 'next') { |
|
document.$formname.page.value ++; |
|
} |
|
document.$formname.submit(); |
|
return; |
|
} |
|
</script> |
|
ENDSCRIPT |
|
} |
|
} else { |
|
$r->print(&mt('There are no records to display')); |
|
} |
|
$r->print('<input type="hidden" name="page" value="'.$curr{'page'}.'" />'. |
|
'<input type="hidden" name="action" value="changelogs" /></form>'); |
|
return; |
|
} |
|
|
|
sub role_display_filter { |
|
my ($formname,$cdom,$cnum,$curr) = @_; |
|
my $context = 'course'; |
|
my $nolink = 1; |
|
my $output = '<table><tr><td valign="top">'. |
|
'<span class="LC_nobreak"><b>'.&mt('Changes/page:').'</b><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,'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 .= '<td valign="top"><b>'.&mt('Window during which changes 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('Role:').'</b><br />'. |
|
'<select name="role"><option value="any"'; |
|
if ($curr->{'role'} eq 'any') { |
|
$output .= ' selected="selected"'; |
|
} |
|
$output .= '>'.&mt('Any').'</option>'."\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 .= ' <option value="'.$role.'"'.$selstr.'>'.$plrole.'</option>'; |
|
} |
|
$output .= '</select></td><td> </td><td valign="top"><b>'. |
|
&mt('Context:').'</b><br /><select name="chgcontext">'; |
|
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 .= '<option value="'.$chgtype.'"'.$selstr.'>'.$lt{$chgtype}.'</option>'."\n"; |
|
} |
|
$output .= '</select></td><td> </td><td valign="middle"><input type="submit" value="'. |
|
&mt('Update Display').'" /></tr></table><hr noshade><br />'; |
|
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 |
#-------------------------------------------------- functions for &phase_two |
sub user_search_result { |
sub user_search_result { |
my ($context,$srch) = @_; |
my ($context,$srch) = @_; |
Line 3998 sub update_selfenroll_config {
|
Line 4249 sub update_selfenroll_config {
|
foreach my $key (keys(%changes)) { |
foreach my $key (keys(%changes)) { |
$newenvhash{'course.'.$env{'request.course.id'}.'.'.$key} = $changes{$key}; |
$newenvhash{'course.'.$env{'request.course.id'}.'.'.$key} = $changes{$key}; |
} |
} |
&Apache::lonnet::appenv(%newenvhash); |
&Apache::lonnet::appenv(\%newenvhash); |
} else { |
} else { |
$r->print(&mt('An error occurred when saving changes to self-enrollment settings in this course.').'<br />'.&mt('The error was: [_1].',$putresult)); |
$r->print(&mt('An error occurred when saving changes to self-enrollment settings in this course.').'<br />'.&mt('The error was: [_1].',$putresult)); |
} |
} |