--- loncom/interface/loncreatecourse.pm 2003/09/02 18:00:14 1.31 +++ loncom/interface/loncreatecourse.pm 2003/09/03 23:15:27 1.35 @@ -1,7 +1,7 @@ # The LearningOnline Network # Create a course # -# $Id: loncreatecourse.pm,v 1.31 2003/09/02 18:00:14 www Exp $ +# $Id: loncreatecourse.pm,v 1.35 2003/09/03 23:15:27 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -118,6 +118,50 @@ 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 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 +177,7 @@ sub copydbfiles { foreach (&crsdirlist($origcrsid)) { if ($_=~/\.db$/) { unless - ($_=~/^(nohist\_|discussiontimes|classlist|versionupdate)/) { + ($_=~/^(nohist\_|discussiontimes|classlist|versionupdate|resourcedata)/) { ©db($origcrsid,$newcrsid,$_); } } @@ -146,6 +190,7 @@ sub copycoursefiles { my ($origcrsid,$newcrsid)=@_; ©userfiles($origcrsid,$newcrsid); ©dbfiles($origcrsid,$newcrsid); + ©resourcedb($origcrsid,$newcrsid); } # ===================================================== Phase one: fill-in form @@ -166,6 +211,11 @@ sub print_course_creation_page { my $domform = &Apache::loncommon::select_dom_form($defdom,'ccdomain'); my $bodytag=&Apache::loncommon::bodytag('Create a New Course'); my $helplink=&Apache::loncommon::help_open_topic('Create_Course','Help on Creating Courses'); + my $cloneform=&Apache::loncommon::select_dom_form + ($ENV{'request.role.domain'},'clonedomain'). + &Apache::loncommon::selectcourse_link + ('ccrs','clonecourse','clonedomain'); + my $coursebrowserjs=&Apache::loncommon::coursebrowser_javascript(); $r->print(< +$coursebrowserjs The LearningOnline Network with CAPA @@ -204,24 +255,34 @@ $helplink

Course Content

+ + + +
Completely new courseClone an existing course

Map: Select Map

-Do NOT generate as standard course +Do NOT generate as standard course
(only check if you know what you are doing):

-First Resource (standard courses only): +First Resource
(standard courses only): Blank   Syllabus   Navigate

- +
+Course ID: +
+Domain: +$cloneform
 
+Additional settings, if specified below, will override cloned settings. +

Assessment Parameters

Open all assessments: @@ -303,6 +364,7 @@ ENDENHEAD # # Open course # + my %cenv=(); my $courseid=&Apache::lonnet::createcourse($ENV{'request.role.domain'}, $cdescr,$curl, $ENV{'form.course_home'}, @@ -320,59 +382,70 @@ ENDENHEAD my $crsuhome=&Apache::lonnet::homeserver($crsunum,$crsudom); $r->print('Created on: '.$crsuhome.'
'); # -# Set environment +# Are we cloning? +# + my $cloneid=''; + if (($ENV{'form.clonecourse'}) && ($ENV{'form.clonedomain'})) { + $cloneid='/'.$ENV{'form.clonedomain'}.'/'.$ENV{'form.clonecourse'}; + my ($clonecrsudom,$clonecrsunum)=($cloneid=~/^\/(\w+)\/(\w+)$/); + my $clonehome=&Apache::lonnet::homeserver($clonecrsunum,$clonecrsudom); + if ($clonehome eq 'no_host') { + $r->print( + '
Attempting to clone non-existing course '.$cloneid.''); + } else { + $r->print( + '
Cloning course from '.$clonehome.''); +# Copy all files + ©coursefiles($cloneid,$courseid); +# Restore title + $cenv{'description'}=$cdescr; + $cenv{'clonedfrom'}=$cloneid; + } + } +# +# Set environment (will override cloned, if existing) # - my %cenv=(); - my $envflag=0; if ($ENV{'form.crsid'}) { - $envflag=1; $cenv{'courseid'}=$ENV{'form.crsid'}; } if (($ccdomain) && ($ccuname)) { if ($ENV{'form.setpolicy'}) { - $envflag=1; $cenv{'policy.email'}=$ccuname.':'.$ccdomain; } if ($ENV{'form.setcontent'}) { - $envflag=1; $cenv{'question.email'}=$ccuname.':'.$ccdomain; } } if ($ENV{'form.setkeys'}) { - $envflag=1; $cenv{'keyaccess'}='yes'; } if ($ENV{'form.disresdis'}) { - $envflag=1; $cenv{'pch.roles.denied'}='st'; } if ($ENV{'form.disablechat'}) { - $envflag=1; $cenv{'plc.roles.denied'}='st'; } - # Record we've not yet viewed the Course Initialization Helper for this course + # Record we've not yet viewed the Course Initialization Helper for this + # course $cenv{'course.helper.not.run'} = 1; # # Use new Randomseed # - $envflag=1; $cenv{'rndseed'}=&Apache::lonnet::latest_rnd_algorithm_id();; # # By default, use standard grading $cenv{'grading'} = 'standard'; - if ($envflag) { - $r->print('Setting environment: '. + $r->print('
Setting environment: '. &Apache::lonnet::put('environment',\%cenv,$crsudom,$crsunum).'
'); - } # # Open all assignments # if ($ENV{'form.openall'}) { my $storeunder=$crsudom.'_'.$crsunum.'.0.opendate'; - my %storecontent = ($storeunder => time, - $storeunder.'type' => 'date_start'); + my %storecontent = ($storeunder => time, + $storeunder.'.type' => 'date_start'); $r->print('Opening all assignments: '.&Apache::lonnet::cput ('resourcedata',\%storecontent,$crsudom,$crsunum).'
');