enju_leaf 1.1.0.rc20 → 1.1.0.rc21
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.
- checksums.yaml +4 -4
- data/app/assets/images/unknown_resource.png +0 -0
- data/app/controllers/my_accounts_controller.rb +0 -11
- data/app/controllers/page_controller.rb +12 -0
- data/app/controllers/profiles_controller.rb +23 -5
- data/app/controllers/user_import_files_controller.rb +1 -0
- data/app/helpers/page_helper.rb +14 -0
- data/app/models/profile.rb +7 -1
- data/app/models/user_export_file.rb +1 -0
- data/app/models/user_import_file.rb +20 -10
- data/app/views/page/_menu.html.erb +40 -51
- data/app/views/page/advanced_search.html.erb +14 -3
- data/app/views/page/configuration.html.erb +3 -0
- data/app/views/page/statistics.html.erb +0 -14
- data/app/views/page/system_information.html.erb +13 -1
- data/app/views/profiles/_edit_profile.html.erb +2 -2
- data/app/views/user_import_files/_results.html.erb +22 -0
- data/app/views/user_import_files/show.html.erb +8 -12
- data/app/views/user_import_results/_list.html.erb +22 -0
- data/app/views/user_import_results/_list_lines.html.erb +24 -0
- data/app/views/user_import_results/index.html.erb +5 -30
- data/app/views/user_import_results/show.html.erb +1 -1
- data/config/locales/devise.ja.yml +3 -3
- data/config/locales/translation_en.yml +5 -1
- data/config/locales/translation_ja.yml +5 -1
- data/lib/enju_leaf/calculate_stat.rb +3 -0
- data/lib/enju_leaf/engine.rb +0 -1
- data/lib/enju_leaf/helper.rb +22 -7
- data/lib/enju_leaf/import_file.rb +4 -0
- data/lib/enju_leaf/master_model.rb +1 -0
- data/lib/enju_leaf/user.rb +52 -20
- data/lib/enju_leaf/version.rb +1 -1
- data/lib/generators/enju_leaf/setup/setup_generator.rb +1 -1
- data/spec/controllers/my_accounts_controller_spec.rb +2 -2
- data/spec/controllers/profiles_controller_spec.rb +19 -5
- data/spec/controllers/user_import_files_controller_spec.rb +8 -1
- data/spec/controllers/user_import_results_controller_spec.rb +21 -1
- data/spec/dummy/app/assets/javascripts/application.js +4 -6
- data/spec/dummy/config/initializers/kaminari_config.rb +10 -0
- data/spec/fixtures/user_import_files.yml +2 -0
- data/spec/models/user_import_file_spec.rb +32 -24
- data/spec/models/user_spec.rb +29 -1
- data/spec/rails_helper.rb +82 -0
- data/spec/spec_helper.rb +86 -51
- data/spec/views/page/configuration.html.erb_spec.rb +1 -1
- data/spec/views/user_import_results/index.html.erb_spec.rb +32 -0
- metadata +20 -11
@@ -0,0 +1,22 @@
|
|
1
|
+
<h2><%= t('activerecord.models.user_import_result') %></h2>
|
2
|
+
<table class="table table-striped index">
|
3
|
+
<tr>
|
4
|
+
<th><%= t('activerecord.attributes.user_import_result.lineno') %></th>
|
5
|
+
<th><%= t('activerecord.attributes.user_import_result.body') %></th>
|
6
|
+
<th><%= t('activerecord.models.user') %></th>
|
7
|
+
<th></th>
|
8
|
+
</tr>
|
9
|
+
<% @user_import_results.each_with_index do |user_import_result, idx| %>
|
10
|
+
<tr class="line<%= cycle("0", "1") -%>">
|
11
|
+
<td><%= @user_import_results.offset_value + idx + 1 %></td>
|
12
|
+
<td><%= user_import_result.body.inspect %></td>
|
13
|
+
<td><%= link_to user_import_result.user.username, user_import_result.user.profile if user_import_result.user.try(:profile) %></td>
|
14
|
+
<td>
|
15
|
+
<%= link_to t('page.show'), user_import_result %>
|
16
|
+
<%= link_to t('page.destroy'), user_import_result, data: {confirm: t('page.are_you_sure')}, method: :delete %>
|
17
|
+
</td>
|
18
|
+
</tr>
|
19
|
+
<% end %>
|
20
|
+
</table>
|
21
|
+
<%= paginate(@user_import_results) %>
|
22
|
+
|
@@ -8,25 +8,18 @@
|
|
8
8
|
<%= @user_import_file.id -%>
|
9
9
|
</p>
|
10
10
|
|
11
|
+
<% if @user_import_file.user_import_file_name %>
|
11
12
|
<p>
|
12
13
|
<strong><%= t('activerecord.attributes.user_import_file.user_import_file_name') -%>:</strong>
|
13
|
-
<%= link_to @user_import_file.user_import_file_name, user_import_file_path(@user_import_file, format: :download)
|
14
|
-
|
15
|
-
|
16
|
-
<p>
|
17
|
-
<strong><%= t('activerecord.attributes.user_import_file.user_import_content_type') -%>:</strong>
|
18
|
-
<%= @user_import_file.user_import_content_type -%>
|
14
|
+
<%= link_to @user_import_file.user_import_file_name, user_import_file_path(@user_import_file, format: :download) %>
|
15
|
+
(<%= @user_import_file.user_import_content_type -%>)
|
19
16
|
</p>
|
20
17
|
|
21
18
|
<p>
|
22
19
|
<strong><%= t('activerecord.attributes.user_import_file.user_import_file_size') -%>:</strong>
|
23
20
|
<%= @user_import_file.user_import_file_size -%>
|
24
21
|
</p>
|
25
|
-
|
26
|
-
<p>
|
27
|
-
<strong><%= t('activerecord.attributes.user_import_file.user_import_fingerprint') -%>:</strong>
|
28
|
-
<%= @user_import_file.user_import_fingerprint -%>
|
29
|
-
</p>
|
22
|
+
<% end %>
|
30
23
|
|
31
24
|
<p>
|
32
25
|
<strong><%= t('page.created_at') -%>:</strong>
|
@@ -73,13 +66,16 @@
|
|
73
66
|
<%= link_to @user_import_file.user.username, @user_import_file.user.profile if @user_import_file.user.try(:profile) -%>
|
74
67
|
</p>
|
75
68
|
|
69
|
+
<% if @user_import_results %>
|
70
|
+
<%= render 'results' %>
|
71
|
+
<% end %>
|
72
|
+
|
76
73
|
</div>
|
77
74
|
</div>
|
78
75
|
|
79
76
|
<div id="submenu" class="ui-corner-all ui-widget-content">
|
80
77
|
<%= form_for(@user_import_file) do |f| %>
|
81
78
|
<ul>
|
82
|
-
<li><%= link_to t('activerecord.models.user_import_result'), user_import_file_user_import_results_path(@user_import_file) -%></li>
|
83
79
|
<li><%= back_to_index(flash[:page_info]) -%></li>
|
84
80
|
<% if current_user.has_role?('Administrator') %>
|
85
81
|
<li><%= link_to 'Resque', resque_path %></li>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<table class="table table-striped index">
|
2
|
+
<tr>
|
3
|
+
<th><%= t('activerecord.models.user_import_file') %></th>
|
4
|
+
<th><%= t('activerecord.models.user') %></th>
|
5
|
+
<th></th>
|
6
|
+
</tr>
|
7
|
+
|
8
|
+
<% @user_import_results.each do |user_import_result| %>
|
9
|
+
<tr class="line<%= cycle("0", "1") -%>">
|
10
|
+
<td>
|
11
|
+
<%= link_to user_import_result.user_import_file.user_import_file_name, user_import_result.user_import_file %>
|
12
|
+
<br />
|
13
|
+
<%=l user_import_result.created_at %>
|
14
|
+
</td>
|
15
|
+
<td><%= link_to user_import_result.user.username, user_import_result.user.profile if user_import_result.user.try(:profile) %></td>
|
16
|
+
<td>
|
17
|
+
<%= link_to t('page.show'), user_import_result %>
|
18
|
+
<%= link_to t('page.destroy'), user_import_result, data: {confirm: t('page.are_you_sure')}, method: :delete %>
|
19
|
+
</td>
|
20
|
+
</tr>
|
21
|
+
<% end %>
|
22
|
+
</table>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<ul>
|
2
|
+
<li><%= t('activerecord.models.user_import_file') %>: <%= link_to @user_import_file.user_import_file_name, @user_import_file %>
|
3
|
+
<li><%= t('page.created_at') %>: <%= l(@user_import_file.created_at) %>
|
4
|
+
</h2>
|
5
|
+
<table class="table table-striped index">
|
6
|
+
<tr>
|
7
|
+
<th><%= t('activerecord.attributes.user_import_result.lineno') %></th>
|
8
|
+
<th><%= t('activerecord.attributes.user_import_result.body') %></th>
|
9
|
+
<th><%= t('activerecord.models.user') %></th>
|
10
|
+
<th></th>
|
11
|
+
</tr>
|
12
|
+
|
13
|
+
<% @user_import_results.each_with_index do |user_import_result, idx| %>
|
14
|
+
<tr class="line<%= cycle("0", "1") -%>">
|
15
|
+
<td><%= @user_import_results.offset_value + idx + 1 %></td>
|
16
|
+
<td><%= user_import_result.body.inspect %></td>
|
17
|
+
<td><%= link_to user_import_result.user.username, user_import_result.user.profile if user_import_result.user.try(:profile) %></td>
|
18
|
+
<td>
|
19
|
+
<%= link_to t('page.show'), user_import_result %>
|
20
|
+
<%= link_to t('page.destroy'), user_import_result, data: {confirm: t('page.are_you_sure')}, method: :delete %>
|
21
|
+
</td>
|
22
|
+
</tr>
|
23
|
+
<% end %>
|
24
|
+
</table>
|
@@ -2,36 +2,11 @@
|
|
2
2
|
<h1 class="title"><%= t('page.listing', model: t('activerecord.models.user_import_result')) -%></h1>
|
3
3
|
<div id="content_list">
|
4
4
|
<% if @user_import_file %>
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
<%= render 'list_lines' %>
|
6
|
+
<% else %>
|
7
|
+
<%= render 'list' %>
|
8
8
|
<% end %>
|
9
|
-
|
10
|
-
<table class="table table-striped index">
|
11
|
-
<tr>
|
12
|
-
<th><%= t('activerecord.models.user_import_file') %></th>
|
13
|
-
<th><%= t('activerecord.models.user') %></th>
|
14
|
-
<th></th>
|
15
|
-
</tr>
|
16
|
-
|
17
|
-
<% @user_import_results.each do |user_import_result| %>
|
18
|
-
<tr class="line<%= cycle("0", "1") -%>">
|
19
|
-
<td>
|
20
|
-
<%= link_to user_import_result.user_import_file.user_import_file_name, user_import_result.user_import_file %>
|
21
|
-
<br />
|
22
|
-
<%=l user_import_result.created_at %>
|
23
|
-
</td>
|
24
|
-
<td><%= link_to user_import_result.user.username, user_import_result.user.profile if user_import_result.user.try(:profile) %></td>
|
25
|
-
<td>
|
26
|
-
<%= link_to t('page.show'), user_import_result %>
|
27
|
-
<%= link_to t('page.destroy'), user_import_result, data: {confirm: t('page.are_you_sure')}, method: :delete %>
|
28
|
-
</td>
|
29
|
-
</tr>
|
30
|
-
<% end %>
|
31
|
-
</table>
|
32
|
-
|
33
|
-
<%= paginate(@user_import_results) %>
|
34
|
-
|
9
|
+
<%= paginate(@user_import_results) %>
|
35
10
|
</div>
|
36
11
|
</div>
|
37
12
|
|
@@ -40,7 +15,7 @@
|
|
40
15
|
<li>
|
41
16
|
<% if @user_import_file %>
|
42
17
|
<%= link_to((image_tag 'icons/page_white_excel.png', size: '16x16', alt: 'TSV', class: 'icon'), user_import_file_user_import_results_path(@user_import_file, format: :txt, locale: @locale.to_s)) -%>
|
43
|
-
(<%= link_to 'TSV', user_import_file_user_import_results_path(format: :txt, locale: @locale.to_s) -%>)
|
18
|
+
(<%= link_to 'TSV', user_import_file_user_import_results_path(@user_import_file, format: :txt, locale: @locale.to_s) -%>)
|
44
19
|
<% else %>
|
45
20
|
<%= link_to((image_tag 'icons/page_white_excel.png', size: '16x16', alt: 'TSV', class: 'icon'), user_import_results_path(format: :txt, locale: @locale.to_s)) -%>
|
46
21
|
(<%= link_to 'TSV', user_import_results_path(format: :txt, locale: @locale.to_s) -%>)
|
@@ -51,8 +51,8 @@ ja:
|
|
51
51
|
already_confirmed: "was already confirmed, please try signing in"
|
52
52
|
confirmation_period_expired: "needs to be confirmed within %{period}, please request a new one"
|
53
53
|
expired: "有効期限が切れています。新しく登録してください。"
|
54
|
-
not_found: "
|
54
|
+
not_found: "は登録されていません。"
|
55
55
|
not_locked: "was not locked"
|
56
56
|
not_saved:
|
57
|
-
one: "%{resource}
|
58
|
-
other: "%{resource}
|
57
|
+
one: "%{resource} の情報に1個のエラーがあります:"
|
58
|
+
other: "%{resource} の情報に%{count}個のエラーがあります:"
|
@@ -75,7 +75,8 @@ en:
|
|
75
75
|
default_user_group_id: Default user group
|
76
76
|
default_library_id: Default library
|
77
77
|
user_import_result:
|
78
|
-
body:
|
78
|
+
body: Contents
|
79
|
+
lineno: Line
|
79
80
|
user_export_file:
|
80
81
|
user_export_file_name: Filename
|
81
82
|
user_export_file_size: Size
|
@@ -150,6 +151,7 @@ en:
|
|
150
151
|
start_import: "Start import"
|
151
152
|
import_record: "Import records"
|
152
153
|
export: "Export"
|
154
|
+
other_format: "Other formats"
|
153
155
|
detail: "Detail"
|
154
156
|
acquisition: "Acquisition"
|
155
157
|
configuration: "Configuration"
|
@@ -288,6 +290,7 @@ en:
|
|
288
290
|
cannot_parse_yaml_header: "has an invalid YAML header. You must add a space after the header's colon."
|
289
291
|
notice: Notice
|
290
292
|
system_information: System information
|
293
|
+
default_locale: Default locale
|
291
294
|
nosolr_error: 'There is an error on connecting to the search server.'
|
292
295
|
nosolr_error_description: 'This error may be caused by a delay when the sever is still waiting for launching the search server. In that case, please wait for a while, and go back to this page later.'
|
293
296
|
title:
|
@@ -304,6 +307,7 @@ en:
|
|
304
307
|
to: "to"
|
305
308
|
from_to: "-"
|
306
309
|
all_libraries: "All libraries"
|
310
|
+
check_all: "Check/Uncheck All"
|
307
311
|
work:
|
308
312
|
agents_work: "%{agent_name}'s works"
|
309
313
|
library_group_work: "Works in %{library_group_name}"
|
@@ -75,7 +75,8 @@ ja:
|
|
75
75
|
default_user_group_id: 既定の利用者グループ
|
76
76
|
default_library_id: 既定の図書館
|
77
77
|
user_import_result:
|
78
|
-
body:
|
78
|
+
body: 内容
|
79
|
+
lineno: 行数
|
79
80
|
user_export_file:
|
80
81
|
user_export_file_name: ファイル名
|
81
82
|
user_export_file_size: ファイルサイズ
|
@@ -141,6 +142,7 @@ ja:
|
|
141
142
|
start_import: "インポートを開始"
|
142
143
|
import_record: "書誌レコードのインポート"
|
143
144
|
export: "エクスポート"
|
145
|
+
other_format: "書き出し"
|
144
146
|
detail: "詳細"
|
145
147
|
acquisition: "資料の受入"
|
146
148
|
configuration: "システムの設定"
|
@@ -273,6 +275,7 @@ ja:
|
|
273
275
|
cannot_parse_yaml_header: "のYAMLヘッダを読み込めません。ヘッダのコロンの後には、半角スペースを含める必要があります。"
|
274
276
|
notice: 注意
|
275
277
|
system_information: システムの基本的な情報の表示
|
278
|
+
default_locale: "既定の言語"
|
276
279
|
nosolr_error: '検索サーバに不具合があるようです'
|
277
280
|
nosolr_error_description: '検索サーバーの起動に時間がかかっている場合もこのエラーとなります。少し時間を置いてアクセスするとエラーが解消される場合もありますのでお試しください。'
|
278
281
|
title:
|
@@ -288,6 +291,7 @@ ja:
|
|
288
291
|
from: ""
|
289
292
|
to: "から"
|
290
293
|
all_libraries: "全ての図書館"
|
294
|
+
check_all: "全て選択/解除"
|
291
295
|
work:
|
292
296
|
agent_work: "%{agent_name} の書いた資料"
|
293
297
|
library_group_work: "%{library_group_name} にある書いた資料"
|
@@ -10,6 +10,7 @@ module CalculateStat
|
|
10
10
|
end
|
11
11
|
|
12
12
|
module ClassMethods
|
13
|
+
# 利用統計の集計を開始します。
|
13
14
|
def calculate_stat
|
14
15
|
self.not_calculated.each do |stat|
|
15
16
|
stat.transition_to!(:started)
|
@@ -18,6 +19,7 @@ module CalculateStat
|
|
18
19
|
end
|
19
20
|
|
20
21
|
module InstanceMethods
|
22
|
+
# 利用統計の日付をチェックします。
|
21
23
|
def check_date
|
22
24
|
if self.start_date and self.end_date
|
23
25
|
if self.start_date >= self.end_date
|
@@ -27,6 +29,7 @@ module CalculateStat
|
|
27
29
|
end
|
28
30
|
end
|
29
31
|
|
32
|
+
# 利用統計の集計完了メッセージを送信します。
|
30
33
|
def send_message
|
31
34
|
sender = User.find(1) #system
|
32
35
|
message_template = MessageTemplate.localized_template('counting_completed', user.profile.locale)
|
data/lib/enju_leaf/engine.rb
CHANGED
data/lib/enju_leaf/helper.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
module EnjuLeaf
|
2
2
|
module EnjuLeafHelper
|
3
|
+
# 使用中のデータベースのアダプタ名を表示します。
|
3
4
|
def database_adapter
|
4
5
|
case ActiveRecord::Base.connection.adapter_name
|
5
6
|
when 'PostgreSQL'
|
@@ -10,7 +11,8 @@ module EnjuLeaf
|
|
10
11
|
link_to 'SQLite', 'http://www.sqlite.org/'
|
11
12
|
end
|
12
13
|
end
|
13
|
-
|
14
|
+
|
15
|
+
# HTMLのtitleに表示されるアクション名を設定します。
|
14
16
|
def title_action_name
|
15
17
|
case controller.action_name
|
16
18
|
when 'index'
|
@@ -39,7 +41,9 @@ module EnjuLeaf
|
|
39
41
|
def move_position(object)
|
40
42
|
render partial: 'page/position', locals: {object: object}
|
41
43
|
end
|
42
|
-
|
44
|
+
|
45
|
+
# I18nに対応した状態名を表示します。
|
46
|
+
# @param [String] state 状態名
|
43
47
|
def localized_state(state)
|
44
48
|
case state
|
45
49
|
when 'pending'
|
@@ -57,6 +61,8 @@ module EnjuLeaf
|
|
57
61
|
end
|
58
62
|
end
|
59
63
|
|
64
|
+
# I18nに対応した状態名を表示します。
|
65
|
+
# @param [Boolean] bool 状態名
|
60
66
|
def localized_boolean(bool)
|
61
67
|
case bool.to_s
|
62
68
|
when nil
|
@@ -66,11 +72,13 @@ module EnjuLeaf
|
|
66
72
|
t('page.boolean.false')
|
67
73
|
end
|
68
74
|
end
|
69
|
-
|
75
|
+
|
76
|
+
# ログイン中のユーザの権限名を表示します。
|
70
77
|
def current_user_role_name
|
71
78
|
current_user.try(:role).try(:name) || 'Guest'
|
72
79
|
end
|
73
80
|
|
81
|
+
# HTMLのtitleを表示します。
|
74
82
|
def title(controller_name)
|
75
83
|
string = ''
|
76
84
|
unless ['page', 'routing_error', 'my_accounts'].include?(controller_name)
|
@@ -82,7 +90,9 @@ module EnjuLeaf
|
|
82
90
|
string << LibraryGroup.system_name + ' - Next-L Enju Leaf'
|
83
91
|
string.html_safe
|
84
92
|
end
|
85
|
-
|
93
|
+
|
94
|
+
# 前の画面に戻るリンクを表示します。
|
95
|
+
# @param [Hash] options
|
86
96
|
def back_to_index(options = {})
|
87
97
|
if options == nil
|
88
98
|
options = {}
|
@@ -91,14 +101,17 @@ module EnjuLeaf
|
|
91
101
|
options.delete(:page) if options[:page].to_i == 1
|
92
102
|
end
|
93
103
|
unless controller_name == 'test'
|
94
|
-
link_to t('page.listing', model: t("activerecord.models.#{controller_name.singularize}")), url_for(params.merge(controller: controller_name, action: :index, id: nil, only_path: true).merge(options))
|
104
|
+
link_to t('page.listing', model: t("activerecord.models.#{controller_name.singularize}")), url_for(params.merge(controller: controller_name, action: :index, page: nil, id: nil, only_path: true).merge(options))
|
95
105
|
end
|
96
106
|
end
|
97
|
-
|
107
|
+
|
108
|
+
# 検索フォームにフォーカスを移動するJavaScriptを表示します。
|
98
109
|
def set_focus_on_search_form
|
99
110
|
javascript_tag("$(function(){$('#search_form').focus()})") if @query.blank?
|
100
111
|
end
|
101
|
-
|
112
|
+
|
113
|
+
# Markdownの文字列をパースして表示します。
|
114
|
+
# @param [String] string Markdownの文字列
|
102
115
|
def markdown_helper(string)
|
103
116
|
return unless string
|
104
117
|
if defined?(Redcarpet)
|
@@ -112,6 +125,8 @@ module EnjuLeaf
|
|
112
125
|
end
|
113
126
|
end
|
114
127
|
|
128
|
+
# ユーザの未読メッセージ数を表示します。
|
129
|
+
# @param [User] user ユーザ
|
115
130
|
def messages_count(user)
|
116
131
|
Message.search do
|
117
132
|
with(:receiver_id).equal_to user.id
|
@@ -8,6 +8,7 @@ module ImportFile
|
|
8
8
|
include InstanceMethods
|
9
9
|
end
|
10
10
|
|
11
|
+
# 失敗したインポート処理を一括削除します。
|
11
12
|
def expire
|
12
13
|
self.stucked.find_each do |file|
|
13
14
|
file.destroy
|
@@ -29,6 +30,8 @@ module ImportFile
|
|
29
30
|
end
|
30
31
|
end
|
31
32
|
|
33
|
+
# インポートするファイルの文字コードをUTF-8に変換します。
|
34
|
+
# @param [String] line 変換する文字列
|
32
35
|
def convert_encoding(line)
|
33
36
|
if defined?(CharlockHolmes::EncodingDetector)
|
34
37
|
begin
|
@@ -49,6 +52,7 @@ module ImportFile
|
|
49
52
|
end
|
50
53
|
end
|
51
54
|
|
55
|
+
# インポート完了時のメッセージを送信します。
|
52
56
|
def send_message
|
53
57
|
sender = User.find(1)
|
54
58
|
message_template = MessageTemplate.localized_template('import_completed', user.profile.locale)
|
data/lib/enju_leaf/user.rb
CHANGED
@@ -69,61 +69,70 @@ module EnjuLeaf
|
|
69
69
|
|
70
70
|
paginates_per 10
|
71
71
|
|
72
|
+
# 有効期限切れのユーザを一括で使用不可にします。
|
72
73
|
def lock_expired_users
|
73
74
|
User.find_each do |user|
|
74
75
|
user.lock_access! if user.expired? and user.active_for_authentication?
|
75
76
|
end
|
76
77
|
end
|
77
78
|
|
79
|
+
# ユーザの情報をエクスポートします。
|
80
|
+
# @param [Hash] options
|
78
81
|
def export(options = {format: :txt})
|
79
82
|
header = %w(
|
80
83
|
username
|
84
|
+
full_name
|
85
|
+
full_name_transcription
|
81
86
|
email
|
82
87
|
user_number
|
83
88
|
role
|
84
89
|
user_group
|
85
90
|
library
|
86
91
|
locale
|
92
|
+
locked
|
93
|
+
required_role
|
87
94
|
created_at
|
88
95
|
updated_at
|
89
96
|
expired_at
|
90
97
|
keyword_list
|
91
98
|
note
|
99
|
+
)
|
100
|
+
header += %w(
|
92
101
|
checkout_icalendar_token
|
93
102
|
save_checkout_history
|
94
|
-
|
95
|
-
|
96
|
-
|
103
|
+
) if defined? EnjuCirculation
|
104
|
+
header << "save_search_history" if defined? EnjuSearchLog
|
105
|
+
header << "share_bookmarks" if defined? EnjuBookmark
|
106
|
+
header = header.join("\t")
|
97
107
|
users = User.all.map{|u|
|
98
108
|
lines = []
|
99
109
|
lines << u.username
|
110
|
+
lines << u.try(:profile).try(:full_name)
|
111
|
+
lines << u.try(:profile).try(:full_name_transcription)
|
100
112
|
lines << u.email
|
101
113
|
lines << u.try(:profile).try(:user_number)
|
102
114
|
lines << u.role.name
|
103
115
|
lines << u.try(:profile).try(:user_group).try(:name)
|
104
116
|
lines << u.try(:profile).try(:library).try(:name)
|
105
117
|
lines << u.try(:profile).try(:locale)
|
118
|
+
lines << u.access_locked?
|
119
|
+
lines << u.try(:profile).try(:required_role).try(:name)
|
106
120
|
lines << u.created_at
|
107
121
|
lines << u.updated_at
|
108
|
-
lines << u.expired_at
|
122
|
+
lines << u.try(:profile).try(:expired_at)
|
109
123
|
lines << u.try(:profile).try(:keyword_list).try(:split).try(:join, "//")
|
110
124
|
lines << u.try(:profile).try(:note)
|
111
|
-
|
125
|
+
if defined? EnjuCirculation
|
112
126
|
lines << u.try(:profile).try(:checkout_icalendar_token)
|
113
127
|
lines << u.try(:profile).try(:save_checkout_history)
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
if defined?(EnjuBookmark)
|
123
|
-
lines << u.try(:share_bookmarks)
|
124
|
-
else
|
125
|
-
lines << nil
|
126
|
-
end
|
128
|
+
end
|
129
|
+
if defined? EnjuSearchLog
|
130
|
+
lines << u.try(:profile).try(:save_search_history)
|
131
|
+
end
|
132
|
+
if defined? EnjuBookmark
|
133
|
+
lines << u.try(:profile).try(:share_bookmarks)
|
134
|
+
end
|
135
|
+
lines
|
127
136
|
}
|
128
137
|
if options[:format] == :txt
|
129
138
|
users.map{|u| u.join("\t")}.unshift(header).join("\r\n")
|
@@ -135,12 +144,17 @@ module EnjuLeaf
|
|
135
144
|
end
|
136
145
|
|
137
146
|
module InstanceMethods
|
147
|
+
# ユーザにパスワードが必要かどうかをチェックします。
|
148
|
+
# @return [Boolean]
|
138
149
|
def password_required?
|
139
150
|
if Devise.mappings[:user].modules.include?(:database_authenticatable)
|
140
151
|
!persisted? || !password.nil? || !password_confirmation.nil?
|
141
152
|
end
|
142
153
|
end
|
143
154
|
|
155
|
+
# ユーザが特定の権限を持っているかどうかをチェックします。
|
156
|
+
# @param [String] role_in_question 権限名
|
157
|
+
# @return [Boolean]
|
144
158
|
def has_role?(role_in_question)
|
145
159
|
return false unless role
|
146
160
|
return true if role.name == role_in_question
|
@@ -154,6 +168,7 @@ module EnjuLeaf
|
|
154
168
|
end
|
155
169
|
end
|
156
170
|
|
171
|
+
# ユーザに使用不可の設定を反映させます。
|
157
172
|
def set_lock_information
|
158
173
|
if locked == '1' and self.active_for_authentication?
|
159
174
|
lock_access!
|
@@ -169,6 +184,8 @@ module EnjuLeaf
|
|
169
184
|
end
|
170
185
|
end
|
171
186
|
|
187
|
+
# ユーザが有効期限切れかどうかをチェックし、期限切れであれば使用不可に設定します。
|
188
|
+
# @return [Object]
|
172
189
|
def check_expiration
|
173
190
|
return if has_role?('Administrator')
|
174
191
|
if expired_at
|
@@ -178,6 +195,8 @@ module EnjuLeaf
|
|
178
195
|
end
|
179
196
|
end
|
180
197
|
|
198
|
+
# ユーザの削除前に、管理者ユーザが不在にならないかどうかをチェックします。
|
199
|
+
# @return [Object]
|
181
200
|
def check_role_before_destroy
|
182
201
|
if has_role?('Administrator')
|
183
202
|
if Role.where(name: 'Administrator').first.users.count == 1
|
@@ -186,26 +205,36 @@ module EnjuLeaf
|
|
186
205
|
end
|
187
206
|
end
|
188
207
|
|
208
|
+
# ユーザに自動生成されたパスワードを設定します。
|
209
|
+
# @return [String]
|
189
210
|
def set_auto_generated_password
|
190
211
|
password = Devise.friendly_token[0..7]
|
191
212
|
self.password = password
|
192
213
|
self.password_confirmation = password
|
193
214
|
end
|
194
215
|
|
216
|
+
# ユーザが有効期限切れかどうかをチェックします。
|
217
|
+
# @return [Boolean]
|
195
218
|
def expired?
|
196
219
|
if expired_at
|
197
220
|
true if expired_at.beginning_of_day < Time.zone.now.beginning_of_day
|
198
221
|
end
|
199
222
|
end
|
200
223
|
|
224
|
+
# ユーザが管理者かどうかをチェックします。
|
225
|
+
# @return [Boolean]
|
201
226
|
def is_admin?
|
202
|
-
true if has_role?('Administrator')
|
227
|
+
return true if has_role?('Administrator')
|
228
|
+
false
|
203
229
|
end
|
204
230
|
|
231
|
+
# ユーザがシステム上の最後のLibrarian権限ユーザかどうかをチェックします。
|
232
|
+
# @return [Boolean]
|
205
233
|
def last_librarian?
|
206
234
|
if has_role?('Librarian')
|
207
235
|
role = Role.where(name: 'Librarian').first
|
208
|
-
true if role.users.
|
236
|
+
return true if role.users.count == 1
|
237
|
+
false
|
209
238
|
end
|
210
239
|
end
|
211
240
|
|
@@ -213,6 +242,9 @@ module EnjuLeaf
|
|
213
242
|
Devise::Mailer.confirmation_instructions(self).deliver if email.present?
|
214
243
|
end
|
215
244
|
|
245
|
+
# ユーザが削除可能かどうかをチェックします。
|
246
|
+
# @param [User] current_user ユーザ
|
247
|
+
# @return [Object]
|
216
248
|
def deletable_by?(current_user)
|
217
249
|
return nil unless current_user
|
218
250
|
if defined?(EnjuCirculation)
|
data/lib/enju_leaf/version.rb
CHANGED
@@ -114,7 +114,7 @@ EOS
|
|
114
114
|
"config.serve_static_assets = true"
|
115
115
|
gsub_file 'config/environments/production.rb',
|
116
116
|
/# config.cache_store = :mem_cache_store$/,
|
117
|
-
"config.cache_store = :
|
117
|
+
"config.cache_store = :redis_store, ENV['REDIS_URL'], { expires_in: 1.day }"
|
118
118
|
gsub_file 'config/environments/production.rb',
|
119
119
|
/# config.assets.precompile \+= %w\( search.js \)$/,
|
120
120
|
"config.assets.precompile += %w( mobile.js mobile.css print.css )"
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
require '
|
2
|
+
require 'rails_helper'
|
3
3
|
|
4
4
|
describe MyAccountsController do
|
5
5
|
fixtures :all
|
@@ -29,7 +29,7 @@ describe MyAccountsController do
|
|
29
29
|
describe "When logged in as Administrator" do
|
30
30
|
before(:each) do
|
31
31
|
profile = FactoryGirl.create(:profile)
|
32
|
-
@user =
|
32
|
+
@user = FactoryGirl.create(:admin)
|
33
33
|
@user.profile = profile
|
34
34
|
sign_in @user
|
35
35
|
end
|