removing session garbage from repo
[zcc.git] / opac / app / controllers / opac_controller.rb
blob49cb23ed3605211ef648fa08f65ded4fa25fe306
1 class OpacController < ApplicationController
3   #search & record views
4   
5   def record
6     @record = params[:r]
7     @back = params[:term]
8     @start = params[:start]
9     @per_page = params[:per_page]
10     conn = ZOOM::Connection.new
11     conn.connect("localhost", 9999)
12     conn.set_option('charset', 'UTF-8')
13     conn.preferred_record_syntax = 'MARC21'
14     conn.database_name = "zcc"
15     search_term = "@attr 1=1016 \"#{@record}\""
16     rset = conn.search(search_term)
17     #puts "rset.size: #{rset.size}"
18     
19     record = MARC::Record.new_from_marc(rset[0].raw)
20     if record['020'] && record['020']['a']
21       isbn = record['020']['a']
22       isbn_a = isbn.split(/\s/)
23       puts isbn_a
24       @isbn = isbn_a[0]
25     end
26     @isbd = isbd record
27     
28     marc_record = record.to_s
29     marc_record.gsub!("LEADER", "<br>LEADER")
30     @records_string = marc_record.gsub("\n", "<br>")
31   end
33   def isbd r
34     string = "<span id=\"title\">"
35     string += r['245']['a'].to_s + r['245']['b'].to_s + r['245']['c'].to_s + "</span>" 
36     string += "<br /><br /> Published: " + r['260']['a'].to_s + " " + r['260']['b'].to_s + " " + r['260']['c'].to_s 
37     string += "<br /><br /> Edition: " + r['250']['a'].to_s if r['250']
38     string += "<br /><br />Physical Description: " + r['300']['a'].to_s + r['300']['b'].to_s + " " + r['300']['c'].to_s
39     string += "<br><br>ISBN: " + r['020']['a'].to_s if r['020']
40     fields = r.find_all{|f| f.tag == "650"}
41     string += "<br /><br />Subjects: <br/>" if fields.size > 0
42     fields.each do |f|
43       subject = []
44       f.each{|sf| subject << sf.value}
45       string += subject.join("--")
46       string << "<br />"
47     end
48     string += "<br /><br />" + r['505']['a'] if r['505']
49     string 
50   end
51   
52   def search
53     start_time = Time.now
54     p start_time
55     params[:start] = params[:term] == session[:search_term] ? params[:start] : 1
56     @data = params[:term] ? params[:term] : ""
57     session[:search_term] = @data
58     @form_value = @data.gsub("\"","&quot;")
59     
60     @start = params[:start] ? params[:start].to_i : 1
61     p @start
62     @per_page = params[:per_page] ? params[:per_page].to_i : 20
63     #data_a = []
64     #data_a = @data.split("\s") unless @data.nil?
65     data_a = split_params(@data)
66     puts data_a.inspect
67     if data_a.size > 0
68       #search_term = "@attr 2=102 #{" @and " * (data_a.size - 1)} @attr 1=1016 " + data_a.join(" @attr 1=1016 ")
69       search_term = "@attr 2=102 #{" @and " * (data_a.size - 1)} "
70       data_a.each{|t| search_term << ' @attr 1=1016 "' + t + '"'}
71     else
72       search_term = '@attr 1=4 ""'
73     end
74     puts search_term
75     conn = ZOOM::Connection.new
76     conn.connect("localhost", 9999)
77     conn.set_option('charset', 'UTF-8')
78     conn.preferred_record_syntax = 'XML'
79     conn.database_name = "zcc"
80     
81     puts "Searching"
82     rset = conn.search(search_term)
83     puts rset.size
84     @rset_size = rset.size
85     unless @rset_size == 0
86       rset_recs = rset[@start - 1, @per_page]
87       p "gets past rset_recs"
88       @total_records = []
89       all = ''
90       rset_recs.each do |rec|
91         #p rec
92         begin
93           #marc_record = ZCC.convert_char(rec)
94           ##@total_records << MARC::Record.new_from_marc(rec.raw)
95           all << rec.xml
96           #puts @total_records
97         rescue
98           next
99         end
100         #@total_records << marc_record
101       end
102       @total_records = MARC::XMLReader.new(StringIO.new(all))
103     end
104     #puts @total_records
105     #puts "gets here"
106     @time_difference = Time.now - start_time
107     p Time.now
108     puts
109   end
112   
113   def split_params(params)
114     # Find all phrases enclosed in quotes and pull
115     # them into a flat array of phrases
116     phrases = params.scan(/"(.*?)"/).flatten
117   
118     # Remove those phrases from the original string
119     left_over = params.gsub(/"(.*?)"/, "").squeeze(" ").strip
120   
121     # Break up the remaining keywords on whitespace
122     keywords = left_over.split(/ /)
123   
124     # Return one single array of key phrases
125     keywords + phrases
126   end
127