--- loncom/interface/lonsearchcat.pm 2010/05/04 17:16:34 1.323
+++ loncom/interface/lonsearchcat.pm 2011/01/17 20:18:02 1.327
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Search Catalog
#
-# $Id: lonsearchcat.pm,v 1.323 2010/05/04 17:16:34 bisitz 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 @@ sub handler {
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 @@ END
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 @@ END
'&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 @@ END
&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 @@ 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 = ''.$env{'form.courseexp'}.'';
- 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").": @New_Words.";
- } 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(
- '
'.
- $pretty_search_string.'
'.
- ''.&mt('Course content').': ');
- $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('
'.&mt('No matches found in resources.').'
');
- }
-
-# Check discussions if requested
- if ($discuss) {
- my $totaldiscussions = 0;
- $r->print('
'.&mt('Discussion postings').': ');
- 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(' '.
- ($title?$title:$url).' - '.
- $disctype.' ');
- $totaldiscussions++;
- } else {
- $r->print(' .');
- }
- }
- unless ($totaldiscussions) {
- $r->print('
'.&mt('No matches found in postings.').'
');
- }
- } else {
- $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
-
-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(' ');
- 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(''.($title?$title:$url).
- ' ');
- $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 @@ sub print_basic_search_form {
}
# 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.=(<
-
-
-ENDENDCOURSE
- }
$scrout .= &Apache::loncommon::end_page();
$r->print($scrout);
return;
@@ -2970,13 +2664,13 @@ sub display_results {
.&mt('Sort by:').' '
.&Apache::loncommon::select_form($env{'form.sortfield'},
'sortfield',
- %sort_fields)
+ \%sort_fields)
.' '
.&Apache::loncommon::select_form($env{'form.sortorder'},
'sortorder',
- (asc =>&mt('Ascending'),
+ {asc =>&mt('Ascending'),
desc=>&mt('Descending')
- ))
+ })
.'';
##
## Display links for 'prev' and 'next' pages (if necessary) and Display Options
@@ -3364,6 +3058,89 @@ SCRIPT
SCRIPT
+ # HTML-Markup for 'Set a link for this resource to wishlist'
+ # this is written via JavaScript document.write (function set_wishlistlink)
+ # it is split into 3 parts and the inputfields for title and path are left out
+ # these fields are inserted later to set the values for title and path
+ # automatically via JavaScript (document.title and location.pathname)
+ my %folders = &Apache::lonnet::get('wishlist',['folders']);
+ if ($folders{'folders'} eq '') {
+ $folders{'folders'} = '';
+ }
+ my $start_page_wishlistlink =
+ &Apache::loncommon::start_page('Set link to wishlist',undef,
+ {'only_body' => 1,
+ 'js_ready' => 1,
+ 'bgcolor' => '#FFFFFF',});
+
+ my $warningLink = &mt('You must insert a title!');
+
+ my $in_page_wishlistlink1 = '
'.&mt('Set a link to wishlist').'
'.
+ '';
+
+ # remove all \n for inserting on javascript document.write
+ $in_page_wishlistlink1 =~ s/\n//g;
+ $in_page_wishlistlink2 =~ s/\n//g;
+ $in_page_wishlistlink3 =~ s/\n//g;
+
+ my $end_page_wishlistlink =
+ &Apache::loncommon::end_page({'js_ready' => 1});
+
+ # Add JavaScript-function to set link for a ressource to wishlist
+ $js.=<
+SCRIPT
+
my $start_page = &Apache::loncommon::start_page(undef,$js,
{'only_body' =>1});
my $result=<'.' '.
''.$values{'title'}."\n";
+ 'target="preview">'.$values{'title'}."\n".
+ ''.
+ '';
$result .= "
\n";
$result .= ''.$values{'author'}.','.
' '.$values{'owner'}.' ';
@@ -3615,9 +3396,16 @@ sub summary_view {
$jumpurl=~s|^/ext/|http://|;
my $link = ' '.&display_url($jumpurl,1).' ';
+ my $titleWL = &mt('Set link to wishlist');
$result.=<$values{'title'}
+ target="preview">$values{'title'}
+
+
+
+
$link
$values{'author'}, $values{'owner'} -- $values{'lastrevisiondate'}
$values{'copyrighttag'}
@@ -3663,6 +3451,11 @@ sub compact_view {
$result.=' '.
''.
&HTML::Entities::encode($values{'title'},'<>&"').' '.
+ ''.
+ ''.
+ ''.
$link.' '.$values{'author'}.' ('.$values{'domain'}.')';
return $result;
}
@@ -3704,12 +3497,19 @@ sub fielded_format_view {
my $jumpurl=$values{'url'};
$jumpurl=~s|^/ext/|http://|;
+ my $titleWL = ('Set link to wishlist');
my $result=<