blacklight 4.3.0 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +0 -6
  4. data/Gemfile +5 -0
  5. data/README.md +1 -1
  6. data/Rakefile +0 -1
  7. data/VERSION +1 -1
  8. data/app/assets/javascripts/blacklight/autofocus.js +16 -0
  9. data/app/assets/javascripts/blacklight/blacklight.js +1 -0
  10. data/app/assets/javascripts/blacklight/bookmark_toggle.js +2 -5
  11. data/app/assets/javascripts/blacklight/checkbox_submit.js +3 -6
  12. data/app/assets/javascripts/blacklight/core.js +24 -1
  13. data/app/assets/javascripts/blacklight/css_dropdowns.js +2 -2
  14. data/app/assets/javascripts/blacklight/facet_expand_contract.js +4 -3
  15. data/app/assets/javascripts/blacklight/lightbox_dialog.js +7 -1
  16. data/app/assets/javascripts/blacklight/search_context.js +1 -1
  17. data/app/assets/javascripts/blacklight/select_submit.js +1 -1
  18. data/app/assets/javascripts/blacklight/zebra_stripe.js +1 -1
  19. data/app/assets/stylesheets/blacklight/_blacklight_base.css.scss +1 -0
  20. data/app/assets/stylesheets/blacklight/_catalog.css.scss +5 -0
  21. data/app/assets/stylesheets/blacklight/_facets.css.scss +6 -0
  22. data/app/assets/stylesheets/blacklight/_group.css.scss +14 -0
  23. data/app/assets/stylesheets/blacklight/blacklight_defaults.css.scss +1 -0
  24. data/app/controllers/bookmarks_controller.rb +2 -2
  25. data/app/helpers/blacklight/blacklight_helper_behavior.rb +41 -24
  26. data/app/helpers/blacklight/catalog_helper_behavior.rb +48 -28
  27. data/app/helpers/blacklight/facets_helper_behavior.rb +9 -75
  28. data/app/models/record_mailer.rb +1 -16
  29. data/app/views/bookmarks/index.html.erb +2 -0
  30. data/app/views/catalog/_bookmark_control.html.erb +3 -4
  31. data/app/views/catalog/_document.html.erb +2 -1
  32. data/app/views/catalog/_document_header.html.erb +6 -3
  33. data/app/views/catalog/_email_form.html.erb +0 -7
  34. data/app/views/catalog/_facet_layout.html.erb +1 -1
  35. data/app/views/catalog/_group_default.html.erb +12 -0
  36. data/app/views/catalog/_index_default.html.erb +1 -1
  37. data/app/views/catalog/_opensearch_response_metadata.html.erb +2 -3
  38. data/app/views/catalog/_paginate_compact.html.erb +2 -2
  39. data/app/views/catalog/_results_pagination.html.erb +2 -2
  40. data/app/views/catalog/_search_form.html.erb +1 -1
  41. data/app/views/catalog/_sms_form.html.erb +1 -21
  42. data/app/views/catalog/_thumbnail_default.html.erb +5 -0
  43. data/app/views/catalog/email_sent.html.erb +9 -0
  44. data/app/views/catalog/index.atom.builder +7 -8
  45. data/app/views/catalog/index.html.erb +6 -3
  46. data/app/views/catalog/librarian_view.html.erb +1 -1
  47. data/app/views/catalog/sms_sent.html.erb +9 -0
  48. data/app/views/feedback/complete.html.erb +2 -0
  49. data/app/views/feedback/show.html.erb +7 -5
  50. data/app/views/kaminari/blacklight_compact/_paginator.html.erb +1 -1
  51. data/app/views/layouts/blacklight.html.erb +1 -2
  52. data/app/views/saved_searches/index.html.erb +2 -0
  53. data/app/views/search_history/index.html.erb +1 -1
  54. data/blacklight.gemspec +1 -1
  55. data/config/locales/blacklight.en.yml +11 -0
  56. data/config/locales/blacklight.fr.yml +15 -1
  57. data/gemfiles/rails3.gemfile +7 -0
  58. data/gemfiles/rails4.gemfile +7 -0
  59. data/lib/blacklight.rb +1 -0
  60. data/lib/blacklight/catalog.rb +101 -56
  61. data/lib/blacklight/configuration.rb +1 -1
  62. data/lib/blacklight/controller.rb +7 -4
  63. data/lib/blacklight/facet.rb +79 -0
  64. data/lib/blacklight/routes.rb +0 -1
  65. data/lib/blacklight/solr/document.rb +4 -0
  66. data/lib/blacklight/solr/document/marc_export.rb +1 -1
  67. data/lib/blacklight/solr_helper.rb +39 -8
  68. data/lib/blacklight/solr_response.rb +35 -3
  69. data/lib/blacklight/solr_response/facets.rb +4 -0
  70. data/lib/blacklight/solr_response/group.rb +33 -0
  71. data/lib/blacklight/solr_response/group_response.rb +49 -0
  72. data/lib/blacklight/solr_response/pagination_methods.rb +27 -0
  73. data/lib/blacklight/user.rb +30 -32
  74. data/lib/generators/blacklight/assets_generator.rb +3 -1
  75. data/lib/generators/blacklight/blacklight_generator.rb +28 -125
  76. data/lib/generators/blacklight/marc_generator.rb +66 -0
  77. data/lib/generators/blacklight/models_generator.rb +113 -0
  78. data/lib/generators/blacklight/templates/alternate_controller.rb +9 -0
  79. data/lib/generators/blacklight/templates/config/solr.yml +0 -2
  80. data/lib/generators/blacklight/templates/solr_document.rb +1 -13
  81. data/lib/railties/all_tests.rake +5 -8
  82. data/spec/controllers/catalog_controller_spec.rb +185 -113
  83. data/spec/features/alternate_controller_spec.rb +34 -0
  84. data/spec/features/bookmarks_spec.rb +58 -0
  85. data/spec/features/did_you_mean_spec.rb +135 -0
  86. data/spec/features/librarian_view_spec.rb +13 -0
  87. data/spec/features/record_view_spec.rb +37 -0
  88. data/spec/features/saved_searches_spec.rb +47 -0
  89. data/spec/features/search_filters_spec.rb +137 -0
  90. data/spec/features/search_history_spec.rb +75 -0
  91. data/spec/features/search_pagination_spec.rb +91 -0
  92. data/spec/features/search_results_spec.rb +68 -0
  93. data/spec/features/search_sort_spec.rb +20 -0
  94. data/spec/features/search_spec.rb +108 -0
  95. data/spec/helpers/blacklight_helper_spec.rb +45 -2
  96. data/spec/helpers/catalog_helper_spec.rb +134 -1
  97. data/spec/helpers/facets_helper_spec.rb +8 -0
  98. data/spec/lib/blacklight/solr_response/group_response_spec.rb +78 -0
  99. data/spec/lib/blacklight/solr_response/group_spec.rb +70 -0
  100. data/spec/lib/blacklight_solr_response_spec.rb +11 -5
  101. data/spec/lib/blacklight_user_spec.rb +22 -41
  102. data/spec/lib/solr_helper_spec.rb +73 -1
  103. data/spec/models/record_mailer_spec.rb +3 -3
  104. data/spec/models/{solr_docment_spec.rb → solr_document_spec.rb} +1 -1
  105. data/spec/spec_helper.rb +0 -1
  106. data/spec/support/features.rb +7 -0
  107. data/spec/support/features/session_helpers.rb +22 -0
  108. data/spec/test_app_templates/Gemfile.extra +0 -4
  109. data/spec/test_app_templates/lib/generators/test_app_generator.rb +0 -6
  110. data/spec/test_app_templates/lib/tasks/blacklight_test_app.rake +1 -9
  111. data/spec/views/catalog/_facets.html.erb_spec.rb +2 -1
  112. data/tasks/blacklight.rake +0 -10
  113. metadata +49 -58
  114. data/features/bookmarks.feature +0 -68
  115. data/features/did_you_mean.feature +0 -123
  116. data/features/librarian_view.feature +0 -18
  117. data/features/record_view.feature +0 -40
  118. data/features/saved_searches.feature +0 -49
  119. data/features/search.feature +0 -83
  120. data/features/search_filters.feature +0 -119
  121. data/features/search_history.feature +0 -85
  122. data/features/search_pagination.feature +0 -53
  123. data/features/search_results.feature +0 -61
  124. data/features/search_sort.feature +0 -27
  125. data/features/step_definitions/bookmarks_steps.rb +0 -6
  126. data/features/step_definitions/error_steps.rb +0 -5
  127. data/features/step_definitions/general_steps.rb +0 -50
  128. data/features/step_definitions/record_view_steps.rb +0 -12
  129. data/features/step_definitions/saved_searches_steps.rb +0 -19
  130. data/features/step_definitions/search_facets_steps.rb +0 -29
  131. data/features/step_definitions/search_history_steps.rb +0 -9
  132. data/features/step_definitions/search_pagination_steps.rb +0 -29
  133. data/features/step_definitions/search_result_steps.rb +0 -115
  134. data/features/step_definitions/search_steps.rb +0 -118
  135. data/features/step_definitions/user_steps.rb +0 -5
  136. data/features/step_definitions/web_steps.rb +0 -217
  137. data/features/support/env.rb +0 -65
  138. data/features/support/paths.rb +0 -48
  139. data/features/support/selectors.rb +0 -40
  140. data/lib/railties/blacklight_cucumber.rake +0 -126
  141. data/lib/solrmarc.log.1 +0 -854
@@ -1,3 +1,4 @@
1
+ <div id="content" class="span9">
1
2
  <h1>Send Us Feedback</h1>
2
3
 
3
4
  <% unless @errors.empty? %>
@@ -11,10 +12,11 @@
11
12
 
12
13
  <%= form_tag do %>
13
14
  <fieldset>
14
- <div class="row"><%= label_tag t('active_record.attributes.feedback.name') %> <%= text_field_tag :name, params[:name] %></div>
15
- <div class="row"><%= label_tag t('active_record.attributes.feedback.email') %> <%= text_field_tag :email, params[:email] %></div>
16
- <div class="row"><%= label_tag t('active_record.attributes.feedback.message') %> <%= text_area_tag :message, params[:message] %></div>
17
- <%#= show_simple_captcha(:image_style => 'random', :label => "Enter the characters you see into the text field") %>
18
- <div class="row"><%= label_tag '' %><%= submit_tag t('blacklight.feedback.submit') %></div>
15
+ <%= label_tag t('active_record.attributes.feedback.name') %> <%= text_field_tag :name, params[:name] %>
16
+ <%= label_tag t('active_record.attributes.feedback.email') %> <%= text_field_tag :email, params[:email] %>
17
+ <%= label_tag t('active_record.attributes.feedback.message') %> <%= text_area_tag :message, params[:message] %>
18
+
19
+ <%= label_tag '' %><%= submit_tag t('blacklight.feedback.submit') %>
19
20
  </fieldset>
20
21
  <% end %>
22
+ </div>
@@ -8,8 +8,8 @@
8
8
 
9
9
  Paginator now using the Bootstrap paginator class
10
10
  -%>
11
-
12
11
  <%- pagination_info_cache = render_pagination_info @response %>
12
+
13
13
  <%= paginator.render do -%>
14
14
  <%= prev_page_tag %> | <%= pagination_info_cache %> | <%= next_page_tag %>
15
15
  <% end -%>
@@ -27,8 +27,7 @@
27
27
  <![endif]-->
28
28
 
29
29
  </head>
30
- <% onload_text = "$('input#q').focus();" if params[:q].to_s.empty? and params[:f].to_s.empty? and params[:id].nil? %>
31
- <body onload="<%= onload_text %>" class="<%= render_body_class %>">
30
+ <body class="<%= render_body_class %>">
32
31
  <%= render :partial => 'shared/header_navbar' %>
33
32
 
34
33
  <div id="ajax-modal" class="modal hide fade" tabindex="-1"></div>
@@ -1,3 +1,4 @@
1
+ <div id="content" class="span9">
1
2
  <h1><%= t('blacklight.saved_searches.title') %></h1>
2
3
 
3
4
  <%- if current_or_guest_user.blank? -%>
@@ -25,3 +26,4 @@
25
26
 
26
27
  <%- end -%>
27
28
 
29
+ </div>
@@ -1,4 +1,4 @@
1
- <div id="content" class="span9">
1
+ <div id="content" class="span12">
2
2
  <h1><%=t('blacklight.search_history.title')%></h1>
3
3
  <%- if @searches.blank? -%>
4
4
  <h2><%=t('blacklight.search_history.no_history')%></h2>
data/blacklight.gemspec CHANGED
@@ -5,7 +5,7 @@ Gem::Specification.new do |s|
5
5
  s.name = "blacklight"
6
6
  s.version = Blacklight::VERSION
7
7
  s.platform = Gem::Platform::RUBY
8
- s.authors = ["Jonathan Rochkind", "Matt Mitchell", "Chris Beer", "Jessie Keck", "Jason Ronallo", "Vernon Chapman", "Mark A. Matienzo", "Dan Funk", "Naomi Dushay"]
8
+ s.authors = ["Jonathan Rochkind", "Matt Mitchell", "Chris Beer", "Jessie Keck", "Jason Ronallo", "Vernon Chapman", "Mark A. Matienzo", "Dan Funk", "Naomi Dushay", "Justin Coyne"]
9
9
  s.email = ["blacklight-development@googlegroups.com"]
10
10
  s.homepage = "http://projectblacklight.org/"
11
11
  s.summary = "Blacklight provides a discovery interface for any Solr (http://lucene.apache.org/solr) index."
@@ -131,6 +131,8 @@ en:
131
131
  url: 'URL: %{url}'
132
132
  message: 'Message: %{message}'
133
133
 
134
+ success: "Email Sent"
135
+
134
136
  errors:
135
137
  to:
136
138
  invalid: 'You must enter a valid email address'
@@ -146,12 +148,14 @@ en:
146
148
  title: '%{value}'
147
149
  author: ' by %{value}'
148
150
  url: 'Link: %{url}'
151
+ success: "SMS Sent"
149
152
  errors:
150
153
  to:
151
154
  invalid: 'You must enter a valid 10 digit phone number'
152
155
  blank: "You must enter a recipient's phone number in order to send this message"
153
156
  carrier:
154
157
  blank: 'You must select a carrier'
158
+ invalid: "You must enter a valid carrier"
155
159
 
156
160
  back_to_search: 'Back to Search'
157
161
  back_to_bookmarks: 'Back to Bookmarks'
@@ -200,6 +204,8 @@ en:
200
204
  more: 'more »'
201
205
  selected:
202
206
  remove: '[remove]'
207
+ group:
208
+ more: 'more »'
203
209
  filters:
204
210
  title: 'You searched for:'
205
211
  label: '%{label}:'
@@ -209,6 +215,7 @@ en:
209
215
  librarian_view:
210
216
  title: 'Librarian View'
211
217
  leader: 'LEADER %{leader}'
218
+ empty: 'No MARC data found.'
212
219
  start_over: 'Start Over'
213
220
  show:
214
221
  title: '%{document_title} - %{application_name}'
@@ -216,6 +223,10 @@ en:
216
223
  atom_feed: 'Atom for results'
217
224
  fields:
218
225
  default: 'Keyword'
226
+ bookmarks:
227
+ present: "In Bookmarks"
228
+ absent: "Bookmark"
229
+ inprogress: "Saving..."
219
230
 
220
231
  entry_name:
221
232
  default: 'entry'
@@ -20,7 +20,7 @@ fr:
20
20
  next: 'Suivante &raquo;'
21
21
 
22
22
  blacklight:
23
- application_name: 'Blacklight BCU'
23
+ application_name: 'Blacklight'
24
24
 
25
25
  header_links:
26
26
  login: 'Mon compte'
@@ -141,10 +141,13 @@ fr:
141
141
  url: 'URL : %{url}'
142
142
  message: 'Message : %{message}'
143
143
 
144
+ success: "Message envoyé"
145
+
144
146
  errors:
145
147
  to:
146
148
  invalid: 'Vous devez saisir une adresse correcte.'
147
149
  blank: 'Vous devez saisir l''adresse de votre destinataire.'
150
+
148
151
  sms:
149
152
  form:
150
153
  title: 'Envoyer par SMS'
@@ -156,12 +159,16 @@ fr:
156
159
  title: '%{value}'
157
160
  author: ' by %{value}'
158
161
  url: 'Lien : %{url}'
162
+
163
+ success: "SMS envoyé"
164
+
159
165
  errors:
160
166
  to:
161
167
  invalid: 'Vous devez saisir un numéro de téléphone à 10 chiffres.'
162
168
  blank: "Vous devez saisir le numéro de téléphone de votre destinataire."
163
169
  carrier:
164
170
  blank: 'Vous devez choisir un opérateur.'
171
+ invalid: "Vous devez choisir le opérateur valide."
165
172
 
166
173
  back_to_search: 'Retour aux résultats'
167
174
  back_to_bookmarks: 'Retour aux favoris'
@@ -213,6 +220,8 @@ fr:
213
220
  more: 'plus »'
214
221
  selected:
215
222
  remove: '[ X ]'
223
+ group:
224
+ more: 'plus »'
216
225
  filters:
217
226
  title: 'Vous avez demandé :'
218
227
  label: '%{label}:'
@@ -222,6 +231,7 @@ fr:
222
231
  librarian_view:
223
232
  title: 'Vue UNIMARC'
224
233
  leader: 'LABEL %{leader}'
234
+ empty: 'Pas MARC trouvé.'
225
235
  start_over: 'Accueil'
226
236
  show:
227
237
  title: '%{document_title} - %{application_name}'
@@ -229,6 +239,10 @@ fr:
229
239
  atom_feed: 'Atom pour les résultats'
230
240
  fields:
231
241
  default: 'Keyword'
242
+ bookmarks:
243
+ present: "Dans panier"
244
+ absent: "Ajouter au panier"
245
+ inprogress: "En cours"
232
246
 
233
247
  entry_name:
234
248
  default: 'résultat'
@@ -8,6 +8,13 @@ gem 'simplecov-rcov', :platform => :mri
8
8
 
9
9
  gem 'rails', "~> 3.2"
10
10
 
11
+ group :test do
12
+ gem 'devise'
13
+ gem "bootstrap-sass"
14
+ gem 'turbolinks'
15
+ gem "unicode", :platforms => [:mri_18, :mri_19]
16
+ end
17
+
11
18
  f = File.expand_path(File.dirname(__FILE__) + '/../spec/test_app_templates/Gemfile.extra')
12
19
  if File.exists?(f)
13
20
  eval File.read(f), nil, f
@@ -8,6 +8,13 @@ gem 'simplecov-rcov', :platform => :mri
8
8
 
9
9
  gem 'rails', '~> 4.0.0'
10
10
 
11
+ group :test do
12
+ gem 'devise'
13
+ gem "bootstrap-sass"
14
+ gem 'turbolinks'
15
+ gem "unicode", :platforms => [:mri_18, :mri_19]
16
+ end
17
+
11
18
  f = File.expand_path(File.dirname(__FILE__) + '/../spec/test_app_templates/Gemfile.extra')
12
19
  if File.exists?(f)
13
20
  eval File.read(f), nil, f
data/lib/blacklight.rb CHANGED
@@ -25,6 +25,7 @@ module Blacklight
25
25
 
26
26
  autoload :OpenStructWithHashAccess, 'blacklight/utils'
27
27
  autoload :SolrResponse, 'blacklight/solr_response'
28
+ autoload :Facet, 'blacklight/facet'
28
29
 
29
30
  extend SearchFields
30
31
 
@@ -11,6 +11,7 @@ module Blacklight::Catalog
11
11
  # own controller.
12
12
  included do
13
13
  helper_method :search_action_url
14
+ helper_method :sms_mappings
14
15
  before_filter :search_session, :history_session
15
16
  before_filter :delete_or_assign_search_session_params, :only => :index
16
17
  after_filter :set_additional_search_session_values, :only=>:index
@@ -25,23 +26,23 @@ module Blacklight::Catalog
25
26
  rescue_from RSolr::Error::Http, :with => :rsolr_request_error
26
27
  end
27
28
 
28
- def search_action_url
29
- url_for(:action => 'index', :only_path => true)
30
- end
31
-
32
29
  # get search results from the solr index
33
30
  def index
34
31
 
35
- extra_head_content << view_context.auto_discovery_link_tag(:rss, url_for(params.merge(:format => 'rss')), :title => t('blacklight.search.rss_feed') )
36
- extra_head_content << view_context.auto_discovery_link_tag(:atom, url_for(params.merge(:format => 'atom')), :title => t('blacklight.search.atom_feed') )
37
-
38
32
  (@response, @document_list) = get_search_results
39
33
  @filters = params[:f] || []
40
34
 
41
35
  respond_to do |format|
42
- format.html { save_current_search_params }
36
+ format.html {
37
+ extra_head_content << view_context.auto_discovery_link_tag(:rss, url_for(params.merge(:format => 'rss')), :title => t('blacklight.search.rss_feed') )
38
+ extra_head_content << view_context.auto_discovery_link_tag(:atom, url_for(params.merge(:format => 'atom')), :title => t('blacklight.search.atom_feed') )
39
+ save_current_search_params
40
+ }
43
41
  format.rss { render :layout => false }
44
42
  format.atom { render :layout => false }
43
+
44
+
45
+ format.json { render json: {response: {docs: @document_list, facets: facets_from_request, pages: pagination_info(@response)}}}
45
46
  end
46
47
  end
47
48
 
@@ -52,6 +53,8 @@ module Blacklight::Catalog
52
53
  respond_to do |format|
53
54
  format.html {setup_next_and_previous_documents}
54
55
 
56
+ format.json { render json: {response: {document: @document}}}
57
+
55
58
  # Add all dynamically added (such as by document extensions)
56
59
  # export formats.
57
60
  @document.export_formats.each_key do | format_name |
@@ -75,7 +78,11 @@ module Blacklight::Catalog
75
78
  @pagination = get_facet_pagination(params[:id], params)
76
79
 
77
80
  respond_to do |format|
81
+ # Draw the facet selector for users who have javascript disabled:
78
82
  format.html
83
+ format.json { render json: {response: {facets: @pagination }}}
84
+
85
+ # Draw the partial for the "more" facet modal window:
79
86
  format.js { render :layout => false }
80
87
  end
81
88
  end
@@ -111,68 +118,51 @@ module Blacklight::Catalog
111
118
  # Email Action (this will render the appropriate view on GET requests and process the form and send the email on POST requests)
112
119
  def email
113
120
  @response, @documents = get_solr_response_for_field_values(SolrDocument.unique_key,params[:id])
114
- if request.post?
115
- if params[:to]
116
- url_gen_params = {:host => request.host_with_port, :protocol => request.protocol}
121
+
122
+ if request.post? and validate_email_params
123
+ url_gen_params = {:host => request.host_with_port, :protocol => request.protocol}
117
124
 
118
- if params[:to].match(/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/)
119
- email = RecordMailer.email_record(@documents, {:to => params[:to], :message => params[:message]}, url_gen_params)
120
- else
121
- flash[:error] = I18n.t('blacklight.email.errors.to.invalid', :to => params[:to])
122
- end
123
- else
124
- flash[:error] = I18n.t('blacklight.email.errors.to.blank')
125
- end
125
+ email = RecordMailer.email_record(@documents, {:to => params[:to], :message => params[:message]}, url_gen_params)
126
+ email.deliver
126
127
 
127
- unless flash[:error]
128
- email.deliver
129
- flash[:success] = "Email sent"
130
- redirect_to catalog_path(params['id']) unless request.xhr?
131
- end
132
- end
128
+ flash[:success] = I18n.t("blacklight.email.success")
133
129
 
134
- unless !request.xhr? && flash[:success]
135
130
  respond_to do |format|
136
- format.js { render :layout => false }
137
- format.html
138
- end
131
+ format.html { redirect_to catalog_path(params['id']) }
132
+ format.js { render 'email_sent' }
133
+ end and return
134
+ end
135
+
136
+ respond_to do |format|
137
+ format.html
138
+ format.js { render :layout => false }
139
139
  end
140
140
  end
141
+
141
142
 
142
143
  # SMS action (this will render the appropriate view on GET requests and process the form and send the email on POST requests)
143
144
  def sms
144
145
  @response, @documents = get_solr_response_for_field_values(SolrDocument.unique_key,params[:id])
145
- if request.post?
146
+
147
+ if request.post? and validate_sms_params
146
148
  url_gen_params = {:host => request.host_with_port, :protocol => request.protocol}
147
-
148
- if params[:to]
149
- phone_num = params[:to].gsub(/[^\d]/, '')
150
- unless params[:carrier].blank?
151
- if phone_num.length != 10
152
- flash[:error] = I18n.t('blacklight.sms.errors.to.invalid', :to => params[:to])
153
- else
154
- email = RecordMailer.sms_record(@documents, {:to => phone_num, :carrier => params[:carrier]}, url_gen_params)
155
- end
156
-
157
- else
158
- flash[:error] = I18n.t('blacklight.sms.errors.carrier.blank')
159
- end
160
- else
161
- flash[:error] = I18n.t('blacklight.sms.errors.to.blank')
162
- end
163
149
 
164
- unless flash[:error]
165
- email.deliver
166
- flash[:success] = "SMS sent"
167
- redirect_to catalog_path(params['id']) unless request.xhr?
168
- end
150
+ to = "#{params[:to].gsub(/[^\d]/, '')}@#{sms_mappings[params[:carrier]]}"
151
+
152
+ sms = RecordMailer.sms_record(@documents, { :to => to }, url_gen_params)
153
+ sms.deliver
154
+
155
+ flash[:success] = I18n.t("blacklight.sms.success")
156
+
157
+ respond_to do |format|
158
+ format.html { redirect_to catalog_path(params['id']) }
159
+ format.js { render 'sms_sent' }
160
+ end and return
169
161
  end
170
162
 
171
- unless !request.xhr? && flash[:success]
172
- respond_to do |format|
173
- format.js { render :layout => false }
174
- format.html
175
- end
163
+ respond_to do |format|
164
+ format.js { render :layout => false }
165
+ format.html
176
166
  end
177
167
  end
178
168
 
@@ -191,6 +181,11 @@ module Blacklight::Catalog
191
181
  # non-routable methods ->
192
182
  #
193
183
 
184
+ def search_action_url options = {}
185
+ url_for(options.merge(:action => 'index', :only_path => true))
186
+ end
187
+
188
+
194
189
  # calls setup_previous_document then setup_next_document.
195
190
  # used in the show action for single view pagination.
196
191
  def setup_next_and_previous_documents
@@ -296,7 +291,57 @@ module Blacklight::Catalog
296
291
  redirect_to root_path
297
292
  end
298
293
  end
294
+
295
+ # extract the pagination info from the response object
296
+ def pagination_info response
297
+ h = {}
298
+
299
+ [:current_page, :next_page, :prev_page, :total_pages,
300
+ :limit_value, :offset_value, :total_count,
301
+ :first_page?, :last_page?].each do |k|
302
+ h[k] = response.send(k)
303
+ end
304
+
305
+ h
306
+ end
299
307
 
308
+ def validate_sms_params
309
+ case
310
+ when params[:to].blank?
311
+ flash[:error] = I18n.t('blacklight.sms.errors.to.blank')
312
+ when params[:carrier].blank?
313
+ flash[:error] = I18n.t('blacklight.sms.errors.carrier.blank')
314
+ when params[:to].gsub(/[^\d]/, '').length != 10
315
+ flash[:error] = I18n.t('blacklight.sms.errors.to.invalid', :to => params[:to])
316
+ when !sms_mappings.values.include?(params[:carrier])
317
+ flash[:error] = I18n.t('blacklight.sms.errors.carrier.invalid')
318
+ end
319
+
320
+ flash[:error].blank?
321
+ end
322
+
323
+ def sms_mappings
324
+ {'Virgin' => 'vmobl.com',
325
+ 'AT&T' => 'txt.att.net',
326
+ 'Verizon' => 'vtext.com',
327
+ 'Nextel' => 'messaging.nextel.com',
328
+ 'Sprint' => 'messaging.sprintpcs.com',
329
+ 'T Mobile' => 'tmomail.net',
330
+ 'Alltel' => 'message.alltel.com',
331
+ 'Cricket' => 'mms.mycricket.com'}
332
+ end
333
+
334
+ def validate_email_params
335
+ case
336
+ when params[:to].blank?
337
+ flash[:error] = I18n.t('blacklight.email.errors.to.blank')
338
+ when !params[:to].match(defined?(Devise) ? Devise.email_regexp : /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/)
339
+ flash[:error] = I18n.t('blacklight.email.errors.to.invalid', :to => params[:to])
340
+ end
341
+
342
+ flash[:error].blank?
343
+ end
344
+
300
345
  # when a request for /catalog/BAD_SOLR_ID is made, this method is executed...
301
346
  def invalid_solr_id_error
302
347
  flash[:notice] = I18n.t('blacklight.search.errors.invalid_solr_id')