[LON-CAPA-cvs] cvs: loncom / loncapa_apache.conf /interface londocs.pm lonsearchcat.pm lonsearchcourse.pm doc/loncapafiles loncapafiles.lpml
www
www@source.lon-capa.org
Mon, 17 Jan 2011 20:18:02 -0000
This is a MIME encoded message
--www1295295482
Content-Type: text/plain
www Mon Jan 17 20:18:02 2011 EDT
Added files:
/loncom/interface lonsearchcourse.pm
Modified files:
/doc/loncapafiles loncapafiles.lpml
/loncom loncapa_apache.conf
/loncom/interface londocs.pm lonsearchcat.pm
Log:
"Search Course" was only inside of searchcat because the Remote did not
have enough buttons.
Separate the two, incorporate content search under "Content"
Declutter lonsearchcat a little bit before necessary major cleanup.
--www1295295482
Content-Type: text/plain
Content-Disposition: attachment; filename="www-20110117201802.txt"
Index: doc/loncapafiles/loncapafiles.lpml
diff -u doc/loncapafiles/loncapafiles.lpml:1.723 doc/loncapafiles/loncapafiles.lpml:1.724
--- doc/loncapafiles/loncapafiles.lpml:1.723 Sun Jan 16 22:44:59 2011
+++ doc/loncapafiles/loncapafiles.lpml Mon Jan 17 20:17:55 2011
@@ -2,7 +2,7 @@
"http://lpml.sourceforge.net/DTD/lpml.dtd">
<!-- loncapafiles.lpml -->
-<!-- $Id: loncapafiles.lpml,v 1.723 2011/01/16 22:44:59 www Exp $ -->
+<!-- $Id: loncapafiles.lpml,v 1.724 2011/01/17 20:17:55 www Exp $ -->
<!--
@@ -4643,6 +4643,15 @@
<status>works/unverified</status>
</file>
<file>
+<source>loncom/interface/lonsearchcourse.pm</source>
+<target dist='default'>home/httpd/lib/perl/Apache/lonsearchcourse.pm</target>
+<categoryname>handler</categoryname>
+<description>
+Handles a searches inside courses/communities.
+</description>
+<status>works/unverified</status>
+</file>
+<file>
<source>loncom/interface/lonmysql.pm</source>
<target dist='default'>home/httpd/lib/perl/Apache/lonmysql.pm</target>
<categoryname>handler</categoryname>
Index: loncom/loncapa_apache.conf
diff -u loncom/loncapa_apache.conf:1.199 loncom/loncapa_apache.conf:1.200
--- loncom/loncapa_apache.conf:1.199 Tue Aug 31 15:07:16 2010
+++ loncom/loncapa_apache.conf Mon Jan 17 20:17:58 2011
@@ -1,7 +1,7 @@
##
## loncapa_apache.conf -- Apache HTTP LON-CAPA configuration file
##
-## $Id: loncapa_apache.conf,v 1.199 2010/08/31 15:07:16 raeburn Exp $
+## $Id: loncapa_apache.conf,v 1.200 2011/01/17 20:17:58 www Exp $
##
#
@@ -468,6 +468,17 @@
ErrorDocument 500 /adm/errorhandler
</Location>
+<Location /adm/searchcourse>
+AuthType LONCAPA
+Require valid-user
+PerlAuthzHandler Apache::lonacc
+SetHandler perl-script
+PerlHandler Apache::lonsearchcourse
+ErrorDocument 403 /adm/login
+ErrorDocument 500 /adm/errorhandler
+</Location>
+
+
<Location /adm/statistics>
AuthType LONCAPA
Require valid-user
Index: loncom/interface/londocs.pm
diff -u loncom/interface/londocs.pm:1.448 loncom/interface/londocs.pm:1.449
--- loncom/interface/londocs.pm:1.448 Sun Jan 16 13:29:50 2011
+++ loncom/interface/londocs.pm Mon Jan 17 20:18:02 2011
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Documents
#
-# $Id: londocs.pm,v 1.448 2011/01/16 13:29:50 www Exp $
+# $Id: londocs.pm,v 1.449 2011/01/17 20:18:02 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -2647,6 +2647,7 @@
$r->print('<li '.(($mode eq 'docs')?' class="active"':'').
'><a href="/adm/coursedocs?forcestandard=1"><b> '.&mt('Content Editor').' </b></a></li>');
}
+ $r->print('<li'.(($mode eq 'coursesearch')?' class="active"':'').'><a href="/adm/searchcourse"><b> '.&mt('Content Search').' </b></a></li>');
$r->print('<li '.(($mode eq 'supdocs')?' class="active"':'').
'><a href="/adm/coursedocs?forcesupplement=1"><b>'.&mt('Supplemental Documents').'</b></a></li>');
$r->print('</ul>');
Index: loncom/interface/lonsearchcat.pm
diff -u loncom/interface/lonsearchcat.pm:1.326 loncom/interface/lonsearchcat.pm:1.327
--- loncom/interface/lonsearchcat.pm:1.326 Wed Aug 25 12:38:45 2010
+++ loncom/interface/lonsearchcat.pm Mon Jan 17 20:18:02 2011
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Search Catalog
#
-# $Id: lonsearchcat.pm,v 1.326 2010/08/25 12:38:45 wenzelju Exp $
+# $Id: lonsearchcat.pm,v 1.327 2011/01/17 20:18:02 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -173,18 +173,9 @@
if (&Apache::lonnet::allowed('bre',$env{'request.role.domain'})) {
push(@allowed_searches,'res');
}
- if (exists($env{'request.course.id'}) && $env{'request.course.id'} ne '') {
- push(@allowed_searches,'course');
- }
my $crumb_text = 'Portfolio Search';
- if (@allowed_searches == 3) {
- $crumb_text = 'Course, Portfolio and Catalog Search';
- } elsif (@allowed_searches ==2) {
- if (grep(/^res$/,@allowed_searches)) {
- $crumb_text = 'Portfolio and Catalog Search';
- } elsif (grep(/^course$/,@allowed_searches)) {
- $crumb_text = 'Portfolio and Course Search';
- }
+ if (@allowed_searches ==2) {
+ $crumb_text = 'Portfolio and Catalog Search';
}
&Apache::lonhtmlcommon::add_breadcrumb
({href=>'/adm/searchcat?'.
@@ -301,8 +292,6 @@
if ($env{'form.phase'} eq 'adv_search' ||
$env{'form.phase'} eq 'disp_adv') {
$env{'form.searchmode'} = 'advanced';
- } elsif ($env{'form.phase'} eq 'course_search') {
- $env{'form.searchmode'} = 'course_search';
}
#
if ($env{'form.searchmode'} eq 'advanced') {
@@ -318,16 +307,7 @@
'&mode='.$env{'form.mode'},
text=>"Advanced $srchtype Search",
bug=>'Searching',});
- } elsif ($env{'form.searchmode'} eq 'course search') {
- &Apache::lonhtmlcommon::add_breadcrumb
- ({href=>'/adm/searchcat?'.&Apache::loncommon::inhibit_menu_check().
- '&phase=disp_adv'.
- '&catalogmode='.$env{'form.catalogmode'}.
- '&launch='.$env{'form.launch'}.
- '&mode='.$env{'form.mode'},
- text=>"Course Search",
- bug=>'Searching',});
- }
+ }
##
## Switch on the phase
##
@@ -349,8 +329,6 @@
&run_search($r,$query,$customquery,$customshow,
$libraries,$pretty_string,$env{'form.area'});
}
- } elsif ($env{'form.phase'} eq 'course_search') {
- &course_search($r);
} elsif(($env{'form.phase'} eq 'basic_search') ||
($env{'form.phase'} eq 'adv_search')) {
#
@@ -446,244 +424,6 @@
}
######################################################################
-######################################################################
-##
-## Course Search
-##
-######################################################################
-######################################################################
-{ # Scope the course search to avoid global variables
-#
-# Variables For course search
-my %alreadyseen;
-my %hash;
-my $totalfound;
-
-sub make_symb {
- my ($id)=@_;
- my ($mapid,$resid)=split(/\./,$id);
- my $map=$hash{'map_id_'.$mapid};
- my $res=$hash{'src_'.$id};
- my $symb=&Apache::lonnet::encode_symb($map,$resid,$res);
- return $symb;
-}
-
-sub course_search {
- my $r=shift;
- my $pretty_search_string = '<b>'.$env{'form.courseexp'}.'</b>';
- my $search_string = $env{'form.courseexp'};
- my @New_Words;
- undef(%alreadyseen);
- if ($env{'form.crsrelated'}) {
- ($search_string,@New_Words) = &related_version($env{'form.courseexp'});
- if (@New_Words) {
- $pretty_search_string .= ' '.&mt("with related words").": <b>@New_Words</b>.";
- } else {
- $pretty_search_string .= ' '.&mt('with no related words').".";
- }
- }
- my $fulltext=$env{'form.crsfulltext'};
- my $discuss=$env{'form.crsdiscuss'};
- my @allwords=($search_string,@New_Words);
- $totalfound=0;
-
- &Apache::lonhtmlcommon::add_breadcrumb
- ({href=>'/adm/searchcat?'.&Apache::loncommon::inhibit_menu_check().
- '&phase=disp_adv'.
- '&catalogmode='.$env{'form.catalogmode'}.
- '&launch='.$env{'form.launch'}.
- '&mode='.$env{'form.mode'},
- text=>"Course Search",
- bug=>'Searching',});
- $r->print(&Apache::loncommon::start_page('Course Search'));
- $r->print(&Apache::lonhtmlcommon::breadcrumbs('Searching','Searching',
- $env{'form.catalogmode'} ne 'import'));
-
- $r->print(
- '<hr /><center><font size="+2" face="arial">'.
- $pretty_search_string.'</font></center>'.
- '<hr /><b>'.&mt('Course content').':</b><br />');
- $r->rflush();
-# ======================================================= Go through the course
- 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;
- }
- my $symb=&make_symb($1);
- &checkonthis($r,$1,$hash{$_},0,&Apache::lonnet::gettitle($symb),
- $fulltext,$symb,@allwords);
- }
- }
- untie(%hash);
- }
- unless ($totalfound) {
- $r->print('<p class="LC_info">'.&mt('No matches found in resources.').'</p>');
- }
-
-# Check discussions if requested
- if ($discuss) {
- my $totaldiscussions = 0;
- $r->print('<br /><br /><b>'.&mt('Discussion postings').':</b><br />');
- my $navmap = Apache::lonnavmaps::navmap->new();
- if (defined($navmap)) {
- my @allres=$navmap->retrieveResources();
- my %discussiontime = &Apache::lonnet::dump('discussiontimes',
- $env{'course.'.$env{'request.course.id'}.'.domain'},
- $env{'course.'.$env{'request.course.id'}.'.num'});
- foreach my $resource (@allres) {
- my $result = '';
- my $applies = 0;
- my $symb = $resource->symb();
- my $ressymb = $symb;
- if ($symb =~ m#(___adm/$LONCAPA::domain_re/$LONCAPA::username_re)/(\d+)/bulletinboard$#) {
- $ressymb = 'bulletin___'.$2.$1.'/'.$2.'/bulletinboard';
- unless ($ressymb =~ m#bulletin___\d+___adm/wrapper#) {
- $ressymb=~s#(bulletin___\d+___)#$1adm/wrapper/#;
- }
- }
- if (defined($discussiontime{$ressymb})) {
- my %contrib = &Apache::lonnet::restore($ressymb,$env{'request.course.id'},
- $env{'course.'.$env{'request.course.id'}.'.domain'},
- $env{'course.'.$env{'request.course.id'}.'.num'});
- if ($contrib{'version'}) {
- for (my $id=1;$id<=$contrib{'version'};$id++) {
- unless (($contrib{'hidden'}=~/\.$id\./) || ($contrib{'deleted'}=~/\.$id\./)) {
- if ($contrib{$id.':subject'}) {
- $result .= $contrib{$id.':subject'};
- }
- if ($contrib{$id.':message'}) {
- $result .= $contrib{$id.':message'};
- }
- if ($contrib{$id,':attachmenturl'}) {
- if ($contrib{$id,':attachmenturl'} =~ m-/([^/]+)$-) {
- $result .= $1;
- }
- }
- $applies = &checkwords($result,$applies,@allwords);
- }
- }
- }
- }
-# Does this discussion apply?
- if ($applies) {
- my ($map,$ind,$url)=&Apache::lonnet::decode_symb($ressymb);
- my $disctype = &mt('resource');
- if ($url =~ m#/bulletinboard$#) {
- if ($url =~m#^adm/wrapper/adm/.*/bulletinboard$#) {
- $url =~s#^adm/wrapper##;
- }
- $disctype = &mt('discussion board');
- } else {
- $url = '/res/'.$url;
- }
- if ($url =~ /\?/) {
- $url .= '&symb=';
- } else {
- $url .= '?symb=';
- }
- $url .= &escape($resource->symb());
- my $title = $resource->compTitle();
- $r->print('<br /><a href="'.$url.'" target="cat">'.
- ($title?$title:$url).'</a> - '.
- $disctype.'<br />');
- $totaldiscussions++;
- } else {
- $r->print(' .');
- }
- }
- unless ($totaldiscussions) {
- $r->print('<p class="LC_info">'.&mt('No matches found in postings.').'</p>');
- }
- } else {
- $r->print('<div class="LC_error">'.&mt('An error occurred retrieving information about resources in the course.').'<br />'.&mt('It is recommended that you [_1]re-initialize the course[_2] and then try your search again.','<a href="/adm/roles">','</a>').'</div>');
- }
- }
-
-# =================================================== Done going through course
- $r->print(&Apache::loncommon::end_page());
-}
-
-# =============================== This pulls up a resource and its dependencies
-
-sub checkonthis {
- my ($r,$id,$url,$level,$title,$fulltext,$symb,@allwords)=@_;
- $alreadyseen{$id}=1;
- if (&Apache::loncommon::connection_aborted($r)) { return; }
- $r->rflush();
-
- my $result=$title.' ';
- if ($env{'request.role.adv'} || !$hash{'encrypted_'.$id}) {
- $result.=&Apache::lonnet::metadata($url,'title').' '.
- &Apache::lonnet::metadata($url,'subject').' '.
- &Apache::lonnet::metadata($url,'abstract').' '.
- &Apache::lonnet::metadata($url,'keywords');
- }
- my ($extension)=($url=~/\.(\w+)$/);
- if (&Apache::loncommon::fileembstyle($extension) eq 'ssi' &&
- ($url) && ($fulltext)) {
- $result.=&Apache::lonnet::ssi_body($url.'?symb='.&escape($symb));
- }
- $result=~s/\s+/ /gs;
- my $applies = 0;
- $applies = &checkwords($result,$applies,@allwords);
-# Does this resource apply?
- if ($applies) {
- $r->print('<br />');
- for (my $i=0;$i<=$level*5;$i++) {
- $r->print(' ');
- }
- my $href=$url;
- if ($hash{'encrypted_'.$id} && !$env{'request.role.adv'}) {
- $href=&Apache::lonenc::encrypted($href)
- .'?symb='.&Apache::lonenc::encrypted($symb);
- } else {
- $href.='?symb='.&escape($symb);
- }
- $r->print('<a href="'.$href.'" target="cat">'.($title?$title:$url).
- '</a><br />');
- $totalfound++;
- } elsif ($fulltext) {
- $r->print(' .');
- }
- $r->rflush();
-# 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);
- }
- }
-}
-
-sub checkwords {
- my ($result,$applies,@allwords) = @_;
- foreach (@allwords) {
- if ($_=~/\w/) {
- if ($result=~/$_/si) {
- $applies++;
- }
- }
- }
- return $applies;
-}
-
-sub untiehash {
- if (tied(%hash)) {
- untie(%hash);
- }
-}
-
-} # End of course search scoping
-
-
-######################################################################
-######################################################################
=pod
@@ -709,52 +449,6 @@
}
# Search form for accessible portfolio files
$scrout.= &setup_basic_search($r,'portfolio',$hidden_fields,$closebutton);
- if ($env{'request.course.id'}) {
- my %lt=&Apache::lonlocal::texthash('srch' => 'Search',
- 'header' => 'Course Search',
- 'note' => 'Enter terms or phrases, then press "Search" below',
- 'use' => 'use related words',
- 'full' =>'fulltext search (time consuming)',
- 'disc' => 'search discussion postings (resources and discussion boards)',
- );
- $scrout.=(<<ENDCOURSESEARCH);
-<form name="loncapa_search" method="post" action="/adm/searchcat">
-<center>
-<hr />
-<h1>$lt{'header'}</h1>
-<input type="hidden" name="phase" value="course_search" />
-$hidden_fields
-<p>
-$lt{'note'}.
-</p>
-<table>
-<tr><td>
-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.=(<<ENDENDCOURSE);
-</td></tr>
-<tr><td><label>$relcheckbox $lt{'use'}</label></td><td></td></tr>
-<tr><td><label>$crscheckbox $lt{'full'}</label></td><td></td></tr>
-<tr><td><label>$discheckbox $lt{'disc'}</label></td><td></td></tr>
-</table>
-<p>
-<input type="submit" name="coursesubmit" value='$lt{'srch'}' />
-</p>
-</center>
-</form>
-ENDENDCOURSE
- }
$scrout .= &Apache::loncommon::end_page();
$r->print($scrout);
return;
Index: loncom/interface/lonsearchcourse.pm
+++ loncom/interface/lonsearchcourse.pm
# The LearningOnline Network with CAPA
# Search Course
#
# $Id: lonsearchcourse.pm,v 1.1 2011/01/17 20:18:02 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
# This file is part of the LearningOnline Network with CAPA (LON-CAPA).
#
# LON-CAPA is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# LON-CAPA is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with LON-CAPA; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# /home/httpd/html/adm/gpl.txt
#
# http://www.lon-capa.org/
#
###############################################################################
###############################################################################
package Apache::lonsearchcourse;
use strict;
use Apache::Constants qw(:common :http);
use Apache::lonnet;
use GDBM_File;
use Apache::loncommon();
use Apache::lonmeta;
use Apache::lonhtmlcommon;
use Apache::lonlocal;
use LONCAPA::lonmetadata();
use HTML::Entities();
use Apache::lonnavmaps;
use Apache::londocs();
use Apache::lonindexer();
use LONCAPA;
# Variables For course search
my %alreadyseen;
my %hash;
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',
'use' => 'use related words',
'full' =>'fulltext search (time consuming)',
'disc' => 'search discussion postings (resources and discussion boards)',
);
$scrout.=(<<ENDCOURSESEARCH);
<form name="loncapa_search" method="post" action="/adm/searchcourse">
<center>
<hr />
<h1>$lt{'header'}</h1>
<input type="hidden" name="phase" value="results" />
<p>
$lt{'note'}.
</p>
<table>
<tr><td>
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.=(<<ENDENDCOURSE);
</td></tr>
<tr><td><label>$relcheckbox $lt{'use'}</label></td><td></td></tr>
<tr><td><label>$crscheckbox $lt{'full'}</label></td><td></td></tr>
<tr><td><label>$discheckbox $lt{'disc'}</label></td><td></td></tr>
</table>
<p>
<input type="submit" name="coursesubmit" value='$lt{'srch'}' />
</p>
</center>
</form>
ENDENDCOURSE
}
return $scrout;
}
sub make_symb {
my ($id)=@_;
my ($mapid,$resid)=split(/\./,$id);
my $map=$hash{'map_id_'.$mapid};
my $res=$hash{'src_'.$id};
my $symb=&Apache::lonnet::encode_symb($map,$resid,$res);
return $symb;
}
sub related_version {
my ($word) = @_;
return (undef) if (lc($word) =~ /\b(or|and|not)\b/);
my @Words = &Apache::loncommon::get_related_words($word);
# Only use 4 related words
@Words = ($#Words>4? @Words[0..4] : @Words);
my $result = join " OR ", ($word,@Words);
return $result,sort(@Words);
}
sub course_search {
my $r=shift;
my $pretty_search_string = '<b>'.$env{'form.courseexp'}.'</b>';
my $search_string = $env{'form.courseexp'};
my @New_Words;
undef(%alreadyseen);
if ($env{'form.crsrelated'}) {
($search_string,@New_Words) = &related_version($env{'form.courseexp'});
if (@New_Words) {
$pretty_search_string .= ' '.&mt("with related words").": <b>@New_Words</b>.";
} else {
$pretty_search_string .= ' '.&mt('with no related words').".";
}
}
my $fulltext=$env{'form.crsfulltext'};
my $discuss=$env{'form.crsdiscuss'};
my @allwords=($search_string,@New_Words);
$totalfound=0;
$r->print(
'<hr /><center><font size="+2" face="arial">'.
$pretty_search_string.'</font></center>'.
'<hr /><b>'.&mt('Course content').':</b><br />');
$r->rflush();
# ======================================================= Go through the course
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;
}
my $symb=&make_symb($1);
&checkonthis($r,$1,$hash{$_},0,&Apache::lonnet::gettitle($symb),
$fulltext,$symb,@allwords);
}
}
untie(%hash);
}
unless ($totalfound) {
$r->print('<p class="LC_info">'.&mt('No matches found in resources.').'</p>');
}
# Check discussions if requested
if ($discuss) {
my $totaldiscussions = 0;
$r->print('<br /><br /><b>'.&mt('Discussion postings').':</b><br />');
my $navmap = Apache::lonnavmaps::navmap->new();
if (defined($navmap)) {
my @allres=$navmap->retrieveResources();
my %discussiontime = &Apache::lonnet::dump('discussiontimes',
$env{'course.'.$env{'request.course.id'}.'.domain'},
$env{'course.'.$env{'request.course.id'}.'.num'});
foreach my $resource (@allres) {
my $result = '';
my $applies = 0;
my $symb = $resource->symb();
my $ressymb = $symb;
if ($symb =~ m#(___adm/$LONCAPA::domain_re/$LONCAPA::username_re)/(\d+)/bulletinboard$#) {
$ressymb = 'bulletin___'.$2.$1.'/'.$2.'/bulletinboard';
unless ($ressymb =~ m#bulletin___\d+___adm/wrapper#) {
$ressymb=~s#(bulletin___\d+___)#$1adm/wrapper/#;
}
}
if (defined($discussiontime{$ressymb})) {
my %contrib = &Apache::lonnet::restore($ressymb,$env{'request.course.id'},
$env{'course.'.$env{'request.course.id'}.'.domain'},
$env{'course.'.$env{'request.course.id'}.'.num'});
if ($contrib{'version'}) {
for (my $id=1;$id<=$contrib{'version'};$id++) {
unless (($contrib{'hidden'}=~/\.$id\./) || ($contrib{'deleted'}=~/\.$id\./)) {
if ($contrib{$id.':subject'}) {
$result .= $contrib{$id.':subject'};
}
if ($contrib{$id.':message'}) {
$result .= $contrib{$id.':message'};
}
if ($contrib{$id,':attachmenturl'}) {
if ($contrib{$id,':attachmenturl'} =~ m-/([^/]+)$-) {
$result .= $1;
}
}
$applies = &checkwords($result,$applies,@allwords);
}
}
}
}
# Does this discussion apply?
if ($applies) {
my ($map,$ind,$url)=&Apache::lonnet::decode_symb($ressymb);
my $disctype = &mt('resource');
if ($url =~ m#/bulletinboard$#) {
if ($url =~m#^adm/wrapper/adm/.*/bulletinboard$#) {
$url =~s#^adm/wrapper##;
}
$disctype = &mt('discussion board');
} else {
$url = '/res/'.$url;
}
if ($url =~ /\?/) {
$url .= '&symb=';
} else {
$url .= '?symb=';
}
$url .= &escape($resource->symb());
my $title = $resource->compTitle();
$r->print('<br /><a href="'.$url.'" target="cat">'.
($title?$title:$url).'</a> - '.
$disctype.'<br />');
$totaldiscussions++;
} else {
$r->print(' .');
}
}
unless ($totaldiscussions) {
$r->print('<p class="LC_info">'.&mt('No matches found in postings.').'</p>');
}
} else {
$r->print('<div class="LC_error">'.&mt('An error occurred retrieving information about resources in the course.').'<br />'.&mt('It is recommended that you [_1]re-initialize the course[_2] and then try your search again.','<a href="/adm/roles">','</a>').'</div>');
}
}
# =================================================== Done going through course
$r->print(&Apache::loncommon::end_page());
}
# =============================== This pulls up a resource and its dependencies
sub checkonthis {
my ($r,$id,$url,$level,$title,$fulltext,$symb,@allwords)=@_;
$alreadyseen{$id}=1;
if (&Apache::loncommon::connection_aborted($r)) { return; }
$r->rflush();
my $result=$title.' ';
if ($env{'request.role.adv'} || !$hash{'encrypted_'.$id}) {
$result.=&Apache::lonnet::metadata($url,'title').' '.
&Apache::lonnet::metadata($url,'subject').' '.
&Apache::lonnet::metadata($url,'abstract').' '.
&Apache::lonnet::metadata($url,'keywords');
}
my ($extension)=($url=~/\.(\w+)$/);
if (&Apache::loncommon::fileembstyle($extension) eq 'ssi' &&
($url) && ($fulltext)) {
$result.=&Apache::lonnet::ssi_body($url.'?symb='.&escape($symb));
}
$result=~s/\s+/ /gs;
my $applies = 0;
$applies = &checkwords($result,$applies,@allwords);
# Does this resource apply?
if ($applies) {
$r->print('<br />');
for (my $i=0;$i<=$level*5;$i++) {
$r->print(' ');
}
my $href=$url;
if ($hash{'encrypted_'.$id} && !$env{'request.role.adv'}) {
$href=&Apache::lonenc::encrypted($href)
.'?symb='.&Apache::lonenc::encrypted($symb);
} else {
$href.='?symb='.&escape($symb);
}
$r->print('<a href="'.$href.'" target="cat">'.($title?$title:$url).
'</a><br />');
$totalfound++;
} elsif ($fulltext) {
$r->print(' .');
}
$r->rflush();
# 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);
}
}
}
sub checkwords {
my ($result,$applies,@allwords) = @_;
foreach (@allwords) {
if ($_=~/\w/) {
if ($result=~/$_/si) {
$applies++;
}
}
}
return $applies;
}
sub untiehash {
if (tied(%hash)) {
untie(%hash);
}
}
sub handler {
my $r = shift;
&Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
if ($r->header_only) { return OK; }
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');
if ($env{'form.phase'} eq 'results') {
&course_search($r);
} else {
$r->print(&menu());
}
&Apache::londocs::endContentScreen($r);
$r->print(&Apache::loncommon::end_page());
return OK;
}
1;
--www1295295482--