blacklight 3.0pre1
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.
- data/.gitignore +17 -0
- data/.gitmodules +6 -0
- data/.yardopts +4 -0
- data/Gemfile +4 -0
- data/LICENSE +14 -0
- data/README.rdoc +168 -0
- data/Rakefile +9 -0
- data/app/controllers/bookmarks_controller.rb +98 -0
- data/app/controllers/feedback_controller.rb +37 -0
- data/app/controllers/folder_controller.rb +49 -0
- data/app/controllers/saved_searches_controller.rb +45 -0
- data/app/controllers/search_history_controller.rb +25 -0
- data/app/helpers/blacklight_helper.rb +606 -0
- data/app/helpers/bookmarks_helper.rb +3 -0
- data/app/helpers/catalog_helper.rb +65 -0
- data/app/helpers/feedback_helper.rb +2 -0
- data/app/helpers/hash_as_hidden_fields.rb +57 -0
- data/app/helpers/render_constraints_helper.rb +120 -0
- data/app/helpers/saved_searches_helper.rb +2 -0
- data/app/helpers/search_history_helper.rb +2 -0
- data/app/models/bookmark.rb +6 -0
- data/app/models/record_mailer.rb +43 -0
- data/app/models/search.rb +19 -0
- data/app/views/_flash_msg.html.erb +6 -0
- data/app/views/_user_util_links.html.erb +13 -0
- data/app/views/bookmarks/index.html.erb +33 -0
- data/app/views/catalog/_bookmark_control.html.erb +25 -0
- data/app/views/catalog/_bookmark_form.html.erb +8 -0
- data/app/views/catalog/_citation.html.erb +15 -0
- data/app/views/catalog/_constraints.html.erb +7 -0
- data/app/views/catalog/_constraints_element.html.erb +33 -0
- data/app/views/catalog/_did_you_mean.html.erb +10 -0
- data/app/views/catalog/_document_list.html.erb +30 -0
- data/app/views/catalog/_email_form.html.erb +11 -0
- data/app/views/catalog/_facet_limit.html.erb +33 -0
- data/app/views/catalog/_facet_pagination.html.erb +28 -0
- data/app/views/catalog/_facets.html.erb +9 -0
- data/app/views/catalog/_folder_control.html.erb +12 -0
- data/app/views/catalog/_home.html.erb +6 -0
- data/app/views/catalog/_home_text.html.erb +6 -0
- data/app/views/catalog/_index_partials/_default.erb +11 -0
- data/app/views/catalog/_marc_view.html.erb +33 -0
- data/app/views/catalog/_opensearch_response_metadata.html.erb +3 -0
- data/app/views/catalog/_previous_next_doc.html.erb +6 -0
- data/app/views/catalog/_refworks_form.html.erb +7 -0
- data/app/views/catalog/_results_pagination.html.erb +11 -0
- data/app/views/catalog/_search_form.html.erb +14 -0
- data/app/views/catalog/_show_partials/_default.html.erb +9 -0
- data/app/views/catalog/_show_sidebar.html.erb +1 -0
- data/app/views/catalog/_show_tools.html.erb +46 -0
- data/app/views/catalog/_sms_form.html.erb +23 -0
- data/app/views/catalog/_solr_request.html.erb +5 -0
- data/app/views/catalog/_sort_and_per_page.html.erb +20 -0
- data/app/views/catalog/_unapi_microformat.html.erb +1 -0
- data/app/views/catalog/citation.html.erb +1 -0
- data/app/views/catalog/email.erb +1 -0
- data/app/views/catalog/endnote.endnote.erb +1 -0
- data/app/views/catalog/facet.html.erb +28 -0
- data/app/views/catalog/index.atom.builder +108 -0
- data/app/views/catalog/index.html.erb +37 -0
- data/app/views/catalog/index.rss.builder +19 -0
- data/app/views/catalog/librarian_view.html.erb +3 -0
- data/app/views/catalog/opensearch.json.erb +0 -0
- data/app/views/catalog/opensearch.xml.erb +11 -0
- data/app/views/catalog/send_email_record.erb +0 -0
- data/app/views/catalog/show.endnote.erb +1 -0
- data/app/views/catalog/show.html.erb +42 -0
- data/app/views/catalog/show.refworks.erb +1 -0
- data/app/views/catalog/sms.erb +1 -0
- data/app/views/catalog/unapi.xml.builder +6 -0
- data/app/views/feedback/complete.html.erb +3 -0
- data/app/views/feedback/show.html.erb +20 -0
- data/app/views/folder/_tools.html.erb +23 -0
- data/app/views/folder/index.html.erb +44 -0
- data/app/views/layouts/blacklight.html.erb +49 -0
- data/app/views/record_mailer/email_record.erb +6 -0
- data/app/views/record_mailer/sms_record.erb +4 -0
- data/app/views/saved_searches/index.html.erb +27 -0
- data/app/views/search_history/index.html.erb +23 -0
- data/blacklight.gemspec +50 -0
- data/config.ru +4 -0
- data/config/routes.rb +54 -0
- data/db/seeds.rb +7 -0
- data/features/generators.feature +77 -0
- data/features/support/aruba.rb +9 -0
- data/install.rb +0 -0
- data/install/solr.yml +8 -0
- data/lib/blacklight.rb +121 -0
- data/lib/blacklight/catalog.rb +311 -0
- data/lib/blacklight/comma_link_renderer.rb +27 -0
- data/lib/blacklight/configurable.rb +46 -0
- data/lib/blacklight/controller.rb +121 -0
- data/lib/blacklight/engine.rb +32 -0
- data/lib/blacklight/exceptions.rb +13 -0
- data/lib/blacklight/marc.rb +46 -0
- data/lib/blacklight/marc/citation.rb +251 -0
- data/lib/blacklight/search_fields.rb +107 -0
- data/lib/blacklight/solr.rb +7 -0
- data/lib/blacklight/solr/document.rb +239 -0
- data/lib/blacklight/solr/document/dublin_core.rb +40 -0
- data/lib/blacklight/solr/document/email.rb +15 -0
- data/lib/blacklight/solr/document/marc.rb +84 -0
- data/lib/blacklight/solr/document/marc_export.rb +430 -0
- data/lib/blacklight/solr/document/sms.rb +13 -0
- data/lib/blacklight/solr/facet_paginator.rb +93 -0
- data/lib/blacklight/solr_helper.rb +413 -0
- data/lib/blacklight/user.rb +55 -0
- data/lib/blacklight/version.rb +3 -0
- data/lib/colorize.rb +196 -0
- data/lib/generators/blacklight/blacklight_generator.rb +134 -0
- data/lib/generators/blacklight/templates/SolrMarc.jar +0 -0
- data/lib/generators/blacklight/templates/catalog_controller.rb +8 -0
- data/lib/generators/blacklight/templates/config/SolrMarc/config-test.properties +37 -0
- data/lib/generators/blacklight/templates/config/SolrMarc/config.properties +37 -0
- data/lib/generators/blacklight/templates/config/SolrMarc/index.properties +97 -0
- data/lib/generators/blacklight/templates/config/SolrMarc/index_scripts/dewey.bsh +47 -0
- data/lib/generators/blacklight/templates/config/SolrMarc/index_scripts/format.bsh +126 -0
- data/lib/generators/blacklight/templates/config/SolrMarc/translation_maps/README_MAPS +1 -0
- data/lib/generators/blacklight/templates/config/SolrMarc/translation_maps/callnumber_map.properties +407 -0
- data/lib/generators/blacklight/templates/config/SolrMarc/translation_maps/composition_era_map.properties +56 -0
- data/lib/generators/blacklight/templates/config/SolrMarc/translation_maps/country_map.properties +379 -0
- data/lib/generators/blacklight/templates/config/SolrMarc/translation_maps/format_map.properties +50 -0
- data/lib/generators/blacklight/templates/config/SolrMarc/translation_maps/instrument_map.properties +101 -0
- data/lib/generators/blacklight/templates/config/SolrMarc/translation_maps/language_map.properties +490 -0
- data/lib/generators/blacklight/templates/config/blacklight_config.rb +245 -0
- data/lib/generators/blacklight/templates/config/solr.yml +6 -0
- data/lib/generators/blacklight/templates/migrations/add_user_types_to_bookmarks_searches.rb +11 -0
- data/lib/generators/blacklight/templates/migrations/create_bookmarks.rb +17 -0
- data/lib/generators/blacklight/templates/migrations/create_searches.rb +15 -0
- data/lib/generators/blacklight/templates/migrations/remove_editable_fields_from_bookmarks.rb +11 -0
- data/lib/generators/blacklight/templates/public/images/blacklight/bg.png +0 -0
- data/lib/generators/blacklight/templates/public/images/blacklight/border.png +0 -0
- data/lib/generators/blacklight/templates/public/images/blacklight/bul_sq_gry.gif +0 -0
- data/lib/generators/blacklight/templates/public/images/blacklight/checkmark.gif +0 -0
- data/lib/generators/blacklight/templates/public/images/blacklight/logo.png +0 -0
- data/lib/generators/blacklight/templates/public/images/blacklight/magnifying_glass.gif +0 -0
- data/lib/generators/blacklight/templates/public/images/blacklight/remove.gif +0 -0
- data/lib/generators/blacklight/templates/public/images/blacklight/separator.gif +0 -0
- data/lib/generators/blacklight/templates/public/images/blacklight/start_over.gif +0 -0
- data/lib/generators/blacklight/templates/public/javascripts/blacklight.js +485 -0
- data/lib/generators/blacklight/templates/public/javascripts/jquery-1.4.2.min.js +154 -0
- data/lib/generators/blacklight/templates/public/javascripts/jquery-ui-1.8.1.custom.min.js +756 -0
- data/lib/generators/blacklight/templates/public/stylesheets/blacklight.css +487 -0
- data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
- data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-bg_gloss-wave_35_558fd0_500x100.png +0 -0
- data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
- data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
- data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-icons_2e4f81_256x240.png +0 -0
- data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
- data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
- data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/jquery-ui-1.8.1.custom.css +486 -0
- data/lib/generators/blacklight/templates/public/stylesheets/yui.css +31 -0
- data/lib/generators/blacklight/templates/solr_document.rb +30 -0
- data/lib/railties/blacklight.rake +66 -0
- data/lib/railties/cucumber.rake +53 -0
- data/lib/railties/rspec.rake +188 -0
- data/lib/railties/solr_marc.rake +148 -0
- data/lib/railties/test_solr_server.rb +130 -0
- data/spec/helpers/catalog_helper_spec.rb +111 -0
- data/spec/views/catalog/_sms_form.html.erb_spec.rb +19 -0
- data/tasks/blacklight_tasks.rake +4 -0
- data/uninstall.rb +1 -0
- metadata +431 -0
data/.gitignore
ADDED
data/.gitmodules
ADDED
data/.yardopts
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
##########################################################################
|
|
2
|
+
# Copyright 2008 Rector and Visitors of the University of Virginia
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
data/README.rdoc
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
Please note: The main Blacklight website is http://projectblacklight.org
|
|
2
|
+
|
|
3
|
+
=Installing Blacklight
|
|
4
|
+
|
|
5
|
+
== Some background information
|
|
6
|
+
|
|
7
|
+
Blacklight is open source discovery software. Libraries (or anyone else) can use Blacklight to enable searching and browsing of their collections online. Blacklight uses the Apache SOLR ( http://lucene.apache.org/solr ) search engine to index and search full text and/or metadata, and Blacklight has a highly configurable Ruby on Rails front-end. Blacklight was originally developed at the University of Virginia Library and is made public under an Apache 2.0 license.
|
|
8
|
+
|
|
9
|
+
== Install & Use (With Devise)
|
|
10
|
+
|
|
11
|
+
Create a new rails 3 application
|
|
12
|
+
|
|
13
|
+
$ rails new my_app
|
|
14
|
+
|
|
15
|
+
Add blacklight to your gem file
|
|
16
|
+
|
|
17
|
+
/my_app/Gemfile
|
|
18
|
+
...
|
|
19
|
+
gem 'blackight'
|
|
20
|
+
|
|
21
|
+
Install blacklight
|
|
22
|
+
|
|
23
|
+
$ rails generate blacklight --devise
|
|
24
|
+
|
|
25
|
+
Run your database migrations
|
|
26
|
+
|
|
27
|
+
$ rake db:migrate
|
|
28
|
+
|
|
29
|
+
Start up your application
|
|
30
|
+
|
|
31
|
+
$ rails server
|
|
32
|
+
|
|
33
|
+
Visit the catalog at: http://localhost/catalog
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
== Install and Use (with a custom user authentication system)
|
|
37
|
+
|
|
38
|
+
Blacklight 3 requires Rails 3.0 or greater.
|
|
39
|
+
|
|
40
|
+
Add the blacklight gem to your ./Gemfile
|
|
41
|
+
|
|
42
|
+
gem 'blacklight'
|
|
43
|
+
|
|
44
|
+
$ bundle install
|
|
45
|
+
|
|
46
|
+
If you have a user model already, the Blacklight generator will connect to it automatically during installation. However, you will need to make sure the following named routes are included in your /config/routes.rb file:
|
|
47
|
+
|
|
48
|
+
match 'new_user_session', :to => 'Your User Session Controller # Log in action'
|
|
49
|
+
match 'destroy_user_session', :to => 'Your User Session Controller # Log Out action'
|
|
50
|
+
|
|
51
|
+
And you will need to make sure the following helper methods are available:
|
|
52
|
+
|
|
53
|
+
current_user - Which should return a user object that include Blacklight::User
|
|
54
|
+
user_session - Which should return a user session
|
|
55
|
+
|
|
56
|
+
Once these are in place, you can run the Blacklight Installation Generator:
|
|
57
|
+
|
|
58
|
+
rails generate blacklight
|
|
59
|
+
|
|
60
|
+
Execute your migrations, and you should be good to go.
|
|
61
|
+
|
|
62
|
+
rake db:migrate
|
|
63
|
+
|
|
64
|
+
Start up your application
|
|
65
|
+
|
|
66
|
+
$ rails server
|
|
67
|
+
|
|
68
|
+
Visit the catalog at: http://localhost/catalog
|
|
69
|
+
|
|
70
|
+
== Setting up a development environment
|
|
71
|
+
|
|
72
|
+
Checkout the code:
|
|
73
|
+
|
|
74
|
+
$ git clone git@github.com:projectblacklight/blacklight.git blacklight
|
|
75
|
+
$ cd blacklight
|
|
76
|
+
|
|
77
|
+
(While the rails3 branch is still a seperate branch called 'rails3':)
|
|
78
|
+
$ git checkout -t origin/rails3
|
|
79
|
+
|
|
80
|
+
Now create a test bed application inside of Blacklight that will allow you
|
|
81
|
+
to include Blacklight as a gem.
|
|
82
|
+
The test_app directory already exists, and contains a .gitignore file that
|
|
83
|
+
will mean all of the generated code is ingored. - There are a few directories
|
|
84
|
+
already in palce in test_app that WILL be included in the git repository. These
|
|
85
|
+
include:
|
|
86
|
+
* test_app/features - which contains cucumber tests for blacklight
|
|
87
|
+
* test_app/spec - rspec tests
|
|
88
|
+
* test_app/jetty - The blacklight Jetty module (discussed later)
|
|
89
|
+
* test_app/data - Another remote module.
|
|
90
|
+
|
|
91
|
+
To create the rails application:
|
|
92
|
+
|
|
93
|
+
$ rails new test_app --skip-test-unit --skip-git
|
|
94
|
+
|
|
95
|
+
Or if you are using Jruby:
|
|
96
|
+
|
|
97
|
+
$ jruby -S rails new test_app -m http://jruby.org/rails3.rb --skip-test-unit --skip-git
|
|
98
|
+
|
|
99
|
+
Add gem 'blacklight' to the test applications Gemfile:
|
|
100
|
+
|
|
101
|
+
gem 'blacklight', :path => '../'
|
|
102
|
+
|
|
103
|
+
Run bundle install in the test app
|
|
104
|
+
$ bundle install
|
|
105
|
+
|
|
106
|
+
Install and configure blacklight (with devise setting)
|
|
107
|
+
$ rails generate blacklight --devise
|
|
108
|
+
|
|
109
|
+
Remove index.html - which will allow the routes to take you directly to the catalog page.
|
|
110
|
+
$ rm public/index.html (allow us to redirect to catalog)
|
|
111
|
+
|
|
112
|
+
Migrate your database
|
|
113
|
+
$ rake db:migrate
|
|
114
|
+
|
|
115
|
+
Get Solr running somewhere. If you don't have Solr installed, blacklight comes with a default setup.
|
|
116
|
+
$ cd blacklight
|
|
117
|
+
$ git submodule init
|
|
118
|
+
$ git submodule update
|
|
119
|
+
$ cd test_app
|
|
120
|
+
$ rake solr:marc:index_test_data RAILS_ENV=test
|
|
121
|
+
$ cd jetty
|
|
122
|
+
$ java -jar start.jar
|
|
123
|
+
|
|
124
|
+
Start up your Server, and take a test run. (from blacklight/test_app)
|
|
125
|
+
$ rails server
|
|
126
|
+
|
|
127
|
+
Now go check it out, should be running.
|
|
128
|
+
|
|
129
|
+
== Running the tests
|
|
130
|
+
|
|
131
|
+
You will need to add some gems to your test_app's Gemfile
|
|
132
|
+
|
|
133
|
+
group :development, :test do
|
|
134
|
+
gem "rspec"
|
|
135
|
+
gem "rspec-rails", "~>2.5.0"
|
|
136
|
+
gem "cucumber-rails"
|
|
137
|
+
gem "database_cleaner"
|
|
138
|
+
gem "capybara"
|
|
139
|
+
gem "webrat"
|
|
140
|
+
gem "aruba"
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
Run bundle install
|
|
144
|
+
|
|
145
|
+
$ bundle install
|
|
146
|
+
|
|
147
|
+
Install cucumber
|
|
148
|
+
|
|
149
|
+
$ rails generate cucumber:install
|
|
150
|
+
|
|
151
|
+
If you haven't yet done this to load the bundled jetty/solr environment and test data in your blacklight checkout, from the blacklight checkout dir:
|
|
152
|
+
git submodule init
|
|
153
|
+
git submodule update
|
|
154
|
+
|
|
155
|
+
Load in the test data
|
|
156
|
+
|
|
157
|
+
$ rake solr:marc:index_test_data RAILS_ENV=test
|
|
158
|
+
|
|
159
|
+
Run the tests
|
|
160
|
+
|
|
161
|
+
$ rake solr:spec
|
|
162
|
+
$ rake solr:features
|
|
163
|
+
|
|
164
|
+
==Pre-requisites
|
|
165
|
+
Whichever method you choose for installation, be sure you have all the pre-requisites in place. You can find these detailed in {PRE-REQUISITES}[https://github.com/projectblacklight/blacklight/wiki/PRE-REQUISITES]
|
|
166
|
+
|
|
167
|
+
==Running solr
|
|
168
|
+
You'll also want some information about how Blacklight expects Apache SOLR ( http://lucene.apache.org/solr ) to run, which you can find in {README_SOLR}[https://github.com/projectblacklight/blacklight/wiki/README_SOLR]
|
data/Rakefile
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# note that while this is mostly restful routing, the #update and #destroy actions
|
|
2
|
+
# take the Solr document ID as the :id, NOT the id of the actual Bookmark action.
|
|
3
|
+
class BookmarksController < ApplicationController
|
|
4
|
+
|
|
5
|
+
before_filter :verify_user
|
|
6
|
+
|
|
7
|
+
# Beware, :id is the Solr document_id, not the actual Bookmark id.
|
|
8
|
+
# idempotent, as PUT is supposed to be.
|
|
9
|
+
# you can also send a bookmark[title] param, which will be used for simplest case
|
|
10
|
+
# or fall through display of Bookmark in list.
|
|
11
|
+
def update
|
|
12
|
+
bookmark = current_user.existing_bookmark_for(params[:id])
|
|
13
|
+
if bookmark
|
|
14
|
+
#update existing one with new values if present
|
|
15
|
+
bookmark.attributes = params[:bookmark] if params[:bookmark]
|
|
16
|
+
else
|
|
17
|
+
# create new one with values and document_id
|
|
18
|
+
bookmark = current_user.bookmarks.build(params[:bookmark].merge(:document_id => params[:id]))
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
success = bookmark.save
|
|
22
|
+
|
|
23
|
+
unless request.xhr?
|
|
24
|
+
if bookmark.save
|
|
25
|
+
flash[:notice] = "Successfully added bookmark."
|
|
26
|
+
else
|
|
27
|
+
flash[:error] = "Could not save bookmark."
|
|
28
|
+
end
|
|
29
|
+
redirect_to :back
|
|
30
|
+
else
|
|
31
|
+
#ajaxy request doesn't need a redirect and shouldn't have flash set
|
|
32
|
+
render :text => "", :status => (success ? "200" : "500" )
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def index
|
|
37
|
+
@bookmarks = current_user.bookmarks.paginate :page => params[:page]
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# For adding a single bookmark, suggest use PUT/#update to
|
|
41
|
+
# /bookmarks/$docuemnt_id instead.
|
|
42
|
+
# But this method, accessed via POST to /bookmarks, can be used for
|
|
43
|
+
# creating multiple bookmarks at once, by posting with keys
|
|
44
|
+
# such as bookmarks[n][document_id], bookmarks[n][title].
|
|
45
|
+
# It can also be used for creating a single bookmark by including keys
|
|
46
|
+
# bookmark[title] and bookmark[document_id], but in that case #update
|
|
47
|
+
# is simpler.
|
|
48
|
+
def create
|
|
49
|
+
@bookmarks = params[:bookmarks] || []
|
|
50
|
+
@bookmarks << params[:bookmark] if params[:bookmark]
|
|
51
|
+
|
|
52
|
+
success = true
|
|
53
|
+
@bookmarks.each do |key, bookmark|
|
|
54
|
+
success = false unless current_user.bookmarks.create(bookmark)
|
|
55
|
+
end
|
|
56
|
+
if @bookmarks.length > 0 && success
|
|
57
|
+
flash[:notice] = "Successfully added bookmarks."
|
|
58
|
+
elsif @bookmarks.length > 0
|
|
59
|
+
flash[:error] = "There was a problem adding bookmarks"
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
redirect_to :back
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Beware, :id is the Solr document_id, not the actual Bookmark id.
|
|
66
|
+
# idempotent, as DELETE is supposed to be.
|
|
67
|
+
def destroy
|
|
68
|
+
bookmark = current_user.existing_bookmark_for(params[:id])
|
|
69
|
+
|
|
70
|
+
success = (!bookmark) || current_user.bookmarks.delete(bookmark)
|
|
71
|
+
|
|
72
|
+
unless request.xhr?
|
|
73
|
+
if success
|
|
74
|
+
flash[:notice] = "Successfully removed bookmark."
|
|
75
|
+
else
|
|
76
|
+
flash[:error] = "Sorry, there was a problem removing the bookmark."
|
|
77
|
+
end
|
|
78
|
+
redirect_to :back
|
|
79
|
+
else
|
|
80
|
+
# ajaxy request needs no redirect and should not have flash set
|
|
81
|
+
render :text => "", :status => (success ? "200" : "500")
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def clear
|
|
86
|
+
if current_user.bookmarks.clear
|
|
87
|
+
flash[:notice] = "Cleared your bookmarks."
|
|
88
|
+
else
|
|
89
|
+
flash[:error] = "There was a problem clearing your bookmarks."
|
|
90
|
+
end
|
|
91
|
+
redirect_to :action => "index"
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
protected
|
|
95
|
+
def verify_user
|
|
96
|
+
flash[:notice] = "Please log in to manage and view your bookmarks." and raise Blacklight::Exceptions::AccessDenied unless current_user
|
|
97
|
+
end
|
|
98
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
class FeedbackController < ApplicationController
|
|
2
|
+
|
|
3
|
+
# http://expressica.com/simple_captcha/
|
|
4
|
+
# include SimpleCaptcha::ControllerHelpers
|
|
5
|
+
|
|
6
|
+
# show the feedback form
|
|
7
|
+
def show
|
|
8
|
+
@errors=[]
|
|
9
|
+
if request.post?
|
|
10
|
+
if validate
|
|
11
|
+
Notifier.feedback(params)
|
|
12
|
+
redirect_to feedback_complete_path
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
protected
|
|
18
|
+
|
|
19
|
+
# validates the incoming params
|
|
20
|
+
# returns either an empty array or an array with error messages
|
|
21
|
+
def validate
|
|
22
|
+
unless params[:name] =~ /\w+/
|
|
23
|
+
@errors << 'A valid name is required'
|
|
24
|
+
end
|
|
25
|
+
unless params[:email] =~ /\w+@\w+\.\w+/
|
|
26
|
+
@errors << 'A valid email address is required'
|
|
27
|
+
end
|
|
28
|
+
unless params[:message] =~ /\w+/
|
|
29
|
+
@errors << 'A message is required'
|
|
30
|
+
end
|
|
31
|
+
#unless simple_captcha_valid?
|
|
32
|
+
# @errors << 'Captcha did not match'
|
|
33
|
+
#end
|
|
34
|
+
@errors.empty?
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
class FolderController < ApplicationController
|
|
2
|
+
|
|
3
|
+
include Blacklight::SolrHelper
|
|
4
|
+
|
|
5
|
+
# fetch the documents that match the ids in the folder
|
|
6
|
+
def index
|
|
7
|
+
@response, @documents = get_solr_response_for_field_values("id",session[:folder_document_ids] || [])
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# add a document_id to the folder. :id of action is solr doc id
|
|
12
|
+
def update
|
|
13
|
+
session[:folder_document_ids] = session[:folder_document_ids] || []
|
|
14
|
+
session[:folder_document_ids] << params[:id]
|
|
15
|
+
# Rails 3 uses a one line notation for setting the flash notice.
|
|
16
|
+
# flash[:notice] = "#{params[:title] || "Item"} successfully added to Folder"
|
|
17
|
+
respond_to do |format|
|
|
18
|
+
format.html { redirect_to :back, :notice => "#{params[:title] || "Item"} successfully added to Folder"}
|
|
19
|
+
format.js { render :json => session[:folder_document_ids] }
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# remove a document_id from the folder. :id of action is solr_doc_id
|
|
24
|
+
def destroy
|
|
25
|
+
session[:folder_document_ids].delete(params[:id])
|
|
26
|
+
|
|
27
|
+
unless request.xhr?
|
|
28
|
+
respond_to do |format|
|
|
29
|
+
format.html do
|
|
30
|
+
flash[:notice] = "#{params[:title] || "Item"} successfully removed from selected items"
|
|
31
|
+
redirect_to :back
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
else
|
|
35
|
+
render :text => "OK"
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# get rid of the items in the folder
|
|
40
|
+
def clear
|
|
41
|
+
flash[:notice] = "Cleared Selected Items"
|
|
42
|
+
session[:folder_document_ids] = []
|
|
43
|
+
respond_to do |format|
|
|
44
|
+
format.html { redirect_to :back }
|
|
45
|
+
format.js { render :json => session[:folder_document_ids] }
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
class SavedSearchesController < ApplicationController
|
|
2
|
+
before_filter :verify_user
|
|
3
|
+
|
|
4
|
+
def index
|
|
5
|
+
@searches = current_user.searches
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def save
|
|
9
|
+
current_user.searches << Search.find(params[:id])
|
|
10
|
+
if current_user.save
|
|
11
|
+
flash[:notice] = "Successfully saved your search."
|
|
12
|
+
else
|
|
13
|
+
flash[:error] = "The was a problem saving your search."
|
|
14
|
+
end
|
|
15
|
+
redirect_to :back
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Only dereferences the user rather than removing the item in case it
|
|
19
|
+
# is in the session[:history]
|
|
20
|
+
def forget
|
|
21
|
+
if current_user.search_ids.include?(params[:id].to_i) && Search.update(params[:id].to_i, :user_id => nil)
|
|
22
|
+
flash[:notice] = "Successfully removed that saved search."
|
|
23
|
+
else
|
|
24
|
+
flash[:error] = "Couldn't remove that saved search."
|
|
25
|
+
end
|
|
26
|
+
redirect_to :back
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Only dereferences the user rather than removing the items in case they
|
|
30
|
+
# are in the session[:history]
|
|
31
|
+
def clear
|
|
32
|
+
if Search.update_all("user_id = NULL", "user_id = #{current_user.id}")
|
|
33
|
+
flash[:notice] = "Cleared your saved searches."
|
|
34
|
+
else
|
|
35
|
+
flash[:error] = "There was a problem clearing your saved searches."
|
|
36
|
+
end
|
|
37
|
+
redirect_to :action => "index"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
protected
|
|
42
|
+
def verify_user
|
|
43
|
+
flash[:notice] = "Please log in to manage and view your saved searches." and raise Blacklight::Exceptions::AccessDenied unless current_user
|
|
44
|
+
end
|
|
45
|
+
end
|