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

Sign up to get free protection for your applications and to get access to all the features.
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