--- loncom/interface/loncreatecourse.pm 2003/11/12 21:37:07 1.39
+++ loncom/interface/loncreatecourse.pm 2006/05/15 19:11:40 1.88
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Create a course
#
-# $Id: loncreatecourse.pm,v 1.39 2003/11/12 21:37:07 albertel Exp $
+# $Id: loncreatecourse.pm,v 1.88 2006/05/15 19:11:40 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -25,20 +25,8 @@
#
# http://www.lon-capa.org/
#
-# (My Desk
-#
-# (Internal Server Error Handler
-#
-# (Login Screen
-# 5/21/99,5/22,5/25,5/26,5/31,6/2,6/10,7/12,7/14,
-# 1/14/00,5/29,5/30,6/1,6/29,7/1,11/9 Gerd Kortemeyer)
-#
-# 3/1/1 Gerd Kortemeyer)
-#
-# 3/1 Gerd Kortemeyer)
-#
-# 2/14,2/16,2/17,7/6 Gerd Kortemeyer
-#
+###
+
package Apache::loncreatecourse;
use strict;
@@ -48,20 +36,39 @@ use Apache::loncommon;
use Apache::lonratedt;
use Apache::londocs;
use Apache::lonlocal;
+use Apache::londropadd;
+use lib '/home/httpd/lib/perl';
# ================================================ Get course directory listing
+my @output=();
+
sub crsdirlist {
my ($courseid,$which)=@_;
- unless ($which) { $which=''; }
+ @output=();
+ return &innercrsdirlist($courseid,$which);
+}
+
+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'}));
- my @output=();
foreach (@listing) {
unless ($_=~/^\./) {
- push (@output,(split(/\&/,$_))[0]);
+ 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;
@@ -79,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);
}
@@ -115,7 +121,9 @@ sub copyfile {
&readfile($origcrsid,$which),
(
'/uploaded/'.$origcrsdata{'domain'}.'/'.$origcrsdata{'num'}.'/'
- => '/uploaded/'. $newcrsdata{'domain'}.'/'. $newcrsdata{'num'}.'/'
+ => '/uploaded/'. $newcrsdata{'domain'}.'/'. $newcrsdata{'num'}.'/',
+ '/public/'.$origcrsdata{'domain'}.'/'.$origcrsdata{'num'}.'/'
+ => '/public/'. $newcrsdata{'domain'}.'/'. $newcrsdata{'num'}.'/'
)));
}
}
@@ -129,6 +137,9 @@ sub copydb {
my %newcrsdata= &Apache::lonnet::coursedescription($newcrsid);
my %data=&Apache::lonnet::dump
($which,$origcrsdata{'domain'},$origcrsdata{'num'});
+ foreach my $key (keys(%data)) {
+ if ($key=~/^internal./) { delete($data{$key}); }
+ }
return &Apache::lonnet::put
($which,\%data,$newcrsdata{'domain'},$newcrsdata{'num'});
}
@@ -148,6 +159,14 @@ sub copyresourcedb {
my %newdata=();
undef %newdata;
my $startdate=$data{$origcrsid.'.0.opendate'};
+ if (!$startdate) {
+ # now global start date for assements try the enrollment start
+ my %start=&Apache::lonnet::get('environment',
+ ['default_enrollment_start_date'],
+ $origcrsdata{'domain'},$origcrsdata{'num'});
+
+ $startdate = $start{'default_enrollment_start_date'};
+ }
my $today=time;
my $delta=0;
if ($startdate) {
@@ -181,8 +200,14 @@ sub copyresourcedb {
my $thiskey=$_;
$thiskey=~s/^$origcrsid/$newcrsid/;
$newdata{$thiskey}=$data{$_};
- if ($data{$_.'.type'}=~/^date/) {
- $newdata{$thiskey}=$newdata{$thiskey}+$delta;
+ if ($data{$_.'.type'}=~/^date_(start|end)$/) {
+ if ($delta > 0) {
+ $newdata{$thiskey}=$newdata{$thiskey}+$delta;
+ } else {
+ # no delta, it's unlikely we want the old dates and times
+ delete($newdata{$thiskey});
+ delete($newdata{$thiskey.'.type'});
+ }
}
}
return &Apache::lonnet::put
@@ -194,18 +219,26 @@ sub copyresourcedb {
sub copyuserfiles {
my ($origcrsid,$newcrsid)=@_;
foreach (&crsdirlist($origcrsid,'userfiles')) {
- ©file($origcrsid,$newcrsid,$_);
+ if ($_ !~m|^scantron_|) {
+ ©file($origcrsid,$newcrsid,$_);
+ }
}
}
# ========================================================== Copy all userfiles
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|gradingqueue|reviewqueue|CODEs)/) {
©db($origcrsid,$newcrsid,$_);
+ my $histfile=$_;
+ $histfile=~s/\.db$/\.hist/;
+ ©file($origcrsid,$newcrsid,$histfile);
}
}
}
@@ -224,7 +257,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 = '\n";
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 $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();
- $r->print(<
-Course Title:
-
+
+
+
-Course Home Server:$course_home
+
-Course ID/Number (optional)
-
+
+$lt{'stat'}
+
+
+
+
+
+
+
-Map:
-
-Select Map
+
+$lt{'smap'}
-Do NOT generate as standard course
-First Resource
+$lt{'fres'}
-Open all assessments:
-
+
-Set course policy feedback to Course Coordinator:
-
-
-Set content feedback to Course Coordinator:
-
+
+
-Disable student resource discussion:
-
-Students need access key to enter course:
-
+
+
-Username:
+
+
+Course Information
+$lt{'cinf'}
$lt{'iinf'}
+
+($lt{'toin'})
+
+($lt{'csli'})
+
+($lt{'cscs'})
Course Content
+$lt{'crco'}
-
-
+Completely new course Clone an existing course $lt{'cncr'} $lt{'cecr'}
-(only check if you know what you are doing):
-
-
(standard courses only):
-Blank
+
+
+($lt{'ocik'}):
+
+
($lt{'stco'}):
+
-Syllabus
+
-Navigate
+
-Course ID:
+
-Domain:
-$cloneform
-Additional settings, if specified below, will override cloned settings.
+
+
+
+$lt{'asov'}.
Assessment Parameters
+$lt{'assp'}
Messaging
+$lt{'mssg'}
+
Communication
+$lt{'cmmn'}
-Disable student use of chatrooms:
-
+
+
+
Access Control
+$lt{'acco'}
+
Course Coordinator
+$lt{'rshm'}
$lt{'aens'}
+$lt{'aesc'}
+
+$lt{'aadd'} + + +
+$lt{'audr'} + + +
+$lt{'dacu'} +$enroll_table
-Domain: $domform +$lt{'dacc'} +$access_table +
+$lt{'psam'}.
-Immediately expire own role as Course Coordinator:
-
+$krbform
+
+$intform
+
+$locform
+
+$lt{'nech'}
+$lt{'nccl'}
+
+
+
+$lt{'ndcl'}
+
+
+
+$lt{'irsp'} + + +
++
+ +
+- +
-