--- loncom/interface/loncreatecourse.pm 2004/09/09 19:24:01 1.67 +++ loncom/interface/loncreatecourse.pm 2008/11/11 16:40:43 1.111 @@ -1,7 +1,7 @@ # The LearningOnline Network # Create a course # -# $Id: loncreatecourse.pm,v 1.67 2004/09/09 19:24:01 albertel Exp $ +# $Id: loncreatecourse.pm,v 1.111 2008/11/11 16:40:43 jms Exp $ # # Copyright Michigan State University Board of Trustees # @@ -27,215 +27,73 @@ # ### -package Apache::loncreatecourse; +=head1 NAME -use strict; -use Apache::Constants qw(:common :http); -use Apache::lonnet; -use Apache::loncommon; -use Apache::lonratedt; -use Apache::londocs; -use Apache::lonlocal; -use Apache::londropadd; -use lib '/home/httpd/lib/perl'; -use localenroll; - -# ================================================ Get course directory listing - -my @output=(); - -sub crsdirlist { - my ($courseid,$which)=@_; - @output=(); - return &innercrsdirlist($courseid,$which); -} +Apache::loncreatecourse.pm -sub innercrsdirlist { - my ($courseid,$which,$path)=@_; - my $dirptr=16384; - 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'}, - &Apache::loncommon::propath($crsdata{'domain'},$crsdata{'num'})); - foreach (@listing) { - unless ($_=~/^\./) { - my @unpackline = split (/\&/,$_); - if ($unpackline[3]&$dirptr) { -# is a directory, recurse - &innercrsdirlist($courseid,$which.$unpackline[0], - $path.$unpackline[0]); - } else { -# is a file, put into output - push (@output,$path.$unpackline[0]); - } - } - } - return @output; -} +=head1 SYNOPSIS -# ============================================================= Read a userfile +Allows domain coordinators to create new +courses and assign course coordinators. -sub readfile { - my ($courseid,$which)=@_; - my %crsdata=&Apache::lonnet::coursedescription($courseid); - return &Apache::lonnet::getfile('/uploaded/'.$crsdata{'domain'}.'/'. - $crsdata{'num'}.'/'.$which); -} +This is part of the LearningOnline Network with CAPA project +described at http://www.lon-capa.org. -# ============================================================ Write a userfile +=head1 HANDLER SUBROUTINE -sub writefile { - (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); -} +handler() -# ===================================================================== Rewrite +=head1 OTHER SUBROUTINES -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; -} +=over -# ============================================================= Copy a userfile +=item * -sub copyfile { - my ($origcrsid,$newcrsid,$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'}.'/', - '/public/'.$origcrsdata{'domain'}.'/'.$origcrsdata{'num'}.'/' - => '/public/'. $newcrsdata{'domain'}.'/'. $newcrsdata{'num'}.'/' - ))); - } -} +print_course_creation_page() -# =============================================================== Copy a dbfile +=item * -sub copydb { - my ($origcrsid,$newcrsid,$which)=@_; - $which=~s/\.db$//; - my %origcrsdata=&Apache::lonnet::coursedescription($origcrsid); - my %newcrsdata= &Apache::lonnet::coursedescription($newcrsid); - my %data=&Apache::lonnet::dump - ($which,$origcrsdata{'domain'},$origcrsdata{'num'}); - return &Apache::lonnet::put - ($which,\%data,$newcrsdata{'domain'},$newcrsdata{'num'}); -} +create_course() -# ========================================================== Copy resourcesdata +=item * -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'}); -} +print_intro_page() -# ========================================================== Copy all userfiles +=item * -sub copyuserfiles { - my ($origcrsid,$newcrsid)=@_; - foreach (&crsdirlist($origcrsid,'userfiles')) { - ©file($origcrsid,$newcrsid,$_); - } -} -# ========================================================== Copy all userfiles +upload_batchfile() -sub copydbfiles { - my ($origcrsid,$newcrsid)=@_; - foreach (&crsdirlist($origcrsid)) { - if ($_=~/\.db$/) { - unless - ($_=~/^(nohist\_|discussiontimes|classlist|versionupdate|resourcedata)/) { - ©db($origcrsid,$newcrsid,$_); - } - } - } -} +=item * -# ======================================================= Copy all course files +process_batchfile() -sub copycoursefiles { - my ($origcrsid,$newcrsid)=@_; - ©userfiles($origcrsid,$newcrsid); - ©dbfiles($origcrsid,$newcrsid); - ©resourcedb($origcrsid,$newcrsid); -} +=back + +=cut + +package Apache::loncreatecourse; + +use strict; +use Apache::Constants qw(:common :http); +use Apache::lonnet; +use Apache::loncommon; +use Apache::londocs; +use Apache::lonlocal; +use Apache::lonuserutils; +use Apache::lonclonecourse; +use LONCAPA::batchcreatecourse; +use LONCAPA; # ===================================================== Phase one: fill-in form sub print_course_creation_page { my $r=shift; - my $defdom=$ENV{'request.role.domain'}; - my %host_servers = &Apache::loncommon::get_library_servers($defdom); + my $crstype = 'Group'; + if ($env{'form.phase'} eq 'courseone') { + $crstype = 'Course'; + } + my $defdom=$env{'request.role.domain'}; + my %host_servers = &Apache::lonnet::get_servers($defdom,'library'); my $course_home = '
-$lt{'chsr'}:$course_home -
-$lt{'cidn'} ($lt{'opt'}) - -
-
-$lt{'stat'} +
-$lt{'ccod'}
-
-($lt{'toin'})
+
-$lt{'snid'}
-
-($lt{'csli'})
-
-$lt{'crcs'}
-
-($lt{'cscs'})
+
$lt{'cncr'} | $lt{'cecr'} |
---|---|
$lt{'cngr'} | $lt{'cegr'} |
-$lt{'map'}: - + $lt{'smap'}
-$lt{'sacr'}
-$lt{'fres'}
+$lt{'fres'} |
-$lt{'cid'}:
+
-$lt{'dmn'}: -$cloneform + + + + + + $lt{'asov'}. |
-$lt{'oaas'}: -
+
-$lt{'scpf'}:
-
+
-$lt{'scfc'}:
-
+
-$lt{'dsrd'}:
-
-$lt{'dsuc'}:
-
+
+
+
-$lt{'snak'}:
-
-$lt{'kaut'}:
-
+
+
+
-$lt{'rshm'}: - +
-
-$lt{'aadd'} -$lt{'yes'} $lt{'no'} -
-$lt{'audr'} -$lt{'yes'} $lt{'no'} -
-$lt{'dacu'} -$enroll_table -
-$lt{'dacc'} -$access_table -
-$lt{'psam'}.
-$krbform
-
-$intform
-
-$locform
-
-$lt{'nech'}
-$lt{'nccl'}
-$lt{'yes'} $lt{'no'}
-
-$lt{'irsp'} $lt{'yes'} $lt{'no'} +
-$lt{'user'}: -
-$lt{'dmn'}: $domform +
-$lt{'ierc'}: - +
- - + + +
-