--- loncom/interface/coursecatalog.pm 2021/04/29 17:45:22 1.103 +++ loncom/interface/coursecatalog.pm 2021/06/15 20:52:26 1.105 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler for displaying the course catalog interface # -# $Id: coursecatalog.pm,v 1.103 2021/04/29 17:45:22 raeburn Exp $ +# $Id: coursecatalog.pm,v 1.105 2021/06/15 20:52:26 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -337,7 +337,7 @@ ENDTOGGJS $catlinks,$catjs,\@codetitles,$cattype,$canviewall); if ($env{'form.state'} eq 'listing') { $r->print(&print_course_listing($codedom,$numtitles,undef,undef,undef, - \@codetitles,$canviewall)); + \@codetitles,$canviewall,$hostname)); } } else { my (%add_entries); @@ -386,7 +386,7 @@ ENDJS } if ($env{'form.state'} eq 'listing') { $r->print(&print_course_listing($codedom,undef,\@trails,\%allitems,$subcats,\@codetitles, - $canviewall)); + $canviewall,$hostname)); } } } @@ -699,7 +699,7 @@ sub course_details { $r->print( &Apache::lonhtmlcommon::breadcrumbs('Course/Community Catalog'). '

'.$textthree.'

'. - &print_course_listing($codedom,undef,$trails,$allitems,undef,$codetitles). + &print_course_listing($codedom,undef,$trails,$allitems,undef,$codetitles,undef,$hostname). '
'. '
'. &Apache::lonhtmlcommon::actionbox([ @@ -1322,7 +1322,7 @@ sub search_courselist { } sub print_course_listing { - my ($domain,$numtitles,$trails,$allitems,$subcats,$codetitles,$canviewall) = @_; + my ($domain,$numtitles,$trails,$allitems,$subcats,$codetitles,$canviewall,$hostname) = @_; my $output; my %courses; my $knownuser = &user_is_known(); @@ -1375,7 +1375,7 @@ sub print_course_listing { } my $now = time; $output .= &construct_data_table($knownuser,$domain,\%courses,$details,undef, - $now,$trails,$allitems,$canviewall); + $now,$trails,$allitems,$canviewall,$hostname); $output .= "\n".''. ''. ''. @@ -1384,7 +1384,8 @@ sub print_course_listing { } sub construct_data_table { - my ($knownuser,$domain,$courses,$details,$usersections,$now,$trails,$allitems,$canviewall) = @_; + my ($knownuser,$domain,$courses,$details,$usersections,$now, + $trails,$allitems,$canviewall,$hostname) = @_; my %sortname; if (($details eq '') || ($env{'form.showdetails'})) { $sortname{'Code'} = 'code'; @@ -1510,6 +1511,25 @@ sub construct_data_table { } my $count = 1; my $totalsec = 0; + my %clutteredxlists; + foreach my $course (keys(%courseinfo)) { + if (ref($courseinfo{$course}) eq 'HASH') { + if ($courseinfo{$course}{'xlist'} ne '') { + my $crskey = $courseinfo{$course}{'cnum'}.':'.$courseinfo{$course}{'code'}; + my @xlists = split(/,\s/,$courseinfo{$course}{'xlist'}); + $clutteredxlists{$crskey} = \@xlists; + } + } + } + if (keys(%clutteredxlists)) { + my %reformattedxlists = &Apache::lonnet::auto_instsec_reformat($domain,'declutter',\%clutteredxlists); + foreach my $crskey (keys(%reformattedxlists)) { + if (ref($reformattedxlists{$crskey}) eq 'ARRAY') { + my $course = $domain.'_'.(split(/:/,$crskey))[0]; + $courseinfo{$course}{'xlist'} = join(', ',@{$reformattedxlists{$crskey}}); + } + } + } foreach my $item (@sorted_courses) { foreach my $course (@{$Sortby{$item}}) { $output.=&Apache::loncommon::start_data_table_row(); @@ -1886,7 +1906,7 @@ sub courseinfo_row { my $usehttp = 0; if (($ENV{'SERVER_PORT'} == 443) && ($extsyllplain)) { unless ((&Apache::lonnet::uses_sts()) || - (&Apache::lonnet::waf_allssl(hostname))) { + (&Apache::lonnet::waf_allssl($hostname))) { $usehttp = 1; } } @@ -1970,13 +1990,19 @@ sub identify_sections { sub get_valid_classes { my ($seclist,$xlist_items,$crscode,$owners,$cdom,$cnum) = @_; my $response; - my (@sections,@xlists,%possclasses,%okclasses,%validations); + my (@sections,@format_sections,@xlists,%possclasses,%okclasses,%validations); @{$validations{'sections'}} = (); @{$validations{'xlists'}} = (); my $totalitems = 0; if ($seclist) { @sections = split(/,\s+/,$seclist); - map { $possclasses{$crscode.$_} = 1; } @sections; + my $crskey = $cnum.':'.$crscode; + my %formattedsec = &Apache::lonnet::auto_instsec_reformat($cdom,'clutter', + {$crskey => \@sections}); + if (ref($formattedsec{$crskey}) eq 'ARRAY') { + @format_sections = @{$formattedsec{$crskey}}; + map { $possclasses{$crscode.$_} = 1; } @format_sections; + } } if ($xlist_items) { @xlists = split(/,\s+/,$xlist_items); @@ -1985,9 +2011,10 @@ sub get_valid_classes { my %okclasses = &Apache::lonnet::auto_validate_instclasses($cdom,$cnum,$owners, \%possclasses); if (keys(%okclasses)) { - foreach my $sec (@sections) { - if ($okclasses{$crscode.$sec}) { - if (!grep(/^\Q$sec$\E/,@{$validations{'sections'}})) { + for (my $i=0; $i<@sections; $i++) { + if ($okclasses{$crscode.$format_sections[$i]}) { + my $sec = $sections[$i]; + if (!grep(/^\Q$sec\E$/,@{$validations{'sections'}})) { push(@{$validations{'sections'}},$sec); $totalitems ++; } @@ -2008,6 +2035,13 @@ sub get_valid_classes { join(', ',@{$validations{'sections'}}).'
'; } if (@{$validations{'xlists'}}) { + my $crskey = $cnum.':'.$crscode; + my %reformattedxlists = + &Apache::lonnet::auto_instsec_reformat($cdom,'declutter', + {$crskey => $validations{'xlists'}}); + if (ref($reformattedxlists{$crskey}) eq 'ARRAY') { + $validations{'xlists'} = $reformattedxlists{$crskey}; + } $response .= &mt('Courses:').' '. join(', ',@{$validations{'xlists'}}); }