enju_library 0.2.0.beta.1 → 0.2.0.beta.2

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 (175) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/enju_library/controller.rb +218 -0
  3. data/app/controllers/user_export_files_controller.rb +116 -0
  4. data/app/controllers/user_groups_controller.rb +118 -0
  5. data/app/controllers/user_import_files_controller.rb +129 -0
  6. data/app/controllers/user_import_results_controller.rb +57 -0
  7. data/app/mailers/notifier.rb +30 -0
  8. data/app/models/user_export_file.rb +67 -0
  9. data/app/models/user_export_file_state_machine.rb +15 -0
  10. data/app/models/user_export_file_transition.rb +20 -0
  11. data/app/models/user_group.rb +29 -0
  12. data/app/models/user_import_file.rb +352 -0
  13. data/app/models/user_import_file_state_machine.rb +19 -0
  14. data/app/models/user_import_file_transition.rb +20 -0
  15. data/app/models/user_import_result.rb +20 -0
  16. data/app/policies/user_export_file_policy.rb +21 -0
  17. data/app/policies/user_group_policy.rb +22 -0
  18. data/app/policies/user_import_file_policy.rb +21 -0
  19. data/app/policies/user_import_result_policy.rb +21 -0
  20. data/app/views/accepts/index.js.slim +3 -0
  21. data/app/views/libraries/_map.html+phone.slim +4 -0
  22. data/app/views/libraries/show.html+phone.slim +32 -0
  23. data/app/views/libraries/show.js.slim +3 -0
  24. data/app/views/shelves/show.html+phone.slim +33 -0
  25. data/app/views/user_export_files/_form.html.erb +12 -0
  26. data/app/views/user_export_files/edit.html.erb +6 -0
  27. data/app/views/user_export_files/index.html.erb +44 -0
  28. data/app/views/user_export_files/new.html.erb +16 -0
  29. data/app/views/user_export_files/show.html.erb +36 -0
  30. data/app/views/user_groups/_form.html.erb +40 -0
  31. data/app/views/user_groups/edit.html.erb +13 -0
  32. data/app/views/user_groups/index.html.erb +51 -0
  33. data/app/views/user_groups/new.html.erb +12 -0
  34. data/app/views/user_groups/show.html.erb +68 -0
  35. data/app/views/user_import_files/_form.html.erb +61 -0
  36. data/app/views/user_import_files/_results.html.erb +22 -0
  37. data/app/views/user_import_files/edit.html.erb +6 -0
  38. data/app/views/user_import_files/index.html.erb +45 -0
  39. data/app/views/user_import_files/new.html.erb +60 -0
  40. data/app/views/user_import_files/show.html.erb +85 -0
  41. data/app/views/user_import_results/_form.html.erb +29 -0
  42. data/app/views/user_import_results/_list.html.erb +22 -0
  43. data/app/views/user_import_results/_list_lines.html.erb +24 -0
  44. data/app/views/user_import_results/index.html.erb +25 -0
  45. data/app/views/user_import_results/index.txt.erb +3 -0
  46. data/app/views/user_import_results/show.html.erb +33 -0
  47. data/{spec/dummy/db → db}/migrate/077_create_user_groups.rb +0 -0
  48. data/{spec/dummy/db → db}/migrate/20110318183304_add_valid_period_for_new_user_to_user_group.rb +0 -0
  49. data/{spec/dummy/db → db}/migrate/20140110122216_create_user_import_files.rb +1 -1
  50. data/{spec/dummy/db → db}/migrate/20140110131010_create_user_import_results.rb +0 -0
  51. data/{spec/dummy/db → db}/migrate/20140524074813_create_user_import_file_transitions.rb +0 -0
  52. data/{spec/dummy/db → db}/migrate/20140628072217_add_user_encoding_to_user_import_file.rb +0 -0
  53. data/{spec/dummy/db → db}/migrate/20140709113413_create_user_export_files.rb +0 -0
  54. data/{spec/dummy/db → db}/migrate/20140709113905_create_user_export_file_transitions.rb +0 -0
  55. data/{spec/dummy/db → db}/migrate/20140720170714_add_default_library_id_to_user_import_file.rb +0 -0
  56. data/{spec/dummy/db → db}/migrate/20140720170735_add_default_user_group_id_to_user_import_file.rb +0 -0
  57. data/db/migrate/20150506105356_add_error_message_to_user_import_result.rb +5 -0
  58. data/db/migrate/20160610093229_add_html_snippet_to_library_group.rb +5 -0
  59. data/db/migrate/20160627232219_add_most_recent_to_user_import_file_transitions.rb +9 -0
  60. data/db/migrate/20160627232316_add_most_recent_to_user_export_file_transitions.rb +9 -0
  61. data/lib/enju_library/engine.rb +3 -1
  62. data/lib/enju_library/version.rb +1 -1
  63. data/spec/controllers/user_export_files_controller_spec.rb +296 -0
  64. data/spec/controllers/user_groups_controller_spec.rb +443 -0
  65. data/spec/controllers/user_import_files_controller_spec.rb +305 -0
  66. data/spec/controllers/user_import_results_controller_spec.rb +154 -0
  67. data/spec/dummy/app/controllers/application_controller.rb +2 -2
  68. data/spec/dummy/config/application.rb +0 -2
  69. data/spec/dummy/db/migrate/055_create_bookmarks.rb +22 -0
  70. data/spec/dummy/db/migrate/090_create_search_histories.rb +31 -0
  71. data/spec/dummy/db/migrate/20081212151614_create_bookmark_stats.rb +13 -0
  72. data/spec/dummy/db/migrate/20081212151820_create_bookmark_stat_has_manifestations.rb +13 -0
  73. data/spec/dummy/db/migrate/20100222124420_add_allow_bookmark_external_url_to_library_group.rb +9 -0
  74. data/spec/dummy/db/migrate/20100525171356_acts_as_taggable_on_migration.rb +30 -0
  75. data/spec/dummy/db/migrate/20100623173800_rename_search_history_version_to_sru_version.rb +9 -0
  76. data/spec/dummy/db/migrate/20111129044509_add_pickup_location_to_reserve.rb +6 -0
  77. data/spec/dummy/db/migrate/20120418121539_add_save_search_history_to_user.rb +5 -0
  78. data/spec/dummy/db/migrate/20140524135607_create_bookmark_stat_transitions.rb +18 -0
  79. data/spec/dummy/db/migrate/20140811132912_add_save_search_history_to_profile.rb +5 -0
  80. data/spec/dummy/db/migrate/20140812093836_add_share_bookmarks_to_profile.rb +5 -0
  81. data/spec/dummy/db/migrate/20150106001709_create_demands.rb +14 -0
  82. data/spec/dummy/db/migrate/20150421023923_create_identities.rb +15 -0
  83. data/spec/dummy/db/migrate/20151126005552_add_provider_to_identity.rb +5 -0
  84. data/spec/dummy/db/migrate/20160703184619_add_most_recent_to_reserve_transitions.rb +9 -0
  85. data/spec/dummy/db/migrate/20160703184650_add_most_recent_to_manifestation_checkout_stat_transitions.rb +9 -0
  86. data/spec/dummy/db/migrate/20160703184723_add_most_recent_to_manifestation_reserve_stat_transitions.rb +9 -0
  87. data/spec/dummy/db/migrate/20160703184747_add_most_recent_to_user_checkout_stat_transitions.rb +9 -0
  88. data/spec/dummy/db/migrate/20160703184805_add_most_recent_to_user_reserve_stat_transitions.rb +9 -0
  89. data/spec/dummy/db/migrate/20160703190209_add_foreign_key_on_manifestation_id_to_reserve.rb +5 -0
  90. data/spec/dummy/db/schema.rb +141 -6
  91. data/spec/dummy/db/test.sqlite3 +0 -0
  92. data/spec/dummy/private/system/user_export_files/user_exports/000/000/001/original/user_export_file_20160808-8463-13fk7qo.txt +8 -0
  93. data/spec/dummy/private/system/user_export_files/user_exports/000/000/001/original/user_export_file_20160808-8463-y41sj6.txt +8 -0
  94. data/spec/dummy/private/system/user_export_files/user_exports/000/000/001/original/user_export_file_20160808-8517-1tzre93.txt +8 -0
  95. data/spec/dummy/private/system/user_export_files/user_exports/000/000/001/original/user_export_file_20160808-8517-qait5x.txt +8 -0
  96. data/spec/dummy/private/system/user_export_files/user_exports/000/000/001/original/user_export_file_20160808-8605-17zb3sz.txt +8 -0
  97. data/spec/dummy/private/system/user_export_files/user_exports/000/000/001/original/user_export_file_20160808-8605-1bpp9w8.txt +8 -0
  98. data/spec/dummy/private/system/user_export_files/user_exports/000/000/003/original/user_export_file_20160808-10113-ycu8m8.txt +8 -0
  99. data/spec/dummy/private/system/user_export_files/user_exports/000/000/003/original/user_export_file_20160808-10296-1w0qa4q.txt +8 -0
  100. data/spec/dummy/private/system/user_export_files/user_exports/000/000/003/original/user_export_file_20160808-10532-3gf0e4.txt +8 -0
  101. data/spec/dummy/private/system/user_export_files/user_exports/000/000/003/original/user_export_file_20160808-10743-1986tss.txt +8 -0
  102. data/spec/dummy/private/system/user_export_files/user_exports/000/000/003/original/user_export_file_20160808-10850-131ca5h.txt +8 -0
  103. data/spec/dummy/private/system/user_export_files/user_exports/000/000/003/original/user_export_file_20160808-11057-lrwhh.txt +8 -0
  104. data/spec/dummy/private/system/user_export_files/user_exports/000/000/003/original/user_export_file_20160808-11201-1j3f8z4.txt +8 -0
  105. data/spec/dummy/private/system/user_export_files/user_exports/000/000/003/original/user_export_file_20160808-8698-1cv7l1l.txt +8 -0
  106. data/spec/dummy/private/system/user_export_files/user_exports/000/000/003/original/user_export_file_20160808-8788-1j021tn.txt +8 -0
  107. data/spec/dummy/private/system/user_export_files/user_exports/000/000/003/original/user_export_file_20160808-8964-10it3ay.txt +8 -0
  108. data/spec/dummy/private/system/user_export_files/user_exports/000/000/003/original/user_export_file_20160808-9184-ramwb2.txt +8 -0
  109. data/spec/dummy/private/system/user_export_files/user_exports/000/000/003/original/user_export_file_20160808-9381-1ltvlr5.txt +8 -0
  110. data/spec/dummy/private/system/user_export_files/user_exports/000/000/003/original/user_export_file_20160808-9568-1xno5kz.txt +8 -0
  111. data/spec/dummy/private/system/user_export_files/user_exports/000/000/003/original/user_export_file_20160808-9694-1xvbn9r.txt +8 -0
  112. data/spec/dummy/private/system/user_export_files/user_exports/000/000/003/original/user_export_file_20160808-9796-1s8wttm.txt +8 -0
  113. data/spec/dummy/private/system/user_export_files/user_exports/000/000/003/original/user_export_file_20160808-9976-os18dm.txt +8 -0
  114. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-10113-i50cx9.txt +8 -0
  115. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-10113-yfyk1q.txt +8 -0
  116. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-10296-mwlqee.txt +8 -0
  117. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-10296-q7cj81.txt +8 -0
  118. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-10532-11e6ke6.txt +8 -0
  119. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-10532-19zrpc6.txt +8 -0
  120. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-10743-126qknn.txt +8 -0
  121. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-10743-1yr9gk3.txt +8 -0
  122. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-10850-1h0ufaw.txt +8 -0
  123. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-10850-1j6rz0a.txt +8 -0
  124. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-11057-4u0q76.txt +8 -0
  125. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-11057-xkxnw0.txt +8 -0
  126. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-11201-1pbhweq.txt +8 -0
  127. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-11201-oe7c58.txt +8 -0
  128. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-8698-becrga.txt +8 -0
  129. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-8698-n6a7dl.txt +8 -0
  130. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-8788-kcq4ud.txt +8 -0
  131. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-8788-pk5u5w.txt +8 -0
  132. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-8964-1it6ent.txt +8 -0
  133. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-8964-sevvj9.txt +8 -0
  134. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-9184-1wya34t.txt +8 -0
  135. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-9184-53qr2e.txt +8 -0
  136. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-9381-18m5cay.txt +8 -0
  137. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-9381-1o6dbyx.txt +8 -0
  138. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-9568-1rg8mif.txt +8 -0
  139. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-9568-p2ibx2.txt +8 -0
  140. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-9694-1lpp5g6.txt +8 -0
  141. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-9694-1vbkp9i.txt +8 -0
  142. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-9796-4auzfe.txt +8 -0
  143. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-9796-is0c1e.txt +8 -0
  144. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-9976-1n5tevc.txt +8 -0
  145. data/spec/dummy/private/system/user_export_files/user_exports/000/000/004/original/user_export_file_20160808-9976-1ygxnz1.txt +8 -0
  146. data/spec/dummy/private/system/user_import_files/user_imports/000/000/001/original/user_import_file_sample.tsv +10 -0
  147. data/spec/dummy/private/system/user_import_files/user_imports/000/000/001/original/user_import_file_sample_long.tsv +15 -0
  148. data/spec/dummy/private/system/user_import_files/user_imports/000/000/001/original/user_update_file.tsv +4 -0
  149. data/spec/dummy/private/system/user_import_files/user_imports/000/000/001/original/user_update_file2.tsv +2 -0
  150. data/spec/dummy/private/system/user_import_files/user_imports/000/000/001/original/user_update_file3.tsv +2 -0
  151. data/spec/dummy/private/system/user_import_files/user_imports/000/000/001/original/user_update_file4.tsv +2 -0
  152. data/spec/dummy/private/system/user_import_files/user_imports/000/000/003/original/user_import_file_sample.tsv +10 -0
  153. data/spec/dummy/private/system/user_import_files/user_imports/000/000/003/original/user_import_file_sample_long.tsv +15 -0
  154. data/spec/dummy/private/system/user_import_files/user_imports/000/000/003/original/user_update_file.tsv +4 -0
  155. data/spec/dummy/private/system/user_import_files/user_imports/000/000/003/original/user_update_file2.tsv +2 -0
  156. data/spec/dummy/private/system/user_import_files/user_imports/000/000/003/original/user_update_file3.tsv +2 -0
  157. data/spec/dummy/private/system/user_import_files/user_imports/000/000/003/original/user_update_file4.tsv +2 -0
  158. data/spec/dummy/private/system/user_import_files/user_imports/000/000/004/original/user_delete_file.tsv +4 -0
  159. data/spec/factories/checkout.rb +9 -0
  160. data/spec/factories/user_group.rb +5 -0
  161. data/spec/fixtures/message_templates.yml +41 -20
  162. data/spec/fixtures/user_export_files.yml +25 -0
  163. data/spec/fixtures/user_groups.yml +19 -0
  164. data/spec/fixtures/user_import_files.yml +51 -0
  165. data/spec/fixtures/user_import_results.yml +26 -0
  166. data/spec/fixtures/user_reserve_stats.yml +2 -3
  167. data/spec/models/user_export_file_spec.rb +30 -0
  168. data/spec/models/user_group_spec.rb +37 -0
  169. data/spec/models/user_import_file_spec.rb +220 -0
  170. data/spec/models/user_import_result_spec.rb +20 -0
  171. data/spec/support/devise.rb +2 -2
  172. data/spec/views/user_export_files/new.html.erb_spec.rb +19 -0
  173. data/spec/views/user_import_results/index.html.erb_spec.rb +29 -0
  174. metadata +358 -30
  175. data/spec/dummy/tmp/cache/4AD/470/country_all +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d3e6909228abfb05e27d765b4ae1ca826886d9e6
4
- data.tar.gz: 4dd3c86961e520555ce9a7f52c005a9f53cd4c29
3
+ metadata.gz: 7a2494613d957bc12ca4d509925dfe3023afec50
4
+ data.tar.gz: 966e285abe5de79de1bc10b646fdee8e8190b23b
5
5
  SHA512:
6
- metadata.gz: cad580ab88688b578872724c8374d6e80e9d3baa3d027171d8fffd2b3a4bb1ae56e75aec783c0175444137e1ac3b6d1916c6593e803749adce4bb02fd8bf88f9
7
- data.tar.gz: 623fff1279501648d69c5cc64aea61e1058a62bc3669b0e61641ffa7906da1a1cfd2e863279ea7c34438014477f4978eaef73d088062c7afbff99a94afaf1a84
6
+ metadata.gz: 0bda3df1f128edbb1c1f9430c72933496c7f0ccb6b30d1bad37ca48fe37aeb0161ff29d7aa69292e578a529ddc95eed2c2fe666cbbe3a2961cc16ff2e23b6227
7
+ data.tar.gz: 7853d79bc73de17da6bfeff9c84ae4f4bff422f70549b5740422dcdb0748cd9f3ae8af3cbb6b373477a8379f9ade4601776f7b9782c153793810cad560eb9a64
@@ -2,8 +2,226 @@ module EnjuLibrary
2
2
  module Controller
3
3
  extend ActiveSupport::Concern
4
4
 
5
+ included do
6
+ before_action :get_library_group, :set_locale, :set_available_languages, :set_mobile_request
7
+ before_action :store_current_location, unless: :devise_controller?
8
+ rescue_from Pundit::NotAuthorizedError, with: :render_403
9
+ #rescue_from ActiveRecord::RecordNotFound, with: :render_404
10
+ rescue_from Errno::ECONNREFUSED, with: :render_500_nosolr
11
+ #rescue_from ActionView::MissingTemplate, with: :render_404_invalid_format
12
+ end
13
+
5
14
  private
6
15
 
16
+ def render_403
17
+ return if performed?
18
+ if user_signed_in?
19
+ respond_to do |format|
20
+ format.html {render template: 'page/403', status: 403}
21
+ #format.html.phone {render template: 'page/403', status: 403}
22
+ format.xml {render template: 'page/403', status: 403}
23
+ format.json { render text: '{"error": "forbidden"}' }
24
+ format.rss {render template: 'page/403.xml', status: 403}
25
+ end
26
+ else
27
+ respond_to do |format|
28
+ format.html { redirect_to main_app.new_user_session_url }
29
+ #format.html.phone { redirect_to new_user_session_url }
30
+ format.xml { render template: 'page/403', status: 403 }
31
+ format.json { render text: '{"error": "forbidden"}' }
32
+ format.rss { render template: 'page/403.xml', status: 403 }
33
+ end
34
+ end
35
+ end
36
+
37
+ def render_404
38
+ return if performed?
39
+ respond_to do |format|
40
+ format.html { render template: 'page/404', status: 404 }
41
+ #format.html.phone { render template: 'page/404', status: 404 }
42
+ format.xml { render template: 'page/404', status: 404 }
43
+ format.json { render text: '{"error": "not_found"}' }
44
+ format.rss { render template: 'page/404.xml', status: 404 }
45
+ end
46
+ end
47
+
48
+ def render_404_invalid_format
49
+ return if performed?
50
+ render file: "#{Rails.root}/public/404", formats: [:html]
51
+ end
52
+
53
+ def render_500
54
+ return if performed?
55
+ respond_to do |format|
56
+ format.html {render file: "#{Rails.root}/public/500", layout: false, status: 500}
57
+ #format.html.phone {render file: "#{Rails.root}/public/500", layout: false, status: 500}
58
+ format.xml {render template: 'page/500', status: 500}
59
+ format.json { render text: '{"error": "server_error"}' }
60
+ format.xml {render template: 'page/500.xml', status: 500}
61
+ end
62
+ end
63
+
64
+ def render_500_nosolr
65
+ Rails.logger.fatal("please confirm that the Solr is running.")
66
+ return if performed?
67
+ #flash[:notice] = t('page.connection_failed')
68
+ respond_to do |format|
69
+ format.html {render template: "page/500_nosolr", layout: false, status: 500}
70
+ #format.html.phone {render template: "page/500_nosolr", layout: false, status: 500}
71
+ format.xml {render template: 'page/500', status: 500}
72
+ format.json { render text: '{"error": "server_error"}' }
73
+ format.xml {render template: 'page/500.xml', status: 500}
74
+ end
75
+ end
76
+
77
+ def after_sign_in_path_for(resource)
78
+ session[:locale] = nil
79
+ super
80
+ end
81
+
82
+ def set_locale
83
+ if params[:locale]
84
+ unless I18n.available_locales.include?(params[:locale].to_s.intern)
85
+ raise InvalidLocaleError
86
+ end
87
+ end
88
+ if user_signed_in?
89
+ locale = params[:locale] || session[:locale] || current_user.profile.try(:locale).try(:to_sym)
90
+ else
91
+ locale = params[:locale] || session[:locale]
92
+ end
93
+ if locale
94
+ I18n.locale = @locale = session[:locale] = locale.to_sym
95
+ else
96
+ I18n.locale = @locale = session[:locale] = I18n.default_locale
97
+ end
98
+ rescue InvalidLocaleError
99
+ @locale = I18n.default_locale
100
+ end
101
+
102
+ def default_url_options(options={})
103
+ {locale: nil}
104
+ end
105
+
106
+ def set_available_languages
107
+ if Rails.env == 'production'
108
+ @available_languages = Rails.cache.fetch('available_languages'){
109
+ Language.where(iso_639_1: I18n.available_locales.map{|l| l.to_s}).select([:id, :iso_639_1, :name, :native_name, :display_name, :position]).all
110
+ }
111
+ else
112
+ @available_languages = Language.where(iso_639_1: I18n.available_locales.map{|l| l.to_s})
113
+ end
114
+ end
115
+
116
+ def reset_params_session
117
+ session[:params] = nil
118
+ end
119
+
120
+ def not_found
121
+ raise ActiveRecord::RecordNotFound
122
+ end
123
+
124
+ def access_denied
125
+ raise Pundit::NotAuthorizedError
126
+ end
127
+
128
+ def get_user
129
+ @user = User.where(username: params[:user_id]).first if params[:user_id]
130
+ #authorize! :show, @user if @user
131
+ end
132
+
133
+ def get_user_group
134
+ @user_group = UserGroup.find(params[:user_group_id]) if params[:user_group_id]
135
+ end
136
+
137
+ def convert_charset
138
+ case params[:format]
139
+ when 'csv'
140
+ return unless LibraryGroup.site_config.settings[:csv_charset_conversion]
141
+ # TODO: 他の言語
142
+ if @locale.to_sym == :ja
143
+ headers["Content-Type"] = "text/csv; charset=Shift_JIS"
144
+ response.body = NKF::nkf('-Ws', response.body)
145
+ end
146
+ when 'xml'
147
+ if @locale.to_sym == :ja
148
+ headers["Content-Type"] = "application/xml; charset=Shift_JIS"
149
+ response.body = NKF::nkf('-Ws', response.body)
150
+ end
151
+ end
152
+ end
153
+
154
+ def store_page
155
+ if request.get? and request.format.try(:html?) and !request.xhr?
156
+ flash[:page] = params[:page] if params[:page].to_i > 0
157
+ end
158
+ end
159
+
160
+ def set_role_query(user, search)
161
+ role = user.try(:role) || Role.default_role
162
+ search.build do
163
+ with(:required_role_id).less_than_or_equal_to role.id
164
+ end
165
+ end
166
+
167
+ def get_version
168
+ @version = params[:version_id].to_i if params[:version_id]
169
+ @version = nil if @version == 0
170
+ end
171
+
172
+ def clear_search_sessions
173
+ session[:query] = nil
174
+ session[:params] = nil
175
+ session[:search_params] = nil
176
+ session[:manifestation_ids] = nil
177
+ end
178
+
179
+ def api_request?
180
+ true unless params[:format].nil? or params[:format] == 'html'
181
+ end
182
+
183
+ def get_top_page_content
184
+ if defined?(EnjuNews)
185
+ @news_feeds = Rails.cache.fetch('news_feed_all'){NewsFeed.order(:position)}
186
+ @news_posts = NewsPost.limit(LibraryGroup.site_config.settings[:news_post_number_top_page] || 10)
187
+ end
188
+ @libraries = Library.real
189
+ end
190
+
191
+ def set_mobile_request
192
+ case params[:view]
193
+ when 'phone'
194
+ session[:enju_view] = :phone
195
+ when 'desktop'
196
+ session[:enju_view] = :desktop
197
+ when 'reset'
198
+ session[:enju_view] = nil
199
+ end
200
+
201
+ case session[:enju_view].try(:to_sym)
202
+ when :phone
203
+ request.variant = :phone
204
+ when :desktop
205
+ request.variant = nil
206
+ else
207
+ request.variant = :phone if browser.device.mobile?
208
+ end
209
+ end
210
+
211
+ def move_position(resource, direction, redirect = true)
212
+ if ['higher', 'lower'].include?(direction)
213
+ resource.send("move_#{direction}")
214
+ if redirect
215
+ redirect_to url_for(controller: resource.class.to_s.pluralize.underscore)
216
+ return
217
+ end
218
+ end
219
+ end
220
+
221
+ def store_current_location
222
+ store_location_for(:user, request.url)
223
+ end
224
+
7
225
  def get_library_group
8
226
  @library_group = LibraryGroup.site_config
9
227
  end
@@ -0,0 +1,116 @@
1
+ class UserExportFilesController < ApplicationController
2
+ before_action :set_user_export_file, only: [:show, :edit, :update, :destroy]
3
+ before_action :check_policy, only: [:index, :new, :create]
4
+
5
+ # GET /user_export_files
6
+ # GET /user_export_files.json
7
+ def index
8
+ @user_export_files = UserExportFile.order('id DESC').page(params[:page])
9
+
10
+ respond_to do |format|
11
+ format.html # index.html.erb
12
+ format.json { render json: @user_export_files }
13
+ end
14
+ end
15
+
16
+ # GET /user_export_files/1
17
+ # GET /user_export_files/1.json
18
+ def show
19
+ if @user_export_file.user_export.path
20
+ unless ENV['ENJU_STORAGE'] == 's3'
21
+ file = @user_export_file.user_export.path
22
+ end
23
+ end
24
+
25
+ respond_to do |format|
26
+ format.html # show.html.erb
27
+ format.json { render json: @user_export_file }
28
+ format.download {
29
+ if ENV['ENJU_STORAGE'] == 's3'
30
+ send_data Faraday.get(@user_export_file.user_export.expiring_url).body.force_encoding('UTF-8'),
31
+ filename: File.basename(@user_export_file.user_export_file_name), type: 'application/octet-stream'
32
+ else
33
+ send_file file, filename: @user_export_file.user_export_file_name, type: 'application/octet-stream'
34
+ end
35
+ }
36
+ end
37
+ end
38
+
39
+ # GET /user_export_files/new
40
+ # GET /user_export_files/new.json
41
+ def new
42
+ @user_export_file = UserExportFile.new
43
+ @user_export_file.user = current_user
44
+
45
+ respond_to do |format|
46
+ format.html # new.html.erb
47
+ format.json { render json: @user_export_file }
48
+ end
49
+ end
50
+
51
+ # GET /user_export_files/1/edit
52
+ def edit
53
+ end
54
+
55
+ # POST /user_export_files
56
+ # POST /user_export_files.json
57
+ def create
58
+ @user_export_file = UserExportFile.new(user_export_file_params)
59
+ @user_export_file.user = current_user
60
+
61
+ respond_to do |format|
62
+ if @user_export_file.save
63
+ if @user_export_file.mode == 'export'
64
+ UserExportFileJob.perform_later(@user_export_file)
65
+ end
66
+ format.html { redirect_to @user_export_file, notice: t('export.successfully_created', model: t('activerecord.models.user_export_file')) }
67
+ format.json { render json: @user_export_file, status: :created, location: @user_export_file }
68
+ else
69
+ format.html { render action: "new" }
70
+ format.json { render json: @user_export_file.errors, status: :unprocessable_entity }
71
+ end
72
+ end
73
+ end
74
+
75
+ # PUT /user_export_files/1
76
+ # PUT /user_export_files/1.json
77
+ def update
78
+ respond_to do |format|
79
+ if @user_export_file.update_attributes(user_export_file_params)
80
+ if @user_export_file.mode == 'export'
81
+ UserExportFileJob.perform_later(@user_export_file)
82
+ end
83
+ format.html { redirect_to @user_export_file, notice: t('controller.successfully_updated', model: t('activerecord.models.user_export_file')) }
84
+ format.json { head :no_content }
85
+ else
86
+ format.html { render action: "edit" }
87
+ format.json { render json: @user_export_file.errors, status: :unprocessable_entity }
88
+ end
89
+ end
90
+ end
91
+
92
+ # DELETE /user_export_files/1
93
+ # DELETE /user_export_files/1.json
94
+ def destroy
95
+ @user_export_file.destroy
96
+
97
+ respond_to do |format|
98
+ format.html { redirect_to user_export_files_url }
99
+ format.json { head :no_content }
100
+ end
101
+ end
102
+
103
+ private
104
+ def set_user_export_file
105
+ @user_export_file = UserExportFile.find(params[:id])
106
+ authorize @user_export_file
107
+ end
108
+
109
+ def check_policy
110
+ authorize UserExportFile
111
+ end
112
+
113
+ def user_export_file_params
114
+ params.require(:user_export_file).permit(:mode)
115
+ end
116
+ end
@@ -0,0 +1,118 @@
1
+ class UserGroupsController < ApplicationController
2
+ before_action :set_user_group, only: [:show, :edit, :update, :destroy]
3
+ before_action :check_policy, only: [:index, :new, :create]
4
+ before_action :prepare_options, only: [:new, :edit]
5
+
6
+ # GET /user_groups
7
+ # GET /user_groups.json
8
+ def index
9
+ @user_groups = UserGroup.order(:position)
10
+
11
+ respond_to do |format|
12
+ format.html # index.html.erb
13
+ format.json { render json: @user_groups }
14
+ end
15
+ end
16
+
17
+ # GET /user_groups/1
18
+ # GET /user_groups/1.json
19
+ def show
20
+ respond_to do |format|
21
+ format.html # show.html.erb
22
+ format.json { render json: @user_group }
23
+ end
24
+ end
25
+
26
+ # GET /user_groups/new
27
+ def new
28
+ @user_group = UserGroup.new
29
+
30
+ respond_to do |format|
31
+ format.html # new.html.erb
32
+ format.json { render json: @user_group }
33
+ end
34
+ end
35
+
36
+ # GET /user_groups/1/edit
37
+ def edit
38
+ end
39
+
40
+ # POST /user_groups
41
+ # POST /user_groups.json
42
+ def create
43
+ @user_group = UserGroup.new(user_group_params)
44
+
45
+ respond_to do |format|
46
+ if @user_group.save
47
+ format.html { redirect_to @user_group, notice: t('controller.successfully_created', model: t('activerecord.models.user_group')) }
48
+ format.json { render json: @user_group, status: :created, location: @user_group }
49
+ else
50
+ prepare_options
51
+ format.html { render action: "new" }
52
+ format.json { render json: @user_group.errors, status: :unprocessable_entity }
53
+ end
54
+ end
55
+ end
56
+
57
+ # PUT /user_groups/1
58
+ # PUT /user_groups/1.json
59
+ def update
60
+ if params[:move]
61
+ move_position(@user_group, params[:move])
62
+ return
63
+ end
64
+
65
+ respond_to do |format|
66
+ if @user_group.update_attributes(user_group_params)
67
+ format.html { redirect_to @user_group, notice: t('controller.successfully_updated', model: t('activerecord.models.user_group')) }
68
+ format.json { head :no_content }
69
+ else
70
+ prepare_options
71
+ format.html { render action: "edit" }
72
+ format.json { render json: @user_group.errors, status: :unprocessable_entity }
73
+ end
74
+ end
75
+ end
76
+
77
+ # DELETE /user_groups/1
78
+ # DELETE /user_groups/1.json
79
+ def destroy
80
+ @user_group.destroy
81
+
82
+ respond_to do |format|
83
+ format.html { redirect_to user_groups_url }
84
+ format.json { head :no_content }
85
+ end
86
+ end
87
+
88
+ private
89
+ def set_user_group
90
+ @user_group = UserGroup.find(params[:id])
91
+ authorize @user_group
92
+ end
93
+
94
+ def check_policy
95
+ authorize UserGroup
96
+ end
97
+
98
+ def user_group_params
99
+ params.require(:user_group).permit(
100
+ :name, :display_name, :note, :valid_period_for_new_user,
101
+ :expired_at, :number_of_day_to_notify_overdue,
102
+ :number_of_day_to_notify_overdue,
103
+ :number_of_day_to_notify_due_date,
104
+ :number_of_time_to_notify_overdue,
105
+ # EnjuCirculation
106
+ {:user_group_has_checkout_types_attributes => [
107
+ :id, :checkout_type_id, :checkout_limit, :checkout_period, :checkout_renewal_limit,
108
+ :reservation_limit, :reservation_expired_period, :set_due_date_before_closing_day
109
+ ]},
110
+ )
111
+ end
112
+
113
+ def prepare_options
114
+ if defined?(EnjuCirculation)
115
+ @checkout_types = CheckoutType.select([:id, :display_name, :position])
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,129 @@
1
+ class UserImportFilesController < ApplicationController
2
+ before_action :set_user_import_file, only: [:show, :edit, :update, :destroy]
3
+ before_action :check_policy, only: [:index, :new, :create]
4
+ before_action :prepare_options, only: [:new, :edit]
5
+
6
+ # GET /user_import_files
7
+ # GET /user_import_files.json
8
+ def index
9
+ @user_import_files = UserImportFile.order('id DESC').page(params[:page])
10
+
11
+ respond_to do |format|
12
+ format.html # index.html.erb
13
+ format.json { render json: @user_import_files }
14
+ end
15
+ end
16
+
17
+ # GET /user_import_files/1
18
+ # GET /user_import_files/1.json
19
+ def show
20
+ if @user_import_file.user_import.path
21
+ unless ENV['ENJU_STORAGE'] == 's3'
22
+ file = @user_import_file.user_import.path
23
+ end
24
+ end
25
+ @user_import_results = @user_import_file.user_import_results.page(params[:page])
26
+
27
+ respond_to do |format|
28
+ format.html # show.html.erb
29
+ format.json { render json: @user_import_file }
30
+ format.download {
31
+ if ENV['ENJU_STORAGE'] == 's3'
32
+ send_data Faraday.get(@user_import_file.user_import.expiring_url).body.force_encoding('UTF-8'),
33
+ filename: File.basename(@user_import_file.user_import_file_name), type: 'application/octet-stream'
34
+ else
35
+ send_file file, filename: @user_import_file.user_import_file_name, type: 'application/octet-stream'
36
+ end
37
+ }
38
+ end
39
+ end
40
+
41
+ # GET /user_import_files/new
42
+ # GET /user_import_files/new.json
43
+ def new
44
+ @user_import_file = UserImportFile.new
45
+ @user_import_file.default_user_group = current_user.profile.user_group
46
+ @user_import_file.default_library = current_user.profile.library
47
+
48
+ respond_to do |format|
49
+ format.html # new.html.erb
50
+ format.json { render json: @user_import_file }
51
+ end
52
+ end
53
+
54
+ # GET /user_import_files/1/edit
55
+ def edit
56
+ end
57
+
58
+ # POST /user_import_files
59
+ # POST /user_import_files.json
60
+ def create
61
+ @user_import_file = UserImportFile.new(user_import_file_params)
62
+ @user_import_file.user = current_user
63
+
64
+ respond_to do |format|
65
+ if @user_import_file.save
66
+ if @user_import_file.mode == 'import'
67
+ UserImportFileJob.perform_later(@user_import_file)
68
+ end
69
+ format.html { redirect_to @user_import_file, notice: t('import.successfully_created', model: t('activerecord.models.user_import_file')) }
70
+ format.json { render json: @user_import_file, status: :created, location: @user_import_file }
71
+ else
72
+ prepare_options
73
+ format.html { render action: "new" }
74
+ format.json { render json: @user_import_file.errors, status: :unprocessable_entity }
75
+ end
76
+ end
77
+ end
78
+
79
+ # PUT /user_import_files/1
80
+ # PUT /user_import_files/1.json
81
+ def update
82
+ respond_to do |format|
83
+ if @user_import_file.update_attributes(user_import_file_params)
84
+ if @user_import_file.mode == 'import'
85
+ UserImportFileJob.perform_later(@user_import_file)
86
+ end
87
+ format.html { redirect_to @user_import_file, notice: t('controller.successfully_updated', model: t('activerecord.models.user_import_file')) }
88
+ format.json { head :no_content }
89
+ else
90
+ prepare_options
91
+ format.html { render action: "edit" }
92
+ format.json { render json: @user_import_file.errors, status: :unprocessable_entity }
93
+ end
94
+ end
95
+ end
96
+
97
+ # DELETE /user_import_files/1
98
+ # DELETE /user_import_files/1.json
99
+ def destroy
100
+ @user_import_file.destroy
101
+
102
+ respond_to do |format|
103
+ format.html { redirect_to(user_import_files_url) }
104
+ format.json { head :no_content }
105
+ end
106
+ end
107
+
108
+ private
109
+ def set_user_import_file
110
+ @user_import_file = UserImportFile.find(params[:id])
111
+ authorize @user_import_file
112
+ end
113
+
114
+ def check_policy
115
+ authorize UserImportFile
116
+ end
117
+
118
+ def user_import_file_params
119
+ params.require(:user_import_file).permit(
120
+ :user_import, :edit_mode, :user_encoding, :mode,
121
+ :default_user_group_id, :default_library_id
122
+ )
123
+ end
124
+
125
+ def prepare_options
126
+ @user_groups = UserGroup.all
127
+ @libraries = Library.all
128
+ end
129
+ end
@@ -0,0 +1,57 @@
1
+ class UserImportResultsController < ApplicationController
2
+ before_action :set_user_import_result, only: [:show, :edit, :update, :destroy]
3
+ before_action :check_policy, only: [:index, :new, :create]
4
+
5
+ # GET /user_import_results
6
+ # GET /user_import_results.json
7
+ def index
8
+ @user_import_file = UserImportFile.where(id: params[:user_import_file_id]).first
9
+ if @user_import_file
10
+ @user_import_results = @user_import_file.user_import_results.page(params[:page])
11
+ else
12
+ @user_import_results = UserImportResult.page(params[:page])
13
+ end
14
+
15
+ respond_to do |format|
16
+ format.html # index.html.erb
17
+ format.json { render json: @user_import_results }
18
+ format.txt
19
+ end
20
+ end
21
+
22
+ # GET /user_import_results/1
23
+ # GET /user_import_results/1.json
24
+ def show
25
+ respond_to do |format|
26
+ format.html # show.html.erb
27
+ format.json { render json: @user_import_result }
28
+ end
29
+ end
30
+
31
+ # DELETE /user_import_results/1
32
+ # DELETE /user_import_results/1.json
33
+ def destroy
34
+ @user_import_result.destroy
35
+
36
+ respond_to do |format|
37
+ format.html { redirect_to user_import_results_url, notice: t('controller.successfully_deleted', model: t('activerecord.models.user_import_result')) }
38
+ format.json { head :no_content }
39
+ end
40
+ end
41
+
42
+ private
43
+ def set_user_import_result
44
+ @user_import_result = UserImportResult.find(params[:id])
45
+ authorize @user_import_result
46
+ end
47
+
48
+ def check_policy
49
+ authorize UserImportResult
50
+ end
51
+
52
+ def user_import_result_params
53
+ params.require(:user_import_result).permit(
54
+ :user_import_file_id, :user_id, :body
55
+ )
56
+ end
57
+ end
@@ -0,0 +1,30 @@
1
+ class Notifier < ActionMailer::Base
2
+ def message_notification(message_id)
3
+ message = Message.find(message_id)
4
+ I18n.locale = message.receiver.profile.locale.try(:to_sym) || I18n.default_locale
5
+ from = "#{LibraryGroup.system_name(message.receiver.profile.locale)} <#{LibraryGroup.site_config.user.email}>"
6
+ if message.subject
7
+ subject = message.subject
8
+ else
9
+ subject = I18n.t('message.new_message_from_library', library: LibraryGroup.system_name(message.receiver.user.profile.locale))
10
+ end
11
+ if message.sender
12
+ @sender_name = message.sender.username
13
+ else
14
+ @sender_name = LibraryGroup.system_name(message.receiver.profile.locale)
15
+ end
16
+ @message = message
17
+ @locale = message.receiver.profile.locale
18
+ mail(from: from, to: message.receiver.email, subject: subject)
19
+ end
20
+
21
+ def manifestation_info(user_id, manifestation_id)
22
+ user = User.find(user_id)
23
+ manifestation = Manifestation.find(manifestation_id)
24
+ from = "#{LibraryGroup.system_name(user.profile.locale)} <#{LibraryGroup.site_config.user.email}>"
25
+ subject = "#{manifestation.original_title} : #{LibraryGroup.system_name(user.profile.locale)}"
26
+ @user = user
27
+ @manifestation = manifestation
28
+ mail(from: from, to: user.email, subject: subject)
29
+ end
30
+ end