--- loncom/interface/loncreatecourse.pm	2003/09/03 21:24:32	1.33
+++ loncom/interface/loncreatecourse.pm	2003/09/21 21:40:06	1.38
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Create a course
 #
-# $Id: loncreatecourse.pm,v 1.33 2003/09/03 21:24:32 www Exp $
+# $Id: loncreatecourse.pm,v 1.38 2003/09/21 21:40:06 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -47,6 +47,7 @@ use Apache::lonnet;
 use Apache::loncommon;
 use Apache::lonratedt;
 use Apache::londocs;
+use Apache::lonlocal;
 
 # -------------------------------------------- Return path to profile directory
 
@@ -98,11 +99,37 @@ sub writefile {
 					  'output',$which);
 }
 
+# ===================================================================== Rewrite
+
+sub rewritefile {
+    my ($contents,%rewritehash)=@_;
+    foreach (keys %rewritehash) {
+	my $pattern=$_;
+	$pattern=~s/(\W)/\\$1/gs;
+	my $new=$rewritehash{$_};
+	$contents=~s/$pattern/$new/gs;
+    }
+    return $contents;
+}
+
 # ============================================================= Copy a userfile
 
 sub copyfile {
     my ($origcrsid,$newcrsid,$which)=@_;
-    return &writefile($newcrsid,$which,&readfile($origcrsid,$which));
+    unless ($which=~/\.sequence$/) {
+	return &writefile($newcrsid,$which,
+		      &readfile($origcrsid,$which));
+    } else {
+	my %origcrsdata=&Apache::lonnet::coursedescription($origcrsid);
+	my %newcrsdata= &Apache::lonnet::coursedescription($newcrsid);
+	return &writefile($newcrsid,$which,
+		 &rewritefile(
+                     &readfile($origcrsid,$which),
+	    (
+       '/uploaded/'.$origcrsdata{'domain'}.'/'.$origcrsdata{'num'}.'/'
+    => '/uploaded/'. $newcrsdata{'domain'}.'/'. $newcrsdata{'num'}.'/'
+            )));
+    }
 }
 
 # =============================================================== Copy a dbfile
@@ -118,6 +145,62 @@ sub copydb {
 	($which,\%data,$newcrsdata{'domain'},$newcrsdata{'num'});
 }
 
+# ========================================================== Copy resourcesdata
+
+sub copyresourcedb {
+    my ($origcrsid,$newcrsid)=@_;
+    my %origcrsdata=&Apache::lonnet::coursedescription($origcrsid);
+    my %newcrsdata= &Apache::lonnet::coursedescription($newcrsid);
+    my %data=&Apache::lonnet::dump
+	('resourcedata',$origcrsdata{'domain'},$origcrsdata{'num'});
+    $origcrsid=~s/^\///;
+    $origcrsid=~s/\//\_/;
+    $newcrsid=~s/^\///;
+    $newcrsid=~s/\//\_/;
+    my %newdata=();
+    undef %newdata;
+    my $startdate=$data{$origcrsid.'.0.opendate'};
+    my $today=time;
+    my $delta=0;
+    if ($startdate) {
+	my $oneday=60*60*24;
+	$delta=$today-$startdate;
+	$delta=int($delta/$oneday)*$oneday;
+    }
+# ugly retro fix for broken version of types
+    foreach (keys %data) {
+	if ($_=~/\wtype$/) {
+	    my $newkey=$_;
+	    $newkey=~s/type$/\.type/;
+	    $data{$newkey}=$data{$_};
+	    delete $data{$_};
+	}
+    }
+# adjust symbs
+    my $pattern='uploaded/'.$origcrsdata{'domain'}.'/'.$origcrsdata{'num'}.'/';
+    $pattern=~s/(\W)/\\$1/gs;
+    my $new=    'uploaded/'. $newcrsdata{'domain'}.'/'. $newcrsdata{'num'}.'/';
+    foreach (keys %data) {
+	if ($_=~/$pattern/) {
+	    my $newkey=$_;
+	    $newkey=~s/$pattern/$new/;
+	    $data{$newkey}=$data{$_};
+	    delete $data{$_};
+	}
+    }
+# adjust dates
+    foreach (keys %data) {
+	my $thiskey=$_;
+	$thiskey=~s/^$origcrsid/$newcrsid/;
+	$newdata{$thiskey}=$data{$_};
+	if ($data{$_.'.type'}=~/^date/) {
+	    $newdata{$thiskey}=$newdata{$thiskey}+$delta;
+	}
+    }
+    return &Apache::lonnet::put
+	('resourcedata',\%newdata,$newcrsdata{'domain'},$newcrsdata{'num'});
+}
+
 # ========================================================== Copy all userfiles
 
 sub copyuserfiles {
@@ -133,7 +216,7 @@ sub copydbfiles {
     foreach (&crsdirlist($origcrsid)) {
 	if ($_=~/\.db$/) {
 	    unless 
-             ($_=~/^(nohist\_|discussiontimes|classlist|versionupdate)/) {
+             ($_=~/^(nohist\_|discussiontimes|classlist|versionupdate|resourcedata)/) {
 		 &copydb($origcrsid,$newcrsid,$_);
 	     }
 	}
@@ -146,6 +229,7 @@ sub copycoursefiles {
     my ($origcrsid,$newcrsid)=@_;
     &copyuserfiles($origcrsid,$newcrsid);
     &copydbfiles($origcrsid,$newcrsid);
+    &copyresourcedb($origcrsid,$newcrsid);
 }
 
 # ===================================================== Phase one: fill-in form
@@ -350,10 +434,15 @@ ENDENHEAD
 	} else {
 	    $r->print(
     '<br /><font color="green">Cloning course from '.$clonehome.'</font>');
+	    my %oldcenv=&Apache::lonnet::dump('environment',$crsudom,$crsunum);
 # Copy all files
 	    &copycoursefiles($cloneid,$courseid);
+# Restore URL
+	    $cenv{'url'}=$oldcenv{'url'};
 # Restore title
-	    $cenv{'description'}=$cdescr;
+	    $cenv{'description'}=$oldcenv{'description'};
+# Mark as cloned
+	    $cenv{'clonedfrom'}=$cloneid;
 	}
     }
 #
@@ -454,13 +543,13 @@ sub handler {
     my $r = shift;
 
     if ($r->header_only) {
-       $r->content_type('text/html');
+       &Apache::loncommon::content_type($r,'text/html');
        $r->send_http_header;
        return OK;
     }
 
     if (&Apache::lonnet::allowed('ccc',$ENV{'request.role.domain'})) {
-       $r->content_type('text/html');
+       &Apache::loncommon::content_type($r,'text/html');
        $r->send_http_header;
 
        if ($ENV{'form.phase'} eq 'two') {