version 1.57, 2004/05/11 06:02:58
|
version 1.64, 2004/07/12 17:55:35
|
Line 1
|
Line 1
|
# The LearningOnline Network |
#meserver The LearningOnline Network |
# Create a course |
# Create a course |
# |
# |
# $Id$ |
# $Id$ |
Line 42 use localenroll;
|
Line 42 use localenroll;
|
|
|
# ================================================ Get course directory listing |
# ================================================ Get course directory listing |
|
|
#FIXME - doesn't support directories under /userfiles/ BUG#2999 |
my @output=(); |
|
|
sub crsdirlist { |
sub crsdirlist { |
my ($courseid,$which)=@_; |
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 %crsdata=&Apache::lonnet::coursedescription($courseid); |
my @listing=&Apache::lonnet::dirlist |
my @listing=&Apache::lonnet::dirlist |
($which,$crsdata{'domain'},$crsdata{'num'}, |
($which,$crsdata{'domain'},$crsdata{'num'}, |
&Apache::loncommon::propath($crsdata{'domain'},$crsdata{'num'})); |
&Apache::loncommon::propath($crsdata{'domain'},$crsdata{'num'})); |
my @output=(); |
|
foreach (@listing) { |
foreach (@listing) { |
#FIXME if list is a DIR need to recurse |
|
unless ($_=~/^\./) { |
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; |
return @output; |
Line 238 sub print_course_creation_page {
|
Line 253 sub print_course_creation_page {
|
my $coursebrowserjs=&Apache::loncommon::coursebrowser_javascript(); |
my $coursebrowserjs=&Apache::loncommon::coursebrowser_javascript(); |
my $starttime = time; |
my $starttime = time; |
my $endtime = time+(6*30*24*60*60); # 6 months from now, approx |
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) = |
my ($krbdef,$krbdefdom) = |
&Apache::loncommon::get_kerberos_defaults($defdom); |
&Apache::loncommon::get_kerberos_defaults($defdom); |
my $javascript_validations=&Apache::londropadd::javascript_validations('createcourse',$krbdefdom); |
my $javascript_validations=&Apache::londropadd::javascript_validations('createcourse',$krbdefdom); |
Line 300 sub print_course_creation_page {
|
Line 316 sub print_course_creation_page {
|
'no' => "No", |
'no' => "No", |
'audr' => "Automated drops", |
'audr' => "Automated drops", |
'dacu' => "Duration of automated classlist updates", |
'dacu' => "Duration of automated classlist updates", |
|
'dacc' => "Default start and end dates for student access", |
'psam' => "Please select the authentication mechanism", |
'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", |
'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", |
'nech' => "Notification of enrollment changes", |
Line 436 $lt{'aesc'}
|
Line 453 $lt{'aesc'}
|
<input type="radio" name="autodrops" value="1" />$lt{'yes'} <input type="radio" name="autodrops" value="0" checked="true" />$lt{'no'} |
<input type="radio" name="autodrops" value="1" />$lt{'yes'} <input type="radio" name="autodrops" value="0" checked="true" />$lt{'no'} |
</p><p> |
</p><p> |
<b>$lt{'dacu'}</b> |
<b>$lt{'dacu'}</b> |
$date_table |
$enroll_table |
</p><p> |
</p><p> |
|
<b>$lt{'dacc'}</b> |
|
$access_table |
|
<p></p> |
<b>$lt{'psam'}.</b><br /> |
<b>$lt{'psam'}.</b><br /> |
$lt{'pcda'}. |
$lt{'pcda'}. |
</p><p> |
</p><p> |
Line 479 ENDDOCUMENT
|
Line 499 ENDDOCUMENT
|
sub create_course { |
sub create_course { |
my $r=shift; |
my $r=shift; |
my $topurl='/res/'.&Apache::lonnet::declutter($ENV{'form.topmap'}); |
my $topurl='/res/'.&Apache::lonnet::declutter($ENV{'form.topmap'}); |
|
my $this_server = $Apache::lonnet::perlvar{'lonHostID'}; |
my $ccuname=$ENV{'form.ccuname'}; |
my $ccuname=$ENV{'form.ccuname'}; |
my $ccdomain=$ENV{'form.ccdomain'}; |
my $ccdomain=$ENV{'form.ccdomain'}; |
$ccuname=~s/\W//g; |
$ccuname=~s/\W//g; |
Line 525 ENDENHEAD
|
Line 546 ENDENHEAD
|
my $courseid=&Apache::lonnet::createcourse($ENV{'request.role.domain'}, |
my $courseid=&Apache::lonnet::createcourse($ENV{'request.role.domain'}, |
$cdescr,$curl, |
$cdescr,$curl, |
$ENV{'form.course_home'}, |
$ENV{'form.course_home'}, |
$ENV{'form.nonstandard'}); |
$ENV{'form.nonstandard'}, |
|
$ENV{'form.crscode'}); |
|
|
# Note: The testing routines depend on this being output; see |
# Note: The testing routines depend on this being output; see |
# Utils::Course. This needs to at least be output as a comment |
# Utils::Course. This needs to at least be output as a comment |
Line 568 ENDENHEAD
|
Line 590 ENDENHEAD
|
# |
# |
# Set environment (will override cloned, if existing) |
# Set environment (will override cloned, if existing) |
# |
# |
my @affiliates = (); # Used to accumulate sections and crosslistings |
my @sections = (); |
|
my @xlists = (); |
if ($ENV{'form.crsid'}) { |
if ($ENV{'form.crsid'}) { |
$cenv{'courseid'}=$ENV{'form.crsid'}; |
$cenv{'courseid'}=$ENV{'form.crsid'}; |
} |
} |
if ($ENV{'form.crscode'}) { |
if ($ENV{'form.crscode'}) { |
$cenv{'internal.coursecode'}=$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'}) { |
if ($ENV{'form.crssections'}) { |
$cenv{'internal.sectionnums'}=$ENV{'form.crssections'}; |
$cenv{'internal.sectionnums'} = ''; |
my @sections = (); |
if ($ENV{'form.crssections'} =~ m/,/) { |
if ($cenv{'internal.sectionnums'} =~ m/,/) { |
@sections = split/,/,$ENV{'form.crssections'}; |
@sections = split/,/,$cenv{'internal.sectionnums'}; |
|
} else { |
} else { |
$sections[0] = $cenv{'internal.sectionnums'}; |
$sections[0] = $ENV{'form.crssections'}; |
} |
} |
if (@sections > 0) { |
if (@sections > 0) { |
foreach (@sections) { |
foreach my $item (@sections) { |
my ($sec,$gp) = split/:/,$_; |
my ($sec,$gp) = split/:/,$item; |
push @affiliates,$ENV{'form.crscode'}.$sec; |
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, |
# do not hide course coordinator from staff listing, |
# even if privileged |
# even if privileged |
$cenv{'nothideprivileged'}=$ccuname.':'.$ccdomain; |
$cenv{'nothideprivileged'}=$ccuname.':'.$ccdomain; |
if ($ENV{'form.crsxlist'}) { |
if ($ENV{'form.crsxlist'}) { |
$cenv{'internal.crosslistings'}=$ENV{'form.crsxlist'}; |
$cenv{'internal.crosslistings'}=''; |
my @xlists = (); |
if ($ENV{'form.crsxlist'} =~ m/,/) { |
if ($cenv{'internal.crosslistings'} =~ m/,/) { |
@xlists = split/,/,$ENV{'form.crsxlist'}; |
@xlists = split/,/,$cenv{'internal.crosslistings'}; |
|
} else { |
} else { |
$xlists[0] = $cenv{'internal.crosslistings'}; |
$xlists[0] = $ENV{'form.crsxlist'}; |
} |
} |
if (@xlists > 0) { |
if (@xlists > 0) { |
foreach (@xlists) { |
foreach my $item (@xlists) { |
my ($xl,$gp) = split/:/,$_; |
my ($xl,$gp) = split/:/,$item; |
push @affiliates,$xl; |
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'}) { |
if ($ENV{'form.autoadds'}) { |
Line 619 ENDENHEAD
|
Line 660 ENDENHEAD
|
$cenv{'internal.notifylist'} = $ccuname; |
$cenv{'internal.notifylist'} = $ccuname; |
} |
} |
} |
} |
if ($ccuname) { |
if (@badclasses > 0) { |
$cenv{'internal.courseowner'} = $ccuname; |
my %lt=&Apache::lonlocal::texthash( |
} else { |
'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', |
$cenv{'internal.courseowner'} = $ENV{'user.name'}; |
'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' |
if (@affiliates > 0) { |
); |
my @badclasses = (); |
$r->print('<font color="red">'.$lt{'tclb'}.' ('.$cenv{'internal.courseowner'}.') - '.$lt{'dnhr'}.' ('.$lt{'adby'}.').<br /><ul>'."\n"); |
foreach my $class (@affiliates) { |
foreach (@badclasses) { |
my $addcheck = &localenroll::new_course($class,$cenv{'internal.courseowner'}); |
$r->print("<li>$_</li>\n"); |
unless ($addcheck eq 'ok') { |
|
push @badclasses, $class; |
|
} |
|
} |
|
if (@badclasses > 0) { |
|
$r->print('<font color="red">'. |
|
"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).<br/><ul>\n"); |
|
foreach (@badclasses) { |
|
$r->print("<li>$_</li>\n"); |
|
} |
|
$r->print ("</ul><br/><br/></font>\n"); |
|
} |
} |
|
$r->print ("</ul><br /><br /></font>\n"); |
} |
} |
my $startdate = &Apache::lonhtmlcommon::get_date_from_form('startdate'); |
my $enrollstart = &Apache::lonhtmlcommon::get_date_from_form('startenroll'); |
my $enddate = &Apache::lonhtmlcommon::get_date_from_form('enddate'); |
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'}) { |
if ($ENV{'form.no_end_date'}) { |
$enddate = 0; |
$endaccess = 0; |
} |
} |
$cenv{'internal.autostart'}=$startdate; |
$cenv{'internal.autostart'}=$enrollstart; |
$cenv{'internal.autoend'}=$enddate; |
$cenv{'internal.autoend'}=$enrollend; |
|
$cenv{'default_enrollment_start_date'}=$startaccess; |
|
$cenv{'default_enrollment_end_date'}=$endaccess; |
if ($ENV{'form.showphotos'}) { |
if ($ENV{'form.showphotos'}) { |
$cenv{'internal.showphotos'}=$ENV{'form.showphotos'}; |
$cenv{'internal.showphotos'}=$ENV{'form.showphotos'}; |
} |
} |