echo
searched
url
search fields available
sql statement
use selected
check all
check none
#@the_can
WOK
end
end
class Search_request #% search_for
attr_accessor :text1,:keywords,:title,:author,:subject,:description,:publisher,:contributor,:date,:type,:format,:identifier,:source,:language,:relation,:coverage,:rights,:comment,:abstract,:owner,:date_created,:date_issued,:date_modified,:date_available,:date_valid
def initialize(search_field='',q='')
@search_field,@q=search_field,q
@text1=@keywords=@title=@author=@subject=@description=@publisher=@contributor=@date=@type=@format=@identifier=@source=@language=@relation=@coverage=@rights=@comment=@abstract=@owner=@date_created=@date_issued=@date_modified=@date_available=@date_valid=''
if @search_field=~/\S/
@text1=text_to_match('text:')
@keywords=text_to_match('key(?:words?)?:')
@title=text_to_match('title:') # DublinCore 1 - title
@author=text_to_match('(?:author|creator)s?:') # DublinCore 2 - creator/author
@subject=text_to_match('subj(?:ect)?:') # DublinCore 3 - subject
@description=text_to_match('description:') # DublinCore 4 - description
@publisher=text_to_match('pub(?:lisher)?:') # DublinCore 5 - publisher
@contributor=text_to_match('contributor:') # DublinCore 6 - contributor
@date=text_to_match('date:') # DublinCore 7 - date dd-mm-yy
@type=text_to_match('type:') # DublinCore 8 - type
@format=text_to_match('format:') # DublinCore 9 - format
@identifier=text_to_match('identifier:') # DublinCore 10 - identifier
@source=text_to_match('source:') # DublinCore 11 - source
@language=text_to_match('language:') # DublinCore 12 - language
@relation=text_to_match('relation:') # DublinCore 13 - relation
@coverage=text_to_match('coverage:') # DublinCore 14 - coverage
@rights=text_to_match('rights:') # DublinCore 15 - rights
@comment=text_to_match('comment:')
@abstract=text_to_match('abs(?:tract)?:')
@owner=text_to_match('owner:')
@date_created=text_to_match('date_created:')
@date_issued=text_to_match('date_issued:')
@date_modified=text_to_match('date_modified:')
@date_available=text_to_match('date_available:')
@date_valid=text_to_match('date_valid:')
@text1=text_to_match unless @keywords or @author or @title or @text1 or @comment or @abstract or @rights or @subject or @publisher or @date
else
@text1=q['s1'] if q['s1']=~/\S/
@keywords=q['key'] if q['key']=~/\S/
@title=q['ti'] if q['ti']=~/\S/
@author=q['au'] if q['au']=~/\S/
@subject=q['sj'] if q['sj']=~/\S/
@description=q['dsc'] if q['dsc']=~/\S/
@publisher=q['pb'] if q['pb']=~/\S/
@contributor=q['cntr'] if q['cntr']=~/\S/
@date=q['dt'] if q['dt']=~/\S/
@type=q['ty'] if q['ty']=~/\S/
@identifier=q['id'] if q['id']=~/\S/
@source=q['src'] if q['src']=~/\S/
@language=q['lang'] if q['lang']=~/\S/
@relation=q['rel'] if q['rel']=~/\S/
@coverage=q['cov'] if q['cov']=~/\S/
@rights=q['cr'] if q['cr']=~/\S/
@comment=q['co'] if q['co']=~/\S/
@abstract=q['ab'] if q['ab']=~/\S/
@date_created=q['dtc'] if q['dtc']=~/\S/
@date_issued=q['dti'] if q['dti']=~/\S/
@date_modified=q['dtm'] if q['dtm']=~/\S/
@date_available=q['dta'] if q['dta']=~/\S/
@date_valid=q['dtv'] if q['dtv']=~/\S/
end
end
def text_to_match(identifier='')
m=Hash.new
m[:string]=/#{identifier}\s*(.+?)/
m[:string]=/#{identifier}\s*(.+?)(?:;|\n|\r|$)/
m[:word]=/#{identifier}[\s(]*(\S+)/
search_string=if @search_field =~m[:word]
search_string=if @search_field =~m[:braces]: m[:braces].match(@search_field)[1]
elsif @search_field =~m[:string]: m[:string].match(@search_field)[1]
else
str=m[:word].match(@search_field)[1]
str.gsub!(/[()]/,'')
str
end
search_string.strip!
search_string.gsub!(/\s+/,'+')
search_string
#else
# "__"
end
end
end
class Dbi_search_string
def initialize(l,t,q)
@l,@t,@q=l,t,q
end
def string
search=Hash.new
search[:search]=Array.new
search[:flag]=false
if @t =~/\S+/ or @q =~/\S+/
if @t =~/\S+/: unescaped_search=CGI.unescape(@t)
elsif @q =~/\S+/: unescaped_search=CGI.unescape(@q)
end
search_construct=Array.new
unescaped_search.gsub!(/\s*(AND|OR)\s*/,"%' \) \\1 #@l LIKE \( '%")
unescaped_search.gsub!(/(.+)/,"#@l LIKE \( '%\\1%' \)")
search_construct << unescaped_search
search_construct=search_construct.join(' ')
search[:search] << search_construct
search[:flag]=true
search
end
search
end
end
class Dbi_search_statement
attr_reader :text_search_flag,:sql_select_body_format,:sql_select_endnotes_format
def initialize(conn,search_for,q)
@conn=conn
@text_search_flag=false
search=Hash.new
search[:text],search[:endnotes]=Array.new,Array.new
st=Dbi_search_string.new('documents.clean',search_for.text1,q['s1']).string
se=Dbi_search_string.new('endnotes.clean',search_for.text1,q['s1']).string
@text_search_flag=st[:flag]
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << se[:search]
end
st=Dbi_search_string.new('metadata.keywords',search_for.keywords,q['key']).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
st=Dbi_search_string.new('metadata.title',search_for.title,q['ti']).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
st=Dbi_search_string.new('metadata.creator',search_for.author,q['au']).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
st=Dbi_search_string.new('metadata.subject',search_for.subject,q['sj']).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
st=Dbi_search_string.new('metadata.description',search_for.description,q['dsc']).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
st=Dbi_search_string.new('metadata.publisher',search_for.publisher,q['pb']).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
st=Dbi_search_string.new('metadata.contributor',search_for.contributor,q['cntr']).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
st=Dbi_search_string.new('metadata.date',search_for.date,q['dt']).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
st=Dbi_search_string.new('metadata.type',search_for.type,q['ty']).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
st=Dbi_search_string.new('metadata.identifier',search_for.identifier,q['id']).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
st=Dbi_search_string.new('metadata.source',search_for.source,q['src']).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
st=Dbi_search_string.new('metadata.language',search_for.language,q['lang']).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
st=Dbi_search_string.new('metadata.relation',search_for.relation,q['rel']).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
st=Dbi_search_string.new('metadata.coverage',search_for.coverage,q['cov']).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
st=Dbi_search_string.new('metadata.rights',search_for.rights,q['cr']).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
st=Dbi_search_string.new('metadata.comment',search_for.comment,q['co']).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
st=Dbi_search_string.new('metadata.abstract',search_for.abstract,q['ab']).string
if st[:flag]
search[:text] << st[:search]
search[:endnotes] << st[:search]
end
@search_text,@search_endnotes=Array.new,Array.new
#%
search[:text].each{|x| @search_text << "#{x} AND " }
search[:endnotes].each{|x| @search_endnotes << "#{x} AND " }
@search_text=@search_text.to_s.gsub!(/AND\s+$/,'')
@search_endnotes=@search_endnotes.to_s.gsub!(/AND\s+$/,'')
end
def sql_select_body
%{SELECT metadata.title, metadata.creator, metadata.filename, metadata.suffix, documents.body, documents.seg, documents.ocn, metadata.tid FROM documents, metadata WHERE #{@search_text} AND documents.metadata_tid = metadata.tid ORDER BY metadata.title, documents.ocn ;}
end
def sql_select_endnotes
%{SELECT metadata.title, metadata.creator, metadata.filename, endnotes.body, endnotes.nr, endnotes.ocn, endnotes.metadata_tid FROM metadata, endnotes WHERE #{@search_endnotes} AND metadata.tid = endnotes.metadata_tid ORDER BY metadata.title, endnotes.nr ;}
end
def sql_select_body_format
%{#{sql_select_body}}
end
def sql_select_endnotes_format
%{#{sql_select_endnotes}}
end
def contents
@conn.select_all(sql_select_body)
end
def endnotes
@conn.select_all(sql_select_endnotes)
end
end
class Tail
def tail
<<-'WOK'
presentations' look and feel
generated by SiSU
version 0.36 2006w07/6 (20060218)
Developed using Ruby on Debian/Gnu/Linux software infrastructure, with the usual GPL (or OSS) suspects. Better - "performance, reliability, scalability, security & total cost of ownership" [not to mention flexibility & choice]