--- loncom/interface/loncreatecourse.pm	2004/07/01 21:54:24	1.62
+++ loncom/interface/loncreatecourse.pm	2004/09/09 19:24:01	1.67
@@ -1,7 +1,7 @@
-#meserver The LearningOnline Network
+# The LearningOnline Network
 # Create a course
 #
-# $Id: loncreatecourse.pm,v 1.62 2004/07/01 21:54:24 www Exp $
+# $Id: loncreatecourse.pm,v 1.67 2004/09/09 19:24:01 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -53,8 +53,8 @@ sub crsdirlist {
 sub innercrsdirlist {
     my ($courseid,$which,$path)=@_;
     my $dirptr=16384;
-    unless ($which) { $which=''; }
-    unless ($path)  { $path=''; }
+    unless ($which) { $which=''; } else { $which.='/'; }
+    unless ($path)  { $path=''; } else { $path.='/'; }
     my %crsdata=&Apache::lonnet::coursedescription($courseid);
     my @listing=&Apache::lonnet::dirlist
 	($which,$crsdata{'domain'},$crsdata{'num'},
@@ -64,11 +64,11 @@ sub innercrsdirlist {
 	    my @unpackline = split (/\&/,$_);
 	    if ($unpackline[3]&$dirptr) {
 # is a directory, recurse
-		&innercrsdirlist($courseid,$which.'/'.$unpackline[0],
-				            $path.'/'.$unpackline[0]);
+		&innercrsdirlist($courseid,$which.$unpackline[0],
+				            $path.$unpackline[0]);
 	    } else { 
 # is a file, put into output
-		push (@output,$path.'/'.$unpackline[0]);
+		push (@output,$path.$unpackline[0]);
 	    }
 	}
     }
@@ -123,7 +123,9 @@ sub copyfile {
                      &readfile($origcrsid,$which),
 	    (
        '/uploaded/'.$origcrsdata{'domain'}.'/'.$origcrsdata{'num'}.'/'
-    => '/uploaded/'. $newcrsdata{'domain'}.'/'. $newcrsdata{'num'}.'/'
+    => '/uploaded/'. $newcrsdata{'domain'}.'/'. $newcrsdata{'num'}.'/',
+       '/public/'.$origcrsdata{'domain'}.'/'.$origcrsdata{'num'}.'/'
+    => '/public/'. $newcrsdata{'domain'}.'/'. $newcrsdata{'num'}.'/'
             )));
     }
 }
@@ -278,7 +280,7 @@ sub print_course_creation_page {
                     'snid' => "Section Numbers and corresponding LON-CAPA section/group IDs",
                     'csli' => "a comma separated list of institutional section numbers, each separated by a colon from the (optional) corresponding section/group ID to be used in LON-CAPA e.g., 001:1,002:2",
                     'crcs' => "Crosslisted courses",
-                    'cscs' => "a comma separated list of course sections crosslisted with the current course, with each entry including the institutional course section name followed by a colon and then the (optional) groupID to be used in LON-CAPA, e.g., fs03ent231001:ent1,fs03bot231001:bot1,fs03zol231002:bot2", 
+                    'cscs' => "a comma separated list of course sections crosslisted with the current course, with each entry including the institutional course section name followed by a colon and then the (optional) groupID to be used in LON-CAPA, e.g., fs03ent231001:ent1,fs03bot231001:bot1,fs03zol231002:zol2",
                     'crco' => "Course Content",
                     'cncr' => "Completely new course",
                     'cecr' => "Clone an existing course", 
@@ -581,6 +583,10 @@ ENDENHEAD
 	    $cenv{'url'}=$oldcenv{'url'};
 # Restore title
 	    $cenv{'description'}=$oldcenv{'description'};
+# restore grading mode
+	    if (defined($oldcenv{'grading'})) {
+		$cenv{'grading'}=$oldcenv{'grading'};
+	    }
 # Mark as cloned
 	    $cenv{'clonedfrom'}=$cloneid;
 	    delete($cenv{'default_enrollment_start_date'});
@@ -590,44 +596,63 @@ ENDENHEAD
 #
 # Set environment (will override cloned, if existing)
 #
-    my @affiliates = ();  # Used to accumulate sections and crosslistings
+    my @sections = ();
+    my @xlists = ();
     if ($ENV{'form.crsid'}) {
         $cenv{'courseid'}=$ENV{'form.crsid'};
     }
     if ($ENV{'form.crscode'}) {
         $cenv{'internal.coursecode'}=$ENV{'form.crscode'};
     }
+    if ($ccuname) {
+        $cenv{'internal.courseowner'} = $ccuname;
+    } else {
+        $cenv{'internal.courseowner'} = $ENV{'user.name'};
+    }
+
+    my @badclasses = (); # Used to accumulate sections/crosslistings that did not pass classlist access check for course owner.
     if ($ENV{'form.crssections'}) {
-        $cenv{'internal.sectionnums'}=$ENV{'form.crssections'};
-        my @sections = ();
-        if ($cenv{'internal.sectionnums'} =~ m/,/) {
-            @sections = split/,/,$cenv{'internal.sectionnums'};
+        $cenv{'internal.sectionnums'} = '';
+        if ($ENV{'form.crssections'} =~ m/,/) {
+            @sections = split/,/,$ENV{'form.crssections'};
         } else {
-            $sections[0] = $cenv{'internal.sectionnums'};
+            $sections[0] = $ENV{'form.crssections'};
         }
         if (@sections > 0) {
-            foreach (@sections) {
-                my ($sec,$gp) = split/:/,$_; 
-                push @affiliates,$ENV{'form.crscode'}.$sec;
+            foreach my $item (@sections) {
+                my ($sec,$gp) = split/:/,$item;
+                my $class = $ENV{'form.crscode'}.$sec;
+                my $addcheck = &Apache::lonnet::auto_new_course($crsunum,$crsudom,$class,$cenv{'internal.courseowner'});
+                if ($addcheck eq 'ok') {
+                    $cenv{'internal.sectionnums'} .= $item.',';
+                } else {
+                    push @badclasses, $class;
+                }
             }
+            $cenv{'internal.sectionnums'} =~ s/,$//;
         }
     }
 # do not hide course coordinator from staff listing, 
 # even if privileged
     $cenv{'nothideprivileged'}=$ccuname.':'.$ccdomain;
     if ($ENV{'form.crsxlist'}) {
-       $cenv{'internal.crosslistings'}=$ENV{'form.crsxlist'};
-       my @xlists = ();
-        if ($cenv{'internal.crosslistings'} =~ m/,/) {
-            @xlists = split/,/,$cenv{'internal.crosslistings'};
+        $cenv{'internal.crosslistings'}='';
+        if ($ENV{'form.crsxlist'} =~ m/,/) {
+            @xlists = split/,/,$ENV{'form.crsxlist'};
         } else {
-            $xlists[0] = $cenv{'internal.crosslistings'};
+            $xlists[0] = $ENV{'form.crsxlist'};
         }
         if (@xlists > 0) {
-            foreach (@xlists) {
-                my ($xl,$gp) = split/:/,$_;
-                push @affiliates,$xl;
+            foreach my $item (@xlists) {
+                my ($xl,$gp) = split/:/,$item;
+                my $addcheck =  &Apache::lonnet::auto_new_course($crsunum,$crsudom,$xl,$cenv{'internal.courseowner'});
+                if ($addcheck eq 'ok') {
+                    $cenv{'internal.crosslistings'} .= $item.',';
+                } else {
+                    push @badclasses, $xl;
+                }
             }
+            $cenv{'internal.crosslistings'} =~ s/,$//;
         }
     }
     if ($ENV{'form.autoadds'}) {
@@ -638,30 +663,20 @@ ENDENHEAD
     }
     if ($ENV{'form.notify'}) {
       if ($ccuname) {
-        $cenv{'internal.notifylist'} = $ccuname;
+        $cenv{'internal.notifylist'} = $ccuname.'@'.$ccdomain;
       }
     }
-    if ($ccuname) {
-        $cenv{'internal.courseowner'} = $ccuname;
-    } else {
-        $cenv{'internal.courseowner'} = $ENV{'user.name'};
-    }
-    if (@affiliates > 0) {
-        my @badclasses = ();
-        foreach my $class (@affiliates) {
-            my $addcheck = &Apache::lonnet::auto_new_course($crsunum,$crsudom,$class,$cenv{'internal.courseowner'});
-            unless ($addcheck eq 'ok') {
-                push @badclasses, $class; 
-            }
-        }
-        if (@badclasses > 0) {
-            $r->print('<font color="red">'.
-                      "The courses listed below were included as sections or crosslistings affiliated with your new LON-CAPA course. If automated course roster updates are enabled for this class, these particular sections/crosslistings will not contribute towards enrollment, because the user identified as the course owner for this LON-CAPA course ($cenv{'internal.courseowner'}) - does not have rights to access enrollment in these classes (as determined by your instititution's policies on access to official classlists).<br/><ul>\n");
-            foreach (@badclasses) {
-                $r->print("<li>$_</li>\n");
-            }
-            $r->print ("</ul><br/><br/></font>\n");
+    if (@badclasses > 0) {
+        my %lt=&Apache::lonlocal::texthash(
+                'tclb' => 'The courses listed below have not been included as sections or crosslistings affiliated with your new LON-CAPA course. If automated course roster updates are enabled for this class, these particular sections/crosslistings will not contribute towards enrollment, because the user identified as the course owner for this LON-CAPA course',
+                'dnhr' => 'does not have rights to access enrollment in these classes',
+                'adby' => 'as determined by the policies of your institution on access to official classlists'
+        );
+        $r->print('<font color="red">'.$lt{'tclb'}.' ('.$cenv{'internal.courseowner'}.') - '.$lt{'dnhr'}.' ('.$lt{'adby'}.').<br /><ul>'."\n");
+        foreach (@badclasses) {
+            $r->print("<li>$_</li>\n");
         }
+        $r->print ("</ul><br /><br /></font>\n");
     }
     my $enrollstart = &Apache::lonhtmlcommon::get_date_from_form('startenroll');
     my $enrollend   = &Apache::lonhtmlcommon::get_date_from_form('endenroll');
@@ -747,7 +762,7 @@ ENDENHEAD
     $cenv{'internal.encpref'}=100+int(9*rand(99));
     #
     # By default, use standard grading
-    $cenv{'grading'} = 'standard';
+    if (!defined($cenv{'grading'})) { $cenv{'grading'} = 'standard'; }
 
     $r->print('<br />'.&mt('Setting environment').': '.                 
           &Apache::lonnet::put('environment',\%cenv,$crsudom,$crsunum).'<br>');