--- loncom/interface/loncreatecourse.pm 2010/05/24 06:36:54 1.139 +++ loncom/interface/loncreatecourse.pm 2016/10/24 03:05:25 1.158.2.2 @@ -1,7 +1,7 @@ # The LearningOnline Network # Create a course # -# $Id: loncreatecourse.pm,v 1.139 2010/05/24 06:36:54 raeburn Exp $ +# $Id: loncreatecourse.pm,v 1.158.2.2 2016/10/24 03:05:25 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -93,6 +93,7 @@ sub print_course_creation_page { $crstype = 'Course'; } 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 = '' + .'' .&Apache::lonhtmlcommon::row_closure() .&Apache::lonhtmlcommon::row_title($lt{'chsr'}) @@ -313,7 +321,9 @@ END if ($crstype eq 'Course') { $r->print(&Apache::lonhtmlcommon::row_headline() .'

'.$lt{'iinf'}.'

' - .$lt{'stat'} + .$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() .&Apache::lonhtmlcommon::row_title($lt{'ccod'}) @@ -331,8 +341,20 @@ END .'
('.$lt{'cscs'}.')' .&Apache::lonhtmlcommon::row_closure() ); + if ($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() + ); } - # Table: New Course / Clone Course $r->print(&Apache::lonhtmlcommon::row_headline() .'

'.$lt{'crco'}.'

' @@ -405,7 +427,7 @@ END .' ' .&Apache::lonhtmlcommon::row_closure() .&Apache::lonhtmlcommon::row_headline() - .$lt{'asov'} + .''.$lt{'asov'}.'' .&Apache::lonhtmlcommon::row_closure(1) .&Apache::lonhtmlcommon::end_pick_box() .'' @@ -442,6 +464,10 @@ END .'' .&Apache::lonhtmlcommon::row_closure() + .&Apache::lonhtmlcommon::row_title($lt{'scof'}) + .'' + .&Apache::lonhtmlcommon::row_closure() + .&Apache::lonhtmlcommon::row_headline() .'

'.$lt{'cmmn'}.'

' .&Apache::lonhtmlcommon::row_closure() @@ -537,7 +563,7 @@ END

-' +' ); } elsif ($crstype eq 'Community') { $r->print(' @@ -560,6 +586,8 @@ sub create_course { my $ccdomain=&LONCAPA::clean_domain($env{'form.ccdomain'}); my $crstype = 'Community'; my ($enrollstart,$enrollend,$startaccess,$endaccess); + my %domdefaults = + &Apache::lonnet::get_domain_defaults($env{'request.role.domain'}); if ($env{'form.phase'} eq 'coursetwo') { $crstype='Course'; @@ -626,6 +654,7 @@ sub create_course { endaccess => $endaccess, setpolicy => $env{'form.setpolicy'}, setcontent => $env{'form.setcontent'}, + setcomment => $env{'form.setcomment'}, reshome => $env{'form.reshome'}, setkeys => $env{'form.setkeys'}, keyauth => $env{'form.keyauth'}, @@ -635,6 +664,15 @@ sub create_course { firstres => $env{'form.firstres'} }; + if (($crstype eq 'Course') && + ($domdefaults{'officialcredits'} || $domdefaults{'unofficialcredits'} || $domdefaults{'textbookcredits'})) { + $args->{'defaultcredits'} = $env{'form.defaultcredits'}; + } + + if ($env{'form.uniquecode'}) { + $args->{'uniquecode'} = 1; + } + # # Verify data # @@ -663,12 +701,12 @@ sub create_course { ,$env{'form.course_home'}.&Apache::loncommon::end_page())); return; } - my ($courseid,$crsudom,$crsunum); + my ($courseid,$crsudom,$crsunum,$code); my ($success,$output) = &Apache::loncommon::construct_course($args,\$logmsg,\$courseid, \$crsudom,\$crsunum, $env{'user.domain'}, - $env{'user.name'},'dc_create'); + $env{'user.name'},'dc_create',undef,undef,\$code); $r->print($output); if ($success) { # @@ -688,8 +726,13 @@ sub create_course { $r->print( '

'.&mt('Manage Access Keys').'

'); } + if ($code) { + $r->print( + '

'.&mt('Course identifier to share with students: [_1]',$code).'

' + ); + } # Flush the course logs so reverse user roles immediately updated - &Apache::lonnet::flushcourselogs(); + $r->register_cleanup(\&Apache::lonnet::flushcourselogs); $r->print('

'.&mt('Roles will be active at next login').'.

'); } $r->print('

'. @@ -698,7 +741,7 @@ sub create_course { } sub print_intro_page { - my ($r,$show_all_choices) = @_; + my ($r,$show_all_choices,$cancreate,$permission) = @_; my $start_page = &Apache::loncommon::start_page('Create a New Course or Community'); my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Creation Options','Create_Course',undef,'Create_Courses'); @@ -707,6 +750,10 @@ sub print_intro_page { my $helplink=&Apache::loncommon::help_open_topic('Create_Course_Community',&mt('Help on Creating Courses and Communities')); # Create menu + my $approve = 'Display requests awaiting approval'; + if ($permission->{'create'}) { + $approve = 'Approve or reject requests'; + } my @menu; @menu = ({ categorytitle => 'Course/Community Creation', @@ -714,25 +761,25 @@ sub print_intro_page { { linktext => 'Create a single course', url => '/adm/createcourse?phase=courseone', - permission => 1, + permission => $permission->{'create'}, #help => '', - icon => 'ccrs.png', + icon => 'crsnew.png', linktitle => 'Create a new course by completing an online form.' }, { linktext => 'Create a single community', url => '/adm/createcourse?phase=groupone', - permission => $show_all_choices, + permission => $permission->{'create'} && $cancreate->{'Community'}, #help => '', - icon => 'ccrs.png', + icon => 'crsnew.png', linktitle => 'Create a new collaborative community by completing an online form.' }, { linktext => 'Create courses/communities by uploading an attributes file', url => '/adm/createcourse?phase=batchone', - permission => 1, + permission => $permission->{'create'}, help => 'Batch_Creation', - icon => 'ccrs.png', + icon => 'uplcrs.png', linktitle => 'Upload an attributes file containing specifications for one or more courses or communities in XML format.' }, ] @@ -740,19 +787,20 @@ sub print_intro_page { { categorytitle => 'Course/Community Requests', items => [ { - linktext => 'Approve or reject requests', + linktext => $approve, url => '/adm/createcourse?phase=requestdisplay', permission => $show_all_choices, #help => '', - icon => 'ccrs.png', + icon => 'rcrs.png', linktitle => 'Display course and community creation requests submitted by authorized users, held pending approval by a Domain Coordinator.' }, { - linktext => 'Display official course requests', + linktext => 'View pending official course requests', url => '/adm/createcourse?phase=pendingdisplay', permission => $show_all_choices, #help => '', - icon => 'ccrs.png', + icon => 'edit-find.png', + alttext => '', linktitle => 'Display official course requests submitted by authorized users, held pending validation of instructor status.' }, ] @@ -931,7 +979,7 @@ sub print_creation_logs { if ($numtitles) { if (($curr{'type'} eq 'official') || ($curr{'type'} eq 'unofficial')) { $instcodefilter = &instcode_srchstr($dom,$numtitles); - &Apache::courseclassifier::instcode_search_str($dom,$numtitles); + &Apache::courseclassifier::instcode_search_str($dom,$numtitles,\@codetitles); if ($curr{'type'} eq 'official') { $regexpok = 1; } else { @@ -1123,7 +1171,7 @@ sub creation_display_filter { $typename = $typenames->{$type}; } } - $output .= ''."\n"; + $output .= ''."\n"; } $output .= ''; } @@ -1210,6 +1258,20 @@ ENDJS } +sub get_permission { + my ($dom) = @_; + my ($allowed,%permission); + if (&Apache::lonnet::allowed('ccc',$dom)) { + $allowed = 1; + %permission = ( + create => 1, + ); + } elsif (&Apache::lonnet::allowed('dcc',$dom)) { + $allowed = 1; + } + return ($allowed,\%permission); +} + # ===================================================================== Handler sub handler { my $r = shift; @@ -1220,14 +1282,27 @@ sub handler { return OK; } - my $show_all_choices = 0; - my $primary_rev = &Apache::lonnet::get_server_loncaparev($env{'request.role.domain'}); - 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 ($allowed,$permission) = &get_permission($env{'request.role.domain'}); + if ($allowed) { + my $show_all_choices = 0; + my $primary_rev = &Apache::lonnet::get_server_loncaparev($env{'request.role.domain'}); + my %cancreate = ( + Community => 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) = + split(/\./,$Apache::lonnet::needsrelease{'course:crstype:'.$key}); + unless (($needsmajor > $primary_major) || + (($needsmajor == $primary_major) && ($needsminor > $primary_minor))) { + $cancreate{$key} = 1; + } + } + } - if (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) { &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; @@ -1238,9 +1313,10 @@ sub handler { ({href=>"/adm/createcourse", text=>"Creation Options", faq=>79,bug=>'Dom Coord Interface',}); - if (($env{'form.phase'} eq 'coursetwo') || - (($env{'form.phase'} eq 'grouptwo') && - ($show_all_choices))) { + if (($permission->{'create'}) && + (($env{'form.phase'} eq 'coursetwo') || + (($env{'form.phase'} eq 'grouptwo') && + ($cancreate{'Community'})))) { &Apache::lonhtmlcommon::add_breadcrumb ({href=>"/adm/createcourse?phase=$env{'form.prevphase'}", text=>&mt('[_1] Creation Settings',), @@ -1250,21 +1326,24 @@ sub handler { text=>"Creation Outcome", faq=>9,bug=>'Dom Coord Interface',}); &create_course($r); - } elsif (($env{'form.phase'} eq 'courseone') || - (($env{'form.phase'} eq 'groupone') && - ($show_all_choices))) { + } elsif (($permission->{'create'}) && + (($env{'form.phase'} eq 'courseone') || + (($env{'form.phase'} eq 'groupone') && + ($cancreate{'Community'})))) { &Apache::lonhtmlcommon::add_breadcrumb ({href=>"/adm/createcourse?phase=$env{'form.phase'}", text=>&mt('[_1] Creation Settings',), faq=>9,bug=>'Dom Coord Interface',}); &print_course_creation_page($r); - } elsif ($env{'form.phase'} eq 'batchone') { + } elsif (($permission->{'create'}) && + ($env{'form.phase'} eq 'batchone')) { &Apache::lonhtmlcommon::add_breadcrumb ({href=>"/adm/createcourse?phase=$env{'form.phase'}", text=>"Upload Description File", faq=>9,bug=>'Dom Coord Interface',}); &upload_batchfile($r); - } elsif ($env{'form.phase'} eq 'batchtwo') { + } elsif (($permission->{'create'}) && + ($env{'form.phase'} eq 'batchtwo')) { &Apache::lonhtmlcommon::add_breadcrumb ({href=>"/adm/createcourse?phase=$env{'form.prevphase'}", text=>"Upload Description File", @@ -1281,12 +1360,17 @@ sub handler { faq=>9,bug=>'Dom Coord Interface',}); my $js = &courserequestbrowser_javascript(); my $start_page=&Apache::loncommon::start_page('Display Requests',$js); - my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Display Requests','Course_Request',undef,'Course_Request'); + my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Display Requests','Course_Requests',undef,'Course_Requests'); + my $context = 'domain'; + unless ($permission->{'create'}) { + $context = 'helpdesk'; + } $r->print($start_page.$crumbs."\n".'

'. &Apache::loncoursequeueadmin::display_queued_requests( - 'domain',$env{'request.role.domain'}).'
'. + $context,$env{'request.role.domain'},undef).''. &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", @@ -1303,7 +1387,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'}).'
'. @@ -1315,12 +1399,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", @@ -1328,7 +1417,7 @@ 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::loncommon::end_page()); @@ -1342,12 +1431,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'}=