version 1.168, 2017/11/04 01:12:19
|
version 1.173, 2020/05/22 15:05:30
|
Line 84 use Apache::lonclonecourse;
|
Line 84 use Apache::lonclonecourse;
|
use LONCAPA::batchcreatecourse; |
use LONCAPA::batchcreatecourse; |
use LONCAPA qw(:DEFAULT :match); |
use LONCAPA qw(:DEFAULT :match); |
|
|
|
my $registered_flush; |
|
my $registered_instcats; |
|
my $modified_dom; |
|
|
# ===================================================== Phase one: fill-in form |
# ===================================================== Phase one: fill-in form |
|
|
sub print_course_creation_page { |
sub print_course_creation_page { |
Line 119 sub print_course_creation_page {
|
Line 123 sub print_course_creation_page {
|
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 $access_table = &Apache::lonuserutils::date_setting_table($starttime, |
my $access_table = &Apache::lonuserutils::date_setting_table($starttime, |
$endtime,'create_defaultdates'); |
$endtime,'create_defaultdates'); |
|
my $openallfrom = |
|
&Apache::lonhtmlcommon::date_setter('ccrs','openallfrom',$starttime); |
if (($crstype eq 'Course') || ($crstype eq 'Placement')) { |
if (($crstype eq 'Course') || ($crstype eq 'Placement')) { |
$enroll_table = &Apache::lonuserutils::date_setting_table($starttime, |
$enroll_table = &Apache::lonuserutils::date_setting_table($starttime, |
$endtime,'create_enrolldates'); |
$endtime,'create_enrolldates'); |
Line 188 function validate(formname) {
|
Line 194 function validate(formname) {
|
'shd' => 'Shift date parameters by number of days', |
'shd' => 'Shift date parameters by number of days', |
'assp' => "Assessment Parameters", |
'assp' => "Assessment Parameters", |
'oaas' => "Open all assessments", |
'oaas' => "Open all assessments", |
|
'sta' => "starting from:", |
'mssg' => "Messaging", |
'mssg' => "Messaging", |
'scpf' => "Set course policy feedback to Course Coordinator", |
'scpf' => "Set course policy feedback to Course Coordinator", |
'scfc' => "Set resource content feedback to Course Coordinator", |
'scfc' => "Set resource content feedback to Course Coordinator", |
Line 472 END
|
Line 479 END
|
.&Apache::lonhtmlcommon::row_closure() |
.&Apache::lonhtmlcommon::row_closure() |
|
|
.&Apache::lonhtmlcommon::row_title($lt{'oaas'}) |
.&Apache::lonhtmlcommon::row_title($lt{'oaas'}) |
.'<input type="checkbox" name="openall" />' |
.'<span class="LC_nobreak">' |
|
.'<label><input type="radio" name="openall" value="0" checked="checked" />'.$lt{'no'}.'</label>'.(' 'x2) |
|
.'<label><input type="radio" name="openall" value="1" />'.$lt{'yes'}.'</label>'.', ' |
|
.$lt{'sta'}.' '.$openallfrom |
.&Apache::lonhtmlcommon::row_closure() |
.&Apache::lonhtmlcommon::row_closure() |
|
|
.&Apache::lonhtmlcommon::row_headline() |
.&Apache::lonhtmlcommon::row_headline() |
Line 616 sub create_course {
|
Line 626 sub create_course {
|
my $ccuname =&LONCAPA::clean_username($env{'form.ccuname'}); |
my $ccuname =&LONCAPA::clean_username($env{'form.ccuname'}); |
my $ccdomain=&LONCAPA::clean_domain($env{'form.ccdomain'}); |
my $ccdomain=&LONCAPA::clean_domain($env{'form.ccdomain'}); |
my $crstype = 'Community'; |
my $crstype = 'Community'; |
my ($enrollstart,$enrollend,$startaccess,$endaccess); |
my ($enrollstart,$enrollend,$startaccess,$endaccess,$openallfrom); |
my %domdefaults = |
my %domdefaults = |
&Apache::lonnet::get_domain_defaults($env{'request.role.domain'}); |
&Apache::lonnet::get_domain_defaults($env{'request.role.domain'}); |
|
|
Line 629 sub create_course {
|
Line 639 sub create_course {
|
} |
} |
$startaccess = &Apache::lonhtmlcommon::get_date_from_form('startaccess'); |
$startaccess = &Apache::lonhtmlcommon::get_date_from_form('startaccess'); |
$endaccess = &Apache::lonhtmlcommon::get_date_from_form('endaccess'); |
$endaccess = &Apache::lonhtmlcommon::get_date_from_form('endaccess'); |
|
$openallfrom = &Apache::lonhtmlcommon::get_date_from_form('openallfrom'); |
|
|
my $autharg; |
my $autharg; |
my $authtype; |
my $authtype; |
Line 694 sub create_course {
|
Line 705 sub create_course {
|
disresdis => $env{'form.disresdis'}, |
disresdis => $env{'form.disresdis'}, |
disablechat => $env{'form.disablechat'}, |
disablechat => $env{'form.disablechat'}, |
openall => $env{'form.openall'}, |
openall => $env{'form.openall'}, |
|
openallfrom => $openallfrom, |
firstres => $env{'form.firstres'} |
firstres => $env{'form.firstres'} |
}; |
}; |
|
|
Line 764 sub create_course {
|
Line 776 sub create_course {
|
'<p>'.&mt('Course identifier to share with students: [_1]',$code).'</p>' |
'<p>'.&mt('Course identifier to share with students: [_1]',$code).'</p>' |
); |
); |
} |
} |
# Flush the course logs so reverse user roles immediately updated |
if ($env{'form.crscode'} ne '') { |
$r->register_cleanup(\&Apache::lonnet::flushcourselogs); |
&Apache::lonnet::devalidate_cache_new('instcats',$crsudom); |
|
} |
|
®ister_cleanups($r,$crsudom,$env{'form.crscode'}); |
$r->print('<p>'.&mt('Roles will be active at next login').'.</p>'); |
$r->print('<p>'.&mt('Roles will be active at next login').'.</p>'); |
} |
} |
$r->print('<p><a href="/adm/createcourse?phase='.lc($crstype).'one">'. |
$r->print('<p><a href="/adm/createcourse?phase='.lc($crstype).'one">'. |
Line 893 sub process_batchfile {
|
Line 907 sub process_batchfile {
|
my $uname = $env{'user.name'}; |
my $uname = $env{'user.name'}; |
my $udom = $env{'user.domain'}; |
my $udom = $env{'user.domain'}; |
my $dir = &LONCAPA::tempdir().'addcourse'; |
my $dir = &LONCAPA::tempdir().'addcourse'; |
my ($result,$logmsg); |
my ($result,$logmsg,$keysmsg,$codesref,$instcodesref); |
if (($defdom =~ /^$match_domain$/) && ($uname =~ /^$match_username$/) && ($udom =~/^$match_domain$/)) { |
if (($defdom =~ /^$match_domain$/) && ($uname =~ /^$match_username$/) && ($udom =~/^$match_domain$/)) { |
my $batchfilepath=&Apache::lonnet::userfileupload('coursecreatorxml',undef, |
my $batchfilepath=&Apache::lonnet::userfileupload('coursecreatorxml',undef, |
'batchupload',undef,undef, |
'batchupload',undef,undef, |
undef,undef,$defdom); |
undef,undef,$defdom); |
if ($batchfilepath =~ m{^(\Q$dir/$defdom/web/$uname\_$udom\E)/pending/([^/]+)$}) { |
if ($batchfilepath =~ m{^(\Q$dir/$defdom/web/$uname\E_\Q$udom\E)/pending/([^/]+)$}) { |
my ($batchdir,$filename) = ($1,$2); |
my ($batchdir,$filename) = ($1,$2); |
if (-e "$batchfilepath") { |
if (-e "$batchfilepath") { |
if (open(FILE,"<$batchfilepath")) { |
if (open(FILE,"<",$batchfilepath)) { |
my @buffer = <FILE>; |
my @buffer = <FILE>; |
close(FILE); |
close(FILE); |
if ((defined($filename)) && (defined($batchdir))) { |
if ((defined($filename)) && (defined($batchdir))) { |
my @requests = ($filename); |
my @requests = ($filename); |
my %courseids = (); |
my %courseids = (); |
($result,$logmsg) = &LONCAPA::batchcreatecourse::create_courses( |
($result,$logmsg,$keysmsg,$codesref,$instcodesref) = |
\@requests,\%courseids,'web',$defdom, |
&LONCAPA::batchcreatecourse::create_courses( |
$uname,$udom); |
\@requests,\%courseids,'web',$defdom, |
|
$uname,$udom); |
if (keys(%courseids) > 0) { |
if (keys(%courseids) > 0) { |
if (!-e "$batchdir/processed") { |
if (!-e "$batchdir/processed") { |
mkdir("$batchdir/processed", 0755); |
mkdir("$batchdir/processed", 0755); |
} |
} |
if (-d "$batchdir/processed") { |
if (-d "$batchdir/processed") { |
if (open(FILE,">$batchdir/processed/$filename")) { |
if (open(FILE,">","$batchdir/processed/$filename")) { |
print FILE @buffer; |
print FILE @buffer; |
close(FILE); |
close(FILE); |
} |
} |
Line 923 sub process_batchfile {
|
Line 938 sub process_batchfile {
|
if (-e "$batchdir/processed/$filename") { |
if (-e "$batchdir/processed/$filename") { |
unlink("$batchdir/pending/$filename"); |
unlink("$batchdir/pending/$filename"); |
} |
} |
|
my $updatecats; |
|
if ((ref($instcodesref) eq 'HASH') && (keys(%{$instcodesref}) > 0)) { |
|
&Apache::lonnet::devalidate_cache_new('instcats',$defdom); |
|
$updatecats = 1; |
|
} |
|
®ister_cleanups($r,$defdom,$updatecats); |
} |
} |
} |
} |
} else { |
} else { |
Line 1335 sub get_permission {
|
Line 1356 sub get_permission {
|
return ($allowed,\%permission); |
return ($allowed,\%permission); |
} |
} |
|
|
|
sub register_cleanups { |
|
my ($r,$cdom,$updatecats) = @_; |
|
# Flush the course logs so reverse user roles immediately updated |
|
unless ($registered_flush) { |
|
my $handlers = $r->get_handlers('PerlCleanupHandler'); |
|
$r->set_handlers('PerlCleanupHandler' => [\&Apache::lonnet::flushcourselogs,@{$handlers}]); |
|
$registered_flush=1; |
|
} |
|
# Update cache of self-cataloging courses on institution's server(s). |
|
if ($updatecats) { |
|
if (&Apache::lonnet::shared_institution($cdom)) { |
|
unless ($registered_instcats) { |
|
my $handlers = $r->get_handlers('PerlCleanupHandler'); |
|
$r->set_handlers('PerlCleanupHandler' => [\&devalidate_remote_instcats,@{$handlers}]); |
|
$registered_instcats=1; |
|
$modified_dom = $cdom; |
|
} |
|
} |
|
} |
|
return; |
|
} |
|
|
|
sub devalidate_remote_instcats { |
|
if ($modified_dom ne '') { |
|
my %servers = &Apache::lonnet::internet_dom_servers($modified_dom); |
|
my %thismachine; |
|
map { $thismachine{$_} = 1; } &Apache::lonnet::current_machine_ids(); |
|
if (keys(%servers)) { |
|
foreach my $server (keys(%servers)) { |
|
next if ($thismachine{$server}); |
|
&Apache::lonnet::remote_devalidate_cache($server,['instcats:'.$modified_dom]); |
|
} |
|
} |
|
$modified_dom = ''; |
|
} |
|
return; |
|
} |
|
|
# ===================================================================== Handler |
# ===================================================================== Handler |
sub handler { |
sub handler { |
my $r = shift; |
my $r = shift; |
Line 1345 sub handler {
|
Line 1404 sub handler {
|
return OK; |
return OK; |
} |
} |
|
|
|
$registered_flush = 0; |
|
$registered_instcats = 0; |
|
$modified_dom = ''; |
|
|
my ($allowed,$permission) = &get_permission($env{'request.role.domain'}); |
my ($allowed,$permission) = &get_permission($env{'request.role.domain'}); |
if ($allowed) { |
if ($allowed) { |
my $show_all_choices = 0; |
my $show_all_choices = 0; |