--- 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 .= '
';
- }
- $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('
');
}
}
-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('