--- loncom/interface/lonsearchcourse.pm 2011/01/17 20:18:02 1.1 +++ loncom/interface/lonsearchcourse.pm 2024/02/11 21:41:48 1.10 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Search Course # -# $Id: lonsearchcourse.pm,v 1.1 2011/01/17 20:18:02 www Exp $ +# $Id: lonsearchcourse.pm,v 1.10 2024/02/11 21:41:48 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -41,7 +41,7 @@ use Apache::lonlocal; use LONCAPA::lonmetadata(); use HTML::Entities(); use Apache::lonnavmaps; -use Apache::londocs(); +use Apache::lonnavdisplay(); use Apache::lonindexer(); use LONCAPA; @@ -54,47 +54,32 @@ my $totalfound; sub menu { my $scrout=''; if ($env{'request.course.id'}) { - my %lt=&Apache::lonlocal::texthash('srch' => 'Search', - 'header' => 'Course Search', - 'note' => 'Enter terms or phrases, then press "Search" below', + my %lt=&Apache::lonlocal::texthash( + 'srch' => 'Search', + 'note' => 'Search terms', + 'options' => 'Options', 'use' => 'use related words', 'full' =>'fulltext search (time consuming)', 'disc' => 'search discussion postings (resources and discussion boards)', ); $scrout.=(< -
-
-

$lt{'header'}

-

-$lt{'note'}. -

- - - - - -
ENDCOURSESEARCH - $scrout.=' '. - &Apache::lonhtmlcommon::textbox('courseexp', - $env{'form.courseexp'},40); - my $crscheckbox = - &Apache::lonhtmlcommon::checkbox('crsfulltext', - $env{'form.crsfulltext'}); - my $relcheckbox = - &Apache::lonhtmlcommon::checkbox('crsrelated', - $env{'form.crsrelated'}); - my $discheckbox = - &Apache::lonhtmlcommon::checkbox('crsdiscuss', - $env{'form.crsrelated'}); + $scrout.=&Apache::lonhtmlcommon::start_pick_box(). + &Apache::lonhtmlcommon::row_title($lt{'note'}). + &Apache::lonhtmlcommon::textbox('courseexp', + $env{'form.courseexp'},40). + &Apache::lonhtmlcommon::row_closure(). + &Apache::lonhtmlcommon::row_title($lt{'options'}). + '
\n". + '
\n". + '
\n". + &Apache::lonhtmlcommon::end_pick_box(); $scrout.=(<

-
ENDENDCOURSE } @@ -151,8 +136,15 @@ sub course_search { foreach (sort(keys(%hash))) { if ($c->aborted()) { last; } if (($_=~/^src\_(.+)$/)) { - if ($hash{'randomout_'.$1} & !$env{'request.role.adv'}) { - next; + 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), @@ -243,9 +235,6 @@ sub course_search { $r->print('
'.&mt('An error occurred retrieving information about resources in the course.').'
'.&mt('It is recommended that you [_1]re-initialize the course[_2] and then try your search again.','','').'
'); } } - -# =================================================== Done going through course - $r->print(&Apache::loncommon::end_page()); } # =============================== This pulls up a resource and its dependencies @@ -279,10 +268,18 @@ sub checkonthis { } my $href=$url; if ($hash{'encrypted_'.$id} && !$env{'request.role.adv'}) { - $href=&Apache::lonenc::encrypted($href) - .'?symb='.&Apache::lonenc::encrypted($symb); + $href=&Apache::lonenc::encrypted($href); + if ($url =~ /\.sequence$/) { + $href .= '?navmap=1'; + } else { + $href .= '?symb='.&Apache::lonenc::encrypted($symb); + } } else { - $href.='?symb='.&escape($symb); + if ($href =~ /\.sequence$/) { + $href .= '?navmap=1'; + } else { + $href .= '?symb='.&escape($symb); + } } $r->print(''.($title?$title:$url). '
'); @@ -327,16 +324,49 @@ sub handler { my $crstype = &Apache::loncommon::course_type(); &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['phase']); - &Apache::lonhtmlcommon::clear_breadcrumbs(); $r->print(&Apache::loncommon::start_page("$crstype Search")); - $r->print(&Apache::lonhtmlcommon::breadcrumbs("$crstype Search")); - &Apache::londocs::startContentScreen($r,'coursesearch'); + &Apache::lonhtmlcommon::clear_breadcrumbs(); + if ($env{'request.course.id'} eq '') { + $r->print(&Apache::lonhtmlcommon::breadcrumbs("$crstype Search")); + $r->print(&Apache::loncommon::end_page()); + my $requrl = $r->uri; + $env{'user.error.msg'} = "$requrl:bre:0:0:Course not initialized"; + $env{'user.reinit'} = 1; + return HTTP_NOT_ACCEPTABLE; + } + &Apache::lonhtmlcommon::add_breadcrumb( + { href => '/adm/searchcourse', + text => "$crstype Search"}); if ($env{'form.phase'} eq 'results') { - &course_search($r); + &Apache::lonhtmlcommon::add_breadcrumb( + { href => '/adm/searchcourse?phase=results', + text => 'Search Results'}); + } + $r->print(&Apache::lonhtmlcommon::breadcrumbs("$crstype Search")); + &Apache::lonnavdisplay::startContentScreen($r,'coursesearch'); + my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; + my $clientip = &Apache::lonnet::get_requestor_ip($r); + my ($blocked,$blocktext) = + &Apache::loncommon::blocking_status('search',$clientip,$cnum,$cdom); + if ($blocked) { + my $checkrole = "cm./$cdom/$cnum"; + if ($env{'request.course.sec'} ne '') { + $checkrole .= "/$env{'request.course.sec'}"; + } + if ((&Apache::lonnet::allowed('evb',undef,undef,$checkrole)) && + ($env{'request.role'} !~ m{^st\./$cdom/$cnum})) { + undef($blocked); + } + } + if ($blocked) { + $r->print($blocktext); + } elsif ($env{'form.phase'} eq 'results') { + &course_search($r); } else { - $r->print(&menu()); + $r->print(&menu()); } - &Apache::londocs::endContentScreen($r); + &Apache::lonnavdisplay::endContentScreen($r); $r->print(&Apache::loncommon::end_page()); return OK; }