version 1.75, 2001/03/22 14:24:39
|
version 1.90, 2001/04/02 13:13:17
|
Line 36
|
Line 36
|
# recursive_SQL_query_build(field name, reverse notation expression) : |
# recursive_SQL_query_build(field name, reverse notation expression) : |
# builds a SQL query string from a reverse notation expression |
# builds a SQL query string from a reverse notation expression |
# logical expression with AND/OR keywords |
# logical expression with AND/OR keywords |
|
# build_custommetadata_query(field_name, logic_statement) : builds a perl |
|
# regular expression from a logical expression with AND/OR |
|
# keywords |
|
# detailed_citation_view, summary_view, fielded_format_view, xml_sgml_view: |
|
# four different ways to view metadata records. Outputs a HTML-ified string. |
|
# Input arguments are title, author, subject, url, keywords, version, notes, |
|
# short abstract, mime, language, creation date, last revision date, owner, |
|
# copyright, hostname, httphost, and extra custom metadata to show. |
|
# build_date_queries(cmonth1, cday1, cyear1, cmonth2, cday2, cyear2, |
|
# lmonth1, lday1, lyear1, lmonth2, lday2, lyear2) : |
|
# Builds a SQL logic query to check time/date entries. |
|
# output_date_error(server reference, error message) : outputs |
|
# an error message specific to bad date format. |
|
# make_persistent() : makes a set of hidden HTML fields to make |
|
# SQL search interface information to be persistent |
|
|
package Apache::lonsearchcat; |
package Apache::lonsearchcat; |
|
|
Line 46 use Apache::File();
|
Line 61 use Apache::File();
|
use CGI qw(:standard); |
use CGI qw(:standard); |
use Text::Query; |
use Text::Query; |
|
|
|
# ---------------------------------------- variables used throughout the module |
my %language; |
my %language; |
my $scrout; |
my $scrout; |
my %metadatafields; |
my %metadatafields; |
my %cprtag; |
my %cprtag; |
my %mimetag; |
my %mimetag; |
my $closebutton; |
my $closebutton; |
|
|
|
# ------ form selection elements that allow for choosing different output views |
|
# Detailed Citation View ---> sub detailed_citationview |
|
# Summary View ---> sub summary_view |
|
# Fielded Format ---> sub fielded_format_view |
|
# XML/SGML ---> sub xml_sgml_view |
my $basicviewselect=<<END; |
my $basicviewselect=<<END; |
<select name='basicviewselect'> |
<select name='basicviewselect'> |
<option value='Detailed Citation View'>Detailed Citation View</option> |
<option value='Detailed Citation View'>Detailed Citation View</option> |
Line 69 my $advancedviewselect=<<END;
|
Line 91 my $advancedviewselect=<<END;
|
</select> |
</select> |
END |
END |
|
|
|
# ----------------------------- Handling routine called via Apache and mod_perl |
sub handler { |
sub handler { |
my $r = shift; |
my $r = shift; |
|
|
Line 89 sub handler {
|
Line 112 sub handler {
|
%metadatafields=(); |
%metadatafields=(); |
|
|
my $hidden=''; |
my $hidden=''; |
$hidden=<<END if $ENV{'form.catalogmode'} eq 'interactive'; |
if ($ENV{'form.catalogmode'} eq 'interactive') { |
|
$hidden=<<END; |
<input type='hidden' name='catalogmode' value='interactive'> |
<input type='hidden' name='catalogmode' value='interactive'> |
END |
END |
|
$closebutton=<<END; |
$closebutton=<<END if $ENV{'form.catalogmode'} eq 'interactive'; |
|
<input type="button" name="close" value='CLOSE' onClick="self.close()"> |
<input type="button" name="close" value='CLOSE' onClick="self.close()"> |
END |
END |
|
} |
|
|
# ------------------------------------------------ First, check out environment |
# ------------------------------------------------ First, check out environment |
$metadatafields{'owner'}=$ENV{'user.name'}.'@'.$ENV{'user.domain'}; |
$metadatafields{'owner'}=$ENV{'user.name'}.'@'.$ENV{'user.domain'}; |
Line 132 END
|
Line 156 END
|
} <$fh>; |
} <$fh>; |
} |
} |
|
|
|
# ----------------------------------- See if a search invocation should be done |
if ($ENV{'form.basicsubmit'} eq 'SEARCH') { |
if ($ENV{'form.basicsubmit'} eq 'SEARCH') { |
return &basicsearch($r,\%ENV); |
return &basicsearch($r,\%ENV); |
} |
} |
Line 139 END
|
Line 164 END
|
return &advancedsearch($r,\%ENV); |
return &advancedsearch($r,\%ENV); |
} |
} |
|
|
|
# ----------------------------- Else, begin building search interface to output |
$scrout=''; # building a part of screen output |
$scrout=''; # building a part of screen output |
$scrout.=&searchphrasefield('Limit by title','title', |
$scrout.=&searchphrasefield('Limit by title','title', |
$ENV{'form.title'}); |
$ENV{'form.title'}); |
Line 229 LASTREVISIONDATEEND
|
Line 255 LASTREVISIONDATEEND
|
# ------------------------------------------- Compute customized metadata field |
# ------------------------------------------- Compute customized metadata field |
$scrout.=<<CUSTOMMETADATA; |
$scrout.=<<CUSTOMMETADATA; |
<p> |
<p> |
<font color="#800000" face="helvetica"><b>LIMIT BY OTHER METADATA FIELDS:</b> |
<font color="#800000" face="helvetica"><b>LIMIT BY SPECIAL METADATA FIELDS:</b> |
</font> |
</font> |
For author-specific metadata, enter in an expression in the form of |
For resource-specific metadata, enter in an expression in the form of |
<i>key</i>=<i>value</i> separated by operators such as AND or OR.<br> |
<i>key</i>=<i>value</i> separated by operators such as AND or OR.<br> |
<b>Example:</b> grandmother=75 OR grandfather=85 |
<b>Example:</b> grandmother=75 OR grandfather=85 |
<br> |
<br> |
Line 239 CUSTOMMETADATA
|
Line 265 CUSTOMMETADATA
|
$scrout.=&simpletextfield('custommetadata',$ENV{'form.custommetadata'}); |
$scrout.=&simpletextfield('custommetadata',$ENV{'form.custommetadata'}); |
$scrout.=' <i>initial users of this system do not need to worry about this option</i>'; |
$scrout.=' <i>initial users of this system do not need to worry about this option</i>'; |
|
|
|
$scrout.=<<CUSTOMSHOW; |
|
<p> |
|
<font color="#800000" face="helvetica"><b>SHOW SPECIAL METADATA FIELDS:</b> |
|
</font> |
|
Enter in a space-separated list of special metadata fields to show |
|
in a fielded listing for each record result. |
|
<br> |
|
CUSTOMSHOW |
|
$scrout.=&simpletextfield('customshow',$ENV{'form.customshow'}); |
|
$scrout.=' <i>initial users of this system do not need to worry about this option</i>'; |
|
|
# ---------------------------------------------------------------- Print screen |
# ---------------------------------------------------------------- Print screen |
$r->print(<<ENDDOCUMENT); |
$r->print(<<ENDDOCUMENT); |
<html> |
<html> |
Line 487 sub advancedsearch {
|
Line 524 sub advancedsearch {
|
'lastrevisiondatestart_year','lastrevisiondateend_month', |
'lastrevisiondatestart_year','lastrevisiondateend_month', |
'lastrevisiondateend_day','lastrevisiondateend_year', |
'lastrevisiondateend_day','lastrevisiondateend_year', |
'notes','abstract','mime','language','owner', |
'notes','abstract','mime','language','owner', |
'custommetadata') { |
'custommetadata','customshow') { |
$ENV{"form.$field"}=~s/[^\w\s\(\)\=\-\"\']//g; |
$ENV{"form.$field"}=~s/[^\w\s\(\)\=\-\"\']//g; |
} |
} |
|
|
|
# Check to see if enough information was filled in |
for my $field ('title','author','subject','keywords','url','version', |
for my $field ('title','author','subject','keywords','url','version', |
'notes','abstract','mime','language','owner', |
'notes','abstract','mime','language','owner', |
'custommetadata') { |
'custommetadata') { |
Line 497 sub advancedsearch {
|
Line 536 sub advancedsearch {
|
$fillflag++; |
$fillflag++; |
} |
} |
} |
} |
|
|
unless ($fillflag) { |
unless ($fillflag) { |
&output_blank_field_error($r); |
&output_blank_field_error($r); |
return OK; |
return OK; |
} |
} |
|
|
|
|
|
# Turn the form input into a SQL-based query |
my $query=''; |
my $query=''; |
|
|
my @queries; |
my @queries; |
# Go through logical expression AND/OR/NOT phrase fields. |
# Evaluate logical expression AND/OR/NOT phrase fields. |
|
|
foreach my $field ('title','author','subject','notes','abstract','url', |
foreach my $field ('title','author','subject','notes','abstract','url', |
'keywords','version','owner') { |
'keywords','version','owner') { |
if ($ENV{'form.'.$field}) { |
if ($ENV{'form.'.$field}) { |
push @queries,&build_SQL_query($field,$ENV{'form.'.$field}); |
push @queries,&build_SQL_query($field,$ENV{'form.'.$field}); |
} |
} |
} |
} |
|
# Evaluate option lists |
if ($ENV{'form.language'} and $ENV{'form.language'} ne 'any') { |
if ($ENV{'form.language'} and $ENV{'form.language'} ne 'any') { |
push @queries,"(language like \"\%$ENV{'form.language'}\%\")"; |
push @queries,"(language like \"$ENV{'form.language'}\")"; |
} |
} |
if ($ENV{'form.mime'} and $ENV{'form.mime'} ne 'any') { |
if ($ENV{'form.mime'} and $ENV{'form.mime'} ne 'any') { |
push @queries,"(mime like \"\%$ENV{'form.mime'}\%\")"; |
push @queries,"(mime like \"$ENV{'form.mime'}\")"; |
} |
} |
if ($ENV{'form.copyright'} and $ENV{'form.copyright'} ne 'any') { |
if ($ENV{'form.copyright'} and $ENV{'form.copyright'} ne 'any') { |
push @queries,"(copyright like \"\%$ENV{'form.copyright'}\%\")"; |
push @queries,"(copyright like \"$ENV{'form.copyright'}\")"; |
} |
} |
|
# Evaluate date windows |
my $datequery=&build_date_queries( |
my $datequery=&build_date_queries( |
$ENV{'form.creationdatestart_month'}, |
$ENV{'form.creationdatestart_month'}, |
$ENV{'form.creationdatestart_day'}, |
$ENV{'form.creationdatestart_day'}, |
Line 537 sub advancedsearch {
|
Line 578 sub advancedsearch {
|
$ENV{'form.lastrevisiondateend_day'}, |
$ENV{'form.lastrevisiondateend_day'}, |
$ENV{'form.lastrevisiondateend_year'}, |
$ENV{'form.lastrevisiondateend_year'}, |
); |
); |
|
# Test to see if date windows are legitimate |
if ($datequery=~/^Incorrect/) { |
if ($datequery=~/^Incorrect/) { |
&output_date_error($r,$datequery); |
&output_date_error($r,$datequery); |
return OK; |
return OK; |
Line 544 sub advancedsearch {
|
Line 586 sub advancedsearch {
|
elsif ($datequery) { |
elsif ($datequery) { |
push @queries,$datequery; |
push @queries,$datequery; |
} |
} |
my $customquery; |
|
|
# Process form information for custom metadata querying |
|
my $customquery=''; |
if ($ENV{'form.custommetadata'}) { |
if ($ENV{'form.custommetadata'}) { |
$customquery=&build_custommetadata_query('custommetadata', |
$customquery=&build_custommetadata_query('custommetadata', |
$ENV{'form.custommetadata'}); |
$ENV{'form.custommetadata'}); |
} |
} |
|
my $customshow=''; |
|
if ($ENV{'form.customshow'}) { |
|
$customshow=$ENV{'form.customshow'}; |
|
$customshow=~s/[^\w\s]//g; |
|
my @fields=split(/\s+/,$customshow); |
|
$customshow=join(" ",@fields); |
|
} |
|
# Send query statements over the network to be processed by either the SQL |
|
# database or a recursive scheme of 'grep'-like actions (for custom |
|
# metadata). |
if (@queries) { |
if (@queries) { |
$query=join(" AND ",@queries); |
$query=join(" AND ",@queries); |
$query="select * from metadata where $query"; |
$query="select * from metadata where $query"; |
my $reply=&Apache::lonnet::metadata_query($query); |
my $reply; # reply hash reference |
|
unless ($customquery or $customshow) { |
|
$reply=&Apache::lonnet::metadata_query($query); |
|
} |
|
else { |
|
$reply=&Apache::lonnet::metadata_query($query, |
|
$customquery,$customshow); |
|
} |
&output_results('Advanced',$r,$envhash,$customquery,$reply); |
&output_results('Advanced',$r,$envhash,$customquery,$reply); |
} |
} |
else { |
elsif ($customquery) { |
&output_results('Advanced',$r,$envhash,$query); |
my $reply; # reply hash reference |
|
$reply=&Apache::lonnet::metadata_query('', |
|
$customquery,$customshow); |
|
&output_results('Advanced',$r,$envhash,$customquery,$reply); |
} |
} |
|
$r->print(' '); # just in case.. hrrmm.. |
return OK; |
return OK; |
} |
} |
|
|
Line 582 sub basicsearch {
|
Line 647 sub basicsearch {
|
$ENV{"form.$field"}=~s/[^\w\s\(\)\-]//g; |
$ENV{"form.$field"}=~s/[^\w\s\(\)\-]//g; |
} |
} |
|
|
|
# Check to see if enough is filled in |
unless (&filled($ENV{'form.basicexp'})) { |
unless (&filled($ENV{'form.basicexp'})) { |
&output_blank_field_error($r); |
&output_blank_field_error($r); |
return OK; |
return OK; |
} |
} |
|
|
|
# Build SQL query string based on form page |
my $query=''; |
my $query=''; |
my $concatarg=join('," ",', |
my $concatarg=join('," ",', |
('title', 'author', 'subject', 'notes', 'abstract')); |
('title', 'author', 'subject', 'notes', 'abstract')); |
|
$query='select * from metadata where concat(' . $concatarg . ') like %' . |
|
$ENV{'form.basicexp'} . '%'; |
|
|
$query="select * from metadata where concat($concatarg) like '\%$ENV{'form.basicexp'}\%'"; |
# Get reply (either a hash reference to filehandles or bad connection) |
my $reply=&Apache::lonnet::metadata_query($query); |
my $reply=&Apache::lonnet::metadata_query($query); |
|
|
|
# Output search results |
&output_results('Basic',$r,$envhash,$query,$reply); |
&output_results('Basic',$r,$envhash,$query,$reply); |
|
|
return OK; |
return OK; |
} |
} |
|
|
Line 659 sub output_results {
|
Line 731 sub output_results {
|
@results=<$fh>; |
@results=<$fh>; |
} |
} |
|
|
|
my $customshow=''; |
|
my $extrashow=''; |
|
my @customfields; |
|
if ($ENV{'form.customshow'}) { |
|
$customshow=$ENV{'form.customshow'}; |
|
$customshow=~s/[^\w\s]//g; |
|
my @fields=map {"<font color=\"#008000\">$_:</font><!-- $_ -->"} |
|
split(/\s+/,$customshow); |
|
@customfields=split(/\s+/,$customshow); |
|
if ($customshow) { |
|
$extrashow="<ul><li>".join("</li><li>",@fields)."</li></ul>\n"; |
|
} |
|
} |
|
my $customdata=''; |
|
my %customhash; |
foreach my $result (@results) { |
foreach my $result (@results) { |
|
if ($result=~/^(custom\=.*)$/) { # grab all custom metadata |
|
my $tmp=$result; |
|
$tmp=~s/^custom\=//; |
|
my ($k,$v)=map {&Apache::lonnet::unescape($_); |
|
} split(/\,/,$tmp); |
|
$customhash{$k}=$v; |
|
} |
|
} |
|
foreach my $result (@results) { |
|
next if $result=~/^custom\=/; |
|
chomp $result; |
|
next unless $result; |
my @fields=map |
my @fields=map |
{&Apache::lonnet::unescape($_)} |
{&Apache::lonnet::unescape($_)} |
(split(/\,/,$result)); |
(split(/\,/,$result)); |
Line 669 sub output_results {
|
Line 768 sub output_results {
|
my $shortabstract=$abstract; |
my $shortabstract=$abstract; |
$shortabstract=substr($abstract,0,200) if length($abstract)>200; |
$shortabstract=substr($abstract,0,200) if length($abstract)>200; |
$fields[7]=$shortabstract; |
$fields[7]=$shortabstract; |
|
my $extrashow2=$extrashow; |
|
if ($extrashow) { |
|
foreach my $field (@customfields) { |
|
my $value=''; |
|
if ($customhash{$url}=~/\<${field}[^\>]*\>(.*?)\<\/${field}[^\>]*\>/s) { |
|
$value=$1; |
|
} |
|
$extrashow2=~s/\<\!\-\- $field \-\-\>/ $value/g; |
|
} |
|
} |
|
|
|
$compiledresult.=<<END if $compiledresult; |
|
<hr align='left' width='200' noshade /> |
|
END |
$compiledresult.=<<END; |
$compiledresult.=<<END; |
<p> |
<p> |
END |
END |
$compiledresult.=<<END if $ENV{'form.catalogmode'} eq 'interactive'; |
$compiledresult.=<<END if $ENV{'form.catalogmode'} eq 'interactive'; |
<font size='-1'><INPUT TYPE="button" NAME="returnvalues" VALUE="SELECT" |
<font size='-1'><INPUT TYPE="button" NAME="returnvalues" VALUE="SELECT" |
onClick="javascript:select_data('$title','$url')"> |
onClick="javascript:select_data('$title','$url')"> |
</font> |
</font> |
Line 690 END
|
Line 803 END
|
|
|
if ($viewselect eq 'Detailed Citation View') { |
if ($viewselect eq 'Detailed Citation View') { |
$compiledresult.=&detailed_citation_view(@fields, |
$compiledresult.=&detailed_citation_view(@fields, |
$hostname,$httphost); |
$hostname,$httphost, |
|
$extrashow2); |
} |
} |
elsif ($viewselect eq 'Summary View') { |
elsif ($viewselect eq 'Summary View') { |
$compiledresult.=&summary_view(@fields,$hostname,$httphost); |
$compiledresult.=&summary_view(@fields,$hostname,$httphost, |
|
$extrashow2); |
} |
} |
elsif ($viewselect eq 'Fielded Format') { |
elsif ($viewselect eq 'Fielded Format') { |
$compiledresult.=&fielded_format_view(@fields,$hostname, |
$compiledresult.=&fielded_format_view(@fields,$hostname, |
$httphost); |
$httphost,$extrashow2); |
} |
} |
elsif ($viewselect eq 'XML/SGML') { |
elsif ($viewselect eq 'XML/SGML') { |
$compiledresult.=&xml_sgml_view(@fields,$hostname,$httphost); |
$compiledresult.=&xml_sgml_view(@fields,$hostname,$httphost, |
|
$extrashow2); |
} |
} |
|
|
} |
} |
Line 741 SCRIPT
|
Line 857 SCRIPT
|
<img align=right src=/adm/lonIcons/lonlogos.gif> |
<img align=right src=/adm/lonIcons/lonlogos.gif> |
<h1>Search Catalog</h1> |
<h1>Search Catalog</h1> |
<form method="post" action="/adm/searchcat"> |
<form method="post" action="/adm/searchcat"> |
|
$customdata |
<input type='button' value='Revise search request' |
<input type='button' value='Revise search request' |
onClick='this.form.submit();'> |
onClick='this.form.submit();'> |
$closebutton |
$closebutton |
Line 795 sub build_custommetadata_query {
|
Line 912 sub build_custommetadata_query {
|
# quick fix to change literal into xml tag-matching |
# quick fix to change literal into xml tag-matching |
# will eventually have to write a separate builder module |
# will eventually have to write a separate builder module |
my $oldmatchexp=$matchexp; |
my $oldmatchexp=$matchexp; |
$matchexp=~s/(\w+)\\\=(\w+)/\\\<$1\\\>\[\^\\\<\]\*$2\[\^\\\<\]\*\\\<\\\/$1\\\>/g; |
$matchexp=~s/(\w+)\\\=([\w\\\+]+)/\\\<$1\\\>\[\^\\\<\]\*$2\[\^\\\<\]\*\\\<\\\/$1\\\>/g; |
return $oldmatchexp . $matchexp; |
return $matchexp; |
} |
} |
|
|
# - Recursively parse a reverse notation expression into a SQL query expression |
# - Recursively parse a reverse notation expression into a SQL query expression |
Line 833 sub detailed_citation_view {
|
Line 950 sub detailed_citation_view {
|
my ($title,$author,$subject,$url,$keywords,$version, |
my ($title,$author,$subject,$url,$keywords,$version, |
$notes,$shortabstract,$mime,$lang, |
$notes,$shortabstract,$mime,$lang, |
$creationdate,$lastrevisiondate,$owner,$copyright, |
$creationdate,$lastrevisiondate,$owner,$copyright, |
$hostname,$httphost)=@_; |
$hostname,$httphost,$extrashow)=@_; |
my $result=<<END; |
my $result=<<END; |
<i>$owner</i>, last revised $lastrevisiondate |
<i>$owner</i>, last revised $lastrevisiondate |
<h3><A HREF="http://$httphost$url" TARGET='search_preview'>$title</A></h3> |
<h3><A HREF="http://$httphost$url" TARGET='search_preview'>$title</A></h3> |
Line 846 sub detailed_citation_view {
|
Line 963 sub detailed_citation_view {
|
<b>MIME Type:</b> $mimetag{$mime}<br> |
<b>MIME Type:</b> $mimetag{$mime}<br> |
<b>Language:</b> $language{$lang}<br> |
<b>Language:</b> $language{$lang}<br> |
<b>Copyright/Distribution:</b> $cprtag{$copyright}<br> |
<b>Copyright/Distribution:</b> $cprtag{$copyright}<br> |
|
</p> |
|
$extrashow |
|
<p> |
$shortabstract |
$shortabstract |
</p> |
</p> |
END |
END |
Line 857 sub summary_view {
|
Line 977 sub summary_view {
|
my ($title,$author,$subject,$url,$keywords,$version, |
my ($title,$author,$subject,$url,$keywords,$version, |
$notes,$shortabstract,$mime,$lang, |
$notes,$shortabstract,$mime,$lang, |
$creationdate,$lastrevisiondate,$owner,$copyright, |
$creationdate,$lastrevisiondate,$owner,$copyright, |
$hostname,$httphost)=@_; |
$hostname,$httphost,$extrashow)=@_; |
my $result=<<END; |
my $result=<<END; |
<a href="http://$httphost$url" TARGET='search_preview'>$author</a><br /> |
<a href="http://$httphost$url" TARGET='search_preview'>$author</a><br /> |
$title<br /> |
$title<br /> |
$owner -- $lastrevisiondate<br /> |
$owner -- $lastrevisiondate<br /> |
$cprtag{$copyright}<br /> |
$cprtag{$copyright}<br /> |
|
$extrashow |
</p> |
</p> |
END |
END |
return $result; |
return $result; |
Line 873 sub fielded_format_view {
|
Line 994 sub fielded_format_view {
|
my ($title,$author,$subject,$url,$keywords,$version, |
my ($title,$author,$subject,$url,$keywords,$version, |
$notes,$shortabstract,$mime,$lang, |
$notes,$shortabstract,$mime,$lang, |
$creationdate,$lastrevisiondate,$owner,$copyright, |
$creationdate,$lastrevisiondate,$owner,$copyright, |
$hostname,$httphost)=@_; |
$hostname,$httphost,$extrashow)=@_; |
my $result=<<END; |
my $result=<<END; |
<b>URL: </b> <A HREF="http://$httphost$url" TARGET='search_preview'>$url</A> |
<b>URL: </b> <A HREF="http://$httphost$url" TARGET='search_preview'>$url</A> |
<br /> |
<br /> |
Line 890 sub fielded_format_view {
|
Line 1011 sub fielded_format_view {
|
<b>Copyright/Distribution:</b> $cprtag{$copyright}<br /> |
<b>Copyright/Distribution:</b> $cprtag{$copyright}<br /> |
<b>Repository Location:</b> $hostname<br /> |
<b>Repository Location:</b> $hostname<br /> |
<b>Abstract:</b> $shortabstract<br /> |
<b>Abstract:</b> $shortabstract<br /> |
|
$extrashow |
</p> |
</p> |
END |
END |
return $result; |
return $result; |
Line 900 sub xml_sgml_view {
|
Line 1022 sub xml_sgml_view {
|
my ($title,$author,$subject,$url,$keywords,$version, |
my ($title,$author,$subject,$url,$keywords,$version, |
$notes,$shortabstract,$mime,$lang, |
$notes,$shortabstract,$mime,$lang, |
$creationdate,$lastrevisiondate,$owner,$copyright, |
$creationdate,$lastrevisiondate,$owner,$copyright, |
$hostname,$httphost)=@_; |
$hostname,$httphost,$extrashow)=@_; |
my $result=<<END; |
my $result=<<END; |
<pre> |
<pre> |
<LonCapaResource> |
<LonCapaResource> |
Line 929 sub xml_sgml_view {
|
Line 1051 sub xml_sgml_view {
|
<shortabstract>$shortabstract</shortabstract> |
<shortabstract>$shortabstract</shortabstract> |
</LonCapaResource> |
</LonCapaResource> |
</pre> |
</pre> |
|
$extrashow |
END |
END |
return $result; |
return $result; |
} |
} |