--- loncom/interface/loncreatecourse.pm 2003/09/03 21:31:59 1.34
+++ loncom/interface/loncreatecourse.pm 2003/09/09 17:26:03 1.37
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Create a course
#
-# $Id: loncreatecourse.pm,v 1.34 2003/09/03 21:31:59 www Exp $
+# $Id: loncreatecourse.pm,v 1.37 2003/09/09 17:26:03 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -98,11 +98,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 +144,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 {
@@ -146,6 +228,7 @@ sub copycoursefiles {
my ($origcrsid,$newcrsid)=@_;
©userfiles($origcrsid,$newcrsid);
©dbfiles($origcrsid,$newcrsid);
+ ©resourcedb($origcrsid,$newcrsid);
}
# ===================================================== Phase one: fill-in form
@@ -350,10 +433,15 @@ ENDENHEAD
} else {
$r->print(
'
Cloning course from '.$clonehome.'');
+ my %oldcenv=&Apache::lonnet::dump('environment',$crsudom,$crsunum);
# Copy all files
©coursefiles($cloneid,$courseid);
+# Restore URL
+ $cenv{'url'}=$oldcenv{'url'};
# Restore title
- $cenv{'description'}=$cdescr;
+ $cenv{'description'}=$oldcenv{'description'};
+# Mark as cloned
+ $cenv{'clonedfrom'}=$cloneid;
}
}
#