--- loncom/interface/slotrequest.pm 2023/07/10 01:49:09 1.125.2.10.2.2 +++ loncom/interface/slotrequest.pm 2015/09/23 23:04:53 1.126 @@ -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.125.2.10.2.2 2023/07/10 01:49:09 raeburn Exp $ +# $Id: slotrequest.pm,v 1.126 2015/09/23 23:04:53 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -56,13 +56,10 @@ sub fail { } sub start_page { - my ($r,$title,$brcrum,$bread_crumbs_component,$js,$mgr)=@_; + my ($r,$title,$brcrum,$js)=@_; my $args; if (ref($brcrum) eq 'ARRAY') { $args = {bread_crumbs => $brcrum}; - if ($bread_crumbs_component) { - $args->{bread_crumbs_component} = $bread_crumbs_component; - } } if (($env{'form.requestattempt'}) || ($env{'form.command'} eq 'manageresv')) { my %loaditems = ( @@ -74,31 +71,6 @@ sub start_page { $args = { 'add_entries' => \%loaditems }; } } - unless (($env{'form.context'} eq 'usermanage') || (($mgr eq 'F') && - (($env{'form.command'} eq 'release') || - ($env{'form.command'} eq 'remove_registration')))) { - if ($env{'form.symb'}) { - my $symb=&unescape($env{'form.symb'}); - my ($mapurl,$id,$resurl) = &Apache::lonnet::decode_symb($symb); - if ($resurl =~ /ext\.tool$/) { - my $target; - my ($marker,$exttool) = (split(m{/},$resurl))[3,4]; - $marker=~s/\D//g; - if (($marker) && ($exttool) && ($env{'request.course.id'})) { - my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; - my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; - my ($idx,$crstool,$is_tool,%toolhash,%toolsettings); - if ($resurl eq "adm/$cdom/$cnum/$marker/$exttool") { - my %toolsettings=&Apache::lonnet::dump('exttool_'.$marker,$cdom,$cnum); - $target = $toolsettings{'target'}; - } - } - if ($target eq 'iframe') { - $args->{'only_body'} = 1; - } - } - } - } $r->print(&Apache::loncommon::start_page($title,$js,$args)); } @@ -190,24 +162,9 @@ $js var startdate = startm+"/"+startd+"/"+starty; var starttime = new Date(startdate).getTime(); starttime = starttime/1000; - var starth = form.start_hour.options[form.start_hour.selectedIndex].value; - if (numberRegExp.test(starth)) { - starth = parseInt(starth); - if (starth > 0 && starth <= 23) { - starttime += 3600 * starth; - } - } var enddate = endm+"/"+endd+"/"+endy; var endtime = new Date(enddate).getTime(); endtime = endtime/1000; - var endh = form.end_hour.options[form.end_hour.selectedIndex].value; - if (numberRegExp.test(endh)) { - endh = parseInt(endh); - if (endh > 0 && endh <= 23) { - endtime += 3600 * endh; - } - } - var shown = 0; for (var i=0; i<$i; i++) { if ((slotstart[i] >= starttime) && (slotend[i] <= endtime)) { @@ -396,7 +353,7 @@ sub get_consumed_uniqueperiods { return 'error: Unable to determine current status'; } my @problems = $navmap->retrieveResources(undef, - sub { $_[0]->is_problem() || $_[0]->is_tool() },1,0); + sub { $_[0]->is_problem() },1,0); my %used_slots; foreach my $problem (@problems) { my $symb = $problem->symb(); @@ -484,11 +441,11 @@ sub make_reservation { return 'error: Unable to determine current status'; } - my $symb_for_db = $symb; + my $parm_symb = $symb; my $parm_level = 1; if ($use_slots eq 'map' || $use_slots eq 'map_map') { my ($map) = &Apache::lonnet::decode_symb($symb); - $symb_for_db = &Apache::lonnet::symbread($map); + $parm_symb = &Apache::lonnet::symbread($map); $parm_level = 2; } @@ -531,7 +488,7 @@ sub make_reservation { my %reservation=('name' => $env{'user.name'}.':'.$env{'user.domain'}, 'timestamp' => time, - 'symb' => $symb_for_db); + 'symb' => $parm_symb); my $success=&Apache::lonnet::newput('slot_reservations', {"$slot_name\0$wanted" => @@ -543,9 +500,7 @@ sub make_reservation { if ($value) { $new_value=$value.':'.$new_value; } - my $result = &store_slot_parm($symb,$symb_for_db,$slot_name,$parm_level, - $new_value,$cnum,$cdom,$env{'user.name'}, - $env{'user.domain'},'reserve',$env{'form.context'}); + &store_slot_parm($symb,$slot_name,$parm_level,$new_value,$cnum,$cdom); return $wanted; } @@ -554,27 +509,29 @@ sub make_reservation { } sub store_slot_parm { - my ($symb_for_parm,$symb_for_db,$slot_name,$parm_level,$new_value, - $cnum,$cdom,$uname,$udom,$action,$context,$delflag) = @_; - - # store new parameter string - my $result=&Apache::lonparmset::storeparm_by_symb($symb_for_parm, - '0_availablestudent', - $parm_level,$new_value, - 'string',$uname,$udom); + my ($symb,$slot_name,$parm_level,$new_value,$cnum,$cdom) = @_; + my $result=&Apache::lonparmset::storeparm_by_symb($symb, + '0_availablestudent', + $parm_level, $new_value, + 'string', + $env{'user.name'}, + $env{'user.domain'}); &Apache::lonxml::debug("hrrm $result"); my %storehash = ( - symb => $symb_for_db, + symb => $symb, slot => $slot_name, - action => $action, - context => $context, + action => 'reserve', + context => $env{'form.context'}, ); &Apache::lonnet::write_log('course','slotreservationslog',\%storehash, - $delflag,$uname,$udom,$cnum,$cdom); + '',$env{'user.name'},$env{'user.domain'}, + $cnum,$cdom); &Apache::lonnet::write_log('course',$cdom.'_'.$cnum.'_slotlog',\%storehash, - $delflag,$uname,$udom,$uname,$udom); - return $result; + 1,$env{'user.name'},$env{'user.domain'}, + $env{'user.name'},$env{'user.domain'}); + + return; } sub remove_registration { @@ -670,7 +627,7 @@ sub release_all_slot { &release_reservation($slot_name,$uname,$udom, $consumed{$entry}{'symb'},$mgr); if (!$result) { - $r->print('

'.&mt($msg).'

'); + $r->print('

'.&mt($msg).'

'); } else { $r->print("

$msg

"); } @@ -700,7 +657,7 @@ sub release_slot { my ($result,$msg) = &release_reservation($slot_name,$uname,$udom,$symb,$mgr); if (!$result) { - $r->print('

'.&mt($msg).'

'); + $r->print('

'.&mt($msg).'

'); } else { $r->print("

$msg

"); } @@ -718,184 +675,26 @@ sub release_reservation { my ($slot_name,$uname,$udom,$symb,$mgr) = @_; my %slot=&Apache::lonnet::get_slot($slot_name); my $description=&get_description($slot_name,\%slot); - my $msg; if ($mgr ne 'F') { if ($slot{'starttime'} < time) { - return (0,&mt('Not allowed to release Reservation: [_1], as it has already started.',$description)); + return (0,&mt('Not allowed to release Reservation: [_1], as it has already ended.',$description)); } } - my $context = $env{'form.context'}; - # get navmap object + # if the reservation symb is for a map get a resource in that map + # to check slot parameters on my $navmap=Apache::lonnavmaps::navmap->new; if (!defined($navmap)) { return (0,'error: Unable to determine current status'); } - - my ($cnum,$cdom)=&get_course(); - - # get slot reservations, check if user has reservation - my %consumed=&Apache::lonnet::dump('slot_reservations',$cdom,$cnum, - "^$slot_name\0"); - - # - # If release is because of a reservation *change*, symb(s) associated with reservation - # being dropped may differ from the current symb. - # - # We need to get symb(s) from slot_reservations.db, and for each symb, update - # the value of the availablestudent parameter, at the appropriate level - # (as dictated by the value of the useslots parameter for the symb and user). - # - # We also delete all entries for the slot being released, for the specific user. - # - - my $conflict; - - if (($env{'form.command'} eq 'change') && ($slot_name eq $env{'form.releaseslot'}) && - ($env{'form.slotname'} ne $slot_name)) { - my %changedto = &Apache::lonnet::get_slot($env{'form.slotname'}); - - # check for conflicts - my ($to_uniq_start,$to_uniq_end,$from_uniq_start,$from_uniq_end); - if (ref($changedto{'uniqueperiod'}) eq 'ARRAY') { - ($to_uniq_start,$to_uniq_end) = @{$changedto{'uniqueperiod'}}; - } - if (ref($slot{'uniqueperiod'}) eq 'ARRAY') { - ($from_uniq_start,$from_uniq_end) = @{$slot{'uniqueperiod'}}; - } - my $to_start = $changedto{'starttime'}; - my $to_end = $changedto{'endtime'}; - my $from_start = $slot{'starttime'}; - my $from_end = $slot{'endtime'}; - - if (! - ($from_start < $to_uniq_start && $from_end < $to_uniq_start) || - ($from_start > $to_uniq_end && $from_end > $to_uniq_end )) { - $conflict = 1; - } - if (! - ($to_start < $from_uniq_start && $to_end < $from_uniq_start) || - ($to_start > $from_uniq_end && $to_end > $from_uniq_end )) { - $conflict = 1; - } - - if ($conflict) { - my %symbs_for_slot; - my (%to_delete,%failed,%released); - foreach my $entry (keys(%consumed)) { - if ( $consumed{$entry}->{'name'} eq ($uname.':'.$udom) ) { - $symbs_for_slot{$consumed{$entry}->{'symb'}} = 1; - $to_delete{$entry} = 1; - } - } - if (keys(%to_delete)) { - my @removals = keys(%to_delete); - if (&Apache::lonnet::del('slot_reservations',\@removals, - $cdom,$cnum) eq 'ok') { - foreach my $item (keys(%symbs_for_slot)) { - my $result = &update_selectable($navmap,$slot_name,$item,$cdom, - $cnum,$udom,$uname,$context); - if ($result =~ /^error/) { - $failed{$item} = 1; - } else { - $released{$item} = 1; - } - } - } - } - if (keys(%released)) { - $msg = ''. - &mt('Released Reservation: [_1]',$description).'  '. - &mt('The following items had their reservation status change').':'; - my (%folders,%pages,%container,%titles); - foreach my $item (keys(%released)) { - my $res = $navmap->getBySymb($item); - if (ref($res)) { - $titles{$item} = $res->title(); - if ($res->is_map()) { - $folders{$item}{'title'} = $titles{$item}; - if ($res->is_page()) { - $pages{$item}{'title'} = $titles{$item}; - } else { - $folders{$item}{'title'} = $titles{$item}; - } - } else { - my $mapsrc = $res->enclosing_map_src(); - my $map = $navmap->getResourceByUrl($mapsrc); - if (ref($map)) { - if ($map->id() eq '0.0') { - $container{$mapsrc}{'title'} &mt('Top level of course'); - } else { - $container{$mapsrc}{'title'} = $map->title(); - if ($map->is_page()) { - $container{$mapsrc}{'page'} = 1; - } - } - } - $container{$mapsrc}{'resources'}{$item} = 1; - } - } - } - $msg .= ''; - my $person = &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'}); - my $subject = &mt('Reservation change: [_1]',$description); - my $msgbody = &mt('Reservation released by [_1] for [_2].',$person,$description); - $msg .= &slot_change_messaging($slot{'reservationmsg'},$subject,$msgbody,'release'); - return (1,$msg); - } else { - if (keys(%to_delete)) { - $msg = &mt('Reservation release partially complete for [_1]',$description); - } else { - $msg = &mt('No entries found for this user to release for [_1].',$description); - } - return (0,$msg); - } - } else { - $msg = &mt('No conflict found; not releasing: [_1].',$description); - return (0,$msg); - } - } - - my $map_symb; - my $parm_symb = $symb; my $passed_resource = $navmap->getBySymb($symb); - - # if the reservation symb is for a map get a resource in that map - # to check slot parameters on - my $parm_level = 1; if (ref($passed_resource)) { if ($passed_resource->is_map()) { my ($a_resource) = $navmap->retrieveResources($passed_resource, - sub {$_[0]->is_problem() || $_[0]->is_tool() },0,1); - $parm_symb = $a_resource->symb(); + sub {$_[0]->is_problem()},0,1); + $symb = $a_resource->symb(); } } else { unless ($mgr eq 'F') { @@ -903,132 +702,68 @@ sub release_reservation { } } - # Get value of useslots parameter in effect for this user. - # If value is map or map_map, then the parm level is 2 (i.e., - # non-recursive enclosing map/folder level for specific user) - # and the symb for this reservation in slot_reservations.db - # will be the symb of the map itself. - - my $use_slots = &Apache::lonnet::EXT('resource.0.useslots', - $parm_symb,$udom,$uname); - if (&Apache::lonnet::error($use_slots)) { - return (0,'error: Unable to determine current status'); - } - if ($use_slots eq 'map' || $use_slots eq 'map_map') { - $parm_level = 2; - if ($passed_resource->is_map()) { - $map_symb = $passed_resource->symb(); - } else { - my ($map) = &Apache::lonnet::decode_symb($symb); - $map_symb = &Apache::lonnet::symbread($map); - } - } - - # - # If release is *not* because of a reservation change, i.e., this is a "drop" - # by a student, or a removal for a single student by an instructor then - # only remove one entry from slot_reservations.db, where both the user - # and the symb match the current context. If useslots was set to map or - # map_map, then the symb to match in slot_reservations.db is the symb of - # the enclosing map/folder, not the symb of the resource. - # + # get parameter string, check for existence, rebuild string with the slot + my $student = &Apache::lonnet::EXT("resource.0.availablestudent", + $symb,$udom,$uname); + my @slots = split(/:/,$student); - my ($match,$symb_to_check); - if ($parm_level == 2) { - $symb_to_check = $map_symb; - } else { - $symb_to_check = $parm_symb; - } - foreach my $entry (keys(%consumed)) { - if ( $consumed{$entry}->{'name'} eq ($uname.':'.$udom) ) { - if ($consumed{$entry}->{'symb'} eq $symb_to_check) { - if (&Apache::lonnet::del('slot_reservations',[$entry], - $cdom,$cnum) eq 'ok') { - $match = $symb_to_check; - } - last; - } - } - } - if ($match) { - if (&update_selectable($navmap,$slot_name,$symb,$cdom, - $cnum,$udom,$uname,$context) =~ /^error/) { - if ($mgr eq 'F') { - $msg = &mt('Reservation release partially complete for: [_1]',"$uname:$udom").'
'. - &mt('Update of availablestudent parameter for [_1] was not completed.',"$uname:$udom"); - } else { - $msg = &mt('Release partially complete for: [_1]',$description); - } - return (0,$msg); - } else { - if ($mgr eq 'F') { - $msg = &mt('Released Reservation for user: [_1]',"$uname:$udom"); - } else { - $msg = ''.&mt('Released reservation: [_1]',$description).'

'; - my $person = &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'}); - my $subject = &mt('Reservation change: [_1]',$description); - my $msgbody = &mt('Reservation released by [_1] for [_2].',$person,$description); - $msg .= &slot_change_messaging($slot{'reservationmsg'},$subject,$msgbody,'release'); - } - return (1,$msg); - } - } else { - $msg = &mt('Release failed for: [_1]',$description); - return (0,$msg); + my @new_slots; + foreach my $exist_slot (@slots) { + if ($exist_slot eq $slot_name) { next; } + push(@new_slots,$exist_slot); } -} + my $new_param = join(':',@new_slots); -sub update_selectable { - my ($navmap,$slot_name,$symb,$cdom,$cnum,$udom,$uname,$context) = @_; - return 'error: ' unless (ref($navmap)); - my $symb_for_parm = $symb; - my $passed_resource = $navmap->getBySymb($symb); - return 'error: invalid symb' unless (ref($passed_resource)); + my ($cnum,$cdom)=&get_course(); - # if the reservation symb is for a map get a resource in that map - # to check slot parameters on - if ($passed_resource->is_map()) { - my ($a_resource) = - $navmap->retrieveResources($passed_resource, - sub {$_[0]->is_problem() || $_[0]->is_tool() },0,1); - $symb_for_parm = $a_resource->symb(); + # get slot reservations, check if user has one, if so remove reservation + my %consumed=&Apache::lonnet::dump('slot_reservations',$cdom,$cnum, + "^$slot_name\0"); + foreach my $entry (keys(%consumed)) { + if ( $consumed{$entry}->{'name'} eq ($uname.':'.$udom) ) { + &Apache::lonnet::del('slot_reservations',[$entry], + $cdom,$cnum); + my %storehash = ( + symb => $symb, + slot => $slot_name, + action => 'release', + context => $env{'form.context'}, + ); + &Apache::lonnet::write_log('slotreservationslog',\%storehash, + 1,$uname,$udom,$cnum,$cdom); + &Apache::lonnet::write_log($cdom.'_'.$cnum.'_slotlog',\%storehash, + 1,$uname,$udom,$uname,$udom); + } } - # get parameter string, check for existence, rebuild string with the slot - my $student = &Apache::lonnet::EXT('resource.0.availablestudent', - $symb_for_parm,$udom,$uname); - - # Get value of useslots parameter in effect for this user. - # If value is map or map_map, then the parm level is 2 (i.e., - # non-recursive enclosing map/folder level for specific user) - # and the symb for this reservation in slot_reservations.db - # will be the symb of the map itself. - my $use_slots = &Apache::lonnet::EXT('resource.0.useslots', - $symb_for_parm,$udom,$uname); + my $use_slots = &Apache::lonnet::EXT("resource.0.useslots", + $symb,$udom,$uname); &Apache::lonxml::debug("use_slots is $use_slots
"); - if (&Apache::lonnet::error($use_slots)) { - return 'error: Unable to determine current status'; + if (&Apache::lonnet::error($use_slots)) { + return (0,'error: Unable to determine current status'); } my $parm_level = 1; if ($use_slots eq 'map' || $use_slots eq 'map_map') { - $parm_level = 2; + $parm_level = 2; } - - my @slots = split(/:/,$student); - - my @new_slots; - foreach my $exist_slot (@slots) { - next if ($exist_slot eq $slot_name); - push(@new_slots,$exist_slot); + # store new parameter string + my $result=&Apache::lonparmset::storeparm_by_symb($symb, + '0_availablestudent', + $parm_level, $new_param, + 'string', $uname, $udom); + my $msg; + if ($mgr eq 'F') { + $msg = &mt('Released Reservation for user: [_1]',"$uname:$udom"); + } else { + $msg = ''.&mt('Released reservation: [_1]',$description).'

'; + my $person = &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'}); + my $subject = &mt('Reservation change: [_1]',$description); + my $msgbody = &mt('Reservation released by [_1] for [_2].',$person,$description); + $msg .= &slot_change_messaging($slot{'reservationmsg'},$subject,$msgbody,'release'); } - my $new_value = join(':',@new_slots); - - my $result = &store_slot_parm($symb_for_parm,$symb,$slot_name,$parm_level, - $new_value,$cnum,$cdom,$uname,$udom,'release', - $context,1); - return $result; + return (1,$msg); } sub delete_slot { @@ -1050,7 +785,7 @@ sub delete_slot { if ($ret eq 'ok') { $r->print('

'.&mt('Slot [_1] marked as deleted.',''.$slot_name.'').'

'); } else { - $r->print('

'.&mt('An error occurred when attempting to delete slot: [_1]',''.$slot_name.'')." ($ret)

"); + $r->print('

'.&mt('An error occurred when attempting to delete slot: [_1]',''.$slot_name.'')." ($ret)

"); } } else { if (%consumed) { @@ -1066,32 +801,15 @@ sub delete_slot { sub return_link { my ($r) = @_; - my $target = &return_target(); if (($env{'form.command'} eq 'manageresv') || ($env{'form.context'} eq 'usermanage')) { - $r->print('

'. + $r->print('

'. &mt('Return to reservations')); } else { - $r->print('

'. + $r->print('

'. &mt('Return to last resource').'

'); } } -sub return_target { - my ($target,$ltitarget,$deeplinktarget); - if ($env{'request.lti.login'}) { - $ltitarget = $env{'request.lti.target'}; - } - if ($env{'request.deeplink.login'}) { - $deeplinktarget = $env{'request.deeplink.target'}; - } - if (($ltitarget eq 'iframe') || ($deeplinktarget eq '_self')) { - $target = '_self'; - } else { - $target = '_top'; - } - return $target; -} - sub get_slot { my ($r,$symb,$conflictable_slot,$inhibit_return_link)=@_; @@ -1099,24 +817,18 @@ sub get_slot { my $slot_name=&check_for_conflict($symb,$env{'form.slotname'},\%slot); if ($slot_name =~ /^error: (.*)/) { - $r->print('

' + $r->print('

' .&mt('An error occurred while attempting to make a reservation. ([_1])',$1) - .'

'); + .'

'); &return_link($r); return 0; } if ($slot_name && $slot_name ne $conflictable_slot) { my %slot=&Apache::lonnet::get_slot($slot_name); my $description1=&get_description($slot_name,\%slot); - my $slottype1=$slot{'type'}; %slot=&Apache::lonnet::get_slot($env{'form.slotname'}); my $description2=&get_description($env{'form.slotname'},\%slot); - if ($slottype1 eq 'preassigned') { - $r->print('

'.&mt('You already have a reservation: "[_1]", assigned by your instructor.', - $description1).'

'. - '

'.&mt('Your instructor must unassign it before you can make a new reservation.'). - '

'); - } elsif ($slot_name ne $env{'form.slotname'}) { + if ($slot_name ne $env{'form.slotname'}) { $r->print(< @@ -1154,9 +866,9 @@ STUFF if (defined($reserved)) { my $retvalue = 0; if ($slot_name =~ /^error: (.*)/) { - $r->print('

' + $r->print('

' .&mt('An error occurred while attempting to make a reservation. ([_1])',$1) - .'

'); + .'

'); } elsif ($reserved > -1) { $r->print('

'.&mt('Successfully signed up: [_1]',$description).'

'); $retvalue = 1; @@ -1288,10 +1000,21 @@ sub allowed_slot { return 0 if (!$userallowed); # not allowed for this resource - if (defined($slot->{'symb'}) - && $slot->{'symb'} ne $symb) { - unless ((ref($toskip) eq 'HASH') && ($toskip->{'symb'})) { - return 0; + if (defined($slot->{'symb'})) { + my $exclude = 1; + my ($slotmap,$slotid,$sloturl) = &Apache::lonnet::decode_symb($slot->{'symb'}); + if ($sloturl=~/\.(page|sequence)$/) { + my ($map,$id,$url) = &Apache::lonnet::decode_symb($symb); + if (($map ne '') && ($map eq $slotmap)) { + $exclude = 0; + } + } elsif ($slot->{'symb'} eq $symb) { + $exclude = 0; + } + if ($exclude) { + unless ((ref($toskip) eq 'HASH') && ($toskip->{'symb'})) { + return 0; + } } } @@ -1329,8 +1052,7 @@ sub show_choices { if (!@{$available}) { $output = ''.&mt('No available times.').''; if ($env{'form.command'} ne 'manageresv') { - my $target = &return_target(); - $output .= ' '. + $output .= ' '. &mt('Return to last resource').''; } $r->print($output); @@ -1584,6 +1306,10 @@ sub show_table { } my $available; if ($mgr eq 'F') { + # FIXME: This line should be deleted once Slots uses breadcrumbs + $r->print('
'.&Apache::loncommon::help_open_topic( + 'Slot About', &mt('Help on slots'))); + $r->print('
'); $r->print('
@@ -1593,7 +1319,7 @@ sub show_table { $r->print('
'); - $r->print(&Apache::loncommon::help_open_topic('Slot About')); + $r->print(&Apache::loncommon::help_open_topic('Slot AddInterface')); $r->print('
'); } @@ -1634,7 +1360,7 @@ sub show_table { 'secret' => 'Secret Word', 'space' => '# of students/max', 'ip' => 'IP or DNS restrictions', - 'symb' => 'Resource slot is restricted to.', + 'symb' => 'Resource/Map slot is restricted to.', 'allowedsections' => 'Sections slot is restricted to.', 'allowedusers' => 'Users slot is restricted to.', 'uniqueperiod' => 'Period of time slot is unique', @@ -1746,16 +1472,15 @@ sub show_table { $r->print(''); $r->print('

'); my $linkstart=''.$show_fields{$which}.''; + $r->print(''.$linkstart.$which.'">'.$show_fields{$which}.''); } } - $tableheader .= &Apache::loncommon::end_data_table_header_row(); - my $shownheader = 0; + $r->print(&Apache::loncommon::end_data_table_header_row()); my %name_cache; my $slotsort = sub { @@ -1904,39 +1629,30 @@ sub show_table { delete => 'Delete', slotlog => 'History', ); - my ($edit,$delete,$showlog,$remove_all); - if ($mgr) { - $edit=(<<"EDITLINK"); + my $edit=(<<"EDITLINK"); $lt{'edit'} EDITLINK - $delete=(<<"DELETELINK"); + my $delete=(<<"DELETELINK"); $lt{'delete'} DELETELINK - $remove_all=&remove_link($slot,'remove all').'
'; - - if ($ids eq '') { - undef($remove_all); - } else { - undef($delete); - } - } - - $showlog=(<<"LOGLINK"); + my $showlog=(<<"LOGLINK"); $lt{'slotlog'} LOGLINK + my $remove_all=&remove_link($slot,'remove all').'
'; + + if ($ids eq '') { + undef($remove_all); + } else { + undef($delete); + } if ($slots{$slot}{'type'} ne 'schedulable_student') { undef($showlog); undef($remove_all); } - unless ($shownheader) { - $r->print($tableheader); - $shownheader = 1; - } - my $row_start=&Apache::loncommon::start_data_table_row(); my $row_end=&Apache::loncommon::end_data_table_row(); $r->print($row_start. @@ -2005,12 +1721,7 @@ $row_end STUFF } } - if ($shownheader) { - $r->print(&Apache::loncommon::end_data_table()); - } else { - $r->print('

'.&mt('No slots meet the criteria for display').'

'); - } - $r->print(''); + $r->print(&Apache::loncommon::end_data_table().''); return; } @@ -2071,15 +1782,15 @@ sub manage_reservations { my $symb = $resource->symb(); my $ressymb = $symb; $contents{$lastcontainer} ++; - next if (!$resource->is_problem() && !$resource->is_tool() && - !$resource->is_sequence() && !$resource->is_page()); + next if (!$resource->is_problem() && !$resource->is_sequence() && + !$resource->is_page()); $count ++; if (($resource->is_sequence()) || ($resource->is_page())) { $lastcontainer = $count; $container{$lastcontainer} = $resource; $container_title{$lastcontainer} = $resource->compTitle(); } - if ($resource->is_problem() || $resource->is_tool()) { + if ($resource->is_problem()) { my ($useslots) = $resource->slot_control(); next if (($useslots eq '') || ($useslots =~ /^\s*no\s*$/i)); my ($msg,$get_choices,$slotdescription); @@ -2366,16 +2077,14 @@ sub show_reservations { if ($showntablehdr) { $r->print(&Apache::loncommon::end_data_table().'
'); if (($curr{'page'} > 1) || ($more_records)) { - $r->print('

'); + $r->print(''); if ($curr{'page'} > 1) { - $r->print(''); + $r->print(''); } if ($more_records) { - $r->print(''); + $r->print(''); } - $r->print('

'); + $r->print('
'.&mt('Previous [_1] changes',$curr{'show'}).''.&mt('Next [_1] changes',$curr{'show'}).'
'); $r->print(<<"ENDSCRIPT");