--- loncom/interface/loncreatecourse.pm	2005/02/17 08:29:42	1.76
+++ loncom/interface/loncreatecourse.pm	2005/11/15 20:17:00	1.84
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Create a course
 #
-# $Id: loncreatecourse.pm,v 1.76 2005/02/17 08:29:42 albertel Exp $
+# $Id: loncreatecourse.pm,v 1.84 2005/11/15 20:17:00 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -86,11 +86,10 @@ sub readfile {
 # ============================================================ Write a userfile
 
 sub writefile {
-    (my $courseid, my $which,$ENV{'form.output'})=@_;
+    (my $courseid, my $which,$env{'form.output'})=@_;
     my %crsdata=&Apache::lonnet::coursedescription($courseid);
     return &Apache::lonnet::finishuserfileupload(
 					  $crsdata{'num'},$crsdata{'domain'},
-					  $crsdata{'home'},
 					  'output',$which);
 }
 
@@ -215,11 +214,17 @@ sub copyuserfiles {
 
 sub copydbfiles {
     my ($origcrsid,$newcrsid)=@_;
+
+    my ($origcrs_discussion) = ($origcrsid=~m|^/(.*)|);
+    $origcrs_discussion=~s|/|_|g;
     foreach (&crsdirlist($origcrsid)) {
 	if ($_=~/\.db$/) {
 	    unless 
-             ($_=~/^(nohist\_|discussiontimes|classlist|versionupdate|resourcedata)/) {
+             ($_=~/^(nohist\_|discussiontimes|classlist|versionupdate|resourcedata|\Q$origcrs_discussion\E|slots|slot_reservations|(grading|review)queue|CODEs)/) {
 		 &copydb($origcrsid,$newcrsid,$_);
+		 my $histfile=$_;
+		 $histfile=~s/\.db$/\.hist/;
+		 &copyfile($origcrsid,$newcrsid,$histfile);
 	     }
 	}
     }
@@ -238,7 +243,7 @@ sub copycoursefiles {
 
 sub print_course_creation_page {
     my $r=shift;
-    my $defdom=$ENV{'request.role.domain'};
+    my $defdom=$env{'request.role.domain'};
     my %host_servers = &Apache::loncommon::get_library_servers($defdom);
     my $course_home = '<select name="course_home" size="1">'."\n";
     foreach my $server (sort(keys(%host_servers))) {
@@ -253,10 +258,10 @@ sub print_course_creation_page {
     my $bodytag=&Apache::loncommon::bodytag('Create a New Course');
     my $helplink=&Apache::loncommon::help_open_topic('Create_Course',&mt('Help on Creating Courses'));
     my $cloneform=&Apache::loncommon::select_dom_form
-	($ENV{'request.role.domain'},'clonedomain').
+	($env{'request.role.domain'},'clonedomain').
 		     &Apache::loncommon::selectcourse_link
 		     ('ccrs','clonecourse','clonedomain');
-    my $coursebrowserjs=&Apache::loncommon::coursebrowser_javascript($ENV{'request.role.domain'});
+    my $coursebrowserjs=&Apache::loncommon::coursebrowser_javascript($env{'request.role.domain'});
     my $starttime = time;
     my $endtime = time+(6*30*24*60*60); # 6 months from now, approx
     my $enroll_table = &Apache::londropadd::date_setting_table($starttime,$endtime,'create_enrolldates');
@@ -327,6 +332,7 @@ sub print_course_creation_page {
                     'pcda' => "Please choose the default authentication method to be used by new users added to this LON-CAPA domain by the automated enrollment process",
                     'nech' => "Notification of enrollment changes",
                     'nccl' => "Notification to course coordinator via LON-CAPA message when enrollment changes occur during the automated update?",
+                    'ndcl' => "Notification to domain coordinator via LON-CAPA message when enrollment changes occur during the automated update?",
                     'irsp' => "Include retrieval of student photographs?",
 		    'rshm' => 'Resource Space Home',
                     'opco' => "Open Course"
@@ -524,10 +530,18 @@ $locform
 <b>$lt{'nech'}</b><br />
 $lt{'nccl'}<br/>
 <label>
-    <input type="radio" name="notify" value="1" />$lt{'yes'}
+    <input type="radio" name="notify_owner" value="1" />$lt{'yes'}
 </label> 
 <label>
-    <input type="radio" name="notify" value="0" checked="true" />$lt{'no'}
+    <input type="radio" name="notify_owner" value="0" checked="true" />$lt{'no'}
+</label>
+<br />
+$lt{'ndcl'}<br/>
+<label>
+    <input type="radio" name="notify_dc" value="1" />$lt{'yes'}
+</label>
+<label>
+    <input type="radio" name="notify_dc" value="0" checked="true" />$lt{'no'}
 </label>
 </p><p>
 <b>$lt{'irsp'}</b>
@@ -548,11 +562,6 @@ $lt{'nccl'}<br/>
 <label>
     <b>$lt{'dmn'}:</b> $domform
 </label>
-</p><p>
-<label>
-    <b>$lt{'ierc'}:</b>
-    <input type="checkbox" name="expireown" checked />
-</label>
 </p>
 <p>
 <input type="hidden" name="phase" value="two" />
@@ -568,8 +577,8 @@ ENDDOCUMENT
 
 sub create_course {
     my $r=shift;
-    my $ccuname=$ENV{'form.ccuname'};
-    my $ccdomain=$ENV{'form.ccdomain'};
+    my $ccuname=$env{'form.ccuname'};
+    my $ccdomain=$env{'form.ccdomain'};
     $ccuname=~s/\W//g;
     $ccdomain=~s/\W//g;
 
@@ -581,19 +590,19 @@ sub create_course {
     my $autharg;
     my $authtype;
 
-    if ($ENV{'form.login'} eq 'krb') {
+    if ($env{'form.login'} eq 'krb') {
         $authtype = 'krb';
-        $authtype .=$ENV{'form.krbver'};
-        $autharg = $ENV{'form.krbarg'};
-    } elsif ($ENV{'form.login'} eq 'int') {
+        $authtype .=$env{'form.krbver'};
+        $autharg = $env{'form.krbarg'};
+    } elsif ($env{'form.login'} eq 'int') {
         $authtype ='internal';
-        if ((defined($ENV{'form.intarg'})) && ($ENV{'form.intarg'})) {
-            $autharg = $ENV{'form.intarg'};
+        if ((defined($env{'form.intarg'})) && ($env{'form.intarg'})) {
+            $autharg = $env{'form.intarg'};
         }
-    } elsif ($ENV{'form.login'} eq 'loc') {
+    } elsif ($env{'form.login'} eq 'loc') {
         $authtype = 'localauth';
-        if ((defined($ENV{'form.locarg'})) && ($ENV{'form.locarg'})) {
-            $autharg = $ENV{'form.locarg'};
+        if ((defined($env{'form.locarg'})) && ($env{'form.locarg'})) {
+            $autharg = $env{'form.locarg'};
         }
     }
 
@@ -611,38 +620,39 @@ ENDENHEAD
     my $args = {
                ccuname => $ccuname,
                ccdomain => $ccdomain,
-               cdescr => $ENV{'form.title'},
-               curl => $ENV{'form.topmap'},
-               course_domain => $ENV{'request.role.domain'},
-               course_home =>  $ENV{'form.course_home'},
-               nonstandard => $ENV{'form.nonstandard'},
-               crscode => $ENV{'form.crscode'},
-               clonecourse => $ENV{'form.clonecourse'},
-               clonedomain => $ENV{'form.clonedomain'},
-               crsid => $ENV{'form.crsid'},
-               curruser => $ENV{'user.name'},
-               crssections => $ENV{'form.crssections'},
-               crsxlist => $ENV{'form.crsxlist'},
-               autoadds => $ENV{'form.autoadds'},
-               autodrops => $ENV{'form.autodrops'},
-               notify => $ENV{'form.notify'},
-               no_end_date => $ENV{'form.no_end_date'},
-               showphotos => $ENV{'form.showphotos'},
+               cdescr => $env{'form.title'},
+               curl => $env{'form.topmap'},
+               course_domain => $env{'request.role.domain'},
+               course_home =>  $env{'form.course_home'},
+               nonstandard => $env{'form.nonstandard'},
+               crscode => $env{'form.crscode'},
+               clonecourse => $env{'form.clonecourse'},
+               clonedomain => $env{'form.clonedomain'},
+               crsid => $env{'form.crsid'},
+               curruser => $env{'user.name'},
+               crssections => $env{'form.crssections'},
+               crsxlist => $env{'form.crsxlist'},
+               autoadds => $env{'form.autoadds'},
+               autodrops => $env{'form.autodrops'},
+               notify_owner => $env{'form.notify_owner'},
+               notify_dc => $env{'form.notify_dc'},
+               no_end_date => $env{'form.no_end_date'},
+               showphotos => $env{'form.showphotos'},
                authtype => $authtype,
                autharg => $autharg,
                enrollstart => $enrollstart,
                enrollend => $enrollend,
                startaccess => $startaccess,
                endaccess => $endaccess,
-               setpolicy => $ENV{'form.setpolicy'},
-               setcontent => $ENV{'form.setcontent'},
-               reshome => $ENV{'form.reshome'},
-               setkeys => $ENV{'form.setkeys'},
-               keyauth => $ENV{'form.keyauth'},
-               disresdis => $ENV{'form.disresdis'},
-               disablechat => $ENV{'form.disablechat'},
-               openall => $ENV{'form.openall'},
-               firstres => $ENV{'form.firstres'}
+               setpolicy => $env{'form.setpolicy'},
+               setcontent => $env{'form.setcontent'},
+               reshome => $env{'form.reshome'},
+               setkeys => $env{'form.setkeys'},
+               keyauth => $env{'form.keyauth'},
+               disresdis => $env{'form.disresdis'},
+               disablechat => $env{'form.disablechat'},
+               openall => $env{'form.openall'},
+               firstres => $env{'form.firstres'}
                };
 
     #
@@ -664,33 +674,24 @@ ENDENHEAD
     }
     # Check the proposed home server for the course
     my %host_servers = &Apache::loncommon::get_library_servers
-        ($ENV{'request.role.domain'});
-    if (! exists($host_servers{$ENV{'form.course_home'}})) {
+        ($env{'request.role.domain'});
+    if (! exists($host_servers{$env{'form.course_home'}})) {
         $r->print(&mt('Invalid home server for course').': '.
-                  $ENV{'form.course_home'}.'</body></html>');
+                  $env{'form.course_home'}.'</body></html>');
         return;
     }
     my ($courseid,$crsudom,$crsunum);
-    $r->print(&construct_course($args,\$logmsg,\$courseid,\$crsudom,\$crsunum));
+    $r->print(&construct_course($args,\$logmsg,\$courseid,\$crsudom,\$crsunum,$env{'user.domain'},$env{'user.name'}));
 
 #
-# Make current user course adminstrator
-#
-    my $end=undef;
-    my $addition='';
-    if ($ENV{'form.expireown'}) { $end=time+5; $addition='expired'; }
-    $r->print(&mt('Assigning').' '.$addition.' '.&mt('role of course coordinator to self').': '.
-    &Apache::lonnet::assignrole(
-     $ENV{'user.domain'},$ENV{'user.name'},$courseid,'cc',$end).'<br>');
-#
-# Make additional user course administrator
+# Make the requested user a course coordinator
 #
    if (($ccdomain) && ($ccuname)) {
     $r->print(&mt('Assigning role of course coordinator to').' '.
                $ccuname.' at '.$ccdomain.': '.
     &Apache::lonnet::assignrole($ccdomain,$ccuname,$courseid,'cc').'<p>');
    }
-    if ($ENV{'form.setkeys'}) {
+    if ($env{'form.setkeys'}) {
         $r->print(
  '<p><a href="/adm/managekeys?cid='.$crsudom.'_'.$crsunum.'">'.&mt('Manage Access Keys').'</a></p>');
     }
@@ -700,7 +701,7 @@ ENDENHEAD
 }
 
 sub construct_course {
-    my ($args,$logmsg,$courseid,$crsudom,$crsunum) = @_;
+    my ($args,$logmsg,$courseid,$crsudom,$crsunum,$udom,$uname) = @_;
     my $outcome;
 
 #
@@ -786,7 +787,7 @@ sub construct_course {
             foreach my $item (@sections) {
                 my ($sec,$gp) = split/:/,$item;
                 my $class = $args->{'crscode'}.$sec;
-                my $addcheck = &Apache::lonnet::auto_new_course($crsunum,$crsudom,$class,$cenv{'internal.courseowner'});
+                my $addcheck = &Apache::lonnet::auto_new_course($$crsunum,$$crsudom,$class,$cenv{'internal.courseowner'});
                 $cenv{'internal.sectionnums'} .= $item.',';
                 unless ($addcheck eq 'ok') {
                     push @badclasses, $class;
@@ -824,10 +825,26 @@ sub construct_course {
     if ($args->{'autodrops'}) {
         $cenv{'internal.autodrops'}=$args->{'autodrops'};
     }
-    if ($args->{'notify'}) {
-      if ($args->{'ccuname'}) {
-        $cenv{'internal.notifylist'} = $args->{'ccuname'}.'@'.$args->{'ccdomain'};
-      }
+# check for notification of enrollment changes
+    my @notified = ();
+    if ($args->{'notify_owner'}) {
+        if ($args->{'ccuname'} ne '') {
+            push(@notified,$args->{'ccuname'}.'@'.$args->{'ccdomain'});
+        }
+    }
+    if ($args->{'notify_dc'}) {
+        if ($uname ne '') { 
+            push(@notified,$uname.'@'.$udom);
+        }
+    }
+    if (@notified > 0) {
+        my $notifylist;
+        if (@notified > 1) {
+            $notifylist = join(',',@notified);
+        } else {
+            $notifylist = $notified[0];
+        }
+        $cenv{'internal.notifylist'} = $notifylist;
     }
     if (@badclasses > 0) {
         my %lt=&Apache::lonlocal::texthash(
@@ -958,17 +975,17 @@ sub handler {
        return OK;
     }
 
-    if (&Apache::lonnet::allowed('ccc',$ENV{'request.role.domain'})) {
+    if (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) {
        &Apache::loncommon::content_type($r,'text/html');
        $r->send_http_header;
 
-       if ($ENV{'form.phase'} eq 'two') {
+       if ($env{'form.phase'} eq 'two') {
            &create_course($r);
        } else {
 	   &print_course_creation_page($r);
        }
    } else {
-      $ENV{'user.error.msg'}=
+      $env{'user.error.msg'}=
         "/adm/createcourse:ccc:0:0:Cannot create courses";
       return HTTP_NOT_ACCEPTABLE; 
    }