version 1.323, 2010/05/04 17:16:34
|
version 1.331.4.1, 2012/05/10 18:34:18
|
Line 151 sub handler {
|
Line 151 sub handler {
|
## Initialize global variables |
## Initialize global variables |
## |
## |
my $domain = $r->dir_config('lonDefDomain'); |
my $domain = $r->dir_config('lonDefDomain'); |
$diropendb= "/home/httpd/perl/tmp/". |
my $temp_file_dir = LONCAPA::tempdir(); |
|
$diropendb= $temp_file_dir . |
"$env{'user.domain'}_$env{'user.name'}_sel_res.db"; |
"$env{'user.domain'}_$env{'user.name'}_sel_res.db"; |
# |
# |
# set the name of the persistent database |
# set the name of the persistent database |
Line 162 sub handler {
|
Line 163 sub handler {
|
$env{'form.persistent_db_id'} = time; |
$env{'form.persistent_db_id'} = time; |
} |
} |
|
|
my $persistent_db_file = "/home/httpd/perl/tmp/". |
my $persistent_db_file = $temp_file_dir . |
&escape($domain). |
&escape($domain). |
'_'.&escape($env{'user.name'}). |
'_'.&escape($env{'user.name'}). |
'_'.$env{'form.persistent_db_id'}.'_persistent_search.db'; |
'_'.$env{'form.persistent_db_id'}.'_persistent_search.db'; |
Line 173 sub handler {
|
Line 174 sub handler {
|
if (&Apache::lonnet::allowed('bre',$env{'request.role.domain'})) { |
if (&Apache::lonnet::allowed('bre',$env{'request.role.domain'})) { |
push(@allowed_searches,'res'); |
push(@allowed_searches,'res'); |
} |
} |
if (exists($env{'request.course.id'}) && $env{'request.course.id'} ne '') { |
|
push(@allowed_searches,'course'); |
|
} |
|
my $crumb_text = 'Portfolio Search'; |
my $crumb_text = 'Portfolio Search'; |
if (@allowed_searches == 3) { |
if (@allowed_searches ==2) { |
$crumb_text = 'Course, Portfolio and Catalog Search'; |
$crumb_text = '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'; |
|
} |
|
} |
} |
&Apache::lonhtmlcommon::add_breadcrumb |
&Apache::lonhtmlcommon::add_breadcrumb |
({href=>'/adm/searchcat?'. |
({href=>'/adm/searchcat?'. |
Line 301 END
|
Line 293 END
|
if ($env{'form.phase'} eq 'adv_search' || |
if ($env{'form.phase'} eq 'adv_search' || |
$env{'form.phase'} eq 'disp_adv') { |
$env{'form.phase'} eq 'disp_adv') { |
$env{'form.searchmode'} = 'advanced'; |
$env{'form.searchmode'} = 'advanced'; |
} elsif ($env{'form.phase'} eq 'course_search') { |
|
$env{'form.searchmode'} = 'course_search'; |
|
} |
} |
# |
# |
if ($env{'form.searchmode'} eq 'advanced') { |
if ($env{'form.searchmode'} eq 'advanced') { |
Line 318 END
|
Line 308 END
|
'&mode='.$env{'form.mode'}, |
'&mode='.$env{'form.mode'}, |
text=>"Advanced $srchtype Search", |
text=>"Advanced $srchtype Search", |
bug=>'Searching',}); |
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 |
## Switch on the phase |
## |
## |
Line 349 END
|
Line 330 END
|
&run_search($r,$query,$customquery,$customshow, |
&run_search($r,$query,$customquery,$customshow, |
$libraries,$pretty_string,$env{'form.area'}); |
$libraries,$pretty_string,$env{'form.area'}); |
} |
} |
} elsif ($env{'form.phase'} eq 'course_search') { |
|
&course_search($r); |
|
} elsif(($env{'form.phase'} eq 'basic_search') || |
} elsif(($env{'form.phase'} eq 'basic_search') || |
($env{'form.phase'} eq 'adv_search')) { |
($env{'form.phase'} eq 'adv_search')) { |
# |
# |
Line 446 sub hidden_field {
|
Line 425 sub hidden_field {
|
} |
} |
|
|
###################################################################### |
###################################################################### |
###################################################################### |
|
## |
|
## 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 |
=pod |
|
|
Line 709 sub print_basic_search_form {
|
Line 450 sub print_basic_search_form {
|
} |
} |
# Search form for accessible portfolio files |
# Search form for accessible portfolio files |
$scrout.= &setup_basic_search($r,'portfolio',$hidden_fields,$closebutton); |
$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(); |
$scrout .= &Apache::loncommon::end_page(); |
$r->print($scrout); |
$r->print($scrout); |
return; |
return; |
Line 2688 END
|
Line 2383 END
|
next; |
next; |
} |
} |
$status=~s|/||g; |
$status=~s|/||g; |
my $datafile=$r->dir_config('lonDaemons').'/tmp/'.$status; |
|
|
|
|
|
|
my $datafile=LONCAPA::tempdir().$status; |
if (-e $datafile && ! -e "$datafile.end") { |
if (-e $datafile && ! -e "$datafile.end") { |
&update_status($r,&mt('Receiving results from [_1]',$server)); |
&update_status($r,&mt('Receiving results from [_1]',$server)); |
next; |
next; |
Line 2970 sub display_results {
|
Line 2668 sub display_results {
|
.&mt('Sort by:').' ' |
.&mt('Sort by:').' ' |
.&Apache::loncommon::select_form($env{'form.sortfield'}, |
.&Apache::loncommon::select_form($env{'form.sortfield'}, |
'sortfield', |
'sortfield', |
%sort_fields) |
\%sort_fields) |
.' ' |
.' ' |
.&Apache::loncommon::select_form($env{'form.sortorder'}, |
.&Apache::loncommon::select_form($env{'form.sortorder'}, |
'sortorder', |
'sortorder', |
(asc =>&mt('Ascending'), |
{asc =>&mt('Ascending'), |
desc=>&mt('Descending') |
desc=>&mt('Descending') |
)) |
}) |
.'</span>'; |
.'</span>'; |
## |
## |
## Display links for 'prev' and 'next' pages (if necessary) and Display Options |
## Display links for 'prev' and 'next' pages (if necessary) and Display Options |
Line 3365 SCRIPT
|
Line 3063 SCRIPT
|
SCRIPT |
SCRIPT |
|
|
my $start_page = &Apache::loncommon::start_page(undef,$js, |
my $start_page = &Apache::loncommon::start_page(undef,$js, |
{'only_body' =>1}); |
{'only_body' =>1,}); |
my $result=<<END; |
my $result=<<END; |
$start_page |
$start_page |
<form name="results" method="post" action="/adm/searchcat"> |
<form name="results" method="post" action="/adm/searchcat"> |
Line 3617 sub summary_view {
|
Line 3315 sub summary_view {
|
|
|
$result.=<<END; |
$result.=<<END; |
<a href="$jumpurl?inhibitmenu=yes" |
<a href="$jumpurl?inhibitmenu=yes" |
target="preview">$values{'title'}</a><br /> |
target="preview">$values{'title'}</a> |
|
<br /> |
$link<br /> |
$link<br /> |
$values{'author'}, $values{'owner'} -- $values{'lastrevisiondate'}<br /> |
$values{'author'}, $values{'owner'} -- $values{'lastrevisiondate'}<br /> |
$values{'copyrighttag'}<br /> |
$values{'copyrighttag'}<br /> |
Line 3709 $prefix <img src="$icon" alt="" />
|
Line 3408 $prefix <img src="$icon" alt="" />
|
<dl> |
<dl> |
<dt>URL:</dt> |
<dt>URL:</dt> |
<dd><a href="$jumpurl?inhibitmenu=yes" |
<dd><a href="$jumpurl?inhibitmenu=yes" |
target='preview'>$values{'url'}</a></dd> |
target='preview'>$values{'url'}</a> |
|
</dd> |
END |
END |
foreach my $field ('title','author','domain','subject','keywords','notes', |
foreach my $field ('title','author','domain','subject','keywords','notes', |
'mimetag','language','creationdate','lastrevisiondate', |
'mimetag','language','creationdate','lastrevisiondate', |