--- loncom/interface/loncreatecourse.pm 2004/06/08 22:09:44 1.58 +++ 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.58 2004/06/08 22:09:44 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; @@ -238,7 +253,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); @@ -300,6 +316,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 +453,11 @@ $lt{'aesc'} $lt{'yes'} $lt{'no'}

$lt{'dacu'} -$date_table +$enroll_table

+$lt{'dacc'} +$access_table +

$lt{'psam'}.
$lt{'pcda'}.

@@ -526,7 +546,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 @@ -569,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'}) { @@ -620,35 +660,29 @@ 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($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"); + 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"); } - 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'}; }