--- loncom/interface/lonrequestcourse.pm	2014/05/19 15:59:55	1.84
+++ loncom/interface/lonrequestcourse.pm	2015/05/21 23:40:09	1.87
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Request a course
 #
-# $Id: lonrequestcourse.pm,v 1.84 2014/05/19 15:59:55 raeburn Exp $
+# $Id: lonrequestcourse.pm,v 1.87 2015/05/21 23:40:09 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -172,7 +172,7 @@ sub handler {
                 if ($can_request{'textbook'}) {
                     &process_textbook_request($r,$dom,$action,\%domdefs,\%domconfig,\%can_request);
                 } else {
-                    &textbook_request_disabled($r,$dom,\%can_request);
+                    &textbook_request_disabled($r,$dom,$action,\%can_request);
                 }
             } elsif ($action eq 'display') {
                my ($uname,$udom,$result,$warning) = &domcoord_display($dom);
@@ -194,7 +194,7 @@ sub handler {
                 if ($can_request{'textbook'}) {
                     &print_textbook_form($r,$dom,\@incdoms,\%domdefs,$domconfig{'requestcourses'},\%can_request);
                 } else {
-                    &textbook_request_disabled($r,$dom,\%can_request);
+                    &textbook_request_disabled($r,$dom,$action,\%can_request);
                 }
             }
             return OK;
@@ -476,27 +476,29 @@ sub get_breadcrumbs {
                     }
                 }
             }
-            for (my $i=0; $i<@{$states->{$action}}; $i++) {
-                if ($$state eq $states->{$action}[$i]) {
-                    &Apache::lonhtmlcommon::add_breadcrumb(
-                       {text=>"$trail->{$$state}"});
-                    $crumb = &Apache::lonhtmlcommon::breadcrumbs('Course/Community Requests','Course_Requests');
-                    last;
-                } else {
-                    if (($$state eq 'process') || ($$state eq 'removal') || ($$state eq 'reqauthor')) {
+            if (ref($states->{$action}) eq 'ARRAY') {
+                for (my $i=0; $i<@{$states->{$action}}; $i++) {
+                    if ($$state eq $states->{$action}[$i]) {
                         &Apache::lonhtmlcommon::add_breadcrumb(
-                            { href => '/adm/requestcourse',
-                              text => "$trail->{$states->{$action}[$i]}",
-                            }
-                        );
+                           {text=>"$trail->{$$state}"});
+                        $crumb = &Apache::lonhtmlcommon::breadcrumbs('Course/Community Requests','Course_Requests');
+                        last;
                     } else {
-                        &Apache::lonhtmlcommon::add_breadcrumb(
+                        if (($$state eq 'process') || ($$state eq 'removal') || ($$state eq 'reqauthor')) {
+                            &Apache::lonhtmlcommon::add_breadcrumb(
+                                { href => '/adm/requestcourse',
+                                  text => "$trail->{$states->{$action}[$i]}",
+                                }
+                           );
+                        } else {
+                            &Apache::lonhtmlcommon::add_breadcrumb(
      { href => "javascript:backPage(document.requestcrs,'$states->{$action}[$i]')",
        text => "$trail->{$states->{$action}[$i]}", }
-                       );
-                   }
-               }
-           }
+                           );
+                        }
+                    }
+                }
+            }
         } else {
             &Apache::lonhtmlcommon::add_breadcrumb(
                     {text=>'Pick Action'});
@@ -937,7 +939,8 @@ END
     if ($action eq 'new') {
         my $jsextra;
         if (($state eq 'courseinfo') || ($state eq 'codepick')) {
-            $jsextra = "\n".&Apache::loncommon::coursebrowser_javascript($dom);
+            $jsextra = "\n".&Apache::loncommon::coursebrowser_javascript($dom,'','','','','',
+                                                                         $newinstcode);
         } elsif ($state eq 'enrollment') {
             if (($env{'form.crstype'} eq 'official') && 
                 (&Apache::lonnet::auto_run('',$dom))) {
@@ -2786,6 +2789,7 @@ sub print_review {
 
     my $enrollrow_title = &mt('Default Access Dates').'<br />'.
                           '('.&Apache::lonnet::plaintext('st',$category).')';
+    my $instcode;
     if ($env{'form.crstype'} eq 'official') {
         if ((ref($codetitles) eq 'ARRAY') && (ref($cat_titles) eq 'HASH')) {
             foreach my $title (@{$codetitles}) {
@@ -2801,6 +2805,11 @@ sub print_review {
                 }
             }
         }
+        if (ref($code_order) eq 'ARRAY') {
+            foreach my $item (@{$code_order}) {
+                $instcode .= $env{'form.instcode_'.$item};
+            }
+        }
         $inst_headers .= '<th>'.&mt('Credits').'</th>';
         if ($instcredits) {
             $inst_values .= '<td>'.$instcredits.'</td>';
@@ -2888,7 +2897,7 @@ sub print_review {
         ($env{'form.clonedom'} =~ /^$match_domain$/)) {
         my $canclone = &Apache::loncoursequeueadmin::can_clone_course($uname,
                            $udom,$env{'form.clonecrs'},$env{'form.clonedom'},
-                           $env{'form.crstype'});
+                           $env{'form.crstype'},$dom,$instcode);
         if ($canclone) {
             my %courseenv = &Apache::lonnet::userenvironment($env{'form.clonedom'},
                               $env{'form.clonecrs'},('description','internal.coursecode'));
@@ -3586,7 +3595,7 @@ sub print_request_outcome {
             my $canclone =  
                 &Apache::loncoursequeueadmin::can_clone_course($env{'user.name'},
                         $env{'user.domain'},$env{'form.clonecrs'},$env{'form.clonedom'},
-                        $crstype);
+                        $crstype,$dom,$instcode);
             if ($canclone) {
                 $clonecrs = $env{'form.clonecrs'};
                 $clonedom = $env{'form.clonedom'};
@@ -3668,6 +3677,11 @@ sub process_request {
                                             $dom,$crstype,$limit,\$message);
         } elsif ($val eq 'validate') {
             my ($inststatuslist,$validationchk,$validation,%custominfo);
+            if (ref($details) eq 'HASH') {
+                if ($details->{'clonecrs'}) {
+                    $custominfo{'_LC_clonefrom'} = $details->{'clonedom'}.'_'.$details->{'clonecrs'};
+                }
+            }
             if (@inststatuses > 0) {
                 $inststatuslist = join(',',@inststatuses);
             }
@@ -3760,6 +3774,11 @@ sub process_request {
                       &mt('Your request is being processed; this page will update when processing is complete.').
                       '</div>');
             $r->rflush();
+            if (ref($details) eq 'HASH') {
+                if ($details->{'clonecrs'}) {
+                    $customitems{'_LC_clonefrom'} = $details->{'clonedom'}.'_'.$details->{'clonecrs'};
+                }
+            }
             my ($result,$postprocess) = &Apache::loncoursequeueadmin::course_creation($dom,$cnum,
                                           'autocreate',$details,\$logmsg,\$newusermsg,\$addresult,
                                           \$enrollcount,\$response,\$keysmsg,\%domdefs,\%longroles,
@@ -4450,7 +4469,7 @@ sub print_textbook_form {
                     my ($clonedom,$clonecrs) = split(/_/,$item);
                     if (ref($prefab{$type}{$item}) eq 'HASH') {
                         if (&Apache::loncoursequeueadmin::can_clone_course($env{'user.name'},
-                                          $env{'user.domain'},$clonecrs,$clonedom,$crstype)) {
+                                          $env{'user.domain'},$clonecrs,$clonedom,$crstype,$dom)) {
 
                             my $num = $prefab{$type}{$item}{'order'};
                             $ordered{$type}{$num} = $item;
@@ -4792,7 +4811,7 @@ sub process_textbook_request {
         if (&Apache::lonnet::homeserver($clonecrs,$clonedom) ne 'no_host') {
             my $canclone =
                 &Apache::loncoursequeueadmin::can_clone_course($env{'user.name'},
-                            $env{'user.domain'},$clonecrs,$clonedom,$crstype);
+                            $env{'user.domain'},$clonecrs,$clonedom,$crstype,$dom);
             unless ($canclone) {
                 undef($clonecrs);
                 undef($clonedom);
@@ -5014,6 +5033,33 @@ ENDSCRIPT
 
 }
 
+sub textbook_request_disabled {
+    my ($r,$dom,$action,$can_request) = @_;
+    if (ref($can_request) eq 'HASH') {
+        if ($action eq 'process') {
+            unless ((scalar(keys(%{$can_request})) == 1)) {
+                &Apache::lonhtmlcommon::add_breadcrumb(
+                   { href => '/adm/requestcourse',
+                     text => 'Pick action',
+                   });
+            }
+        }
+    }
+    $r->print(&header('Course Request'));
+    &Apache::lonhtmlcommon::add_breadcrumb({text=>'Course Request'});
+    $r->print(&Apache::lonhtmlcommon::breadcrumbs('Course Requests','Course_Requests').
+              '<div>'.
+              '<p class="LC_info">'.&mt('You do not have privileges to request creation of textbook courses.').'</p>');
+    if (ref($can_request) eq 'HASH') {
+        if (scalar(keys(%{$can_request})) > 1) {
+            $r->print('<a href="/adm/requestcourse">'.&mt('Go back').'</a>');
+         }
+    }
+    $r->print('</div>'.
+              &Apache::loncommon::end_page());
+    return;
+}
+
 sub startContentScreen {
     my ($r,$mode)=@_;
     $r->print("\n".'<ul class="LC_TabContentBigger" id="textbookreq">'."\n");