--- loncom/interface/loncreatecourse.pm 2013/07/22 18:06:51 1.150 +++ loncom/interface/loncreatecourse.pm 2021/08/31 17:23:27 1.176 @@ -1,7 +1,7 @@ # The LearningOnline Network # Create a course # -# $Id: loncreatecourse.pm,v 1.150 2013/07/22 18:06:51 bisitz Exp $ +# $Id: loncreatecourse.pm,v 1.176 2021/08/31 17:23:27 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -80,9 +80,12 @@ use Apache::loncommon; use Apache::londocs; use Apache::lonlocal; use Apache::lonuserutils; -use Apache::lonclonecourse; use LONCAPA::batchcreatecourse; -use LONCAPA; +use LONCAPA qw(:DEFAULT :match); + +my $registered_flush; +my $registered_instcats; +my $modified_dom; # ===================================================== Phase one: fill-in form @@ -91,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); @@ -99,12 +104,13 @@ sub print_course_creation_page { foreach my $server (sort(keys(%host_servers))) { $course_home .= qq{}; } $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 @@ -116,7 +122,9 @@ sub print_course_creation_page { my $endtime = time+(6*30*24*60*60); # 6 months from now, approx my $access_table = &Apache::lonuserutils::date_setting_table($starttime, $endtime,'create_defaultdates'); - if ($crstype eq 'Course') { + my $openallfrom = + &Apache::lonhtmlcommon::date_setter('ccrs','openallfrom',$starttime); + if (($crstype eq 'Course') || ($crstype eq 'Placement')) { $enroll_table = &Apache::lonuserutils::date_setting_table($starttime, $endtime,'create_enrolldates'); ($krbdef,$krbdefdom) = @@ -133,6 +141,8 @@ sub print_course_creation_page { } else { my $title_alert = &mt('A Community title is required'); my $coord_alert = &mt('The username of the Coordinator is required'); + &js_escape(\$title_alert); + &js_escape(\$coord_alert); $javascript_validations = qq| function validate(formname) { if (formname.title == '') { @@ -158,8 +168,9 @@ function validate(formname) { 'snid' => "Section Numbers and corresponding LON-CAPA section IDs", 'csli' => "a comma separated list of institutional section numbers, each separated by a colon from the (optional) corresponding section ID to be used in LON-CAPA e.g., 001:1,002:2", 'crcs' => "Crosslisted courses", - 'cscs' => "a comma separated list of course sections crosslisted with the current course, with each entry including the institutional course section name followed by a colon and then the (optional) sectionID to be used in LON-CAPA, e.g., fs03ent231001:ent1,fs03bot231001:bot1,fs03zol231002:zol2", + 'cscs' => "a comma separated list of course sections crosslisted with the current course, with each entry including the institutional course section name followed by a colon and then the (optional) section ID to be used in LON-CAPA, e.g., fs03ent231001:ent1,fs03bot231001:bot1,fs03zol231002:zol2", 'ccre' => "Course credits", + 'crcd' => "Create six character course identifier to share with students", 'cred' => "the number of institutional credits students will earn by completing this course", 'crco' => "Course Content", 'cncr' => "Completely new course", @@ -180,11 +191,17 @@ 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:", 'mssg' => "Messaging", 'scpf' => "Set course policy feedback to Course Coordinator", - 'scfc' => "Set content feedback to Course Coordinator", + 'scfc' => "Set resource content feedback to Course Coordinator", + 'scof' => "Set course content feedback to Course Coordinator", 'cmmn' => "Communication", 'dsrd' => "Disable student resource discussion", 'dsuc' => "Disable student use of chat rooms", @@ -211,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]','','','',''); @@ -230,7 +248,8 @@ function validate(formname) { $lt{'navi'} = &mt('Community Contents'); $lt{'cid'} = &mt('Community ID'); $lt{'scpf'} = &mt('Set community policy feedback to Coordinator'); - $lt{'scfc'} = &mt('Set content feedback to Coordinator'); + $lt{'scfc'} = &mt('Set resource content feedback to Coordinator'); + $lt{'scof'} = &mt('Set community content feedback to Coordinator'); $lt{'dsrd'} = &mt('Disable member resource discussion'); $lt{'dsuc'} = &mt('Disable member use of chat rooms'); $lt{'dads'} = &mt('Default Access Dates for Members'); @@ -241,9 +260,25 @@ 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 = < +// $coursebrowserjs END @@ -269,6 +306,7 @@ END my %titles = &Apache::lonlocal::texthash( courseone => 'Create a New Course', groupone => 'Create a New Community', + placementone=> 'Create a New Placement Test', ); my $start_page = &Apache::loncommon::start_page($titles{$env{'form.phase'}},$js); @@ -280,7 +318,7 @@ END 'Create_Courses'); $r->print($start_page.$crumbs); - $r->print('
' + $r->print('
' .&Apache::lonhtmlcommon::start_pick_box() .&Apache::lonhtmlcommon::row_headline() @@ -313,14 +351,16 @@ END .'' .&Apache::lonhtmlcommon::row_closure() ); - if ($crstype eq 'Course') { + if (($crstype eq 'Course') || ($crstype eq 'Placement')) { $r->print(&Apache::lonhtmlcommon::row_headline() .'

'.$lt{'iinf'}.'

' - .$lt{'stat'}.' ' - .&mt('Default credits can also be specified, if different from the domain defaults (official courses: [_1]; unofficial courses: [_2]).', - $domdefaults{'officialcredits'},$domdefaults{'unofficialcredits'}) - .&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'}.')' @@ -336,13 +376,25 @@ END .'
('.$lt{'cscs'}.')' .&Apache::lonhtmlcommon::row_closure() ); - if ($domdefaults{'officialcredits'} || $domdefaults{'unofficialcredits'}) { + if (($crstype eq 'Course') && ($domdefaults{'officialcredits'} || + $domdefaults{'unofficialcredits'} || $domdefaults{'textbookcredits'})) { $r->print(&Apache::lonhtmlcommon::row_title($lt{'ccre'}) .'' .'
('.$lt{'cred'}.')' .&Apache::lonhtmlcommon::row_closure() ); } + $r->print(&Apache::lonhtmlcommon::row_title($lt{'crcd'}) + .'' + .''.&mt('Yes').(' 'x2) + .''.&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() @@ -368,15 +420,14 @@ END .&Apache::lonhtmlcommon::row_closure() .&Apache::lonhtmlcommon::row_title($lt{'fres'}) .'' - .' '); + .''.$lt{'blnk'} + .''); if ($crstype eq 'Community') { - $r->print('
'. &Apache::loncommon::end_page()); - } elsif (($env{'form.phase'} eq 'requestchange') && ($show_all_choices)) { + } elsif (($permission->{'create'}) && + ($env{'form.phase'} eq 'requestchange') && ($show_all_choices)) { if ($env{'form.queue'} eq 'pending') { &Apache::lonhtmlcommon::add_breadcrumb ({href=>"/adm/createcourse?phase=pendingdisplay", @@ -1322,7 +1553,7 @@ sub handler { text=>&mt('[_1] Requests Updated',), faq=>9,bug=>'Dom Coord Interface',},); my $start_page=&Apache::loncommon::start_page('Update Requests Result'); - my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Requests Updated','Course_Request',undef,'Course_Request'); + my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Requests Updated','Course_Requests',undef,'Course_Requests'); $r->print($start_page.$crumbs."\n".'
'. &Apache::loncoursequeueadmin::update_request_queue( 'domain',$env{'request.role.domain'}).'
'. @@ -1334,12 +1565,17 @@ sub handler { faq=>9,bug=>'Dom Coord Interface',}); my $js = &courserequestbrowser_javascript(); my $start_page=&Apache::loncommon::start_page('Display Pending Queue',$js); - my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Display Pending Queue','Course_Request',undef,'Course_Request'); + my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Display Pending Queue','Course_Requests',undef,'Course_Requests'); + my $context = 'pending'; + unless ($permission->{'create'}) { + $context = 'displaypending'; + } $r->print($start_page.$crumbs."\n".'
'. &Apache::loncoursequeueadmin::display_queued_requests( - 'pending',$env{'request.role.domain'}).'
'. + $context,$env{'request.role.domain'}).'
'. &Apache::loncommon::end_page()); - } elsif (($env{'form.phase'} eq 'requestvalidation') && ($show_all_choices)) { + } elsif (($permission->{'create'}) && + ($env{'form.phase'} eq 'requestvalidation') && ($show_all_choices)) { my $js = &courserequestbrowser_javascript(); &Apache::lonhtmlcommon::add_breadcrumb ({href=>"/adm/createcourse?phase=pendingdisplay", @@ -1347,9 +1583,11 @@ sub handler { {href=>"/adm/createcourse?phase=requestvalidation", text=>&mt('Validation Attempted'),},); my $start_page=&Apache::loncommon::start_page('Requests Validation Result',$js); - my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Validation Attempted','Course_Request',undef,'Course_Request'); + my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Validation Attempted','Course_Requests',undef,'Course_Requests'); $r->print($start_page.$crumbs."\n".'
'. - &Apache::loncoursequeueadmin::process_official_reqs('domain',$env{'request.role.domain'}).'
'. + &Apache::loncoursequeueadmin::process_official_reqs('domain',$env{'request.role.domain'}, + $env{'user.name'},$env{'user.domain'}). + ''. &Apache::loncommon::end_page()); } elsif (($env{'form.phase'} eq 'creationlog') && ($show_all_choices)) { &Apache::lonhtmlcommon::add_breadcrumb @@ -1361,12 +1599,12 @@ sub handler { '// ]]>'."\n". ''; my $start_page=&Apache::loncommon::start_page('Course/Community Creation Logs',$js); - my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Created Courses/Communities','Creation_Log',undef,'Creation_Log'); + my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Created Courses/Communities','Course_Creation_Log',undef,'Course_Creation_Log'); $r->print($start_page.$crumbs."\n".'
'); &print_creation_logs($r); $r->print('
'.&Apache::loncommon::end_page()); } else { - &print_intro_page($r,$show_all_choices); + &print_intro_page($r,$show_all_choices,\%cancreate,$permission); } } else { $env{'user.error.msg'}=