--- loncom/interface/coursecatalog.pm 2017/08/07 20:22:12 1.93
+++ loncom/interface/coursecatalog.pm 2025/02/24 13:40:33 1.107
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler for displaying the course catalog interface
#
-# $Id: coursecatalog.pm,v 1.93 2017/08/07 20:22:12 raeburn Exp $
+# $Id: coursecatalog.pm,v 1.107 2025/02/24 13:40:33 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -59,6 +59,7 @@ sub handler {
my $serverdefdom = &Apache::lonnet::default_login_domain();
my $codedom = $serverdefdom;
+ my $hostname = $r->hostname();
if (($env{'user.domain'} ne '') && ($env{'user.domain'} ne 'public')) {
$codedom = $env{'user.domain'};
@@ -77,7 +78,9 @@ sub handler {
}
my $domdesc = &Apache::lonnet::domain($serverdefdom,'description');
&Apache::lonhtmlcommon::clear_breadcrumbs();
- if (&Apache::lonnet::notcallable('catalog',$codedom)) {
+
+ 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
@@ -89,24 +92,23 @@ sub handler {
$r->print(&Apache::loncommon::end_page());
return OK;
}
- my %domconfig =
- &Apache::lonnet::get_dom('configuration',['coursecategories'],$codedom);
+ my $crscats = &Apache::lonnet::get_dom_cats($codedom);
+ my %domdefaults = &Apache::lonnet::get_domain_defaults($codedom);
my $knownuser = &user_is_known();
my $canviewall = &canview_all($knownuser,$codedom);
my ($cathash,$cattype);
- if (ref($domconfig{'coursecategories'}) eq 'HASH') {
- $cathash = $domconfig{'coursecategories'}{'cats'};
- if ($knownuser || $canviewall) {
- $cattype = $domconfig{'coursecategories'}{'auth'};
- } else {
- $cattype = $domconfig{'coursecategories'}{'unauth'};
- }
- if ($cattype eq '') {
- $cattype = 'std';
- }
+ if (ref($crscats) eq 'HASH') {
+ %{$cathash} = %{$crscats};
} else {
$cathash = {};
+ }
+ if ($knownuser || $canviewall) {
+ $cattype = $domdefaults{'catauth'};
+ } else {
+ $cattype = $domdefaults{'catunauth'};
+ }
+ if ($cattype eq '') {
$cattype = 'std';
}
if ($cattype eq 'none') {
@@ -118,7 +120,7 @@ sub handler {
if ($knownuser || $canviewall) {
$r->print('
'.&mt('No catalog of LON-CAPA courses/communities is provided for: [_1]',$domdesc).'
');
} else {
- if ($domconfig{'coursecategories'}{'auth'} eq 'none') {
+ if ($domdefaults{'catauth'} eq 'none') {
$r->print(''.&mt('No catalog of LON-CAPA courses/communities is provided for: [_1]',$domdesc).'
');
} else {
$r->print(''.&mt('The catalog of LON-CAPA courses/communities provided for: "[_1]" is only available to users who are logged in.',$domdesc).'
');
@@ -128,7 +130,7 @@ sub handler {
return OK;
}
- my $cnum;
+ my $cnum;
if ($cattype eq 'codesrch') {
my ($uniquecode,$codemsg,$brtext);
if ($env{'form.uniquecode'}) {
@@ -137,7 +139,7 @@ sub handler {
}
my $js = ''."\n";
$r->print(&Apache::loncommon::start_page('Search for a Course/Community',$js));
@@ -190,7 +192,10 @@ sub handler {
if ($courseinfo{$codedom.'_'.$cnum}{'showsyllabus'}) {
my $usehttp = 0;
if (($ENV{'SERVER_PORT'} == 443) && ($courseinfo{$codedom.'_'.$cnum}{'extsyllplain'})) {
- $usehttp = 1;
+ unless ((&Apache::lonnet::uses_sts()) ||
+ (&Apache::lonnet::waf_allssl($hostname))) {
+ $usehttp = 1;
+ }
}
$r->print(' '.
''.
@@ -223,33 +228,64 @@ sub handler {
$r->print('
'.&Apache::loncommon::end_page());
return OK;
} else {
- if ($env{'form.coursenum'}) {
- $cnum = $env{'form.coursenum'};
+ if ($env{'form.coursenum'} ne '') {
+ if ($env{'form.coursenum'} =~ /^$LONCAPA::match_courseid$/) {
+ $cnum = $env{'form.coursenum'};
+ } else {
+ delete($env{'form.coursenum'});
+ }
}
}
- if ($env{'form.catalog_maxdepth'} ne '') {
- $env{'form.catalog_maxdepth'} =~ s{\D}{}g;
- }
-
- my (@cats,@trails,%allitems,%idx,@jsarray,%subcathash,$subcats);
+ my (@cats,@trails,%allitems,%idx,@jsarray,%subcathash,$subcats,%maxd,
+ $toplevelstr,$maxdepthstr);
if ($env{'form.withsubcats'}) {
$subcats = \%subcathash;
}
&Apache::loncommon::extract_categories($cathash,\@cats,\@trails,\%allitems,
- \%idx,\@jsarray,$subcats);
+ \%idx,\@jsarray,$subcats,\%maxd);
+ if (ref($cats[0]) eq 'ARRAY') {
+ foreach my $item (@{$cats[0]}) {
+ $toplevelstr .= "'".&js_escape($item)."::0',";
+ $maxdepthstr .= "'$maxd{$item}',";
+ }
+ $toplevelstr =~ s/,$//;
+ $maxdepthstr =~ s/,$//;
+ }
+ &validate_input($codedom,\@cats,\%maxd,$cathash);
my ($numtitles,@codetitles);
if (($env{'form.coursenum'} ne '') && ($knownuser)) {
- &course_details($r,$codedom,$formname,$domdesc,\@trails,\%allitems,\@codetitles);
+ &course_details($r,$codedom,$formname,$domdesc,$hostname,\@trails,
+ \%allitems,\@codetitles);
} else {
my ($catlinks,$has_subcats,$selitem) = &category_breadcrumbs($codedom,@cats);
my $wasacctext = &get_wasactive_text();
my $catjs = <<"ENDSCRIPT";
function setCatDepth(depth) {
- document.coursecats.catalog_maxdepth.value = depth;
- if (depth == '') {
+ var depth = parseInt(depth);
+ if (depth !== NaN) {
+ if (depth > 0) {
+ var possmaxd = 0;
+ var toplevel = new Array($toplevelstr);
+ var maxdepths = new Array($maxdepthstr);
+ if (toplevel.length) {
+ for (var i=0; i possmaxd) {
+ depth = possmaxd;
+ }
+ }
+ document.coursecats.catalog_maxdepth.value = depth;
+ } else {
document.coursecats.currcat_0.value = '';
+ document.coursecats.catalog_maxdepth.value = '';
}
document.coursecats.submit();
return;
@@ -266,7 +302,7 @@ function setCourseId(caller) {
}
ENDSCRIPT
- $catjs .= &courselink_javascript($r);
+ $catjs .= &courselink_javascript($hostname);
if (&user_is_dc($codedom) || $canviewall) {
$catjs .= <print(&print_course_listing($codedom,$numtitles,undef,undef,undef,
- \@codetitles,$canviewall));
+ \@codetitles,$canviewall,$hostname));
}
} else {
my (%add_entries);
@@ -321,8 +357,12 @@ function check_selected() {
}
ENDJS
}
- $catjs = '';
- &cat_header($r,$codedom,$catjs,\%add_entries,$catlinks,undef,$cattype);
+ my $js = '';
+ &cat_header($r,$codedom,$js,\%add_entries,$catlinks,undef,$cattype);
if ($env{'form.currcat_0'} ne '') {
$r->print('