--- loncom/interface/slotrequest.pm	2021/01/18 21:46:09	1.143
+++ loncom/interface/slotrequest.pm	2023/07/07 03:52:40	1.145
@@ -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.143 2021/01/18 21:46:09 raeburn Exp $
+# $Id: slotrequest.pm,v 1.145 2023/07/07 03:52:40 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -56,7 +56,7 @@ sub fail {
 }
 
 sub start_page {
-    my ($r,$title,$brcrum,$bread_crumbs_component,$js)=@_;
+    my ($r,$title,$brcrum,$bread_crumbs_component,$js,$mgr)=@_;
     my $args;
     if (ref($brcrum) eq 'ARRAY') {
         $args = {bread_crumbs => $brcrum};
@@ -74,6 +74,31 @@ 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));
 }
 
@@ -1138,15 +1163,32 @@ 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('<p><a href="/adm/slotrequest?command=manageresv">'.
-                  &mt('Return to reservations'));  
+	$r->print('<p><a href="/adm/slotrequest?command=manageresv" target="'.$target.'">'.
+                  &mt('Return to reservations').'</a></p>');  
     } else {
-        $r->print('<p><a href="/adm/flip?postdata=return:">'.
+        $r->print('<p><a href="/adm/flip?postdata=return:" target="'.$target.'">'.
 	          &mt('Return to last resource').'</a></p>');
     }
 }
 
+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)=@_;
 
@@ -1406,7 +1448,8 @@ sub show_choices {
     if (!@{$available}) {
         $output = '<span class="LC_info">'.&mt('No available times.').'</span>';
         if ($env{'form.command'} ne 'manageresv') {
-            $output .= ' <a href="/adm/flip?postdata=return:">'.
+            my $target = &return_target();
+            $output .= ' <a href="/adm/flip?postdata=return:" target="'.$target.'">'.
                        &mt('Return to last resource').'</a>';
         }
         if ($class) {
@@ -2873,7 +2916,7 @@ sub display_filter {
     my (%titles,%maptitles);
     my $output = '<br /><table><tr><td valign="top">'.
                  '<span class="LC_nobreak"><b>'.&mt('Changes/page:').'</b><br />'.
-                 &Apache::lonmeta::selectbox('show',$curr->{'show'},undef,
+                 &Apache::lonmeta::selectbox('show',$curr->{'show'},'',undef,
                                               (&mt('all'),5,10,20,50,100,1000,10000)).
                  '</td><td>&nbsp;&nbsp;</td>';
     my $startform =
@@ -3476,7 +3519,7 @@ sub handler {
     if (($env{'form.requestattempt'}) || ($env{'form.command'} eq 'manageresv')) {
         $js = &reservation_js(\%slots,$consumed_uniqueperiods,$available,$got_slots,$symb);
     }
-    &start_page($r,$title,$brcrum,$bread_crumbs_component,$js);
+    &start_page($r,$title,$brcrum,$bread_crumbs_component,$js,$mgr);
 
     if ($env{'form.command'} eq 'manageresv') {
         $allavailable = $available;