--- loncom/interface/loncreatecourse.pm 2020/05/31 16:01:09 1.158.2.7
+++ loncom/interface/loncreatecourse.pm 2025/03/18 18:57:28 1.178
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Create a course
#
-# $Id: loncreatecourse.pm,v 1.158.2.7 2020/05/31 16:01:09 raeburn Exp $
+# $Id: loncreatecourse.pm,v 1.178 2025/03/18 18:57:28 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -80,7 +80,6 @@ use Apache::loncommon;
use Apache::londocs;
use Apache::lonlocal;
use Apache::lonuserutils;
-use Apache::lonclonecourse;
use LONCAPA::batchcreatecourse;
use LONCAPA qw(:DEFAULT :match);
@@ -95,6 +94,8 @@ sub print_course_creation_page {
my $crstype = 'Community';
if ($env{'form.phase'} eq 'courseone') {
$crstype = 'Course';
+ } elsif ($env{'form.phase'} eq 'placementone') {
+ $crstype = 'Placement';
}
my $defdom=$env{'request.role.domain'};
my %domdefaults = &Apache::lonnet::get_domain_defaults($defdom);
@@ -108,7 +109,8 @@ sub print_course_creation_page {
$course_home .= qq{>$server $host_servers{$server}};
}
$course_home .= "\n\n";
- my $domform = &Apache::loncommon::select_dom_form($defdom,'ccdomain');
+ my ($trusted,$untrusted) = &Apache::lonnet::trusted_domains('enroll',$defdom);
+ my $domform = &Apache::loncommon::select_dom_form($defdom,'ccdomain',undef,undef,undef,$trusted,$untrusted);
my $cloneform=&Apache::loncommon::select_dom_form
($env{'request.role.domain'},'clonedomain').
&Apache::loncommon::selectcourse_link
@@ -122,7 +124,7 @@ sub print_course_creation_page {
$endtime,'create_defaultdates');
my $openallfrom =
&Apache::lonhtmlcommon::date_setter('ccrs','openallfrom',$starttime);
- if ($crstype eq 'Course') {
+ if (($crstype eq 'Course') || ($crstype eq 'Placement')) {
$enroll_table = &Apache::lonuserutils::date_setting_table($starttime,
$endtime,'create_enrolldates');
($krbdef,$krbdefdom) =
@@ -189,6 +191,10 @@ function validate(formname) {
'ncd' => "Do not clone date parameters",
'prd' => 'Clone date parameters as-is',
'shd' => 'Shift date parameters by number of days',
+ 'dpl' => 'URL shortcuts (for deep linking)',
+ 'nsl' => 'Do not clone URL shortcuts',
+ 'tsl' => 'Transfer URL shortcuts from existing course to new course',
+ 'csl' => 'Create new URL shortcuts in new course',
'assp' => "Assessment Parameters",
'oaas' => "Open all assessments",
'sta' => "starting from:",
@@ -222,6 +228,7 @@ function validate(formname) {
'cgrq' => 'Set a quota for the total disk space available for storage of course group portfolio files',
'opco' => 'Open Course',
'opcm' => 'Open Community',
+ 'oppt' => 'Open Placement Test',
);
$lt{'kaut'} = &mt('Key authority ([_1]id:domain[_2]) if other than course','','');
$lt{'toin'} = &mt('to interface with institutional data, e.g., [_1]fs13glg231[_2] for [_3]Fall 2013 Geology 231[_4]','','','','');
@@ -253,6 +260,20 @@ function validate(formname) {
$lt{'cc'} = &mt('(will be assigned Coordinator role)');
$lt{'cgrs'} = &mt('Community Group Settings');
$lt{'cgrq'} = &mt('Set a quota for the total disk space available for storage of community group portfolio files');
+ $lt{'tsl'} = &mt('Transfer URL shortcuts from existing community to new community');
+ $lt{'csl'} = &mt('Create new URL shortcuts in new community');
+ } elsif ($crstype eq 'Placement') {
+ $lt{'cinf'} = &mt('Placement Test Information');
+ $lt{'ctit'} = &mt('Placement Test Title');
+ $lt{'chsr'} = &mt('Placement Test Home Server');
+ $lt{'cidn'} = &mt('Placement Test ID/Number');
+ $lt{'crco'} = &mt('Placement Test Content');
+ $lt{'cncr'} = &mt('Completely new placement test');
+ $lt{'cecr'} = &mt('Clone an existing placement test');
+ $lt{'sacr'} = &mt('Do NOT generate as standard placement test');
+ $lt{'stco'} = &mt('standard placement tests only');
+ $lt{'navi'} = &mt('Placement Test Contents');
+ $lt{'cid'} = &mt('Placement Test ID');
}
my $js = <'.$lt{'iinf'}.'
'
- .$lt{'stat'}.' '
- .&mt('Default credits can also be specified, if different from the domain defaults (official courses: [_1]; unofficial courses: [_2]; textbook courses: [_3]).',
- $domdefaults{'officialcredits'},$domdefaults{'unofficialcredits'},$domdefaults{'textbookcredits'})
- .&Apache::lonhtmlcommon::row_closure()
-
+ .$lt{'stat'});
+ if ($crstype eq 'Course') {
+ $r->print(' '
+ .&mt('Default credits can also be specified, if different from the domain defaults (official courses: [_1]; unofficial courses: [_2]; textbook courses: [_3]).',
+ $domdefaults{'officialcredits'},$domdefaults{'unofficialcredits'},$domdefaults{'textbookcredits'}));
+ }
+ $r->print(&Apache::lonhtmlcommon::row_closure()
.&Apache::lonhtmlcommon::row_title($lt{'ccod'})
.''
.'
('.$lt{'toin'}.')'
@@ -352,7 +376,8 @@ END
.'
('.$lt{'cscs'}.')'
.&Apache::lonhtmlcommon::row_closure()
);
- if ($domdefaults{'officialcredits'} || $domdefaults{'unofficialcredits'} || $domdefaults{'textbookcredits'}) {
+ if (($crstype eq 'Course') && ($domdefaults{'officialcredits'} ||
+ $domdefaults{'unofficialcredits'} || $domdefaults{'textbookcredits'})) {
$r->print(&Apache::lonhtmlcommon::row_title($lt{'ccre'})
.''
.'
('.$lt{'cred'}.')'
@@ -365,7 +390,11 @@ END
.''.&mt('No')
.''
.&Apache::lonhtmlcommon::row_closure()
- );
+ );
+ }
+ my $blankchk;
+ if ($crstype eq 'Placement') {
+ $blankchk = ' checked="checked"';
}
# Table: New Course / Clone Course
$r->print(&Apache::lonhtmlcommon::row_headline()
@@ -391,15 +420,14 @@ END
.&Apache::lonhtmlcommon::row_closure()
.&Apache::lonhtmlcommon::row_title($lt{'fres'})
.''
- .' ');
+ .''.$lt{'blnk'}
+ .'');
if ($crstype eq 'Community') {
- $r->print('
+ + + +
' + ); } $r->print(''. $end_page); @@ -609,6 +657,8 @@ sub create_course { $crstype='Course'; $enrollstart=&Apache::lonhtmlcommon::get_date_from_form('startenroll'); $enrollend=&Apache::lonhtmlcommon::get_date_from_form('endenroll'); + } elsif ($env{'form.phase'} eq 'placementtwo') { + $crstype='Placement'; } $startaccess = &Apache::lonhtmlcommon::get_date_from_form('startaccess'); $endaccess = &Apache::lonhtmlcommon::get_date_from_form('endaccess'); @@ -653,6 +703,7 @@ sub create_course { clonedomain => $env{'form.clonedomain'}, datemode => $env{'form.datemode'}, dateshift => $env{'form.dateshift'}, + tinyurls => $env{'form.tinyurls'}, crsid => $env{'form.crsid'}, curruser => $env{'user.name'}.':'.$env{'user.domain'}, crssections => $env{'form.crssections'}, @@ -720,12 +771,20 @@ sub create_course { return; } my ($courseid,$crsudom,$crsunum,$code); - my ($success,$output) = + my ($success,$output,$clonemsgref) = &Apache::loncommon::construct_course($args,\$logmsg,\$courseid, \$crsudom,\$crsunum, $env{'user.domain'}, $env{'user.name'},'dc_create',undef,undef,\$code); $r->print($output); + if (ref($clonemsgref) eq 'ARRAY') { + my $user_lh = &Apache::loncommon::user_lang($env{'user.name'},$env{'user.domain'}); + foreach my $item (@{$clonemsgref}) { + if (ref($item) eq 'HASH') { + $r->print(&mt($item->{mt},@{$item->{args}}).''.$clonemsg.'
'."\n"; } } } else { @@ -927,9 +996,10 @@ sub process_batchfile { } $r->print(&Apache::loncommon::start_page('Create a New Course, Community or Placement Test'). &Apache::lonhtmlcommon::breadcrumbs('Creation Outcome','Create_Course',undef,'Create_Courses'). - $logmsg.$result.''.
''.&mt('Records/page:').' '. - &Apache::lonmeta::selectbox('show',$curr->{'show'},undef, + &Apache::lonmeta::selectbox('show',$curr->{'show'},'','',undef, (&mt('all'),5,10,20,50,100,1000,10000)). ' | '; my $startform = @@ -1375,13 +1449,14 @@ sub handler { my $primary_rev = &Apache::lonnet::get_server_loncaparev($env{'request.role.domain'}); my %cancreate = ( Community => 0, + Placement => 0, ); if (($primary_rev ne 'refused') && ($primary_rev ne 'error') && ($primary_rev ne 'unknown_cmd') && ($primary_rev ne 'no_such_host')) { $show_all_choices = 1; my ($primary_major,$primary_minor) = split(/\./,$primary_rev); foreach my $key (keys(%cancreate)) { - my ($needsmajor,$needsminor) = + my ($needsmajor,$needsminor) = split(/\./,$Apache::lonnet::needsrelease{'course:crstype:'.$key}); unless (($needsmajor > $primary_major) || (($needsmajor == $primary_major) && ($needsminor > $primary_minor))) { @@ -1402,8 +1477,10 @@ sub handler { faq=>79,bug=>'Dom Coord Interface',}); if (($permission->{'create'}) && (($env{'form.phase'} eq 'coursetwo') || - (($env{'form.phase'} eq 'grouptwo') && - ($cancreate{'Community'})))) { + (($env{'form.phase'} eq 'grouptwo') && + ($cancreate{'Community'})) || + (($env{'form.phase'} eq 'placementtwo') && + ($cancreate{'Placement'})))) { &Apache::lonhtmlcommon::add_breadcrumb ({href=>"/adm/createcourse?phase=$env{'form.prevphase'}", text=>&mt('[_1] Creation Settings',), @@ -1414,9 +1491,11 @@ sub handler { faq=>9,bug=>'Dom Coord Interface',}); &create_course($r); } elsif (($permission->{'create'}) && - (($env{'form.phase'} eq 'courseone') || - (($env{'form.phase'} eq 'groupone') && - ($cancreate{'Community'})))) { + (($env{'form.phase'} eq 'courseone') || + (($env{'form.phase'} eq 'groupone') && + ($cancreate{'Community'})) || + (($env{'form.phase'} eq 'placementone') && + ($cancreate{'Placement'})))) { &Apache::lonhtmlcommon::add_breadcrumb ({href=>"/adm/createcourse?phase=$env{'form.phase'}", text=>&mt('[_1] Creation Settings',), @@ -1457,7 +1536,7 @@ sub handler { $context,$env{'request.role.domain'}).''. &Apache::loncommon::end_page()); } elsif (($permission->{'create'}) && - ($env{'form.phase'} eq 'requestchange') && ($show_all_choices)) { + ($env{'form.phase'} eq 'requestchange') && ($show_all_choices)) { if ($env{'form.queue'} eq 'pending') { &Apache::lonhtmlcommon::add_breadcrumb ({href=>"/adm/createcourse?phase=pendingdisplay", @@ -1496,7 +1575,7 @@ sub handler { $context,$env{'request.role.domain'}).''. &Apache::loncommon::end_page()); } elsif (($permission->{'create'}) && - ($env{'form.phase'} eq 'requestvalidation') && ($show_all_choices)) { + ($env{'form.phase'} eq 'requestvalidation') && ($show_all_choices)) { my $js = &courserequestbrowser_javascript(); &Apache::lonhtmlcommon::add_breadcrumb ({href=>"/adm/createcourse?phase=pendingdisplay", @@ -1506,7 +1585,9 @@ sub handler { my $start_page=&Apache::loncommon::start_page('Requests Validation Result',$js); my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Validation Attempted','Course_Requests',undef,'Course_Requests'); $r->print($start_page.$crumbs."\n".' |