--- loncom/interface/loncreatecourse.pm 2004/06/08 22:09:44 1.58 +++ loncom/interface/loncreatecourse.pm 2004/09/09 19:24:01 1.67 @@ -1,7 +1,7 @@ -#meserver The LearningOnline Network +# The LearningOnline Network # Create a course # -# $Id: loncreatecourse.pm,v 1.58 2004/06/08 22:09:44 raeburn Exp $ +# $Id: loncreatecourse.pm,v 1.67 2004/09/09 19:24:01 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -42,19 +42,34 @@ use localenroll; # ================================================ Get course directory listing -#FIXME - doesn't support directories under /userfiles/ BUG#2999 +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) { - #FIXME if list is a DIR need to recurse 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; @@ -108,7 +123,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'}.'/' ))); } } @@ -238,7 +255,8 @@ sub print_course_creation_page { my $coursebrowserjs=&Apache::loncommon::coursebrowser_javascript(); my $starttime = time; my $endtime = time+(6*30*24*60*60); # 6 months from now, approx - my $date_table = &Apache::londropadd::date_setting_table($starttime,$endtime,'createcourse'); + my $enroll_table = &Apache::londropadd::date_setting_table($starttime,$endtime,'create_enrolldates'); + my $access_table = &Apache::londropadd::date_setting_table($starttime,$endtime,'create_defaultdates'); my ($krbdef,$krbdefdom) = &Apache::loncommon::get_kerberos_defaults($defdom); my $javascript_validations=&Apache::londropadd::javascript_validations('createcourse',$krbdefdom); @@ -262,7 +280,7 @@ sub print_course_creation_page { 'snid' => "Section Numbers and corresponding LON-CAPA section/group IDs", 'csli' => "a comma separated list of institutional section numbers, each separated by a colon from the (optional) corresponding section/group ID to be used in LON-CAPA e.g., 001:1,002:2", 'crcs' => "Crosslisted courses", - 'cscs' => "a comma separated list of course sections crosslisted with the current course, with each entry including the institutional course section name followed by a colon and then the (optional) groupID to be used in LON-CAPA, e.g., fs03ent231001:ent1,fs03bot231001:bot1,fs03zol231002:bot2", + 'cscs' => "a comma separated list of course sections crosslisted with the current course, with each entry including the institutional course section name followed by a colon and then the (optional) groupID to be used in LON-CAPA, e.g., fs03ent231001:ent1,fs03bot231001:bot1,fs03zol231002:zol2", 'crco' => "Course Content", 'cncr' => "Completely new course", 'cecr' => "Clone an existing course", @@ -300,6 +318,7 @@ sub print_course_creation_page { 'no' => "No", 'audr' => "Automated drops", 'dacu' => "Duration of automated classlist updates", + 'dacc' => "Default start and end dates for student access", 'psam' => "Please select the authentication mechanism", 'pcda' => "Please choose the default authentication method to be used by new users added to this LON-CAPA domain by the automated enrollment process", 'nech' => "Notification of enrollment changes", @@ -436,8 +455,11 @@ $lt{'aesc'} $lt{'yes'} $lt{'no'}
$lt{'dacu'} -$date_table +$enroll_table
+$lt{'dacc'} +$access_table +
$lt{'psam'}.
@@ -526,7 +548,8 @@ ENDENHEAD
my $courseid=&Apache::lonnet::createcourse($ENV{'request.role.domain'},
$cdescr,$curl,
$ENV{'form.course_home'},
- $ENV{'form.nonstandard'});
+ $ENV{'form.nonstandard'},
+ $ENV{'form.crscode'});
# Note: The testing routines depend on this being output; see
# Utils::Course. This needs to at least be output as a comment
@@ -560,6 +583,10 @@ ENDENHEAD
$cenv{'url'}=$oldcenv{'url'};
# Restore title
$cenv{'description'}=$oldcenv{'description'};
+# restore grading mode
+ if (defined($oldcenv{'grading'})) {
+ $cenv{'grading'}=$oldcenv{'grading'};
+ }
# Mark as cloned
$cenv{'clonedfrom'}=$cloneid;
delete($cenv{'default_enrollment_start_date'});
@@ -569,44 +596,63 @@ ENDENHEAD
#
# Set environment (will override cloned, if existing)
#
- my @affiliates = (); # Used to accumulate sections and crosslistings
+ my @sections = ();
+ my @xlists = ();
if ($ENV{'form.crsid'}) {
$cenv{'courseid'}=$ENV{'form.crsid'};
}
if ($ENV{'form.crscode'}) {
$cenv{'internal.coursecode'}=$ENV{'form.crscode'};
}
+ if ($ccuname) {
+ $cenv{'internal.courseowner'} = $ccuname;
+ } else {
+ $cenv{'internal.courseowner'} = $ENV{'user.name'};
+ }
+
+ my @badclasses = (); # Used to accumulate sections/crosslistings that did not pass classlist access check for course owner.
if ($ENV{'form.crssections'}) {
- $cenv{'internal.sectionnums'}=$ENV{'form.crssections'};
- my @sections = ();
- if ($cenv{'internal.sectionnums'} =~ m/,/) {
- @sections = split/,/,$cenv{'internal.sectionnums'};
+ $cenv{'internal.sectionnums'} = '';
+ if ($ENV{'form.crssections'} =~ m/,/) {
+ @sections = split/,/,$ENV{'form.crssections'};
} else {
- $sections[0] = $cenv{'internal.sectionnums'};
+ $sections[0] = $ENV{'form.crssections'};
}
if (@sections > 0) {
- foreach (@sections) {
- my ($sec,$gp) = split/:/,$_;
- push @affiliates,$ENV{'form.crscode'}.$sec;
+ foreach my $item (@sections) {
+ my ($sec,$gp) = split/:/,$item;
+ my $class = $ENV{'form.crscode'}.$sec;
+ my $addcheck = &Apache::lonnet::auto_new_course($crsunum,$crsudom,$class,$cenv{'internal.courseowner'});
+ if ($addcheck eq 'ok') {
+ $cenv{'internal.sectionnums'} .= $item.',';
+ } else {
+ push @badclasses, $class;
+ }
}
+ $cenv{'internal.sectionnums'} =~ s/,$//;
}
}
# do not hide course coordinator from staff listing,
# even if privileged
$cenv{'nothideprivileged'}=$ccuname.':'.$ccdomain;
if ($ENV{'form.crsxlist'}) {
- $cenv{'internal.crosslistings'}=$ENV{'form.crsxlist'};
- my @xlists = ();
- if ($cenv{'internal.crosslistings'} =~ m/,/) {
- @xlists = split/,/,$cenv{'internal.crosslistings'};
+ $cenv{'internal.crosslistings'}='';
+ if ($ENV{'form.crsxlist'} =~ m/,/) {
+ @xlists = split/,/,$ENV{'form.crsxlist'};
} else {
- $xlists[0] = $cenv{'internal.crosslistings'};
+ $xlists[0] = $ENV{'form.crsxlist'};
}
if (@xlists > 0) {
- foreach (@xlists) {
- my ($xl,$gp) = split/:/,$_;
- push @affiliates,$xl;
+ foreach my $item (@xlists) {
+ my ($xl,$gp) = split/:/,$item;
+ my $addcheck = &Apache::lonnet::auto_new_course($crsunum,$crsudom,$xl,$cenv{'internal.courseowner'});
+ if ($addcheck eq 'ok') {
+ $cenv{'internal.crosslistings'} .= $item.',';
+ } else {
+ push @badclasses, $xl;
+ }
}
+ $cenv{'internal.crosslistings'} =~ s/,$//;
}
}
if ($ENV{'form.autoadds'}) {
@@ -617,38 +663,32 @@ ENDENHEAD
}
if ($ENV{'form.notify'}) {
if ($ccuname) {
- $cenv{'internal.notifylist'} = $ccuname;
+ $cenv{'internal.notifylist'} = $ccuname.'@'.$ccdomain;
}
}
- if ($ccuname) {
- $cenv{'internal.courseowner'} = $ccuname;
- } else {
- $cenv{'internal.courseowner'} = $ENV{'user.name'};
- }
- if (@affiliates > 0) {
- my @badclasses = ();
- foreach my $class (@affiliates) {
- my $addcheck = &Apache::lonnet::auto_new_course($crsuhome,$class,$cenv{'internal.courseowner'});
- unless ($addcheck eq 'ok') {
- push @badclasses, $class;
- }
- }
- if (@badclasses > 0) {
- $r->print(''.
- "The courses listed below were included as sections or crosslistings affiliated with your new LON-CAPA course. If automated course roster updates are enabled for this class, these particular sections/crosslistings will not contribute towards enrollment, because the user identified as the course owner for this LON-CAPA course ($cenv{'internal.courseowner'}) - does not have rights to access enrollment in these classes (as determined by your instititution's policies on access to official classlists).\n");
- foreach (@badclasses) {
- $r->print("
\n");
+ if (@badclasses > 0) {
+ my %lt=&Apache::lonlocal::texthash(
+ 'tclb' => 'The courses listed below have not been included as sections or crosslistings affiliated with your new LON-CAPA course. If automated course roster updates are enabled for this class, these particular sections/crosslistings will not contribute towards enrollment, because the user identified as the course owner for this LON-CAPA course',
+ 'dnhr' => 'does not have rights to access enrollment in these classes',
+ 'adby' => 'as determined by the policies of your institution on access to official classlists'
+ );
+ $r->print(''.$lt{'tclb'}.' ('.$cenv{'internal.courseowner'}.') - '.$lt{'dnhr'}.' ('.$lt{'adby'}.').'."\n");
+ foreach (@badclasses) {
+ $r->print("
\n");
}
- my $startdate = &Apache::lonhtmlcommon::get_date_from_form('startdate');
- my $enddate = &Apache::lonhtmlcommon::get_date_from_form('enddate');
+ my $enrollstart = &Apache::lonhtmlcommon::get_date_from_form('startenroll');
+ my $enrollend = &Apache::lonhtmlcommon::get_date_from_form('endenroll');
+ my $startaccess = &Apache::lonhtmlcommon::get_date_from_form('startaccess');
+ my $endaccess = &Apache::lonhtmlcommon::get_date_from_form('endaccess');
if ($ENV{'form.no_end_date'}) {
- $enddate = 0;
+ $endaccess = 0;
}
- $cenv{'internal.autostart'}=$startdate;
- $cenv{'internal.autoend'}=$enddate;
+ $cenv{'internal.autostart'}=$enrollstart;
+ $cenv{'internal.autoend'}=$enrollend;
+ $cenv{'default_enrollment_start_date'}=$startaccess;
+ $cenv{'default_enrollment_end_date'}=$endaccess;
if ($ENV{'form.showphotos'}) {
$cenv{'internal.showphotos'}=$ENV{'form.showphotos'};
}
@@ -722,7 +762,7 @@ ENDENHEAD
$cenv{'internal.encpref'}=100+int(9*rand(99));
#
# By default, use standard grading
- $cenv{'grading'} = 'standard';
+ if (!defined($cenv{'grading'})) { $cenv{'grading'} = 'standard'; }
$r->print('
'.&mt('Setting environment').': '.
&Apache::lonnet::put('environment',\%cenv,$crsudom,$crsunum).'
');