Commit e2698d5d authored by Heinrich Lee Yu's avatar Heinrich Lee Yu

Improve email messages

Also refactored cleanup view to use the same localized string
parent 63e9969c
......@@ -7,12 +7,12 @@ module UploadsActions
UPLOAD_MOUNTS = %w(avatar attachment file logo header_logo favicon).freeze
def create
link_to_file = UploadService.new(model, params[:file], uploader_class).execute.to_h
link_to_file = UploadService.new(model, params[:file], uploader_class).execute
respond_to do |format|
if link_to_file
format.json do
render json: { link: link_to_file }
render json: { link: link_to_file.to_h }
end
else
format.json do
......
......@@ -222,8 +222,9 @@ class ProjectPolicy < BasePolicy
rule { owner | admin | guest | group_member }.prevent :request_access
rule { ~request_access_enabled }.prevent :request_access
rule { developer & can?(:create_issue) }.enable :import_issues
rule { can?(:developer_access) }.policy do
enable :import_issues
enable :admin_merge_request
enable :admin_milestone
enable :update_merge_request
......
......@@ -6,7 +6,7 @@ module Issues
@user = user
@project = project
@uploader = upload.build_uploader
@results = { success: 0, errors: [], valid_file: true }
@results = { success: 0, error_lines: [], parse_error: false }
end
def execute
......@@ -30,11 +30,11 @@ module Issues
if issue.persisted?
@results[:success] += 1
else
@results[:errors].push(line_no)
@results[:error_lines].push(line_no)
end
end
rescue ArgumentError, CSV::MalformedCSVError
@results[:valid_file] = false
@results[:parse_error] = true
end
def email_results_to_user
......
......@@ -7,12 +7,12 @@
has been completed.
%p{ style: text_style }
#{pluralize(@results[:success], 'issue')} imported successfully.
#{pluralize(@results[:success], 'issue')} imported.
- if @results[:errors].present?
- if @results[:error_lines].present?
%p{ style: text_style }
Errors found on line #{'number'.pluralize(@results[:errors].size)}: #{@results[:errors].join(', ')}.
Errors found on line #{'number'.pluralize(@results[:error_lines].size)}: #{@results[:error_lines].join(', ')}. Please check if these lines have an issue title.
- unless @results[:valid_file]
- if @results[:parse_error]
%p{ style: text_style }
Error parsing CSV file.
Error parsing CSV file. Please make sure it has the correct format: a delimited text file that uses a comma to separate values.
Your CSV import for project <%= @project.full_name %> (<%= project_url(@project) %>) has been completed.
<%= pluralize(@results[:success], 'issue') %> imported successfully.
<%= pluralize(@results[:success], 'issue') %> imported.
<% if @results[:errors].present? %>
Errors found on line <%= 'number'.pluralize(@results[:errors].size) %>: <%= @results[:errors].join(', ') %>.
<% if @results[:error_lines].present? %>
Errors found on line <%= 'number'.pluralize(@results[:error_lines].size) %>: <%= @results[:error_lines].join(', ') %>. Please check if these lines have an issue title.
<% end %>
<% unless @results[:valid_file] %>
Error parsing CSV file.
<% if @results[:parse_error] %>
Error parsing CSV file. Please make sure it has the correct format: a delimited text file that uses a comma to separate values.
<% end %>
......@@ -24,6 +24,6 @@
= _("No file selected")
= f.file_field :bfg_object_map, accept: 'text/plain', class: "hidden js-object-map-input", required: true
.form-text.text-muted
= _("The maximum file size allowed is %{max_attachment_size}mb") % { max_attachment_size: Gitlab::CurrentSettings.max_attachment_size }
= _("The maximum file size allowed is %{size}.") % { size: number_to_human_size(Gitlab::CurrentSettings.max_attachment_size.megabytes) }
= f.submit _('Start cleanup'), class: 'btn btn-success'
.issues-import-modal.modal
.modal-dialog
.modal-content
= form_tag [:import_csv, @project.namespace.becomes(Namespace), @project, :issues], multipart: true do
= form_tag import_csv_namespace_project_issues_path, multipart: true do
.modal-header
%h3
= _('Import issues')
......@@ -18,8 +18,7 @@
= file_field_tag :file, accept: 'text/csv', required: true
%p.text-secondary
= _('It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected.')
%p.text-secondary
= _('The maximum file size allowed is %{size}.') % {size: number_to_human_size(Gitlab::CurrentSettings.max_attachment_size.megabytes)}
= _('The maximum file size allowed is %{size}.') % { size: number_to_human_size(Gitlab::CurrentSettings.max_attachment_size.megabytes) }
.modal-footer
%button{ type: 'submit', class: 'btn btn-success', title: _('Import issues') }
= _('Import issues')
......@@ -6620,9 +6620,6 @@ msgstr ""
msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage."
msgstr ""
msgid "The maximum file size allowed is %{max_attachment_size}mb"
msgstr ""
msgid "The maximum file size allowed is %{size}."
msgstr ""
......
......@@ -21,7 +21,7 @@ describe Issues::ImportCsvService do
expect_any_instance_of(Notify).to receive(:import_issues_csv_email)
expect(subject[:success]).to eq(0)
expect(subject[:valid_file]).to eq(false)
expect(subject[:parse_error]).to eq(true)
end
end
......@@ -32,8 +32,8 @@ describe Issues::ImportCsvService do
expect_any_instance_of(Notify).to receive(:import_issues_csv_email)
expect(subject[:success]).to eq(3)
expect(subject[:errors]).to eq([])
expect(subject[:valid_file]).to eq(true)
expect(subject[:error_lines]).to eq([])
expect(subject[:parse_error]).to eq(false)
end
end
......@@ -44,8 +44,8 @@ describe Issues::ImportCsvService do
expect_any_instance_of(Notify).to receive(:import_issues_csv_email)
expect(subject[:success]).to eq(2)
expect(subject[:errors]).to eq([3])
expect(subject[:valid_file]).to eq(true)
expect(subject[:error_lines]).to eq([3])
expect(subject[:parse_error]).to eq(false)
end
end
......@@ -56,8 +56,8 @@ describe Issues::ImportCsvService do
expect_any_instance_of(Notify).to receive(:import_issues_csv_email)
expect(subject[:success]).to eq(3)
expect(subject[:errors]).to eq([4])
expect(subject[:valid_file]).to eq(true)
expect(subject[:error_lines]).to eq([4])
expect(subject[:parse_error]).to eq(false)
end
end
end
......
......@@ -63,7 +63,7 @@ describe UploadService do
@link_to_file = upload_file(@project, txt)
end
it { expect(@link_to_file).to eq(nil) }
it { expect(@link_to_file).to eq({}) }
end
end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment