atrium 0.0.1.alpha

Sign up to get free protection for your applications and to get access to all the features.
Files changed (212) hide show
  1. data/.gitignore +13 -0
  2. data/.gitmodules +3 -0
  3. data/.rvmrc +32 -0
  4. data/GETTING_STARTED.textile +109 -0
  5. data/Gemfile +4 -0
  6. data/Gemfile.lock +320 -0
  7. data/Guardfile +10 -0
  8. data/README.mkd +56 -0
  9. data/Rakefile +6 -0
  10. data/app/assets/images/atrium/ajax-loader.gif +0 -0
  11. data/app/assets/images/atrium/lightbox-ico-loading.gif +0 -0
  12. data/app/assets/images/atrium/logo.png +0 -0
  13. data/app/assets/javascripts/atrium/atrium.js +281 -0
  14. data/app/assets/javascripts/chosen.jquery.js +899 -0
  15. data/app/assets/javascripts/ckeditor.warning.js +65 -0
  16. data/app/assets/javascripts/ckeditor/config.js.coffee +6 -0
  17. data/app/assets/javascripts/ckeditor/jquery.generateId.js +13 -0
  18. data/app/assets/javascripts/ckeditor/jquery.jeditable.ckeditor.js +59 -0
  19. data/app/assets/javascripts/ckeditor/plugins/linkItem/application_link.png +0 -0
  20. data/app/assets/javascripts/ckeditor/plugins/linkItem/dialogs/linkItem.js +1470 -0
  21. data/app/assets/javascripts/ckeditor/plugins/linkItem/plugin.js +16 -0
  22. data/app/assets/javascripts/ckeditor/plugins/linkItem/ui_toolbar_pencil.png +0 -0
  23. data/app/assets/javascripts/jquery.colorbox.js +864 -0
  24. data/app/assets/javascripts/jquery.jeditable.js +543 -0
  25. data/app/assets/stylesheets/atrium/atrium.css +216 -0
  26. data/app/assets/stylesheets/atrium/chosen-sprite.png +0 -0
  27. data/app/assets/stylesheets/atrium/chosen.css +367 -0
  28. data/app/assets/stylesheets/colorbox.css +42 -0
  29. data/app/assets/stylesheets/controls.png +0 -0
  30. data/app/assets/stylesheets/loading.gif +0 -0
  31. data/app/controllers/atrium/base_controller.rb +25 -0
  32. data/app/controllers/atrium/collection_exhibit_order_controller.rb +21 -0
  33. data/app/controllers/atrium/collections_controller.rb +165 -0
  34. data/app/controllers/atrium/customization_controller.rb +41 -0
  35. data/app/controllers/atrium/descriptions_controller.rb +177 -0
  36. data/app/controllers/atrium/exhibit_facet_order_controller.rb +19 -0
  37. data/app/controllers/atrium/exhibits_controller.rb +108 -0
  38. data/app/controllers/atrium/showcases_controller.rb +193 -0
  39. data/app/helpers/atrium/base_helper.rb +6 -0
  40. data/app/models/ability.rb +14 -0
  41. data/app/models/atrium/browse_level.rb +41 -0
  42. data/app/models/atrium/collection.rb +121 -0
  43. data/app/models/atrium/description.rb +128 -0
  44. data/app/models/atrium/essay.rb +21 -0
  45. data/app/models/atrium/exhibit.rb +58 -0
  46. data/app/models/atrium/search/facet.rb +29 -0
  47. data/app/models/atrium/search/facet_selection.rb +17 -0
  48. data/app/models/atrium/showcase.rb +173 -0
  49. data/app/models/atrium/showcase/facet_selection.rb +21 -0
  50. data/app/models/atrium/showcase/item.rb +19 -0
  51. data/app/models/role_mapper.rb +23 -0
  52. data/app/views/_user_util_links.html.erb +25 -0
  53. data/app/views/atrium/collections/_bookmark_control.html.erb +25 -0
  54. data/app/views/atrium/collections/_browse_index.html.erb +20 -0
  55. data/app/views/atrium/collections/_collection_items_index.html.erb +10 -0
  56. data/app/views/atrium/collections/_document.html.erb +24 -0
  57. data/app/views/atrium/collections/_document_list.html.erb +6 -0
  58. data/app/views/atrium/collections/_edit_navigation.html.erb +20 -0
  59. data/app/views/atrium/collections/_folder_control.html.erb +12 -0
  60. data/app/views/atrium/collections/_form.html.erb +93 -0
  61. data/app/views/atrium/collections/_listing.html.erb +18 -0
  62. data/app/views/atrium/collections/_navigation.html.erb +45 -0
  63. data/app/views/atrium/collections/_results_pagination.html.erb +9 -0
  64. data/app/views/atrium/collections/_sort_and_per_page.html.erb +23 -0
  65. data/app/views/atrium/collections/edit.html.erb +5 -0
  66. data/app/views/atrium/collections/new.html.erb +6 -0
  67. data/app/views/atrium/collections/show.html.erb +22 -0
  68. data/app/views/atrium/descriptions/_form.html.erb +64 -0
  69. data/app/views/atrium/descriptions/edit.html.erb +4 -0
  70. data/app/views/atrium/descriptions/index.html.erb +4 -0
  71. data/app/views/atrium/descriptions/new.html.erb +2 -0
  72. data/app/views/atrium/descriptions/show.html.erb +20 -0
  73. data/app/views/atrium/exhibits/_bookmark_control.html.erb +25 -0
  74. data/app/views/atrium/exhibits/_folder_control.html.erb +12 -0
  75. data/app/views/atrium/exhibits/_form.html.erb +108 -0
  76. data/app/views/atrium/exhibits/edit.html.erb +9 -0
  77. data/app/views/atrium/exhibits/new.html.erb +6 -0
  78. data/app/views/atrium/exhibits/show.html.erb +26 -0
  79. data/app/views/atrium/showcases/_showcase_navigation.html.erb +23 -0
  80. data/app/views/atrium/showcases/show.html.erb +1 -0
  81. data/app/views/catalog/_collection_home_text.html.erb +6 -0
  82. data/app/views/catalog/_constraints.html.erb +9 -0
  83. data/app/views/catalog/_default_collection_text.html.erb +18 -0
  84. data/app/views/catalog/_default_home_text.html.erb +6 -0
  85. data/app/views/catalog/_home_text.html.erb +6 -0
  86. data/app/views/catalog/_index_partials/_description.html.erb +8 -0
  87. data/app/views/catalog/_search_form.html.erb +66 -0
  88. data/app/views/catalog/_show_partials/_description.html.erb +15 -0
  89. data/app/views/catalog/browse_show.html.erb +18 -0
  90. data/app/views/catalog/index.html.erb +35 -0
  91. data/app/views/catalog/list_description.html.erb +24 -0
  92. data/app/views/catalog/list_item.html.erb +3 -0
  93. data/app/views/layouts/atrium.html.erb +86 -0
  94. data/app/views/layouts/atrium_themes/default.html.erb +4 -0
  95. data/app/views/layouts/item_listing.html.erb +36 -0
  96. data/app/views/listing/_document.html.erb +27 -0
  97. data/app/views/listing/_document_list.html.erb +3 -0
  98. data/app/views/listing/_item_search.html.erb +27 -0
  99. data/app/views/shared/_banner.html.erb +5 -0
  100. data/app/views/shared/_collection_complete_list.html.erb +33 -0
  101. data/app/views/shared/_collection_search_form.html.erb +12 -0
  102. data/app/views/shared/_collection_title_header.html.erb +3 -0
  103. data/app/views/shared/_featured_sources.html.erb +20 -0
  104. data/app/views/shared/_list_descriptions.html.erb +38 -0
  105. data/app/views/shared/_navigation_browse_levels.html.erb +34 -0
  106. data/app/views/shared/_showcase_configure_menu.html.erb +22 -0
  107. data/app/views/shared/_top_navigation.html.erb +9 -0
  108. data/atrium.gemspec +76 -0
  109. data/config/routes.rb +12 -0
  110. data/init.rb +3 -0
  111. data/lib/application_controller.rb +24 -0
  112. data/lib/atrium.rb +42 -0
  113. data/lib/atrium/application_helper.rb +24 -0
  114. data/lib/atrium/atrium_helper_behavior.rb +162 -0
  115. data/lib/atrium/catalog.rb +203 -0
  116. data/lib/atrium/collections_helper.rb +139 -0
  117. data/lib/atrium/controller.rb +10 -0
  118. data/lib/atrium/descriptions_helper.rb +23 -0
  119. data/lib/atrium/engine.rb +12 -0
  120. data/lib/atrium/layout_helper.rb +13 -0
  121. data/lib/atrium/routes.rb +99 -0
  122. data/lib/atrium/solr_helper.rb +440 -0
  123. data/lib/atrium/version.rb +3 -0
  124. data/lib/generators/atrium/assets_generator.rb +44 -0
  125. data/lib/generators/atrium/atrium_generator.rb +149 -0
  126. data/lib/generators/atrium/cucumber_support_generator.rb +29 -0
  127. data/lib/generators/atrium/templates/config/role_map_cucumber.yml +2 -0
  128. data/lib/generators/atrium/templates/config/role_map_development.yml +2 -0
  129. data/lib/generators/atrium/templates/config/role_map_production.yml +2 -0
  130. data/lib/generators/atrium/templates/config/role_map_test.yml +2 -0
  131. data/lib/generators/atrium/templates/config/solr.yml +10 -0
  132. data/lib/generators/atrium/templates/db/seeds.rb +87 -0
  133. data/lib/generators/atrium/templates/migrations/create_atrium_browse_levels.rb +18 -0
  134. data/lib/generators/atrium/templates/migrations/create_atrium_collections.rb +20 -0
  135. data/lib/generators/atrium/templates/migrations/create_atrium_descriptions.rb +16 -0
  136. data/lib/generators/atrium/templates/migrations/create_atrium_essays.rb +15 -0
  137. data/lib/generators/atrium/templates/migrations/create_atrium_exhibits.rb +16 -0
  138. data/lib/generators/atrium/templates/migrations/create_atrium_search_facets.rb +14 -0
  139. data/lib/generators/atrium/templates/migrations/create_atrium_showcase_facet_selections.rb +15 -0
  140. data/lib/generators/atrium/templates/migrations/create_atrium_showcase_items.rb +17 -0
  141. data/lib/generators/atrium/templates/migrations/create_atrium_showcases.rb +16 -0
  142. data/lib/generators/atrium/templates/themes/example.html.erb +21 -0
  143. data/lib/railties/all_tests.rake +23 -0
  144. data/lib/railties/atrium_cucumber.rake +121 -0
  145. data/lib/railties/index.rake +37 -0
  146. data/tasks/atrium.rake +268 -0
  147. data/tasks/atrium_rspec.rake +91 -0
  148. data/test_support/etc/Gemfile +33 -0
  149. data/test_support/etc/bundle_config +3 -0
  150. data/test_support/etc/rvmrc +32 -0
  151. data/test_support/features/atrium_collections.feature +162 -0
  152. data/test_support/features/atrium_exhibits.feature +164 -0
  153. data/test_support/features/step_definitions/atrium_collection_steps.rb +102 -0
  154. data/test_support/features/step_definitions/atrium_exhibit_steps.rb +53 -0
  155. data/test_support/features/step_definitions/bookmarks_steps.rb +6 -0
  156. data/test_support/features/step_definitions/error_steps.rb +5 -0
  157. data/test_support/features/step_definitions/folder_steps.rb +27 -0
  158. data/test_support/features/step_definitions/general_steps.rb +50 -0
  159. data/test_support/features/step_definitions/record_view_steps.rb +12 -0
  160. data/test_support/features/step_definitions/saved_searches_steps.rb +22 -0
  161. data/test_support/features/step_definitions/search_facets_steps.rb +29 -0
  162. data/test_support/features/step_definitions/search_history_steps.rb +9 -0
  163. data/test_support/features/step_definitions/search_result_steps.rb +114 -0
  164. data/test_support/features/step_definitions/search_steps.rb +103 -0
  165. data/test_support/features/step_definitions/user_steps.rb +5 -0
  166. data/test_support/features/step_definitions/web_steps.rb +213 -0
  167. data/test_support/features/support/env.rb +67 -0
  168. data/test_support/features/support/paths.rb +76 -0
  169. data/test_support/features/support/selectors.rb +40 -0
  170. data/test_support/fixtures/atrium_exhibits.yml +3 -0
  171. data/test_support/spec/controllers/atrium/base_controller_spec.rb +13 -0
  172. data/test_support/spec/controllers/atrium/collection_exhibit_order_controller_spec.rb +29 -0
  173. data/test_support/spec/controllers/atrium/collections_controller_spec.rb +185 -0
  174. data/test_support/spec/controllers/atrium/customization_controller_spec.rb +38 -0
  175. data/test_support/spec/controllers/atrium/descriptions_controller_spec.rb +150 -0
  176. data/test_support/spec/controllers/atrium/exhibit_facet_order_controller_spec.rb +36 -0
  177. data/test_support/spec/controllers/atrium/exhibits_controller_spec.rb +192 -0
  178. data/test_support/spec/controllers/atrium/showcases_controller_spec.rb +185 -0
  179. data/test_support/spec/helpers/atrium_collections_helper_spec.rb +147 -0
  180. data/test_support/spec/helpers/atrium_description_helper_spec.rb +47 -0
  181. data/test_support/spec/helpers/atrium_solr_helper_spec.rb +512 -0
  182. data/test_support/spec/models/atrium/browse_level_spec.rb +31 -0
  183. data/test_support/spec/models/atrium/collection_spec.rb +30 -0
  184. data/test_support/spec/models/atrium/description_spec.rb +67 -0
  185. data/test_support/spec/models/atrium/essay_spec.rb +12 -0
  186. data/test_support/spec/models/atrium/exhibit_spec.rb +76 -0
  187. data/test_support/spec/models/atrium/search/facet_selection_spec.rb +24 -0
  188. data/test_support/spec/models/atrium/search/facet_spec.rb +11 -0
  189. data/test_support/spec/models/atrium/search_facet_spec.rb +54 -0
  190. data/test_support/spec/models/atrium/showcase/facet_selection_spec.rb +15 -0
  191. data/test_support/spec/models/atrium/showcase/item_spec.rb +12 -0
  192. data/test_support/spec/models/atrium/showcase_facet_selection_spec.rb +65 -0
  193. data/test_support/spec/models/atrium/showcase_spec.rb +134 -0
  194. data/test_support/spec/rcov.opts +3 -0
  195. data/test_support/spec/routing/atrium/collections_routing_spec.rb +33 -0
  196. data/test_support/spec/spec.opts +4 -0
  197. data/test_support/spec/spec_helper.rb +47 -0
  198. data/test_support/spec/support/be_accessible_matcher.rb +8 -0
  199. data/test_support/spec/support/be_routed_mixin.rb +7 -0
  200. data/test_support/tmp/step_definitions/catalog_index_steps.rb +14 -0
  201. data/test_support/tmp/step_definitions/edit_document_steps.rb +67 -0
  202. data/test_support/tmp/step_definitions/hydra_metadata_steps.rb +3 -0
  203. data/test_support/tmp/step_definitions/hydra_steps.rb +8 -0
  204. data/test_support/tmp/step_definitions/search_steps.rb +86 -0
  205. data/test_support/tmp/step_definitions/searching_steps.rb +22 -0
  206. data/test_support/tmp/step_definitions/select_steps.rb +8 -0
  207. data/test_support/tmp/step_definitions/show_document_steps.rb +73 -0
  208. data/test_support/tmp/step_definitions/user_steps.rb +15 -0
  209. data/test_support/tmp/step_definitions/web_steps.rb +273 -0
  210. data/test_support/tmp/support/env.rb +54 -0
  211. data/test_support/tmp/support/paths.rb +57 -0
  212. metadata +1047 -0
@@ -0,0 +1,19 @@
1
+ class Atrium::ExhibitFacetOrderController < Atrium::BaseController
2
+ def index
3
+ @facet_order = Atrium::Exhibit.find(params[:id]).facet_order rescue nil
4
+
5
+ respond_to do |format|
6
+ format.json { render :json => @facet_order }
7
+ end
8
+ end
9
+
10
+ # NOTE this action is not currently protected from unauthorized use.
11
+ def update
12
+ @exhibit = Atrium::Exhibit.find(params[:id])
13
+ @exhibit.facet_order = params[:collection]
14
+
15
+ respond_to do |format|
16
+ format.json { render :json => @exhibit.facet_order }
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,108 @@
1
+ class Atrium::ExhibitsController < Atrium::BaseController
2
+
3
+ before_filter :initialize_collection, :except=>[:index, :create]
4
+
5
+ def new
6
+ @exhibit = Atrium::Exhibit.new
7
+ respond_to do |format|
8
+ format.html
9
+ end
10
+ end
11
+
12
+ def create
13
+ @exhibit = Atrium::Exhibit.new(params[:atrium_exhibit])
14
+ if @exhibit.update_attributes(params[:atrium_exhibit])
15
+ flash[:notice] = 'Exhibit was successfully created.'
16
+ redirect_to :controller=>"atrium/collections", :action => "edit", :id=>@exhibit.atrium_collection_id
17
+ end
18
+ end
19
+
20
+ def edit
21
+ @exhibit = Atrium::Exhibit.find(params[:id])
22
+ @atrium_collection = @exhibit.collection
23
+ @exhibit_navigation_data = get_exhibit_navigation_data
24
+ end
25
+
26
+ def update
27
+ @exhibit = Atrium::Exhibit.find(params[:id])
28
+ if @exhibit.update_attributes(params[:atrium_exhibit])
29
+ flash[:notice] = 'Exhibit was successfully updated.'
30
+ end
31
+ redirect_to :action => "edit"
32
+ end
33
+
34
+ def show
35
+ #get children of emission dates
36
+ @members = get_all_children(@browse_document_list, "is_member_of_s")
37
+ @exhibit= Atrium::Exhibit.find(params[:id])
38
+ @exhibit_navigation_data = get_exhibit_navigation_data
39
+ if @exhibit && @exhibit.filter_query_params && @exhibit.filter_query_params[:solr_doc_ids]
40
+
41
+ items_document_ids = @exhibit.filter_query_params[:solr_doc_ids].split(',')
42
+
43
+ @collection_items_response, @collection_items_documents = get_solr_response_for_field_values("id",items_document_ids || [])
44
+ end
45
+
46
+
47
+ @atrium_showcase=Atrium::Showcase.with_selected_facets(@exhibit.id, @exhibit.class.name, params[:f]).first
48
+ if @atrium_showcase && !@atrium_showcase.showcase_items[:solr_doc_ids].nil?
49
+
50
+ selected_document_ids = @atrium_showcase.showcase_items[:solr_doc_ids].split(',')
51
+
52
+ @featured_response, @featured_documents = get_solr_response_for_field_values("id",selected_document_ids || [])
53
+ end
54
+ @description_hash=get_description_for_showcase(@atrium_showcase) unless @atrium_showcase.nil?
55
+ if params[:no_layout]
56
+ render :layout=>false
57
+ end
58
+ end
59
+
60
+ def set_exhibit_scope
61
+ logger.error("into scoping")
62
+ session[:copy_folder_document_ids] = session[:folder_document_ids]
63
+ session[:folder_document_ids] = []
64
+ @exhibit = Atrium::Exhibit.find(params[:id])
65
+
66
+ session[:folder_document_ids] = @exhibit.filter_query_params[:solr_doc_ids].split(',') if @exhibit.filter_query_params && @exhibit.filter_query_params[:solr_doc_ids]
67
+ p = params.dup
68
+ p.delete :action
69
+ p.delete :id
70
+ p.delete :controller
71
+ #make sure to pass in a search_fields parameter so that it shows search results immediately
72
+ redirect_to catalog_index_path(p)
73
+ end
74
+
75
+ def unset_exhibit_scope
76
+ @exhibit = Atrium::Exhibit.find(params[:id])
77
+ @exhibit.update_attributes(:filter_query_params=>nil)
78
+ flash[:notice] = 'Exhibit scope removed successfully'
79
+ render :action => "edit"
80
+ end
81
+
82
+ def destroy
83
+ @exhibit = Atrium::Exhibit.find(params[:id])
84
+ Atrium::Exhibit.destroy(params[:id])
85
+ flash[:notice] = 'Exhibit '+params[:id] +' was deleted successfully.'
86
+ redirect_to edit_atrium_collection_path(@exhibit.atrium_collection_id)
87
+ end
88
+
89
+ def initialize_collection
90
+ if collection_id = determine_collection_id
91
+ return __initialize_collection( collection_id )
92
+ else
93
+ return false
94
+ end
95
+ end
96
+
97
+
98
+ private
99
+
100
+ def determine_collection_id
101
+ if params[:id]
102
+ exhibit = Atrium::Exhibit.find(params[:id])
103
+ collection_id = exhibit.atrium_collection_id if exhibit
104
+ end
105
+ return collection_id
106
+ end
107
+
108
+ end
@@ -0,0 +1,193 @@
1
+ class Atrium::ShowcasesController < Atrium::BaseController
2
+
3
+ before_filter :initialize_collection
4
+
5
+ def new
6
+ @parent=parent_object
7
+ @atrium_showcase= Atrium::Showcase.with_selected_facets(@parent.id, @parent.class.name, params[:facet_selection]).first
8
+ unless @atrium_showcase
9
+ @atrium_showcase = @parent.showcases.build({:showcases_id=>@parent.id, :showcases_type=>@parent.class.name})
10
+ @atrium_showcase.save!
11
+ if(params[:facet_selection])
12
+ params[:facet_selection].collect {|key,value| facet_selection = @atrium_showcase.facet_selections.create({:solr_facet_name=>key,:value=>value.first}) }
13
+ @atrium_showcase.save!
14
+ end
15
+ end
16
+ set_edit_showcase_in_session
17
+ redirect_to parent_url(@atrium_showcase)
18
+ end
19
+
20
+ def show
21
+ @atrium_showcase = Atrium::Showcase.find(params[:id])
22
+ #TODO move this update to model rather in controller
23
+ unless session[:folder_document_ids].blank?
24
+ @atrium_showcase.showcase_items ||= Hash.new
25
+ selected_document_ids = session[:folder_document_ids]
26
+ @atrium_showcase.showcase_items[:type]="featured"
27
+ @atrium_showcase.showcase_items[:solr_doc_ids]=selected_document_ids.join(',')
28
+ else
29
+ @atrium_showcase.showcase_items={}
30
+ end
31
+ @atrium_showcase.save
32
+
33
+ session_folder_ids= [] || session[:copy_folder_document_ids]
34
+ session[:folder_document_ids] = session_folder_ids
35
+ session[:copy_folder_document_ids]=nil
36
+ if @atrium_showcase && !@atrium_showcase.showcase_items[:solr_doc_ids].nil?
37
+ @featured_response, @featured_documents = get_solr_response_for_field_values("id",@atrium_showcase.showcase_items[:solr_doc_ids].split(',') || [])
38
+ end
39
+ if params[:no_layout]
40
+ render :layout=>false
41
+ end
42
+ end
43
+
44
+ def featured
45
+ session[:copy_folder_document_ids] = session[:folder_document_ids]
46
+ session[:folder_document_ids] = []
47
+ @atrium_showcase = Atrium::Showcase.find(params[:id])
48
+ parent = @atrium_showcase.parent if @atrium_showcase.parent
49
+ if parent.is_a?(Atrium::Collection)
50
+ collection_id = parent.id
51
+ exhibit_id=nil
52
+ elsif parent.is_a?(Atrium::Exhibit)
53
+ exhibit_id = parent.id
54
+ collection_id = parent.atrium_collection_id
55
+ else
56
+ logger.error("Atrium showcase parent is invalid. Please check the parent")
57
+ collection_id = params[:collection_id]
58
+ exhibit_id = params[:exhibit_id]
59
+ end
60
+ session[:folder_document_ids] = @atrium_showcase.showcase_items[:solr_doc_ids].split(',') if @atrium_showcase.showcase_items && @atrium_showcase.showcase_items[:solr_doc_ids]
61
+ #make sure to pass in a search_fields parameter so that it shows search results immediately
62
+ redirect_to catalog_index_path(:add_featured=>true,:collection_id=>collection_id,:exhibit_id=>exhibit_id,:search_field=>"all_fields",:f=>params[:f])
63
+ end
64
+
65
+ def refresh_showcase
66
+ @atrium_showcase = Atrium::Showcase.find(params[:id])
67
+ path=@atrium_showcase.for_exhibit? ? atrium_exhibit_path(:id=>@atrium_showcase.showcases_id, :f=>params[:f]) : atrium_collection_path(:id=>@atrium_showcase.showcases_id)
68
+ unset_edit_showcase_in_session
69
+ redirect_to path
70
+ end
71
+
72
+ def initialize_collection
73
+ if collection_id = determine_collection_id
74
+ return __initialize_collection( collection_id )
75
+ else
76
+ return false
77
+ end
78
+ end
79
+
80
+ private
81
+
82
+ def determine_collection_id
83
+ if params[:id]
84
+ begin
85
+ @showcase = Atrium::Showcase.find(params[:id])
86
+ rescue
87
+ raise "unable to find showcase from id"
88
+ end
89
+ elsif params[:showcase_id]
90
+ begin
91
+ @showcase = Atrium::Showcase.find(params[:showcase_id])
92
+ rescue
93
+ raise "unable to find showcase from id"
94
+ end
95
+ end
96
+ if @showcase && @showcase.parent
97
+ if @showcase.parent.is_a?(Atrium::Collection)
98
+ atrium_collection = @showcase.parent
99
+ collection_id = atrium_collection.id
100
+ elsif @showcase.parent.is_a?(Atrium::Exhibit)
101
+ exhibit = @showcase.parent
102
+ collection_id = exhibit.atrium_collection_id
103
+ elsif params[:collection_id]
104
+ collection_id = params[:collection_id]
105
+ end
106
+ end
107
+ return collection_id
108
+ end
109
+
110
+ def parent_object
111
+ case
112
+ when params[:exhibit_id] then parent= Atrium::Exhibit.find_by_id(params[:exhibit_id])
113
+ when params[:collection_id] then parent = Atrium::Collection.find_by_id(params[:collection_id])
114
+ end
115
+
116
+ return parent
117
+ end
118
+
119
+ def parent_url(showcase)
120
+
121
+ path=showcase.for_exhibit? ? atrium_exhibit_path(:id=>showcase.showcases_id, :f=>params[:facet_selection]) : atrium_collection_showcase_path(:id=>showcase.showcases_id, :showcase_id=>showcase.id) #atrium_collection_showcases_path(showcase.showcases_id)
122
+ return path
123
+ end
124
+
125
+ def unset_edit_showcase_in_session
126
+ session[:edit_showcase] = nil
127
+ end
128
+
129
+ #def configure_showcase
130
+ # unless @atrium_showcase
131
+ # @atrium_showcase=Atrium::Showcase.find(params[:id])
132
+ # end
133
+ # @exhibit_navigation_data = get_exhibit_navigation_data
134
+ # set_edit_showcase_in_session
135
+ # if @atrium_showcase.for_exhibit?
136
+ # redirect_to atrium_exhibit_path(:id=>@atrium_showcase.showcases_id, :f=>params[:f])
137
+ # else
138
+ # @atrium_collection= Atrium::Collection.find_by_id(@atrium_showcase.showcases_id)
139
+ # redirect_to atrium_collection_showcase_path(:id=>@atrium_showcase.showcases_id, :showcase_id=>params[:id])
140
+ # end
141
+ #end
142
+
143
+ #def index
144
+ # @exhibit = Atrium::Exhibit.find(params[:exhibit_id])
145
+ # @exhibit_navigation_data = get_exhibit_navigation_data
146
+ # set_edit_showcase_in_session
147
+ # redirect_to atrium_collection_path(:id=>@exhibit.atrium_collection_id, :exhibit_number=>@exhibit.id)
148
+ #end
149
+
150
+ #def create
151
+ # @atrium_showcase = Atrium::Showcase.new(params[:atrium_exhibit_id])
152
+ # @atrium_showcase.showcase_items ||= Hash.new
153
+ # logger.info("atrium_showcase = #{@atrium_showcase.inspect}")
154
+ # @atrium_showcase.save
155
+ # logger.info("atrium_showcase = #{@atrium_showcase.inspect}")
156
+ # set_edit_showcase_in_session
157
+ # if @atrium_showcase.showcases_type=="Atrium::Exhibit"
158
+ # redirect_to atrium_exhibit_path(:id=>@atrium_showcase.showcases_id, :f=>params[:facet_selection])
159
+ # else
160
+ # redirect_to atrium_collection_showcase_path(@atrium_showcase.showcases_id, @atrium_showcase.id, :f=>params[:facet_selection])
161
+ # end
162
+ #end
163
+
164
+ #def edit
165
+ #@atrium_showcase = Atrium::Showcase.find(params[:id])
166
+ #set_edit_showcase_in_session
167
+ #redirect_to parent_url(@atrium_showcase)
168
+ #if @atrium_showcase.showcases_type=="atrium_exhibit"
169
+ # redirect_to atrium_exhibit_path(:id=>@atrium_showcase.showcases_id, :f=>params[:facet_selection])
170
+ #else
171
+ # redirect_to atrium_collection_showcase_path(@atrium_showcase.showcases_id, params[:id], :f=>params[:f])
172
+ #end
173
+ #end
174
+
175
+ #def update
176
+ # @atrium_showcase = Atrium::Showcase.find(params[:showcase_id])
177
+ # if @atrium_showcase.update_attributes(params[:atrium_showcase])
178
+ # flash[:notice] = 'Browse was successfully updated.'
179
+ # end
180
+ # redirect_to :action => "edit", :id=>@atrium_showcase.id, :f=>params[:f]
181
+ #end
182
+
183
+ #def selected_featured
184
+ # @atrium_showcase = Atrium::Showcase.find(params[:id])
185
+ # selected_document_ids = session[:folder_document_ids]
186
+ # session[:folder_document_ids] = session[:copy_folder_document_ids]
187
+ # @response, @documents = get_solr_response_for_field_values("id",selected_document_ids || [])
188
+ # render :layout => false, :locals=>{:selected_document_ids=>selected_document_ids}
189
+ #end
190
+
191
+
192
+
193
+ end
@@ -0,0 +1,6 @@
1
+ require 'atrium/atrium_helper_behavior'
2
+ module Atrium
3
+ module BaseHelper
4
+ include Atrium::AtriumHelperBehavior
5
+ end
6
+ end
@@ -0,0 +1,14 @@
1
+ class Ability
2
+ include CanCan::Ability
3
+
4
+ def initialize(user)
5
+
6
+ user_groups = RoleMapper.roles(user.to_s)
7
+ if user_groups.include? "admin"
8
+ can :manage, :all
9
+ else
10
+ can :read, :all
11
+ end
12
+ end
13
+
14
+ end
@@ -0,0 +1,41 @@
1
+ class Atrium::BrowseLevel < ActiveRecord::Base
2
+ self.table_name = 'atrium_browse_levels'
3
+
4
+ attr_accessible(
5
+ :atrium_exhibit_id,
6
+ :exclude_query_params,
7
+ :filter_query_params,
8
+ :level_number,
9
+ :solr_facet_name,
10
+ :label
11
+ )
12
+
13
+ validates_presence_of(
14
+ :atrium_exhibit_id,
15
+ :level_number,
16
+ :solr_facet_name
17
+ )
18
+
19
+ belongs_to(
20
+ :exhibit,
21
+ :class_name => 'Atrium::Exhibit',
22
+ :foreign_key => 'atrium_exhibit_id'
23
+ )
24
+
25
+
26
+ serialize :filter_query_params
27
+
28
+ serialize :exclude_query_params
29
+
30
+ attr_accessor :selected
31
+ attr_writer :values
32
+
33
+ def values
34
+ @values ||= []
35
+ end
36
+
37
+ def to_s
38
+ "#{solr_facet_name}"
39
+ end
40
+
41
+ end
@@ -0,0 +1,121 @@
1
+ class Atrium::Collection < ActiveRecord::Base
2
+ self.table_name = 'atrium_collections'
3
+
4
+ attr_accessible(
5
+ :collection_items,
6
+ :filter_query_params,
7
+ :theme,
8
+ :title,
9
+ :title_markup,
10
+ :collection_description,
11
+ :search_instructions,
12
+ :search_facet_names,
13
+ :url_slug,
14
+ :exhibits_attributes,
15
+ :search_facets_attributes
16
+ )
17
+
18
+ has_many(
19
+ :showcases,
20
+ :class_name => 'Atrium::Showcase',
21
+ :as => :showcases,
22
+ :dependent => :destroy
23
+ )
24
+
25
+ has_many(
26
+ :search_facets,
27
+ :class_name => 'Atrium::Search::Facet',
28
+ :foreign_key => 'atrium_collection_id',
29
+ :dependent => :destroy
30
+ )
31
+
32
+ accepts_nested_attributes_for :search_facets, :allow_destroy => true
33
+
34
+ def search_facet_names
35
+ search_facets.map{|facet| facet.name }
36
+ end
37
+
38
+ def search_facet_names=(collection_of_facet_names)
39
+ existing_facet_names = search_facets.map{|facet| facet.name }
40
+ add_collection_of_facets_by_name( collection_of_facet_names - existing_facet_names )
41
+ remove_collection_of_facets_by_name( existing_facet_names - collection_of_facet_names )
42
+ end
43
+
44
+ def add_collection_of_facets_by_name(collection_of_facet_names)
45
+ collection_of_facet_names.each do |name|
46
+ search_facets << Atrium::Search::Facet.find_or_create_by_name_and_collection_id(name, id)
47
+ end
48
+ end
49
+ private :add_collection_of_facets_by_name
50
+
51
+ def remove_collection_of_facets_by_name(collection_of_facet_names)
52
+ collection_of_facet_names.each do |name|
53
+ search_facets.delete(Atrium::Search::Facet.find_by_name_and_collection_id(name, id))
54
+ end
55
+ end
56
+ private :remove_collection_of_facets_by_name
57
+
58
+
59
+ has_many(
60
+ :exhibits,
61
+ :class_name => 'Atrium::Exhibit',
62
+ :foreign_key => 'atrium_collection_id',
63
+ :order => 'set_number ASC',
64
+ :dependent => :destroy
65
+ )
66
+
67
+ accepts_nested_attributes_for :exhibits, :allow_destroy => true
68
+
69
+ def exhibit_order
70
+ exhibit_order = {}
71
+ exhibits.map{|exhibit| exhibit_order[exhibit[:id]] = exhibit.set_number }
72
+ exhibit_order
73
+ end
74
+
75
+ def exhibit_order=(exhibit_order = {})
76
+ valid_ids = exhibits.select(:id).map{|exhibit| exhibit[:id]}
77
+ exhibit_order.each_pair do |id, order|
78
+ Atrium::Exhibit.find(id).update_attributes!(:set_number => order) if valid_ids.include?(id.to_i)
79
+ end
80
+ end
81
+
82
+ @@included_themes = ['default']
83
+ def self.available_themes
84
+ return @@available_themes if defined? @@available_themes
85
+ # NOTE: theme filenames should conform to rails expectations and only use periods to delimit file extensions
86
+ local_themes = Dir.entries(File.join(Rails.root, 'app/views/layouts/atrium_themes')).reject {|f| f =~ /^\./}
87
+ local_themes.collect!{|f| f.split('.').first}
88
+ @@available_themes = @@included_themes + local_themes
89
+ end
90
+
91
+ def theme_path
92
+ theme.blank? ? 'atrium_themes/default' : "atrium_themes/#{theme}"
93
+ end
94
+
95
+
96
+ serialize :filter_query_params
97
+
98
+ serialize :collection_items, Hash
99
+ def collection_items
100
+ read_attribute(:collection_items) || write_attribute(:collection_items, {})
101
+ end
102
+
103
+
104
+ def solr_doc_ids
105
+ collection_items[:solr_doc_ids] unless collection_items.blank?
106
+ end
107
+
108
+ def pretty_title
109
+ title.blank? ? 'Unnamed Collection' : title
110
+ end
111
+
112
+ def display_title
113
+ has_custom_title? ? title_markup.html_safe : "<h2>#{pretty_title}</h2>".html_safe
114
+ end
115
+
116
+ def has_custom_title?
117
+ !title_markup.blank?
118
+ end
119
+ private :has_custom_title?
120
+
121
+ end