--- loncom/interface/loncreatecourse.pm 2004/06/29 14:56:32 1.61
+++ loncom/interface/loncreatecourse.pm 2004/07/12 17:55:35 1.64
@@ -1,7 +1,7 @@
#meserver The LearningOnline Network
# Create a course
#
-# $Id: loncreatecourse.pm,v 1.61 2004/06/29 14:56:32 raeburn Exp $
+# $Id: loncreatecourse.pm,v 1.64 2004/07/12 17:55:35 raeburn 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;
@@ -575,44 +590,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'}) {
@@ -626,27 +660,17 @@ ENDENHEAD
$cenv{'internal.notifylist'} = $ccuname;
}
}
- 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($crsunum,$crsudom,$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");
- }
- $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");
}
+ $r->print ("
\n");
}
my $enrollstart = &Apache::lonhtmlcommon::get_date_from_form('startenroll');
my $enrollend = &Apache::lonhtmlcommon::get_date_from_form('endenroll');