--- loncom/interface/loncreatecourse.pm 2008/12/15 08:35:33 1.110.2.1 +++ loncom/interface/loncreatecourse.pm 2013/12/25 09:52:42 1.153 @@ -1,7 +1,7 @@ # The LearningOnline Network # Create a course # -# $Id: loncreatecourse.pm,v 1.110.2.1 2008/12/15 08:35:33 raeburn Exp $ +# $Id: loncreatecourse.pm,v 1.153 2013/12/25 09:52:42 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -27,6 +27,50 @@ # ### +=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; @@ -44,11 +88,12 @@ use LONCAPA; sub print_course_creation_page { my $r=shift; - my $crstype = 'Group'; + my $crstype = 'Community'; if ($env{'form.phase'} eq 'courseone') { $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'}) - .$course_home - .&Apache::lonhtmlcommon::row_closure() - - .&Apache::lonhtmlcommon::row_title($lt{'cidn'}.' ('.$lt{'opt'}.')') - .'' - .&Apache::lonhtmlcommon::row_closure() - - .&Apache::lonhtmlcommon::row_headline() + .&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() + + .&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') { + $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'}) @@ -266,9 +337,22 @@ END .'
('.$lt{'cscs'}.')' .&Apache::lonhtmlcommon::row_closure() ); - - # Table: New Course / Clone Course - $r->print(&Apache::lonhtmlcommon::row_headline() + 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'}.'

' .&Apache::loncommon::start_data_table() .&Apache::loncommon::start_data_table_header_row() @@ -293,15 +377,21 @@ END .'' - .' ' - .''); + } + $r->print('
('.$lt{'stco'}.')' .&Apache::lonhtmlcommon::row_closure(1) .&Apache::lonhtmlcommon::end_pick_box() @@ -333,16 +423,24 @@ END .' ' .&Apache::lonhtmlcommon::row_closure() .&Apache::lonhtmlcommon::row_headline() - .$lt{'asov'} + .''.$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() + $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() @@ -371,7 +469,7 @@ END .&Apache::lonhtmlcommon::row_closure() .&Apache::lonhtmlcommon::row_title($lt{'dsuc'}) - .'' .&Apache::lonhtmlcommon::row_closure() .&Apache::lonhtmlcommon::row_headline() @@ -393,8 +491,9 @@ END .&Apache::lonhtmlcommon::row_title($lt{'rshm'}) .'' .&Apache::lonhtmlcommon::row_closure() - - .&Apache::lonhtmlcommon::row_headline() + ); + if ($crstype eq 'Course') { + $r->print(&Apache::lonhtmlcommon::row_headline() .'

'.$lt{'aens'}.'

' .&Apache::lonhtmlcommon::row_closure() @@ -412,10 +511,6 @@ END .$enroll_table .&Apache::lonhtmlcommon::row_closure() - .&Apache::lonhtmlcommon::row_title($lt{'dacc'}) - .$access_table - .&Apache::lonhtmlcommon::row_closure() - .&Apache::lonhtmlcommon::row_title($lt{'psam'}) .$lt{'pcda'}.'
' .$krbform.'
' @@ -441,172 +536,38 @@ END .''.$lt{'no'} .' ' .&Apache::lonhtmlcommon::row_closure() - - .&Apache::lonhtmlcommon::row_headline() + ); + } + + $r->print(&Apache::lonhtmlcommon::row_headline() .'

'.$lt{'cgrs'}.'

' .&Apache::lonhtmlcommon::row_closure() .&Apache::lonhtmlcommon::row_title($lt{'cgrq'}) .'Mb' - .&Apache::lonhtmlcommon::row_closure() - - .&Apache::lonhtmlcommon::row_headline() - .'

'.$lt{'cc'}.'

' - .&Apache::lonhtmlcommon::row_closure() - - .&Apache::lonhtmlcommon::row_title($lt{'user'}) - .'' - .&Apache::lonhtmlcommon::row_closure() - - .&Apache::lonhtmlcommon::row_title($lt{'dmn'},"","LC_odd_row_value") - .$domform .&Apache::lonhtmlcommon::row_closure(1) .&Apache::lonhtmlcommon::end_pick_box() - ); - - $r->print(< + .'' + ); + if ($crstype eq 'Course') { + $r->print('

- -

- -ENDDOCUMENT - - } elsif ($crstype eq 'Group') { - $r->print(< -

$lt{'ginf'}

-

- -

- -

- -

-

$lt{'grco'}

- - - -
$lt{'cngr'}$lt{'cegr'}
-

- -$lt{'smap'} -

- -
-($lt{'ocik'}): - -

-$lt{'fres'}
($lt{'stgo'}): - -  - -  - -

-
- -
- -
-
-
- -
 
-$lt{'asov'}. -
-

-

-

$lt{'mssg'}

-

- -
- -

-

$lt{'cmmn'}

-

- -
- -

-

$lt{'acco'}

-

- -
- -

-

$lt{'rshm'}

-

- -

-

-

$lt{'grts'}

-$lt{'grtq'} -Mb -

-
-

$lt{'gc'}

-

- -

- -

+' + ); + } elsif ($crstype eq 'Community') { + $r->print('

- -

- -ENDDOCUMENT + +

' + ); } - $r->print($end_page); + $r->print(''. + $end_page); } # ====================================================== Phase two: make course @@ -615,8 +576,10 @@ sub create_course { my $r=shift; my $ccuname =&LONCAPA::clean_username($env{'form.ccuname'}); my $ccdomain=&LONCAPA::clean_domain($env{'form.ccdomain'}); - my $crstype = 'Group'; + 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'; @@ -692,6 +655,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 # @@ -720,97 +692,143 @@ 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'}); + $env{'user.name'},'dc_create',undef,undef,\$code); $r->print($output); if ($success) { # # Make the requested user a course coordinator or group coordinator # if (($ccdomain) && ($ccuname)) { - $r->print(&mt('Assigning role of [_1] Coordinator to [_2] at [_3]: ', - $crstype,$ccuname,$ccdomain). - &Apache::lonnet::assignrole($ccdomain,$ccuname,$courseid, - 'cc','','','','','createcourse').'

'); + my $ccrole = 'cc'; + if ($crstype eq 'Community') { + $ccrole = 'co'; + } + $r->print(&mt('Assigning role of '.$crstype.' Coordinator to [_1]:', + ,''.$ccuname.':'.$ccdomain.'') + .&Apache::lonnet::assignrole($ccdomain,$ccuname,$courseid, + $ccrole,'','','','','createcourse').'

'); } if ($env{'form.setkeys'}) { $r->print( '

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

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

'.&mt('Course indentifier 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('

'. - &mt('Create Another [_1]',$crstype).'

'. + &mt("Create Another $crstype").'

'. &Apache::loncommon::end_page()); } sub print_intro_page { - my $r = shift; + my ($r,$show_all_choices) = @_; my $start_page = - &Apache::loncommon::start_page('Create a New Course or Group Space'); + &Apache::loncommon::start_page('Create a New Course or Community'); my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Creation Options','Create_Course',undef,'Create_Courses'); my $end_page = &Apache::loncommon::end_page(); - my $helplink=&Apache::loncommon::help_open_topic('Create_Course_GroupSpace',&mt('Help on Creating Courses and Groups')); + my $helplink=&Apache::loncommon::help_open_topic('Create_Course_Community',&mt('Help on Creating Courses and Communities')); - my @choices = ({ internal_name => 'courseone', - name => &mt('Create a single course'), - short_description => - &mt('Create a new course by completing an online form.'), - }, - { internal_name => 'groupone', - name => &mt('Create a single collaborative group space'), - short_description => - &mt('Create a new group space for non-course use by completing an online form.'), - }, - { internal_name => 'batchone', - name => &mt('Create courses/groups by uploading an attributes file'), - short_description => - &mt('Upload an attributes file containing specifications for one or more courses or groups in XML format.'), - help => 'Batch_Creation', - }, + # Create menu + my @menu; + @menu = + ({ categorytitle => 'Course/Community Creation', + items => [ + { + linktext => 'Create a single course', + url => '/adm/createcourse?phase=courseone', + permission => 1, + #help => '', + 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, + #help => '', + 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, + help => 'Batch_Creation', + icon => 'uplcrs.png', + linktitle => 'Upload an attributes file containing specifications for one or more courses or communities in XML format.' + }, + ] + }, + { categorytitle => 'Course/Community Requests', + items => [ + { + linktext => 'Approve or reject requests', + url => '/adm/createcourse?phase=requestdisplay', + permission => $show_all_choices, + #help => '', + icon => 'rcrs.png', + linktitle => 'Display course and community creation requests submitted by authorized users, held pending approval by a Domain Coordinator.' + }, + { + linktext => 'View pending official course requests', + url => '/adm/createcourse?phase=pendingdisplay', + permission => $show_all_choices, + #help => '', + icon => 'edit-find.png', + alttext => '', + linktitle => 'Display official course requests submitted by authorized users, held pending validation of instructor status.' + }, + ] + }, + { categorytitle => 'Administration', + items => [ + { + linktext => 'View creation log', + url => '/adm/createcourse?phase=creationlog', + permission => $show_all_choices, + #help => '', + icon => 'document-properties.png', + linktitle => 'Display information about when, how and by whom courses and communities were created in this domain.' + }, + ] + }, + ); + + $r->print( + $start_page + .$crumbs + .&Apache::lonhtmlcommon::generate_menu(@menu) + .$end_page ); - my $options; - foreach my $choice (@choices) { - $options .='

'. - $choice->{'name'}.''; - if (exists($choice->{'help'})) { - $options .= &Apache::loncommon::help_open_topic($choice->{'help'}); - } - $options .= "

\n".' '.(' 'x8).$choice->{'short_description'}. - "\n"; - } - - $r->print(<print($start_page.$crumbs); - $r->print('

'.&mt('Upload a courses or groups attributes file').'

'); + $r->print('

'.&mt('Upload a courses or communities attributes file').'

'); $r->print('
'. ''. - '

'. + '

'. '
'); + 'value="'.&mt('Create Courses/Communities').'" />'); $r->print($end_page); return; } @@ -818,7 +836,7 @@ sub upload_batchfile { sub process_batchfile { my $r = shift; my $start_page = - &Apache::loncommon::start_page('Create a New Course or Group Space'); + &Apache::loncommon::start_page('Create a New Course or Community'); my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Creation Outcome','Create_Course',undef,'Create_Courses'); my $end_page = &Apache::loncommon::end_page(); @@ -856,6 +874,377 @@ sub process_batchfile { } +sub courserequestbrowser_javascript { + return <<"ENDREQBRW"; + +ENDREQBRW +} + +sub print_creation_logs { + my ($r) = @_; + my $formname = 'creationlog'; + my $dom = $env{'request.role.domain'}; + $r->print('
'); + # set defaults + my $now = time(); + my $defstart = $now - (7*24*3600); #7 days ago + my %defaults = ( + page => '1', + show => '10', + type => 'any', + context => 'any', + created_before_date => $now, + created_after_date => $defstart, + ); + my ($contexts,$contextnames) = &context_names(); + my $more_records = 0; + my %curr; + foreach my $item ('show','page','type','context') { + $curr{$item} = $env{'form.'.$item}; + } + $curr{'created_after_date'} = &Apache::lonhtmlcommon::get_date_from_form('created_after_date'); + $curr{'created_before_date'} = &Apache::lonhtmlcommon::get_date_from_form('created_before_date'); + foreach my $key (keys(%defaults)) { + if ($curr{$key} eq '') { + $curr{$key} = $defaults{$key}; + } + } + my %whodunit; + $r->print(&creation_display_filter($formname,\%curr)); + my $showntablehdr = 0; + my $tablehdr = &Apache::loncommon::start_data_table(). + &Apache::loncommon::start_data_table_header_row(). + ' '.&mt('Creation Date').''. + ''.&mt('Creator').''.&mt('Description').''. + ''.&mt('Owner(s)').''; + if (($curr{'type'} eq 'official') || ($curr{'type'} eq 'any')) { + $tablehdr .= ''.&mt('Institutional Code').''; + } + if ($curr{'type'} eq 'any') { + $tablehdr .= ''.&mt('Course Type').''; + } + if ($curr{'context'} eq 'any') { + $tablehdr .= ''.&mt('Creation Context').''; + } + $tablehdr .= &Apache::loncommon::end_data_table_header_row(); + my ($minshown,$maxshown); + $minshown = 1; + my $count = 0; + if ($curr{'show'} ne &mt('all')) { + $maxshown = $curr{'page'} * $curr{'show'}; + if ($curr{'page'} > 1) { + $minshown = 1 + ($curr{'page'} - 1) * $curr{'show'}; + } + } + my $crstype = 'Course'; + if ($curr{'type'} eq 'any') { + $crstype = '.'; + } elsif ($curr{'type'} eq 'community') { + $crstype = 'Community'; + } + + my ($instcodefilter,$regexpok); + my (@codetitles,%cat_titles,%cat_order,%cat_items,$officialjs); + my ($jscript,$totcodes,$numtitles,$lasttitle) = + &Apache::courseclassifier::instcode_selectors_data($dom,$formname, + \%cat_items,\@codetitles,\%cat_titles,\%cat_order, + $officialjs); + if ($numtitles) { + if (($curr{'type'} eq 'official') || ($curr{'type'} eq 'unofficial')) { + $instcodefilter = &instcode_srchstr($dom,$numtitles); + &Apache::courseclassifier::instcode_search_str($dom,$numtitles,\@codetitles); + if ($curr{'type'} eq 'official') { + $regexpok = 1; + } else { + unless ($instcodefilter eq '') { + $regexpok = -1; + } + } + } + } + if ($instcodefilter eq '') { $instcodefilter = '.'; } + + my $creationcontext = '.'; + my $context_regexp = join('|',@{$contexts}); + if ($curr{'context'} =~ /^($context_regexp)$/) { + $creationcontext = $curr{'context'}; + } + my %courses = + &Apache::lonnet::courseiddump($dom,'.',1,$instcodefilter,'.','.',undef,undef, + $crstype,$regexpok,undef,undef,'1','creationlog', + undef,undef,undef,$curr{'created_before_date'}, + $curr{'created_after_date'},$creationcontext); + foreach my $cid (sort { $courses{$b}{'created'}<=>$courses{$a}{'created'} } (keys(%courses))) { + if ($curr{'show'} ne &mt('all')) { + if ($count >= $curr{'page'} * $curr{'show'}) { + $more_records = 1; + last; + } + } + $count ++; + next if ($count < $minshown); + if (!$showntablehdr) { + $r->print($tablehdr); + $showntablehdr = 1; + } + if ($courses{$cid}{'creator'} ne '') { + if ($whodunit{$courses{$cid}{'creator'}} eq '') { + my ($uname,$udom) = split(':',$courses{$cid}{'creator'}); + $whodunit{$courses{$cid}{'creator'}} = + &Apache::loncommon::plainname($uname,$udom); + } + } + my $description = $courses{$cid}{'description'}; + my @owners; + my $singleowner = $courses{$cid}{'owner'}; + push(@owners,$singleowner); + if (ref($courses{$cid}{'co-owners'}) eq 'ARRAY') { + foreach my $item (@{$courses{$cid}{'co-owners'}}) { + push(@owners,$item); + } + } + my %ownernames; + foreach my $owner (@owners) { + my ($ownername,$ownerdom); + if ($owner =~ /:/) { + ($ownername,$ownerdom) = split(/:/,$owner); + } else { + $ownername = $owner; + if ($owner ne '') { + $ownerdom = $dom; + } + } + if ($ownername ne '' && $ownerdom ne '') { + unless (ref($ownernames{$ownername.':'.$ownerdom}) eq 'HASH') { + my %namehash=&Apache::loncommon::getnames($ownername,$ownerdom); + $ownernames{$ownername.':'.$ownerdom} = \%namehash; + } + } + } + my @lastnames; + foreach my $owner (keys(%ownernames)) { + if (ref($ownernames{$owner}) eq 'HASH') { + push(@lastnames,$ownernames{$owner}{'lastname'}); + } + } + my $ownerlastnames = join(', ',sort(@lastnames)); + my $showtype; + if ($courses{$cid}{type} eq 'Community') { + $showtype = &mt('community'); + } else { + my $instcode = $courses{$cid}{inst_code}; + if ($instcode ne '') { + $showtype = &mt('official'); + } else { + $showtype = &mt('unofficial'); + } + } + my $showcontext; + + if ($courses{$cid}{context} =~ /^($context_regexp)$/) { + $showcontext = $contextnames->{$courses{$cid}{context}}; + } + my $created = &Apache::lonlocal::locallocaltime($courses{$cid}{'created'}); + my ($cdom,$cnum) = split('_',$cid); + $r->print(&Apache::loncommon::start_data_table_row()."\n". + ''.$count.''.$created.''."\n". + ''.$whodunit{$courses{$cid}{creator}}.''."\n". + ''.$description.' '.&mt('Syllabus').''.$ownerlastnames.''); + if (($curr{'type'} eq 'official') || ($curr{'type'} eq 'any')) { + $r->print(''.$courses{$cid}{'inst_code'}.''); + } + if ($curr{'type'} eq 'any') { + $r->print(''.$showtype.''); + } + if ($curr{'context'} eq 'any') { + $r->print(''.$showcontext.''); + } + $r->print(''.&Apache::loncommon::end_data_table_row()."\n"); + } + if ($showntablehdr) { + $r->print(&Apache::loncommon::end_data_table().'
'); + if (($curr{'page'} > 1) || ($more_records)) { + $r->print(''); + if ($curr{'page'} > 1) { + $r->print(''); + } + if ($more_records) { + $r->print(''); + } + $r->print('
'.&mt('Previous [_1] changes',$curr{'show'}).''.&mt('Next [_1] changes',$curr{'show'}).'
'); + $r->print(<<"ENDSCRIPT"); + +ENDSCRIPT + } + } else { + $r->print('

'. + &mt('There are no records to display'). + '

'); + } + $r->print(''. + '
'); + return; +} + +sub creation_display_filter { + my ($formname,$curr) = @_; + my $nolink = 1; + my ($contexts,$contextnames) = &context_names(); + my $output = ''; + my $startform = + &Apache::lonhtmlcommon::date_setter($formname,'created_after_date', + $curr->{'created_after_date'},undef, + undef,undef,undef,undef,undef,undef,$nolink); + my $endform = + &Apache::lonhtmlcommon::date_setter($formname,'created_before_date', + $curr->{'created_before_date'},undef, + undef,undef,undef,undef,undef,undef,$nolink); + $output .= ''. + ''; + my ($types,$typenames) = &Apache::loncommon::course_types(); + if (ref($types) eq 'ARRAY') { + if (@{$types} > 1) { + $output .= ''; + } + } + $output .= ''. + ''. + '
'. + ''.&mt('Records/page:').'
'. + &Apache::lonmeta::selectbox('show',$curr->{'show'},undef, + (&mt('all'),5,10,20,50,100,1000,10000)). + '
  '.&mt('Window during which course/community was created:').'
'. + ''. + ''. + '
'.&mt('After:'). + ''.$startform.'
'.&mt('Before:').''.$endform.'
'. + '
  '. + &mt('Course Type:').'
  '. + &mt('Creation Context:').'
'; + + # Update Display button + $output .= '

'. + ''. + '


'; + return $output; +} + +sub context_names { + my @contexts = qw(auto web dc_create requestcourses); + my %contextnames = + &Apache::lonlocal::texthash ( + auto => 'Automated creation from batch file', + web => 'Batch creation from uploaded file', + dc_create => 'Course or community created by Dom. Coord.', + requestcourses => 'Processing of submitted course request', + ); + return (\@contexts,\%contextnames); +} + +sub instcode_srchstr { + my ($domain,$numtitles) = @_; + my $instcode; + if (defined($numtitles) && $numtitles == 0) { + $instcode = '.+'; + } else { + my (%codedefaults,@code_order); + my $defaults_result = + &Apache::lonnet::auto_instcode_defaults($domain,\%codedefaults, + \@code_order); + if ($defaults_result eq 'ok') { + $instcode ='^'; + foreach my $item (@code_order) { + $instcode .= $codedefaults{$item}; + } + $instcode .= '$'; + } else { + $instcode = '.+'; + } + } + return $instcode; +} + +sub syllabuslink_javascript { + return <<"ENDJS"; + +function ToSyllabus(cdom,cnum) { + if (cdom == '' || cdom == null) { + return; + } + if (cnum == '' || cnum == null) { + return; + } + var options = 'height=600,width=800,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no'; + var url = "/public/"+cdom+"/"+cnum+"/syllabus"; + syllwin = window.open(url,'',options,1); + syllwin.focus(); + return; +} + +ENDJS + +} + # ===================================================================== Handler sub handler { my $r = shift; @@ -866,6 +1255,13 @@ 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; + } + if (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) { &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; @@ -878,7 +1274,8 @@ sub handler { text=>"Creation Options", faq=>79,bug=>'Dom Coord Interface',}); if (($env{'form.phase'} eq 'coursetwo') || - ($env{'form.phase'} eq 'grouptwo')) { + (($env{'form.phase'} eq 'grouptwo') && + ($show_all_choices))) { &Apache::lonhtmlcommon::add_breadcrumb ({href=>"/adm/createcourse?phase=$env{'form.prevphase'}", text=>&mt('[_1] Creation Settings',), @@ -889,7 +1286,8 @@ sub handler { faq=>9,bug=>'Dom Coord Interface',}); &create_course($r); } elsif (($env{'form.phase'} eq 'courseone') || - ($env{'form.phase'} eq 'groupone')) { + (($env{'form.phase'} eq 'groupone') && + ($show_all_choices))) { &Apache::lonhtmlcommon::add_breadcrumb ({href=>"/adm/createcourse?phase=$env{'form.phase'}", text=>&mt('[_1] Creation Settings',), @@ -911,12 +1309,84 @@ sub handler { text=>"Creation Outcome", faq=>9,bug=>'Dom Coord Interface',}); &process_batchfile($r); + } elsif (($env{'form.phase'} eq 'requestdisplay') && ($show_all_choices)) { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"/adm/createcourse?phase=$env{'form.phase'}", + text=>&mt('[_1] Display Request Queue',), + 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'); + $r->print($start_page.$crumbs."\n".'
'. + &Apache::loncoursequeueadmin::display_queued_requests( + 'domain',$env{'request.role.domain'}).'
'. + &Apache::loncommon::end_page()); + } elsif (($env{'form.phase'} eq 'requestchange') && ($show_all_choices)) { + if ($env{'form.queue'} eq 'pending') { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"/adm/createcourse?phase=pendingdisplay", + text=>&mt('Display Pending Queue',), + faq=>9,bug=>'Dom Coord Interface',}); + } else { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"/adm/createcourse?phase=requestdisplay", + text=>&mt('[_1] Display Request Queue',), + faq=>9,bug=>'Dom Coord Interface',}); + } + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"/adm/createcourse?phase=requestchange", + 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'); + $r->print($start_page.$crumbs."\n".'
'. + &Apache::loncoursequeueadmin::update_request_queue( + 'domain',$env{'request.role.domain'}).'
'. + &Apache::loncommon::end_page()); + } elsif (($env{'form.phase'} eq 'pendingdisplay') && ($show_all_choices)) { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"/adm/createcourse?phase=$env{'form.phase'}", + text=>&mt('Display Pending Queue',), + 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'); + $r->print($start_page.$crumbs."\n".'
'. + &Apache::loncoursequeueadmin::display_queued_requests( + 'pending',$env{'request.role.domain'}).'
'. + &Apache::loncommon::end_page()); + } elsif (($env{'form.phase'} eq 'requestvalidation') && ($show_all_choices)) { + my $js = &courserequestbrowser_javascript(); + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"/adm/createcourse?phase=pendingdisplay", + text=>&mt('Display Pending Queue'),}, + {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'); + $r->print($start_page.$crumbs."\n".'
'. + &Apache::loncoursequeueadmin::process_official_reqs('domain',$env{'request.role.domain'}).'
'. + &Apache::loncommon::end_page()); + } elsif (($env{'form.phase'} eq 'creationlog') && ($show_all_choices)) { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"/adm/createcourse?phase=creationlog", + text=>&mt('[_1] Display Creation History',),}); + my $js = ''; + my $start_page=&Apache::loncommon::start_page('Course/Community Creation Logs',$js); + 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); + &print_intro_page($r,$show_all_choices); } } else { $env{'user.error.msg'}= - "/adm/createcourse:ccc:0:0:Cannot create courses or groups"; + "/adm/createcourse:ccc:0:0:Cannot create courses or communities"; return HTTP_NOT_ACCEPTABLE; } return OK; 500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.