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