--- loncom/interface/slotrequest.pm 2009/03/20 10:05:08 1.90 +++ loncom/interface/slotrequest.pm 2009/10/31 05:39:25 1.105 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler for requesting to have slots added to a students record # -# $Id: slotrequest.pm,v 1.90 2009/03/20 10:05:08 bisitz Exp $ +# $Id: slotrequest.pm,v 1.105 2009/10/31 05:39:25 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -56,8 +56,12 @@ sub fail { } sub start_page { - my ($r,$title)=@_; - $r->print(&Apache::loncommon::start_page($title)); + my ($r,$title,$brcrum)=@_; + my $args; + if (ref($brcrum) eq 'ARRAY') { + $args = {bread_crumbs => $brcrum}; + } + $r->print(&Apache::loncommon::start_page($title,undef,$args)); } sub end_page { @@ -133,14 +137,8 @@ sub check_for_reservation { return 'error: Unable to determine current status'; } my @got; - foreach my $slot_name (sort { - if (ref($slots{$a}) && ref($slots{$b})) { - return $slots{$a}{'starttime'} <=> $slots{$b}{'starttime'} - } - if (ref($slots{$a})) { return -1;} - if (ref($slots{$b})) { return 1;} - return 0; - } @slots) { + my @sorted_slots = &Apache::loncommon::sorted_slots(\@slots,\%slots); + foreach my $slot_name (@sorted_slots) { next if (!defined($slots{$slot_name}) || !ref($slots{$slot_name})); &Apache::lonxml::debug(time." $slot_name ". @@ -340,6 +338,10 @@ sub store_slot_parm { &Apache::lonnet::instructor_log('slotreservationslog',\%storehash, '',$env{'user.name'},$env{'user.domain'}, $cnum,$cdom); + &Apache::lonnet::instructor_log($cdom.'_'.$cnum.'_slotlog',\%storehash, + 1,$env{'user.name'},$env{'user.domain'}, + $env{'user.name'},$env{'user.domain'}); + return; } @@ -533,7 +535,9 @@ sub release_reservation { context => $env{'form.context'}, ); &Apache::lonnet::instructor_log('slotreservationslog',\%storehash, - 1,$uname,$udom,$cnum,$cdom); + 1,$uname,$udom,$cnum,$cdom); + &Apache::lonnet::instructor_log($cdom.'_'.$cnum.'_slotlog',\%storehash, + 1,$uname,$udom,$uname,$udom); } } @@ -598,8 +602,13 @@ sub delete_slot { sub return_link { my ($r) = @_; - $r->print('
'. - &mt('Return to last resource').'
'); + if (($env{'form.command'} eq 'manageresv') || ($env{'form.context'} eq 'usermanage')) { + $r->print('').&return_link($r); + $r->print(&mt('or').''); + &return_link($r); } else { $r->print(''); } @@ -805,7 +815,7 @@ sub get_description { } sub show_choices { - my ($r,$symb)=@_; + my ($r,$symb,$formname)=@_; my ($cnum,$cdom)=&get_course(); my %slots=&Apache::lonnet::dump('slots',$cdom,$cnum); @@ -823,7 +833,7 @@ sub show_choices { ''); return; } - my $available; + my (@available,$output); &Apache::lonxml::debug("Checking Slots"); my @got_slots=&check_for_reservation($symb,'allslots'); if ($got_slots[0] =~ /^error: /) { @@ -832,7 +842,6 @@ sub show_choices { ''); return; } - $r->print('' - .&mt('Slot: [_1] has unknown status.',$description) - .' | |
$form | -$description | -$description | \n"; + if ($env{'form.command'} eq 'manageresv') { + $output .= ''; + } else { + $output .= &Apache::loncommon::end_data_table_row(); + } } - - if (!$available) { - $r->print('
'.&mt('No available times.'). - ' '. - &mt('Return to last resource').' |
Deleted slots: | @@ -1288,26 +1338,39 @@ sub show_table { } my $proctors=join(', ',@proctors); + my %lt = &Apache::lonlocal::texthash ( + edit => 'Edit', + delete => 'Delete', + slotlog => 'History', + ); my $edit=(<<"EDITLINK"); -Edit +$lt{'edit'} EDITLINK my $delete=(<<"DELETELINK"); -Delete +$lt{'delete'} DELETELINK + my $showlog=(<<"LOGLINK"); +$lt{'slotlog'} +LOGLINK + my $remove_all=&remove_link($slot,'remove all').'$edit $delete | \n"); + "\n$edit $delete $showlog | \n"); if (exists($show{'name'})) { $colspan++;$r->print("$slot | "); } @@ -1366,30 +1429,717 @@ $row_end STUFF } } - $r->print('
'
+ .&mt('Instructors may use a reservation system to place restrictions on when and where assignments can be worked on.')
+ .'
'
+ .&mt('One example is for management of laboratory space, which is only available at certain times, and has a limited number of seats.')
+ .'
'. + &mt('Your reservation status for any such assignments is listed below:'). + '
'. + ''."\n"); + for (my $i=0; $i<$depth; $i++) { + $r->print(''); + } + my $result = ''. + ''.$title.''.(' ' x6).' | '; + my $hasaction; + if ($status == $resource->OPEN) { + if ($get_choices) { + $hasaction = 1; + } + } + if ($hasaction) { + $result .= ''.$msg.' | '. + ''.(' ' x6); + } else { + $result .= ' | '.$msg.' | '; + } + $r->print($result); + if ($hasaction) { + my $formname = 'manageres_'.$reservable; + &show_choices($r,$symb,$formname); + $r->print(''); + } + $r->print('
'. + &mt('Return to slot list').'
'); + return; + } + my $formname = 'reservationslog'; + my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; + my %slotlog=&Apache::lonnet::dump('nohist_slotreservationslog',$cdom,$cnum); + if ((keys(%slotlog))[0]=~/^error\:/) { undef(%slotlog); } + + my (%log,@allsymbs); + if (keys(%slotlog)) { + foreach my $key (keys(%slotlog)) { + if (ref($slotlog{$key}) eq 'HASH') { + if (ref($slotlog{$key}{'logentry'}) eq 'HASH') { + if ($slotlog{$key}{'logentry'}{'slot'} eq $env{'form.slotname'}) { + $log{$key} = $slotlog{$key}; + if ($slotlog{$key}{'logentry'}{'symb'} ne '') { + push(@allsymbs,$slotlog{$key}{'logentry'}{'symb'}); + } + } + } + } + } + } + + $r->print(''. + ''. + &mt('Return to slot list').'
'); + return; +} + +sub get_resource_title { + my ($symb,$titles,$maptitles) = @_; + my $title; + if ((ref($titles) eq 'HASH') && (ref($maptitles) eq 'HASH')) { + if (defined($titles->{$symb})) { + $title = $titles->{$symb}; + } else { + $title = &Apache::lonnet::gettitle($symb); + my $maptitle; + my ($mapurl) = &Apache::lonnet::decode_symb($symb); + if (defined($maptitles->{$mapurl})) { + $maptitle = $maptitles->{$mapurl}; + } else { + if ($mapurl eq $env{'course.'.$env{'request.course.id'}.'.url'}) { + $maptitle=&mt('Main Course Documents'); + } else { + $maptitle=&Apache::lonnet::gettitle($mapurl); + } + $maptitles->{$mapurl} = $maptitle; + } + if ($maptitle ne '') { + $title .= ' '.&mt('(in [_1])',$maptitle); + } + $titles->{$symb} = $title; + } + } else { + $title = $symb; + } + return $title; +} + +sub reservationlog_contexts { + my ($crstype) = @_; + my %lt = &Apache::lonlocal::texthash ( + any => 'Any', + user => 'By student', + manage => 'Via Slot Manager', + parameter => 'Via Parameter Manager', + reserve => 'Made reservation', + release => 'Dropped reservation', + usermanage => 'By student', + ); + if ($crstype eq 'Community') { + $lt{'user'} = &mt('By member'); + $lt{'usermanage'} = $lt{'user'}; + } + return %lt; +} + +sub display_filter { + my ($formname,$cdom,$cnum,$curr,$version,$allsymbs) = @_; + my $nolink = 1; + my (%titles,%maptitles); + my $output = ''.
+ ''.&mt('Changes/page:').' '. + &Apache::lonmeta::selectbox('show',$curr->{'show'},undef, + (&mt('all'),5,10,20,50,100,1000,10000)). + ' | '; + my $startform = + &Apache::lonhtmlcommon::date_setter($formname,'log_start_date', + $curr->{'log_start_date'},undef, + undef,undef,undef,undef,undef,undef,$nolink); + my $endform = + &Apache::lonhtmlcommon::date_setter($formname,'log_end_date', + $curr->{'log_end_date'},undef, + undef,undef,undef,undef,undef,undef,$nolink); + my $crstype = &Apache::loncommon::course_type(); + my %lt = &reservationlog_contexts($crstype); + $output .= ' | '.&mt('Window during which changes occurred:').
+ '
| '; + if (ref($allsymbs) eq 'ARRAY') { + $output .= ' | '.&mt('Resource').' '. + ' | '.
+ &mt('Context:').' | ';
+ } else {
+ $output .= ''.&mt('Action').' '. + ' | ';
+ }
+ $output .= '
'. + &mt('Only changes made from servers running LON-CAPA [_1] or later are displayed.' + ,'2.9.0'); + if ($version) { + $output .= ' '.&mt('This LON-CAPA server is version [_1]',$version); + } + $output .= '
'."\n"; - $result.=' '. - &mt('Specify a file containing the slot definitions.'). - ' |
'."\n";
- my $upfile_select=&Apache::loncommon::upfile_select_html();
- my $ignore=&mt('Ignore First Line');
- $result.=< - - -ENDUPFORM - $result.=' |