Project

General

Profile

Feature #34241 » feature-34241.patch

Mizuki ISHIKAWA, 2020-11-11 07:01

View differences:

app/helpers/users_helper.rb
78 78
    tabs
79 79
  end
80 80

  
81
  def csv_content(column_name, user)
82
    case column_name
83
    when 'status'
84
      l("status_#{User::LABEL_BY_STATUS[user.status]}")
85
    when 'twofa_scheme'
86
      if user.twofa_active?
87
        l(:twofa__totp__name)
88
      else
89
        l(:label_disabled)
90
      end
91
    else
92
      user.send(column_name)
93
    end
94
  end
95

  
81 96
  def users_to_csv(users)
82 97
    Redmine::Export::CSV.generate(:encoding => params[:encoding]) do |csv|
83 98
      columns = [
......
90 105
        'created_on',
91 106
        'updated_on',
92 107
        'last_login_on',
93
        'passwd_changed_on'
108
        'passwd_changed_on',
109
        'twofa_scheme'
94 110
      ]
95 111
      user_custom_fields = UserCustomField.sorted
96 112

  
......
99 115
      # csv lines
100 116
      users = users.preload(:custom_values)
101 117
      users.each do |user|
102
        values = columns.map {|c| c == 'status' ? l("status_#{User::LABEL_BY_STATUS[user.status]}") : user.send(c)} +
118
        values = columns.map {|c| csv_content(c, user)} +
103 119
                 user_custom_fields.map {|custom_field| user.custom_value_for(custom_field)}
104 120

  
105 121
        csv << values.map do |value|
config/locales/en.yml
320 320
  field_password: Password
321 321
  field_new_password: New password
322 322
  field_password_confirmation: Confirmation
323
  field_twofa_scheme: Two-factor authentication scheme
323 324
  field_version: Version
324 325
  field_type: Type
325 326
  field_host: Host
config/locales/ja.yml
289 289
  field_password: パスワード
290 290
  field_new_password: 新しいパスワード
291 291
  field_password_confirmation: パスワードの確認
292
  field_twofa_scheme: 二要素認証方式
292 293
  field_version: バージョン
293 294
  field_type: タイプ
294 295
  field_host: ホスト
test/functional/users_controller_test.rb
69 69
  def test_index_csv
70 70
    with_settings :default_language => 'en' do
71 71
      user = User.logged.status(1).first
72
      user.update(passwd_changed_on: Time.current.last_month)
73
      get :index, :params => { :format => 'csv' }
72
      user.update(passwd_changed_on: Time.current.last_month, twofa_scheme: 'totp')
73
      get :index, params: {format: 'csv'}
74 74
      assert_response :success
75 75

  
76 76
      assert_equal User.logged.status(1).count, response.body.chomp.split("\n").size - 1
77
      assert_include 'active', response.body
78
      assert_not_include 'locked', response.body
79
      assert_include format_time(user.updated_on), response.body
80
      assert_include format_time(user.passwd_changed_on), response.body
77
      assert_include format_time(user.updated_on), response.body.split("\n").second
78
      assert_include format_time(user.passwd_changed_on), response.body.split("\n").second
79

  
80
      # status
81
      assert_include 'active', response.body.split("\n").second
82
      assert_not_include 'locked', response.body.split("\n").second
83

  
84
      # twofa_scheme
85
      assert_include 'Authenticator app', response.body.split("\n").second
86
      assert_include 'disabled', response.body.split("\n").third
87

  
81 88
      assert_equal 'text/csv', @response.media_type
82 89
    end
83 90
  end
(1-1/2)