--- loncom/interface/lonsearchcourse.pm 2024/02/11 20:32:42 1.8
+++ loncom/interface/lonsearchcourse.pm 2025/02/04 03:07:44 1.15
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Search Course
#
-# $Id: lonsearchcourse.pm,v 1.8 2024/02/11 20:32:42 raeburn Exp $
+# $Id: lonsearchcourse.pm,v 1.15 2025/02/04 03:07:44 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -67,9 +67,10 @@ sub menu {
ENDCOURSESEARCH
$scrout.=&Apache::lonhtmlcommon::start_pick_box().
- &Apache::lonhtmlcommon::row_title($lt{'note'}).
+ &Apache::lonhtmlcommon::row_title('').
&Apache::lonhtmlcommon::textbox('courseexp',
- $env{'form.courseexp'},40).
+ $env{'form.courseexp'},40,'id="courseexp"').
&Apache::lonhtmlcommon::row_closure().
&Apache::lonhtmlcommon::row_title($lt{'options'}).
'
\n".
@@ -123,6 +124,11 @@ sub course_search {
my $discuss=$env{'form.crsdiscuss'};
my @allwords=($search_string,@New_Words);
$totalfound=0;
+ my $target = 'cat';
+ if ((($env{'request.lti.login'}) && ($env{'request.lti.target'} eq 'iframe')) ||
+ (($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'} eq '_self'))) {
+ $target = '_self';
+ }
$r->print(
'
'.
@@ -133,15 +139,22 @@ sub course_search {
my $c=$r->connection;
if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.".db",
&GDBM_READER(),0640)) {
- foreach (sort(keys(%hash))) {
- if ($c->aborted()) { last; }
- if (($_=~/^src\_(.+)$/)) {
- if ($hash{'randomout_'.$1} & !$env{'request.role.adv'}) {
- next;
+ foreach my $key (sort(keys(%hash))) {
+ last if ($c->aborted());
+ if ($key =~ /^src\_(.+)$/) {
+ my $rid = $1;
+ unless ($env{'request.role.adv'}) {
+ next if ($hash{'randomout_'.$rid} || $hash{'deeplinkout_'.$rid});
+ if (!$env{'request.deeplink.login'} && $hash{'deeplinkonly_'.$rid}) {
+ my ($value) = map { &unescape($_); } split(/:/,$hash{'deeplinkonly_'.$rid});
+ my ($state,$others,$listed) = split(/,/,$value);
+ next if (($state eq 'only') &&
+ (($listed eq 'absent') || ($listed eq 'grades')));
+ }
}
- my $symb=&make_symb($1);
- &checkonthis($r,$1,$hash{$_},0,&Apache::lonnet::gettitle($symb),
- $fulltext,$symb,@allwords);
+ my $symb=&make_symb($rid);
+ &checkonthis($r,$rid,$hash{$key},0,&Apache::lonnet::gettitle($symb),
+ $fulltext,$symb,$target,@allwords);
}
}
untie(%hash);
@@ -213,7 +226,7 @@ sub course_search {
}
$url .= &escape($resource->symb());
my $title = $resource->compTitle();
- $r->print('
'.
+ $r->print('
'.
($title?$title:$url).' - '.
$disctype.'
');
$totaldiscussions++;
@@ -233,7 +246,7 @@ sub course_search {
# =============================== This pulls up a resource and its dependencies
sub checkonthis {
- my ($r,$id,$url,$level,$title,$fulltext,$symb,@allwords)=@_;
+ my ($r,$id,$url,$level,$title,$fulltext,$symb,$target,@allwords)=@_;
$alreadyseen{$id}=1;
if (&Apache::loncommon::connection_aborted($r)) { return; }
$r->rflush();
@@ -262,7 +275,7 @@ sub checkonthis {
my $href=$url;
if ($hash{'encrypted_'.$id} && !$env{'request.role.adv'}) {
$href=&Apache::lonenc::encrypted($href);
- if ($href =~ /\.sequence$/) {
+ if ($url =~ /\.sequence$/) {
$href .= '?navmap=1';
} else {
$href .= '?symb='.&Apache::lonenc::encrypted($symb);
@@ -274,7 +287,7 @@ sub checkonthis {
$href .= '?symb='.&escape($symb);
}
}
- $r->print(''.($title?$title:$url).
+ $r->print(''.($title?$title:$url).
'
');
$totalfound++;
} elsif ($fulltext) {
@@ -284,18 +297,18 @@ sub checkonthis {
# Check also the dependencies of this one
my $dependencies=
&Apache::lonnet::metadata($url,'dependencies');
- foreach (split(/\,/,$dependencies)) {
- if (($_=~/^\/res\//) && (!$alreadyseen{$id})) {
- &checkonthis($r,$id,$_,$level+1,'',$fulltext,undef,@allwords);
+ foreach my $item (split(/\,/,$dependencies)) {
+ if (($item =~ /^\/res\//) && (!$alreadyseen{$id})) {
+ &checkonthis($r,$id,$item,$level+1,'',$fulltext,undef,$target,@allwords);
}
}
}
sub checkwords {
my ($result,$applies,@allwords) = @_;
- foreach (@allwords) {
- if ($_=~/\w/) {
- if ($result=~/$_/si) {
+ foreach my $word (@allwords) {
+ if ($word =~ /\w/) {
+ if ($result =~ /$word/si) {
$applies++;
}
}