--- loncom/interface/loncreatecourse.pm 2002/08/18 21:43:59 1.11 +++ loncom/interface/loncreatecourse.pm 2020/05/22 15:05:30 1.173 @@ -1,7 +1,7 @@ # The LearningOnline Network # Create a course # -# $Id: loncreatecourse.pm,v 1.11 2002/08/18 21:43:59 www Exp $ +# $Id: loncreatecourse.pm,v 1.173 2020/05/22 15:05:30 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -25,42 +25,253 @@ # # http://www.lon-capa.org/ # -# (My Desk -# -# (Internal Server Error Handler -# -# (Login Screen -# 5/21/99,5/22,5/25,5/26,5/31,6/2,6/10,7/12,7/14, -# 1/14/00,5/29,5/30,6/1,6/29,7/1,11/9 Gerd Kortemeyer) -# -# 3/1/1 Gerd Kortemeyer) -# -# 3/1 Gerd Kortemeyer) -# -# 2/14,2/16,2/17,7/6 Gerd Kortemeyer -# +### + +=head1 NAME + +Apache::loncreatecourse.pm + +=head1 SYNOPSIS + +Allows domain coordinators to create new +courses and assign course coordinators. + +This is part of the LearningOnline Network with CAPA project +described at http://www.lon-capa.org. + +=head1 SUBROUTINES + +=over + +=item handler() + +=item print_course_creation_page() + +=item create_course() + +=item print_intro_page() + +=item upload_batchfile() + +=item process_batchfile() + +=item courserequestbrowser_javascript() + +=item print_creation_logs() + +=item creation_display_filter() + +=item context_names() + +=item instcode_srchstr() + +=item syllabuslink_javascript() + +=back + +=cut + package Apache::loncreatecourse; use strict; use Apache::Constants qw(:common :http); use Apache::lonnet; +use Apache::loncommon; +use Apache::londocs; +use Apache::lonlocal; +use Apache::lonuserutils; +use Apache::lonclonecourse; +use LONCAPA::batchcreatecourse; +use LONCAPA qw(:DEFAULT :match); + +my $registered_flush; +my $registered_instcats; +my $modified_dom; # ===================================================== Phase one: fill-in form sub print_course_creation_page { my $r=shift; - my $defdom=$ENV{'request.role.domain'}; - my %host_servers = &Apache::loncommon::get_library_servers($defdom); + 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); + my %host_servers = &Apache::lonnet::get_servers($defdom,'library'); my $course_home = ''."\n"; foreach my $server (sort(keys(%host_servers))) { - $course_home .= - qq{$server $host_servers{$server}}; + $course_home .= qq{$server $host_servers{$server}}; } $course_home .= "\n\n"; - my $domform = &Apache::loncommon::select_dom_form($defdom,'ccdomain'); - $r->print(< - - -The LearningOnline Network with CAPA - - - -Create a new Course - -Course Information - -Course Title: - - -Map: - -Browse - -Do NOT generate as standard course -(only check if you know what you are doing): - - -Course Home Server:$course_home - -Course ID/Number (optional) - - -Open all assessments: - - -Set course policy feedback to Course Coordinator: - - -Set content feedback to Course Coordinator: - - +$coursebrowserjs +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); + my $end_page = + &Apache::loncommon::end_page(); + my $crumbs = + &Apache::lonhtmlcommon::breadcrumbs($crstype.' Information', + 'Create_Course',undef, + 'Create_Courses'); + $r->print($start_page.$crumbs); + + $r->print('' + .&Apache::lonhtmlcommon::start_pick_box() + + .&Apache::lonhtmlcommon::row_headline() + .''.$lt{'ow'}.' '.$lt{'cc'}.'' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'user'}) + .'' + .&Apache::loncommon::studentbrowser_javascript() + .&Apache::loncommon::selectstudent_link('ccrs','ccuname','ccdomain') + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'dmn'},"","LC_odd_row_value") + .$domform + .&Apache::lonhtmlcommon::row_closure() -Course Coordinator + .&Apache::lonhtmlcommon::row_headline() + .''.$lt{'cinf'}.'' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'ctit'}) + .'' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'chsr'}) + .$course_home + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'cidn'}.' ('.$lt{'opt'}.')') + .'' + .&Apache::lonhtmlcommon::row_closure() + ); + if (($crstype eq 'Course') || ($crstype eq 'Placement')) { + $r->print(&Apache::lonhtmlcommon::row_headline() + .''.$lt{'iinf'}.'' + .$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'}.')' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'snid'}) + .'' + .'('.$lt{'csli'}.')' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'crcs'}) + .'' + .'('.$lt{'cscs'}.')' + .&Apache::lonhtmlcommon::row_closure() + ); + 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() + .''.$lt{'crco'}.'' + .&Apache::loncommon::start_data_table() + .&Apache::loncommon::start_data_table_header_row() + .''.$lt{'cncr'}.'' + .' '.&mt('or').' ' + .''.$lt{'cecr'}.'' + .&Apache::loncommon::end_data_table_header_row() + .&Apache::loncommon::start_data_table_row() + + # New Course: + .'' + .&Apache::lonhtmlcommon::start_pick_box() + .&Apache::lonhtmlcommon::row_title($lt{'map'}) + .'' + .''.$lt{'smap'}.'' + .&Apache::lonhtmlcommon::row_closure() + .&Apache::lonhtmlcommon::row_title(''.$lt{'sacr'}.'') + .'' + .'('.$lt{'ocik'}.')' + .&Apache::lonhtmlcommon::row_closure() + .&Apache::lonhtmlcommon::row_title($lt{'fres'}) + .'' + .''.$lt{'blnk'} + .''); + if ($crstype eq 'Community') { + $r->print(' ' + .''.$lt{'navi'} + .''); + } elsif ($crstype eq 'Course') { + $r->print(' ' + .''.$lt{'sllb'} + .'' + .' ' + .'' + .''.$lt{'navi'} + .''); + } + $r->print('('.$lt{'stco'}.')' + .&Apache::lonhtmlcommon::row_closure(1) + .&Apache::lonhtmlcommon::end_pick_box() + + .' ' + + # Clone Course: + .'' + .&Apache::lonhtmlcommon::start_pick_box() + .&Apache::lonhtmlcommon::row_title($lt{'cid'}) + .'' + .'' + .'' + .&Apache::lonhtmlcommon::row_closure(1) + .&Apache::lonhtmlcommon::row_title($lt{'dmn'}) + .'' + .$cloneform + .'' + .&Apache::lonhtmlcommon::row_closure() + .&Apache::lonhtmlcommon::row_title($lt{'dsh'}) + .'' + .' '.$lt{'ncd'} + .'' + .'' + .' '.$lt{'prd'} + .'' + .'' + .' '.$lt{'shd'} + .'' + .' ' + .&Apache::lonhtmlcommon::row_closure() + .&Apache::lonhtmlcommon::row_headline() + .''.$lt{'asov'}.'' + .&Apache::lonhtmlcommon::row_closure(1) + .&Apache::lonhtmlcommon::end_pick_box() + .'' + .&Apache::loncommon::end_data_table_row() + .&Apache::loncommon::end_data_table() + .&Apache::lonhtmlcommon::row_closure() + ); + + $r->print(&Apache::lonhtmlcommon::row_headline() + .''.$lt{'dads'}.'' + .&Apache::lonhtmlcommon::row_closure() + .&Apache::lonhtmlcommon::row_title($lt{'dacc'}) + .$access_table + .&Apache::lonhtmlcommon::row_closure() + ); + + $r->print(&Apache::lonhtmlcommon::row_headline() + .''.$lt{'assp'}.'' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'oaas'}) + .'' + .''.$lt{'no'}.''.(' 'x2) + .''.$lt{'yes'}.''.', ' + .$lt{'sta'}.' '.$openallfrom + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_headline() + .''.$lt{'mssg'}.'' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'scpf'}) + .'' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'scfc'}) + .'' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'scof'}) + .'' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_headline() + .''.$lt{'cmmn'}.'' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'dsrd'}) + .'' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'dsuc'}) + .'' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_headline() + .''.$lt{'acco'}.'' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'snak'}) + .'' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'kaut'}) + .'' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_headline() + .''.$lt{'rshm'}.'' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'rshm'}) + .'' + .&Apache::lonhtmlcommon::row_closure() + ); + unless ($crstype eq 'Community') { + $r->print(&Apache::lonhtmlcommon::row_headline() + .''.$lt{'aens'}.'' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'aadd'}) + .''.$lt{'yes'}.'' + .''.$lt{'no'}.'' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'audr'}) + .''.$lt{'yes'}.'' + .''.$lt{'no'}.'' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'dacu'}) + .$enroll_table + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'psam'}) + .$lt{'pcda'}.'' + .$krbform.'' + .$intform.'' + .$locform + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'nech'}) + .$lt{'nccl'}.'' + .''.$lt{'yes'}.'' + .''.$lt{'no'}.'' + .'' + .$lt{'ndcl'}.'' + .''.$lt{'yes'}.'' + .''.$lt{'no'}.'' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'irsp'}) + .'' + .''.$lt{'yes'} + .' ' + .'' + .''.$lt{'no'} + .' ' + .&Apache::lonhtmlcommon::row_closure() + ); + } + + $r->print(&Apache::lonhtmlcommon::row_headline() + .''.$lt{'cgrs'}.'' + .&Apache::lonhtmlcommon::row_closure() + + .&Apache::lonhtmlcommon::row_title($lt{'cgrq'}) + .'Mb' + .&Apache::lonhtmlcommon::row_closure(1) + + .&Apache::lonhtmlcommon::end_pick_box() + .'' + ); + if ($crstype eq 'Course') { + $r->print(' + + + +' + ); + } elsif ($crstype eq 'Community') { + $r->print(' -Username: - -Domain: $domform - -Immediately expire own role as Course Coordinator: - - - - - - - -
-Course Title: - -
-Map: - -Browse -
-Do NOT generate as standard course -(only check if you know what you are doing): - -
-Course Home Server:$course_home -
-Course ID/Number (optional) - -
-Open all assessments: - -
-Set course policy feedback to Course Coordinator: - -
-Set content feedback to Course Coordinator: - -
+ + +' + ); + } elsif ($crstype eq 'Community') { + $r->print('
-Username: -
-Domain: $domform -
-Immediately expire own role as Course Coordinator: - -
- - -