--- loncom/interface/lonrequestcourse.pm	2018/12/27 18:14:25	1.105
+++ loncom/interface/lonrequestcourse.pm	2020/02/12 22:15:40	1.108
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Request a course
 #
-# $Id: lonrequestcourse.pm,v 1.105 2018/12/27 18:14:25 raeburn Exp $
+# $Id: lonrequestcourse.pm,v 1.108 2020/02/12 22:15:40 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -119,6 +119,10 @@ use Apache::loncoursequeueadmin;
 use Apache::lonuserutils;
 use LONCAPA qw(:DEFAULT :match);
 
+my $registered_flush;
+my $registered_instcats;
+my $modified_dom;
+
 sub handler {
     my ($r) = @_;
     &Apache::loncommon::content_type($r,'text/html');
@@ -127,6 +131,10 @@ sub handler {
         return OK;
     }
 
+    $registered_flush = 0;
+    $registered_instcats = 0;
+    $modified_dom = '';
+
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
         ['action','showdom','cnum','state','crstype','queue','tabs']);
     &Apache::lonhtmlcommon::clear_breadcrumbs();
@@ -3263,7 +3271,7 @@ sub coursecode_form {
         }
         if (@{$codetitles} > 0) {
             my $lastitem = pop(@{$codetitles});
-            my $lastinput = '<input type="text" size="5" name="'.$sel.'_'.                                            $lastitem.'" />';
+            my $lastinput = '<input type="text" size="5" name="'.$sel.'_'.$lastitem.'" />';
             if (@{$codetitles} > 0) {
                 my $helplink;
                 if (defined($helpitem{$context})) {
@@ -3371,14 +3379,14 @@ sub get_course_dom {
                     return $env{'user.domain'};
                 }
             }
-            my (@possible_doms,%willtrust,%trustchecked);
+            my (@possible_doms,%willtrust);
             foreach my $type (@{$types}) {
                 my $dom_str = $env{'environment.reqcrsotherdom.'.$type};
                 if ($dom_str ne '') {
                     my @domains = split(',',$dom_str);
                     foreach my $entry (@domains) {
                         my ($extdom,$extopt) = split(':',$entry);
-                        unless ($trustchecked{$extdom}) {
+                        unless (exists($willtrust{$extdom})) {
                             $willtrust{$extdom} = &Apache::lonnet::will_trust('reqcrs',$env{'user.domain'},$extdom);
                         }
                         if ($willtrust{$extdom}) {
@@ -3887,6 +3895,24 @@ sub process_request {
                 }
                 $output .= '</p>';
                 $creationresult = 'created';
+                # Flush the course logs so reverse user roles immediately updated
+                unless ($registered_flush) {
+                    my $handlers = $r->get_handlers('PerlCleanupHandler');
+                    $r->set_handlers('PerlCleanupHandler' => [\&Apache::lonnet::flushcourselogs,@{$handlers}]);
+                    $registered_flush=1;
+                }
+                if ($instcode ne '') {
+                    &Apache::lonnet::devalidate_cache_new('instcats',$dom);
+                    # Update cache of self-cataloging courses on institution's server(s).
+                    if (&Apache::lonnet::shared_institution($dom)) {
+                        unless ($registered_instcats) {
+                            my $handlers = $r->get_handlers('PerlCleanupHandler');
+                            $r->set_handlers('PerlCleanupHandler' => [\&devalidate_remote_instcats,@{$handlers}]);
+                            $registered_instcats=1;
+                            $modified_dom = $dom;
+                        }
+                    }
+                }
             } else {
                 $output = '<span class="LC_error">';
                 if ($crstype eq 'community') {
@@ -4022,6 +4048,22 @@ sub process_request {
     }
 }
 
+sub devalidate_remote_instcats {
+    if ($modified_dom ne '') {
+        my %servers = &Apache::lonnet::internet_dom_servers($modified_dom);
+        my %thismachine;
+        map { $thismachine{$_} = 1; } &Apache::lonnet::current_machine_ids();
+        if (keys(%servers)) {
+            foreach my $server (keys(%servers)) {
+                next if ($thismachine{$server});
+                &Apache::lonnet::remote_devalidate_cache($server,['instcats:'.$modified_dom]);
+            }
+        }
+        $modified_dom = '';
+    }
+    return;
+}
+
 sub custom_formitems {
     my ($preprocess,$customhash) = @_;
     return unless ((ref($preprocess) eq 'HASH') && (ref($customhash) eq 'HASH'));