--- loncom/interface/lonrequestcourse.pm	2014/05/09 17:43:13	1.82
+++ loncom/interface/lonrequestcourse.pm	2014/05/19 15:59:55	1.84
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Request a course
 #
-# $Id: lonrequestcourse.pm,v 1.82 2014/05/09 17:43:13 raeburn Exp $
+# $Id: lonrequestcourse.pm,v 1.84 2014/05/19 15:59:55 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -174,6 +174,22 @@ sub handler {
                 } else {
                     &textbook_request_disabled($r,$dom,\%can_request);
                 }
+            } elsif ($action eq 'display') {
+               my ($uname,$udom,$result,$warning) = &domcoord_display($dom);
+               if ($warning ne '') {
+                   my $args = { only_body => 1 };
+                   $r->print(&header('Course/Community Requests','','' ,'',$args).
+                             '<h3>'.&mt('Course/Community Request Details').'</h3>'.
+                             '<div class="LC_warning">'.$warning.'</div>'.
+                             &close_popup_form());
+                } else {
+                    $states{'display'} = ['details'];
+                    my $loaditems = &onload_action($action,$state);
+                    my $page = 0;
+                    &request_administration($r,$action,$state,$page,\%states,$dom,$jscript,
+                                            $loaditems,'','','','','',$showcredits,'','',
+                                            $uname,$udom);
+                }
             } else {
                 if ($can_request{'textbook'}) {
                     &print_textbook_form($r,$dom,\@incdoms,\%domdefs,$domconfig{'requestcourses'},\%can_request);
@@ -232,46 +248,7 @@ sub handler {
     my ($page,$crumb,$newinstcode,$codechk,$checkedcode,$description) =
         &get_breadcrumbs($dom,$action,\$state,\%states,\%trail);
     if ($action eq 'display') {
-        if (($dom eq $env{'request.role.domain'}) && (&Apache::lonnet::allowed('ccc',$dom))) {
-            if ($env{'form.cnum'} ne '') {
-                my $cnum = $env{'form.cnum'};
-                my $queue = $env{'form.queue'};
-                my $reqkey = $cnum.'_'.$queue;
-                my $namespace = 'courserequestqueue';
-                my $domconfig = &Apache::lonnet::get_domainconfiguser($dom);
-                my %queued =
-                    &Apache::lonnet::get($namespace,[$reqkey],$dom,$domconfig);
-                if (ref($queued{$reqkey}) eq 'HASH') {
-                    $uname = $queued{$reqkey}{'ownername'};
-                    $udom  = $queued{$reqkey}{'ownerdom'};
-                    if (($udom =~ /^$match_domain$/) && ($uname =~ /^$match_username$/)) {
-                        $result = &retrieve_settings($dom,$cnum,$udom,$uname);
-                    } else {
-                        if ($env{'form.crstype'} eq 'community') {
-                            $warning = &mt('Invalid username or domain for community requestor');
-                        } else {
-                            $warning = &mt('Invalid username or domain for course requestor');
-                        }
-                    }
-                } else {
-                    if ($env{'form.crstype'} eq 'community') {
-                        $warning = &mt('No information was found for this community request.');
-                    } else {
-                        $warning = &mt('No information was found for this course request.');
-                    }
-                }
-            } else {
-                $warning = &mt('No course request ID provided.');
-            }
-        } else {
-            if ($env{'form.crstype'} eq 'any') {
-               $warning = &mt('You do not have rights to view course or community request information.');
-            } elsif ($env{'form.crstype'} eq 'community') {
-                $warning = &mt('You do not have rights to view community request information.');
-            } else {
-                $warning = &mt('You do not have rights to view course request information.');
-            }
-        }
+        ($uname,$udom,$result,$warning) = &domcoord_display($dom);
     } elsif ((defined($state)) && (defined($action))) {
         if (($action eq 'view') && ($state eq 'details')) {
             if ((defined($env{'form.showdom'})) && (defined($env{'form.cnum'}))) {
@@ -334,6 +311,8 @@ sub handler {
             $jscript = &Apache::lonhtmlcommon::set_form_elements($elementsref,\%stored);
             if ($state eq 'courseinfo') {
                 $jscript .= &cloning_javascript();
+            } elsif ($state eq 'process') {
+                $jscript .= &processing_javascript();
             }
         }
     }
@@ -436,7 +415,7 @@ function setCloneDisplay(courseForm) {
         for (var i=0; i<courseForm.cloning.length; i++) {
             if (courseForm.cloning[i].checked) {
                 if (courseForm.cloning[i].value == 1) {
-                    document.getElementById('cloneoptions').style.display="block";;
+                    document.getElementById('cloneoptions').style.display="block";
                 }
             }
         }
@@ -445,6 +424,17 @@ function setCloneDisplay(courseForm) {
 END
 }
 
+sub processing_javascript {
+    return <<"END";
+function hideProcessing() {
+    if (document.getElementById('processing')) {
+        document.getElementById('processing').style.display="none";
+    }
+}
+
+END
+}
+
 sub get_breadcrumbs {
     my ($dom,$action,$state,$states,$trail) = @_;
     my ($crumb,$newinstcode,$codechk,$checkedcode,$numtitles,$description);
@@ -720,6 +710,9 @@ sub onload_action {
         if ($state eq 'courseinfo') {
             $loaditems{'onload'} .= 'javascript:setCloneDisplay(document.requestcrs);';
         }
+        if ($state eq 'process') {
+            $loaditems{'onload'} .= 'javascript:hideProcessing();';
+        }
     }
     return \%loaditems;
 }
@@ -1129,6 +1122,52 @@ END
     return;
 }
 
+sub domcoord_display {
+    my ($dom) = @_;
+    my ($uname,$udom,$result,$warning);
+    if (($dom eq $env{'request.role.domain'}) && (&Apache::lonnet::allowed('ccc',$dom))) {
+        if ($env{'form.cnum'} ne '') {
+            my $cnum = $env{'form.cnum'};
+            my $queue = $env{'form.queue'};
+            my $reqkey = $cnum.'_'.$queue;
+            my $namespace = 'courserequestqueue';
+            my $domconfig = &Apache::lonnet::get_domainconfiguser($dom);
+            my %queued =
+                &Apache::lonnet::get($namespace,[$reqkey],$dom,$domconfig);
+            if (ref($queued{$reqkey}) eq 'HASH') {
+                $uname = $queued{$reqkey}{'ownername'};
+                $udom  = $queued{$reqkey}{'ownerdom'};
+                if (($udom =~ /^$match_domain$/) && ($uname =~ /^$match_username$/)) {
+                    $result = &retrieve_settings($dom,$cnum,$udom,$uname);
+                } else {
+                    if ($env{'form.crstype'} eq 'community') {
+                        $warning = &mt('Invalid username or domain for community requestor');
+                    } else {
+                        $warning = &mt('Invalid username or domain for course requestor');
+                    }
+                }
+            } else {
+                if ($env{'form.crstype'} eq 'community') {
+                    $warning = &mt('No information was found for this community request.');
+                } else {
+                    $warning = &mt('No information was found for this course request.');
+                }
+            }
+        } else {
+            $warning = &mt('No course request ID provided.');
+        }
+    } else {
+        if ($env{'form.crstype'} eq 'any') {
+            $warning = &mt('You do not have rights to view course or community request information.');
+        } elsif ($env{'form.crstype'} eq 'community') {
+            $warning = &mt('You do not have rights to view community request information.');
+        } else {
+            $warning = &mt('You do not have rights to view course request information.');
+        }
+    }
+    return ($uname,$udom,$result,$warning);
+}
+
 sub enrollment_lcsec_js {
     my %alerts = &section_check_alerts();
     my $secname = $alerts{'badsec'};
@@ -1527,7 +1566,7 @@ sub print_request_form {
                                                      \%cat_order,\@code_order);
         }
         my $lonhost = $r->dir_config('lonHostID');
-        my ($storeresult,$result) = &print_request_outcome($lonhost,$dom,\@codetitles,
+        my ($storeresult,$result) = &print_request_outcome($r,$lonhost,$dom,\@codetitles,
                                                            \@code_order,$instcredits);
         $r->print($result);
         if (($storeresult eq 'ok') || ($storeresult eq 'created')) {
@@ -3336,7 +3375,7 @@ sub display_navbuttons {
 }
 
 sub print_request_outcome {
-    my ($lonhost,$dom,$codetitles,$code_order,$instcredits) = @_;
+    my ($r,$lonhost,$dom,$codetitles,$code_order,$instcredits) = @_;
     my ($output,$cnum,$now,$req_notifylist,$crstype,$enrollstart,$enrollend,
         %sections,%crosslistings,%personnel,@baduname,@missingdom,%domconfig,
         $uniquecode);
@@ -3581,13 +3620,13 @@ sub print_request_outcome {
                     accessend      => $accessend,
                     personnel      => \%personnel,
                   };
-    my ($result,$output) = &process_request($lonhost,$dom,$cnum,$crstype,$now,$details,$instcode,
+    my ($result,$output) = &process_request($r,$lonhost,$dom,$cnum,$crstype,$now,$details,$instcode,
                                             $req_notifylist,\@instsections,\%domconfig);
     return ($result,$output);
 }
     
 sub process_request {
-    my ($lonhost,$dom,$cnum,$crstype,$now,$details,$instcode,$req_notifylist,$instsections,
+    my ($r,$lonhost,$dom,$cnum,$crstype,$now,$details,$instcode,$req_notifylist,$instsections,
         $domconfig) = @_; 
     my (@inststatuses,$storeresult,$creationresult,$output);
     my $val = 
@@ -3717,6 +3756,10 @@ sub process_request {
             foreach my $role (@roles) {
                 $longroles{$role}=&Apache::lonnet::plaintext($role,$type);
             }
+            $r->print('<div id="processing" style="display:block;">'."\n".
+                      &mt('Your request is being processed; this page will update when processing is complete.').
+                      '</div>');
+            $r->rflush();
             my ($result,$postprocess) = &Apache::loncoursequeueadmin::course_creation($dom,$cnum,
                                           'autocreate',$details,\$logmsg,\$newusermsg,\$addresult,
                                           \$enrollcount,\$response,\$keysmsg,\%domdefs,\%longroles,
@@ -4507,7 +4550,7 @@ sub print_textbook_form {
             if (ref($ordered{'templates'}) eq 'HASH') {
                 $r->print('<span class="LC_nobreak"><label>'.
                           '<input type="radio" name="cloning" value="template" onclick="javascript:cloneChoice();" />'.
-                          &mt('Load template content').'</span>'.('&nbsp;'x2).' ');
+                          &mt('Load pre-existing template').'</span>'.('&nbsp;'x2).' ');
             }
         }
         if (keys(%cloneable)) {
@@ -4759,7 +4802,11 @@ sub process_textbook_request {
             undef($clonedom);
         }
     }
-    $r->print(&header('Course Creation'));
+    my $js = &processing_javascript();
+    my $loaditems = { 
+                      onload => 'javascript:hideProcessing();',
+                    };
+    $r->print(&header('Course Creation',$js,$loaditems));
 
     if (ref($can_request) eq 'HASH') {
         unless ((scalar(keys(%{$can_request})) == 1) && ($can_request->{'textbook'})) {
@@ -4798,7 +4845,8 @@ sub process_textbook_request {
         $details->{dateshift} = $env{'form.dateshift'};
     }
     my $lonhost = $r->dir_config('lonHostID');
-    my ($result,$output) = &process_request($lonhost,$dom,$cnum,$crstype,$now,$details,'',
+    $r->rflush();
+    my ($result,$output) = &process_request($r,$lonhost,$dom,$cnum,$crstype,$now,$details,'',
                                             $req_notifylist,[],$domconfig);
     $r->print($output);
     if (&Apache::loncoursequeueadmin::author_prompt()) {