aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/sisu/v5
diff options
context:
space:
mode:
authorRalph Amissah <ralph@amissah.com>2014-10-19 21:17:49 -0400
committerRalph Amissah <ralph@amissah.com>2014-10-19 21:17:49 -0400
commit18ee3095eb3c7119c6d10a4b9e107d907c7aac19 (patch)
tree3013475489fcc92e9d038ed3628d91d50cb2a4da /lib/sisu/v5
parentv5 v6: db, text search & display field, footnotes moved to end of text object (diff)
v5 v6: cgi, sample search form, find & display endnotes from parent text objectsisu_5.7.1
* remove dedicated endnote search section (as endnotes found & listed from reference text field) * cleaner search results
Diffstat (limited to 'lib/sisu/v5')
-rw-r--r--lib/sisu/v5/cgi_pgsql.rb18
-rw-r--r--lib/sisu/v5/cgi_sql_common.rb99
-rw-r--r--lib/sisu/v5/cgi_sqlite.rb18
3 files changed, 8 insertions, 127 deletions
diff --git a/lib/sisu/v5/cgi_pgsql.rb b/lib/sisu/v5/cgi_pgsql.rb
index 8b4210e0..3ae98ffe 100644
--- a/lib/sisu/v5/cgi_pgsql.rb
+++ b/lib/sisu/v5/cgi_pgsql.rb
@@ -233,11 +233,9 @@ module SiSU_CGI_PgSQL #% database building doc
end
def search_query1
<<-'WOK_SQL'
- @search_text,@search_endnotes='',''
+ @search_text=''
@search_text=search[:text].flatten.join(' AND ')
@search_text=@search_text.gsub(/(doc_objects\.clean~[*]?\(\s*'[^']+'\s*\)\s+(?:(?:AND|OR)\s+doc_objects\.clean~[*]?\(\s*'[^']+'\s*\))+)/,'(\1)')
- @search_endnotes=search[:endnotes].flatten.join(' AND ')
- @search_endnotes=@search_endnotes.gsub(/(endnotes\.clean~\(\s*'[^']+'\s*\)\s+(?:(?:AND|OR)\s+endnotes\.clean~\(\s*'[^']+'\s*\))+)/,'(\1)')
end
WOK_SQL
end
@@ -251,26 +249,12 @@ module SiSU_CGI_PgSQL #% database building doc
select=@sql_statement[:body] + ' ' + @sql_statement[:range]
select
end
- def sql_select_endnotes
- limit ||=@@limit
- offset ||=@@offset
- @sql_statement[:endnotes]=%{SELECT metadata_and_text.title, metadata_and_text.creator_author, metadata_and_text.src_filename, metadata_and_text.language_document_char, endnotes.body, endnotes.nr, endnotes.ocn, endnotes.metadata_tid FROM metadata_and_text, endnotes WHERE (#{@search_endnotes}) AND metadata_and_text.tid = endnotes.metadata_tid ORDER BY metadata_and_text.language_document_char, metadata_and_text.title, metadata_and_text.src_filename, endnotes.nr}
- @sql_statement[:range]=%{LIMIT #{limit} OFFSET #{offset} ;}
- select=@sql_statement[:endnotes] + ' ' + @sql_statement[:range]
- select
- end
def sql_select_body_format
%{<font color="#666666" size="2">#{sql_select_body}</font>}
end
- def sql_select_endnotes_format
- %{<font color="#666666" size="2">#{sql_select_endnotes}</font>}
- end
def contents
@conn.exec(sql_select_body)
end
- def endnotes
- @conn.exec(sql_select_endnotes)
- end
end
WOK_SQL
end
diff --git a/lib/sisu/v5/cgi_sql_common.rb b/lib/sisu/v5/cgi_sql_common.rb
index eb8ce0ab..4d2304ba 100644
--- a/lib/sisu/v5/cgi_sql_common.rb
+++ b/lib/sisu/v5/cgi_sql_common.rb
@@ -331,7 +331,7 @@ module SiSU_CGI_SQL
def search_statement_common
<<-'WOK_SQL'
class DBI_SearchStatement
- attr_reader :text_search_flag,:sql_select_body_format,:sql_select_endnotes_format,:sql_offset,:sql_limit
+ attr_reader :text_search_flag,:sql_select_body_format,:sql_offset,:sql_limit
def initialize(conn,search_for,q,c)
@conn=conn
@text_search_flag=false
@@ -345,107 +345,86 @@ module SiSU_CGI_SQL
@text_search_flag=st[:flag]
if st[:flag]
search[:text] << st[:search]
- search[:endnotes] << se[:search]
end
st=DBI_SearchString.new('metadata_and_text.fulltext',search_for.fulltext,q['ft'],cse).string
if st[:flag]
search[:text] << st[:search]
- search[:endnotes] << st[:search]
end
st=DBI_SearchString.new('metadata_and_text.title',search_for.title,q['ti'],cse).string
if st[:flag]
search[:text] << st[:search]
- search[:endnotes] << st[:search]
end
st=DBI_SearchString.new('metadata_and_text.creator_author',search_for.author,q['au'],cse).string
if st[:flag]
search[:text] << st[:search]
- search[:endnotes] << st[:search]
end
st=DBI_SearchString.new('metadata_and_text.classify_topic_register',search_for.topic_register,q['tr'],cse).string
if st[:flag]
search[:text] << st[:search]
- search[:endnotes] << st[:search]
end
st=DBI_SearchString.new('metadata_and_text.classify_subject',search_for.subject,q['sj'],cse).string
if st[:flag]
search[:text] << st[:search]
- search[:endnotes] << st[:search]
end
st=DBI_SearchString.new('metadata_and_text.classify_keywords',search_for.keywords,q['key'],cse).string
if st[:flag]
search[:text] << st[:search]
- search[:endnotes] << st[:search]
end
st=DBI_SearchString.new('metadata_and_text.notes_description',search_for.description,q['dsc'],cse).string
if st[:flag]
search[:text] << st[:search]
- search[:endnotes] << st[:search]
end
st=DBI_SearchString.new('metadata_and_text.publisher',search_for.publisher,q['pb'],cse).string
if st[:flag]
search[:text] << st[:search]
- search[:endnotes] << st[:search]
end
st=DBI_SearchString.new('metadata_and_text.creator_editor',search_for.editor,q['cntr'],cse).string
if st[:flag]
search[:text] << st[:search]
- search[:endnotes] << st[:search]
end
st=DBI_SearchString.new('metadata_and_text.creator_contributor',search_for.contributor,q['cntr'],cse).string
if st[:flag]
search[:text] << st[:search]
- search[:endnotes] << st[:search]
end
st=DBI_SearchString.new('metadata_and_text.date_published',search_for.date,q['dt'],cse).string
if st[:flag]
search[:text] << st[:search]
- search[:endnotes] << st[:search]
end
st=DBI_SearchString.new('metadata_and_text.notes_type',search_for.type,q['ty'],cse).string
if st[:flag]
search[:text] << st[:search]
- search[:endnotes] << st[:search]
end
st=DBI_SearchString.new('metadata_and_text.original_source',search_for.source,q['src'],cse).string
if st[:flag]
search[:text] << st[:search]
- search[:endnotes] << st[:search]
end
st=DBI_SearchString.new('metadata_and_text.language_document_char',search_for.language,q['lang'],cse).string
if st[:flag]
search[:text] << st[:search]
- search[:endnotes] << st[:search]
end
st=DBI_SearchString.new('metadata_and_text.notes_relation',search_for.relation,q['rel'],cse).string
if st[:flag]
search[:text] << st[:search]
- search[:endnotes] << st[:search]
end
st=DBI_SearchString.new('metadata_and_text.notes_coverage',search_for.coverage,q['cov'],cse).string
if st[:flag]
search[:text] << st[:search]
- search[:endnotes] << st[:search]
end
st=DBI_SearchString.new('metadata_and_text.rights_all',search_for.rights,q['cr'],cse).string
if st[:flag]
search[:text] << st[:search]
- search[:endnotes] << st[:search]
end
st=DBI_SearchString.new('metadata_and_text.notes_comment',search_for.comment,q['co'],cse).string
if st[:flag]
search[:text] << st[:search]
- search[:endnotes] << st[:search]
end
st=DBI_SearchString.new('metadata_and_text.notes_abstract',search_for.abstract,q['ab'],cse).string
if st[:flag]
search[:text] << st[:search]
- search[:endnotes] << st[:search]
end
st=DBI_SearchString.new('metadata_and_text.src_filename',search_for.filename,q['fns'],cse).string
if st[:flag]
search[:text] << st[:search]
- search[:endnotes] << st[:search]
end
@@limit=q['ltd'] if q['ltd']=~/\d+/ # 1000
@@offset=q['off'] if q['off']=~/\d+/ # 0
@@ -648,7 +627,7 @@ module SiSU_CGI_SQL
<<-'WOK_SQL'
@tail=tail
@counter_txt_doc,@counter_txt_ocn,@counter_endn_doc,@counter_endn_ocn=0,0,0,0
- @counters_txt,@counters_endn,@sql_select_body,@sql_select_endnotes='','','',''
+ @counters_txt,@counters_endn,@sql_select_body='','',''
FCGI.each_cgi do |cgi|
begin # all code goes in begin section
@search={ text: [], endnotes: [] }
@@ -739,10 +718,8 @@ module SiSU_CGI_SQL
@canned_base_url="#{@base}?#{mod}&db=#{cgi['db']}"
if checked_case=~/\S/
@search[:text][1]=%{doc_objects.clean~'#{@search_for.text1}'} #s1
- @search[:endnotes][1]=%{endnotes.clean~'#{@search_for.text1}'} #s1
else
@search[:text][1]=%{doc_objects.clean~*'#{@search_for.text1}'} #s1
- @search[:endnotes][1]=%{endnotes.clean~*'#{@search_for.text1}'} #s1
end
canned_note='search url:'
else
@@ -811,28 +788,23 @@ module SiSU_CGI_SQL
: 'Unavailable'
if checked_case=~/\S/
@search[:text]<<%{doc_objects.clean~'#{CGI.unescape(s1)}'}
- @search[:endnotes]<<%{endnotes.clean~'#{CGI.unescape(s1)}'}
else
@search[:text]<<%{doc_objects.clean~*'#{CGI.unescape(s1)}'}
- @search[:endnotes]<<%{endnotes.clean~*'#{CGI.unescape(s1)}'}
end
#% dbi_request
dbi_statement=DBI_SearchStatement.new(@conn,@search_for,q,checked_case)
@text_search_flag=false
@text_search_flag=dbi_statement.text_search_flag
s_contents=dbi_statement.contents
- s_endnotes=dbi_statement.endnotes
- @body_main,@endnotes='',''
+ @body_main=''
@search_regx=nil
oldtid=0
if @text_search_flag
if checked_sql =~/\S/
sql_select_body=dbi_statement.sql_select_body_format
- sql_select_endnotes=dbi_statement.sql_select_endnotes_format
- else sql_select_body,sql_select_endnotes='',''
+ else sql_select_body=''
end
- @body_main << '<p><hr><br /><b>Main Text:</b><br />' << sql_select_body
- @endnotes << '<p><hr><br /><b>Endnotes:</b><br />' << sql_select_endnotes
+ @body_main << sql_select_body
else
end
@hostpath="#{@hosturl_files}/#{@stub}"
@@ -884,16 +856,6 @@ module SiSU_CGI_SQL
"#{path_html_seg(fn,ln)}/#{seg}.html"
end
end
- def path_endnotes(fn,ln=nil)
- if @output_dir_structure_by =='filename' \
- or @output_dir_structure_by =='filetype'
- @lingual =='mono' \
- ? "#{path_html_seg(fn,ln)}/endnotes.html"
- : "#{path_html_seg(fn,ln)}/endnotes.#{ln}.html"
- else
- "#{path_html_seg(fn,ln)}/endnotes.html"
- end
- end
def path_html_doc(fn,ln=nil)
case @output_dir_structure_by
when 'filename'
@@ -1003,56 +965,7 @@ module SiSU_CGI_SQL
end
@body_main << output #+ details
end
- #text_objects_endnote
oldtid = 0
- s_endnotes.each do |e| #% endnotes
- location=e['src_filename'][/(.+?)\.(?:ssm\.sst|sst)$/,1]
- file_suffix=e['src_filename'][/.+?\.(ssm\.sst|sst)$/,1]
- lang=if location =~ /\S+?~(\S\S\S?)$/
- l=location[/\S+?~(\S\S\S?)$/,1]
- location=location.gsub(/(\S+?)~\S\S\S?/,'\1')
- l=".#{l}"
- else ''
- end
- #metadata_found_endnotes
- if @text_search_flag
- if e['metadata_tid'].to_i != oldtid.to_i
- ti=e['title']
- can_txt_srch=(cgi['view']=~/index/) \
- ? %{<a href="#{@canned_base_url}&fns=#{e['src_filename']}&lang=#{e['language_document_char']}&view=text"><img border="0" width="24" height="16" src="#{@image_src}/b_search.png" alt="search"></a>&nbsp;}
- : %{<a href="#{@canned_base_url}&fns=#{e['src_filename']}&lang=#{e['language_document_char']}&view=index"><img border="0" width="24" height="16" src="#{@image_src}/b_search.png" alt="search"></a>&nbsp;}
- title=%{<br /><hr><span style="background-color: #{@color_heading}"><a href="#{path_toc(location,e['language_document_char'])}"><img border="0" width="15" height="18" src="#{@image_src}/b_toc.png" alt="toc html">&nbsp;#{ti}</a></span> [#{e['language_document_char']}] by #{e['creator_author']} #{can_txt_srch}<a href="#{path_toc(location,e['language_document_char'])}"><img border="0" width="15" height="18" src="#{@image_src}/b_toc.png" alt="toc html"></a>&nbsp;<a href="#{path_manifest(location,e['language_document_char'])}"><img border="0" width="15" height="15" src="#{@image_src}/b_info.png" alt="manifest"></a><br />} if file_suffix=~/s/
- @counter_endn_doc+=1
- oldtid=e['metadata_tid'].to_i
- else title = ''
- end
- if cgi['view']=~/text/ \
- or (cgi['view']!~/index/ and cgi['search'] !~/search db/) #% txt endnotes
- @counter_endn_ocn+=1
- matched_endnote=(@search_regx.to_s.is_a?(String) \
- && @search_regx.to_s=~/\S\S+/) \
- ? (matched=e['body'].gsub(/(<a\s+href="https?:\/\/[^><\s]+#{@search_regx}[^>]+?>|#{@search_regx})/mi,%{<span style="background-color: #{@color_match}">\\1</span>}))
- : e['body']
- output=%{#{title}<hr><font size="2">note <b><a href="#{path_endnotes(location,e['language_document_char'])}#_#{e['nr']}">#{e['nr']}</a></b> referred to from ocn <a href="#{path_html_doc(location,e['language_document_char'])}#o#{e['ocn']}">#{e['ocn']}</a>:</font> #{matched_endnote}}
- else #elsif cgi['view']=~/index/ #doc #FIX #% idx endnotes
- @counter_endn_ocn+=1
- output=%{#{title}<a href="#{path_endnotes(location,e['language_document_char'])}#_#{e['nr']}">#{e['nr']}</a> [&sect; <a href="#{path_html_doc(location,e['language_document_char'])}#o#{e['ocn']}">#{e['ocn']}</a>], }
- end
- @counters_endn=if @counter_endn_doc > 0
- if checked_stats =~/\S/
- @@lt_e=@counter_endn_ocn==dbi_statement.sql_match_limit.to_i \
- ? true
- : false
- start=(@@offset.to_i+1).to_s
- range=(@@offset.to_i+@counter_endn_ocn.to_i).to_s
- %{<font size="2" color="#666666">Found #{@counter_endn_ocn} times in the endnotes of #{@counter_endn_doc} documents [ matches #{start} to #{range} ]</font><br />}
- else ''
- end
- end
- @endnotes << output #+ details
- else @endnotes='' #does not take out yet
- end
- end
offset=dbi_statement.sql_offset.to_s
limit=dbi_statement.sql_match_limit.to_s
@@lt_t ||=false; @@lt_e ||=false
@@ -1060,7 +973,7 @@ module SiSU_CGI_SQL
? dbi_statement.pre_next(true,@image_src).to_s
: dbi_statement.pre_next(false,@image_src).to_s
limit=dbi_statement.sql_match_limit.to_s
- cgi.out{@header.force_encoding("UTF-8") + @counters_txt.force_encoding("UTF-8") + @counters_endn.force_encoding("UTF-8") + canned.force_encoding("UTF-8") + @body_main.force_encoding("UTF-8") + @endnotes.force_encoding("UTF-8") + canned.force_encoding("UTF-8") + @tail.force_encoding("UTF-8")} #% print cgi_output_header+counters+body+endnotes
+ cgi.out{@header.force_encoding("UTF-8") + @counters_txt.force_encoding("UTF-8") + @counters_endn.force_encoding("UTF-8") + canned.force_encoding("UTF-8") + @body_main.force_encoding("UTF-8") + canned.force_encoding("UTF-8") + @tail.force_encoding("UTF-8")} #% print cgi_output_header+counters+body
end
rescue Exception => e
s='<pre>' + CGI::escapeHTML(e.backtrace.reverse.join("\n"))
diff --git a/lib/sisu/v5/cgi_sqlite.rb b/lib/sisu/v5/cgi_sqlite.rb
index 2b4e668f..8f3f58eb 100644
--- a/lib/sisu/v5/cgi_sqlite.rb
+++ b/lib/sisu/v5/cgi_sqlite.rb
@@ -211,11 +211,9 @@ module SiSU_CGI_SQLite #% database building doc
end
def search_query1
<<-'WOK_SQL'
- @search_text,@search_endnotes='',''
+ @search_text=''
@search_text=search[:text].flatten.join(' AND ')
@search_text=@search_text.gsub(/(doc_objects\.clean\s+LIKE\s+\(\s*'%[^']+%'\s*\)\s+(?:(?:AND|OR)\s+doc_objects\.clean\s+LIKE\s+\(\s*'%[^']+%'\s*\))+)/,'(\1)')
- @search_endnotes=search[:endnotes].flatten.join(' AND ')
- @search_endnotes=@search_endnotes.gsub(/(endnotes\.clean\s+LIKE\s+\(\s*'%[^']+%'\s*\)\s+(?:(?:AND|OR)\s+endnotes\.clean\s+LIKE\s+\(\s*'%[^']+%'\s*\))+)/,'(\1)')
end
WOK_SQL
end
@@ -229,26 +227,12 @@ module SiSU_CGI_SQLite #% database building doc
select=@sql_statement[:body] + ' ' + @sql_statement[:range]
select
end
- def sql_select_endnotes
- limit ||=@@limit
- offset ||=@@offset
- @sql_statement[:endnotes]=%{SELECT metadata_and_text.title, metadata_and_text.creator_author, metadata_and_text.src_filename, metadata_and_text.language_document_char, endnotes.body, endnotes.nr, endnotes.ocn, endnotes.metadata_tid FROM metadata_and_text, endnotes WHERE #{@search_endnotes} AND metadata_and_text.tid = endnotes.metadata_tid ORDER BY metadata_and_text.language_document_char, metadata_and_text.title, metadata_and_text.src_filename, endnotes.nr}
- @sql_statement[:range]=%{LIMIT #{limit} OFFSET #{offset} ;}
- select=@sql_statement[:endnotes] + ' ' + @sql_statement[:range]
- select
- end
def sql_select_body_format
%{<font color="#666666" size="2">#{sql_select_body}</font>}
end
- def sql_select_endnotes_format
- %{<font color="#666666" size="2">#{sql_select_endnotes}</font>}
- end
def contents
@conn.execute(sql_select_body)
end
- def endnotes
- @conn.execute(sql_select_endnotes)
- end
end
WOK_SQL
end