15 require 'highline/import'
20 termsize
= HighLine
::SystemExtensions.terminal_size
21 $term_width = termsize
[0]
22 $term_height = termsize
[1]
23 $clear_code = %x{clear}
26 ft = HighLine::ColorScheme.new do |cs|
27 cs[:headline] = [ :bold, :white, :on_black ]
28 cs[:horizontal_line] = [ :bold, :white, :on_blue]
29 cs[:even_row] = [ :green ]
30 cs[:odd_row] = [ :magenta ]
31 cs[:marc_tag] = [:bold]
33 cs[:field_hilite] = [:bold, :blue]
34 cs[:index] = [:bold, :red]
36 HighLine.color_scheme = ft
39 ##Setting up testing parameter
41 $testing = nil unless $testing == 'v' or $testing == 't'
42 file_mode = true if ARGV[0] == 'file'
43 puts "We're testing " if $testing
44 STDIN.gets if $testing
46 #reading in config from yaml file
47 yamlfile = YAML.load_file( "#{File.expand_path("~")}/.zcc/zcc.yaml" )
48 zservers = yamlfile['zservers']
50 zservers.each do |server|
51 zserver_objects << Zserver.new(server[0], server[1], server[2], server[3])
53 puts zserver_objects.inspect
57 labels = yamlfile['labels']
58 scripting = yamlfile['scripting']
59 $procs = yamlfile['procs']
61 TO_SHOW = yamlfile['to_show']
62 HOW_TO_SAVE = yamlfile['save_filename']
63 TIMESTAMP = Time.now.strftime("%Y%m%d%H%M%S")
64 SCRIPTING = yamlfile['scripting_on']
65 EDITING = yamlfile['subfield_editing']
66 CSV = yamlfile['csv_on']
67 LINTER = yamlfile['linter_on']
68 FORMAT_TO_SAVE = yamlfile['save_record_syntax']
72 #printed once when starting the program.
73 say("Zcc, Copyright (C) 2007 Jason Ronallo\nZcc comes with ABSOLUTELY NO WARRANTY.\nZcc is released under the terms of the GPL v.2 or later.\nSee LICENSE for full information.\n")
74 say("Introductory help. For now see: http://zcc.rubyforge.org/zcc.html")
77 groups = zserver_objects.collect do |server|
85 search_term = ask("\n<%= color('Enter search. [ISBN, title, LCCN (with dash), or :q to quit]', :bolder) %>\nsearch> ", String){ |q| q.readline = true }
86 exit if search_term == ':q'
90 groups.each do |group|
93 servers = zserver_objects.find_all{|server| server.group == group }
94 #puts "searching the following servers: #{servers.join("...\n")}"
96 query = Query.new(search_term, servers)
97 results = query.search(10)
98 #print "results.class" ; puts results.class
99 if results.records.empty?
100 puts "There are no results from group #{group} servers!\n\n\n"
105 return_value = zcc_select_good_marc(results, 'multi')
107 break if return_value == 'done'
111 taken.remove_unselected!
114 say("\a<%= color('This is your combined result set. We will winnow until you choose done or you unselect all records.', :headline) %>")
117 return_value = zcc_select_good_marc(taken, 'multi')
118 continue = false if return_value == 'done'
119 #taken.remove_unselected!
120 #continue = false if taken.length == 0
121 continue = false if taken.selected_length == 0
123 taken.remove_unselected!
124 unless taken.length == 0
125 puts "Here are the records you've selected for processing:"
126 taken.each do |record|
132 taken.records.each do |final_taken|
134 #SCRIPTING and EDITING
138 say("#{ZCC.zcc_marc_str_bold(final_taken.to_s, 'record')}")
139 say("<%= color('SCRIPTING...', :headline) %>")
140 final_taken.local_script(scripting)
146 say("#{ZCC.zcc_marc_str_bold(final_taken.to_s, 'record')}")
147 say("Would you like to <%= color('edit', :headline) %> this record [yes or ANYTHING]? ")
148 edit = STDIN.gets.chomp
149 if edit == ('y' or 'yes')
151 say("#{ZCC.zcc_marc_str_bold(final_taken.to_s, 'record')}")
157 say("<%= color('#{'-'*20}FINAL RECORD#{'-'*20}', :headline) %>")
158 say("#{ZCC.zcc_marc_str_bold(final_taken.to_s, 'record')}")
159 say("<%= color('#{'-'*20}FINAL RECORD#{'-'*20}\a', :headline) %>")
160 print "Would you like to keep this FINAL RECORD? (ANYTHING or n)"
162 to_save_or_not_to_save = STDIN.gets.chomp
164 if to_save_or_not_to_save == 'n'
165 next #if continue? == 'again'
171 say("#{ZCC.zcc_marc_str_bold(final_taken.to_s, 'record')}")
172 say("<%= color('Label making time!', :headline) %>")
173 csv = final_taken.marc_to_csv(labels)
174 print "Final csv:\n#{csv}\n"
178 clear_code_do = false
181 #saves in the directory in which zcc was run
182 if HOW_TO_SAVE == 'search_term'
183 filename = search_term.gsub(' ','_')
184 elsif HOW_TO_SAVE == 'timestamp'
188 FORMAT_TO_SAVE.each do |format|
190 aFile = File.new("#{filename}\.mrc","a+")
191 aFile.write(final_taken.marc.to_marc)
192 puts "#{final_taken.marc['245']['a']} saved in #{filename}\.mrc"
194 elsif format == 'xml'
195 #puts final_taken.marc.to_xml
196 aFile = File.new("#{filename}\.xml","a+")
197 aFile.write(final_taken.marc.to_xml)
198 puts "#{final_taken.marc['245']['a']} saved in #{filename}\.xml"
200 elsif format == 'zebra'
201 #puts final_taken.to_xml
202 File.open("#{File.expand_path("~")}/.zcc/zebra/records/#{Time.now.strftime("%Y%m%d%H%M%S")}\.mrc", "w") do |f|
203 f.write final_taken.marc.to_marc
205 Dir.chdir("#{File.expand_path("~")}/.zcc/zebra") do
206 record_update = `zebraidx update records`
209 #saving to koha2 is untested. Please let me know if it doesn't work--or even if it does.
210 elsif format == 'koha2'
211 out = Tempfile.new("koha2-")
212 out << final_taken.marc.to_marc
214 koha_save = `perl /usr/local/koha/intranet/scripts/misc/migration_tools/bulkmarcimport.pl -v 6 -file #{out.path}`
220 csvFile = File.new("csv-#{filename}\.txt","a+")
222 puts "csv for #{final_taken.marc['245']['a']} saved in csv-#{filename}\.txt"