--- loncom/interface/coursecatalog.pm 2021/12/12 21:47:58 1.88.2.9
+++ loncom/interface/coursecatalog.pm 2021/04/30 18:19:41 1.104
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler for displaying the course catalog interface
#
-# $Id: coursecatalog.pm,v 1.88.2.9 2021/12/12 21:47:58 raeburn Exp $
+# $Id: coursecatalog.pm,v 1.104 2021/04/30 18:19:41 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -57,7 +57,8 @@ sub handler {
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
['sortby','showdom']);
- my $codedom = &Apache::lonnet::default_login_domain();
+ my $serverdefdom = &Apache::lonnet::default_login_domain();
+ my $codedom = $serverdefdom;
my $hostname = $r->hostname();
if (($env{'user.domain'} ne '') && ($env{'user.domain'} ne 'public')) {
@@ -75,9 +76,22 @@ sub handler {
$env{'form.showdom'} = '';
}
}
- my $domdesc = &Apache::lonnet::domain($codedom,'description');
+ my $domdesc = &Apache::lonnet::domain($serverdefdom,'description');
&Apache::lonhtmlcommon::clear_breadcrumbs();
-
+
+ unless (($serverdefdom eq $codedom) ||
+ (&Apache::lonnet::will_trust('catalog',$serverdefdom,$codedom))) {
+ my $serverdomdesc = &Apache::lonnet::domain($serverdefdom,'description');
+ $r->print(&Apache::loncommon::start_page('Course/Community Catalog'));
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>"/adm/coursecatalog",
+ text=>"Course/Community Catalog"});
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs('Course/Community Catalog'));
+ $r->print('
'.&mt('Access to catalog LON-CAPA courses/communities unavailable for: "[_1]" on servers run by: "[_2]".',
+ $domdesc,$serverdomdesc).'
');
+ $r->print(&Apache::loncommon::end_page());
+ return OK;
+ }
my $crscats = &Apache::lonnet::get_dom_cats($codedom);
my %domdefaults = &Apache::lonnet::get_domain_defaults($codedom);
my $knownuser = &user_is_known();
@@ -357,6 +371,8 @@ ENDJS
my $display_button;
if ($env{'form.currcat_0'} eq 'communities::0') {
$display_button = &mt('Display communities');
+ } elsif ($env{'form.currcat_0'} eq 'placement::0') {
+ $display_button = &mt('Display placement tests');
} else {
$display_button = &mt('Display courses');
}
@@ -663,9 +679,18 @@ sub course_details {
}
my $brtextone = 'Course listing';
my $brtexttwo = 'Course details';
+ my $textthree = &mt('Detailed course information:');
+ my $textfour = &mt('Back to course listing');
if ($env{'form.currcat_0'} eq 'communities::0') {
$brtextone = 'Community listing';
$brtexttwo = 'Community details';
+ $textthree = &mt('Detailed community information:');
+ $textfour = &mt('Back to community listing');
+ } elsif ($env{'form.currcat_0'} eq 'placement::0') {
+ $brtextone = 'Placement test listing';
+ $brtexttwo = 'Placement test details';
+ $textthree = &mt('Detailed placement test information:');
+ $textfour = &mt('Back to placement test listing');
}
&Apache::lonhtmlcommon::add_breadcrumb
({href=>"javascript:document.$formname.submit()",
@@ -673,20 +698,12 @@ sub course_details {
{text=>$brtexttwo});
$r->print(
&Apache::lonhtmlcommon::breadcrumbs('Course/Community Catalog').
- ''.
- (($env{'form.currcat_0'} eq 'communities::0') ?
- &mt('Detailed community information:') :
- &mt('Detailed course information:')).
- '
'.
+ ''.$textthree.'
'.
&print_course_listing($codedom,undef,$trails,$allitems,undef,$codetitles,undef,$hostname).
'
'.
'');
@@ -814,6 +831,8 @@ sub cat_header {
my $brtext = 'Course listing';
if ($env{'form.currcat_0'} eq 'communities::0') {
$brtext = 'Community listing';
+ } elsif ($env{'form.currcat_0'} eq 'placement::0') {
+ $brtext = 'Placement test listing';
}
if ($env{'form.state'} eq 'listing') {
if ($numtitles > 0) {
@@ -867,6 +886,9 @@ sub category_breadcrumbs {
} elsif ($cats[0][0] eq 'communities') {
$catlinks .= &mt('Communities');
$env{'form.currcat_0'} = 'communities::0';
+ } elsif ($cats[0][0] eq 'placement') {
+ $catlinks .= &mt('Placement Tests');
+ $env{'form.currcat_0'} = 'placement::0';
} else {
my $name = $cats[0][0];
my $item = &escape($name).'::0';
@@ -971,6 +993,8 @@ sub main_category_selector {
$maincatlinks .= &mt('Official courses (with institutional codes)');
} elsif ($name eq 'communities') {
$maincatlinks .= &mt('Communities');
+ } elsif ($name eq 'placement') {
+ $maincatlinks .= &mt('Placement Tests');
} else {
$maincatlinks .= $name;
}
@@ -1033,6 +1057,8 @@ sub additional_filters {
my $selfenroll_text;
if ($env{'form.currcat_0'} eq 'communities::0') {
$selfenroll_text = &mt('Only show communities which currently allow self-enrollment (or will allow it in the future)');
+ } elsif ($env{'form.currcat_0'} eq 'placement::0') {
+ $selfenroll_text = &mt('Only show placement tests which currently allow self-enrollment (or will allow it in the future)');
} else {
$selfenroll_text = &mt('Only show courses which currently allow self-enrollment (or will allow it in the future)');
}
@@ -1066,6 +1092,9 @@ sub additional_filters {
if ($env{'form.currcat_0'} eq 'communities::0') {
$details_text = &mt('Show full details for each community (domain staff only)');
$hidden_text = &mt('Include communities set to be hidden from catalog (domain staff only)');
+ } elsif ($env{'form.currcat_0'} eq 'placement::0') {
+ $details_text = &mt('Show full details for each placement test (domain staff only)');
+ $hidden_text = &mt('Include placement tests set to be hidden from catalog (domain staff only)');
} else {
$details_text = &mt('Show full details for each course (domain staff only)');
$hidden_text = &mt('Include courses set to be hidden from catalog (domain staff only)');
@@ -1279,6 +1308,8 @@ sub search_courselist {
}
if ($env{'form.currcat_0'} eq 'communities::0') {
$typefilter = 'Community';
+ } elsif ($env{'form.currcat_0'} eq 'placement::0') {
+ $typefilter = 'Placement';
} else {
$typefilter = '.';
}
@@ -1310,7 +1341,9 @@ sub print_course_listing {
$output = '';
if ($env{'form.currcat_0'} eq 'communities::0') {
$output .= &mt('The courseID provided does not match a community in this domain.');
- } else {
+ } elsif ($env{'form.currcat_0'} eq 'placement::0') {
+ $output .= &mt('The courseID provided does not match a placement test in this domain.');
+ } else {
$output .= &mt('The courseID provided does not match a course in this domain.');
}
$output .= '
';
@@ -1326,6 +1359,8 @@ sub print_course_listing {
$output = '';
if ($env{'form.currcat_0'} eq 'communities::0') {
$output .= &mt('No communities match the criteria you selected.');
+ } elsif ($env{'form.currcat_0'} eq 'placement::0') {
+ $output .= &mt('No placement tests match the criteria you selected.');
} else {
$output .= &mt('No courses match the criteria you selected.');
}
@@ -1387,6 +1422,10 @@ sub construct_data_table {
if ($env{'form.currcat_0'} eq 'communities::0') {
$output .= '
'.&mt('Default Access Dates for Members').' | '.
''.&mt('Member Counts').' | ';
+ } elsif ($env{'form.currcat_0'} eq 'placement::0') {
+ $output .=
+ ''.&mt('Default Access Dates for Students').' | '.
+ ''.&mt('Student Counts').' | ';
} else {
$output .=
''.&mt('Default Access Dates for Students').' | '.
@@ -1434,7 +1473,7 @@ sub construct_data_table {
my (%numbers,%creditsum);
my ($showcredits,$defofficial,$defunofficial,$deftextbook);
my %domdefaults = &Apache::lonnet::get_domain_defaults($domain);
- unless ($env{'form.currcat_0'} eq 'communities::0') {
+ unless (($env{'form.currcat_0'} eq 'communities::0') || ($env{'form.currcat_0'} eq 'placement::0')) {
if ($domdefaults{'officialcredits'} || $domdefaults{'unofficialcredits'} || $domdefaults{'textbookcredits'}) {
$showcredits = 1;
$defofficial = $domdefaults{'officialcredits'};
@@ -1472,25 +1511,6 @@ 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();
@@ -1520,6 +1540,8 @@ sub construct_data_table {
$lt{'Active'} = &mt('Total current members');
$lt{'Future'} = &mt('Total future members');
$lt{'Previous'} = &mt('Total previous members');
+ } elsif ($env{'form.currcat_0'} eq 'placement::0') {
+ $lt{'courses'} = &mt('Total placement tests');
}
my $colspan = 8;
if ($showcredits) {
@@ -1880,7 +1902,7 @@ sub courseinfo_row {
$output .=
''.$accessdates.' | '.
''.$counts.' | ';
- unless ($env{'form.currcat_0'} eq 'communities::0') {
+ unless (($env{'form.currcat_0'} eq 'communities::0') || ($env{'form.currcat_0'} eq 'placement::0')) {
$output .= ''.$autoenrollment.' | ';
}
} else {
@@ -1949,19 +1971,13 @@ sub identify_sections {
sub get_valid_classes {
my ($seclist,$xlist_items,$crscode,$owners,$cdom,$cnum) = @_;
my $response;
- my (@sections,@format_sections,@xlists,%possclasses,%okclasses,%validations);
+ my (@sections,@xlists,%possclasses,%okclasses,%validations);
@{$validations{'sections'}} = ();
@{$validations{'xlists'}} = ();
my $totalitems = 0;
if ($seclist) {
@sections = split(/,\s+/,$seclist);
- 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;
- }
+ map { $possclasses{$crscode.$_} = 1; } @sections;
}
if ($xlist_items) {
@xlists = split(/,\s+/,$xlist_items);
@@ -1970,10 +1986,9 @@ sub get_valid_classes {
my %okclasses = &Apache::lonnet::auto_validate_instclasses($cdom,$cnum,$owners,
\%possclasses);
if (keys(%okclasses)) {
- for (my $i=0; $i<@sections; $i++) {
- if ($okclasses{$crscode.$format_sections[$i]}) {
- my $sec = $sections[$i];
- if (!grep(/^\Q$sec\E$/,@{$validations{'sections'}})) {
+ foreach my $sec (@sections) {
+ if ($okclasses{$crscode.$sec}) {
+ if (!grep(/^\Q$sec$\E/,@{$validations{'sections'}})) {
push(@{$validations{'sections'}},$sec);
$totalitems ++;
}
@@ -1994,13 +2009,6 @@ 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'}});
}