--- loncom/interface/coursecatalog.pm 2019/07/26 15:32:34 1.88.2.5 +++ loncom/interface/coursecatalog.pm 2021/06/20 17:49:08 1.88.2.8 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler for displaying the course catalog interface # -# $Id: coursecatalog.pm,v 1.88.2.5 2019/07/26 15:32:34 raeburn Exp $ +# $Id: coursecatalog.pm,v 1.88.2.8 2021/06/20 17:49:08 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -124,7 +124,7 @@ sub handler { } my $js = ''."\n"; $r->print(&Apache::loncommon::start_page('Search for a Course/Community',$js)); @@ -175,8 +175,14 @@ sub handler { $courseinfo{$codedom.'_'.$cnum}{$item}); if ($item eq 'title') { if ($courseinfo{$codedom.'_'.$cnum}{'showsyllabus'}) { + my $usehttp = 0; + if (($ENV{'SERVER_PORT'} == 443) && ($courseinfo{$codedom.'_'.$cnum}{'extsyllplain'})) { + unless (&Apache::lonnet::uses_sts()) { + $usehttp = 1; + } + } $r->print(' '. - ''. + ''. &mt('Syllabus').''); } } @@ -279,7 +285,7 @@ function setCourseId(caller) { } ENDSCRIPT - $catjs .= &courselink_javascript(); + $catjs .= &courselink_javascript($r); if (&user_is_dc($codedom) || $canviewall) { $catjs .= < "0", marginheight => "0",); my $js = ''."\n"; + &courselink_javascript($r).''."\n"; my $start_page = &Apache::loncommon::start_page('Course/Community Catalog',$js, {'add_entries' => \%add_entries, }); @@ -705,9 +711,11 @@ END } sub courselink_javascript { + my ($r) = @_; + my $hostname = $r->hostname(); return <<"END"; -function ToSyllabus(cdom,cnum) { +function ToSyllabus(cdom,cnum,usehttp) { if (cdom == '' || cdom == null) { return; } @@ -715,6 +723,13 @@ function ToSyllabus(cdom,cnum) { return; } document.linklaunch.action = "/public/"+cdom+"/"+cnum+"/syllabus"; + if (usehttp == 1) { + var hostname = '$hostname'; + if (hostname != '') { + document.linklaunch.action = 'http://'+hostname+document.linklaunch.action; + } + document.linklaunch.action += '?usehttp=1'; + } document.linklaunch.submit(); } @@ -1454,6 +1469,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(); @@ -1540,7 +1574,7 @@ sub build_courseinfo_hash { $cleandesc=~s/'/\\'/g; $cleandesc =~ s/^\s+//; my ($cdom,$cnum)=split(/\_/,$course); - my ($instcode,$singleowner,$ttype,$selfenroll_types, + my ($instcode,$singleowner,$ttype,$selfenroll_types,$extsyllplain, $selfenroll_start,$selfenroll_end,@owners,%ownernames,$categories); if (ref($courses->{$course}) eq 'HASH') { $descr = $courses->{$course}{'description'}; @@ -1551,6 +1585,7 @@ sub build_courseinfo_hash { $selfenroll_start = $courses->{$course}{'selfenroll_start_date'}; $selfenroll_end = $courses->{$course}{'selfenroll_end_date'}; $categories = $courses->{$course}{'categories'}; + $extsyllplain = $courses->{$course}{'extsyllplain'}; push(@owners,$singleowner); if ($courses->{$course}{'co-owners'} ne '') { foreach my $item (split(/,/,$courses->{$course}{'co-owners'})) { @@ -1594,6 +1629,7 @@ sub build_courseinfo_hash { $courseinfo{$course}{'selfenroll_start'} = $selfenroll_start; $courseinfo{$course}{'selfenroll_end'} = $selfenroll_end; $courseinfo{$course}{'categories'} = $categories; + $courseinfo{$course}{'extsyllplain'} = $extsyllplain; my %coursehash = &Apache::lonnet::dump('environment',$cdom,$cnum); my @classids; @@ -1778,7 +1814,8 @@ sub count_students { sub courseinfo_row { my ($info,$knownuser,$details,$countref,$now,$course,$trails,$allitems,$numbers,$canviewall) = @_; my ($cdom,$cnum,$title,$ownerlast,$code,$owner,$seclist,$xlist_items, - $accessdates,$showsyllabus,$counts,$autoenrollment,$output,$categories); + $accessdates,$showsyllabus,$counts,$autoenrollment,$output,$categories, + $extsyllplain); if (ref($info) eq 'HASH') { $cdom = $info->{'cdom'}; $cnum = $info->{'cnum'}; @@ -1792,6 +1829,7 @@ sub courseinfo_row { $counts = $info->{'counts'}; $autoenrollment = $info->{'autoenrollment'}; $showsyllabus = $info->{'showsyllabus'}; + $extsyllplain = $info->{'extsyllplain'}; $categories = $info->{'categories'}; } else { $output = ''.&mt('No information available for [_1].', @@ -1819,7 +1857,13 @@ sub courseinfo_row { ''.$xlist_items.''. ''.$title.' '; if ($showsyllabus) { - $output .= ''.&mt('Syllabus').''; + my $usehttp = 0; + if (($ENV{'SERVER_PORT'} == 443) && ($extsyllplain)) { + unless (&Apache::lonnet::uses_sts()) { + $usehttp = 1; + } + } + $output .= ''.&mt('Syllabus').''; } else { $output .= ' '; } @@ -1899,13 +1943,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); @@ -1914,9 +1964,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 ++; } @@ -1937,6 +1988,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'}}); }