Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ def download_statistics
submission_ids = @assessment.submissions.by_users(course_user_ids).pluck(:id)
if submission_ids.empty?
return render json: {
error: I18n.t('course.assessment.submission.submissions.download_statistics.no_submission_statistics')
error: I18n.t('errors.course.assessment.submission.download_statistics.no_submissions')
}, status: :bad_request
end

Expand Down
2 changes: 1 addition & 1 deletion app/controllers/course/survey/responses_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ def create
@response.save!
render_response_json
else
render json: { error: t('course.survey.responses.no_course_user') }, status: :bad_request
render json: { error: t('errors.course.survey.responses.no_course_user') }, status: :bad_request
end
rescue ActiveRecord::RecordInvalid => e
handle_create_error(e)
Expand Down
4 changes: 2 additions & 2 deletions app/controllers/course/user_invitations_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ def aggregate_errors
def invalid_course_user_errors
invalid_course_users.map do |course_user|
user = self.class.helpers.display_course_user(course_user)
t('course.user_invitations.errors.duplicate_user', user: user)
t('errors.course.user_invitations.duplicate_user', user: user)
end
end

Expand All @@ -176,7 +176,7 @@ def invalid_course_users
def invalid_invitation_email_errors
invalid_invitations.map do |invitation|
message = invitation.errors.full_messages.to_sentence
t('course.user_invitations.errors.invalid_email', email: invitation.email, message: message)
t('errors.course.user_invitations.invalid_email', email: invitation.email, message: message)
end
end

Expand Down
4 changes: 2 additions & 2 deletions app/controllers/course/user_registrations_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ def registration_params
def ensure_unregistered_user
return unless current_course.course_users.exists?(user: current_user)

role = t("course.users.role.#{current_course_user.role}")
message = t('course.users.new.already_registered', role: role)
role = t("errors.course.users.role.#{current_course_user.role}")
message = t('errors.course.users.already_registered', role: role)

render json: { errors: message }, status: :conflict
end
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/user/emails_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def set_primary

def send_confirmation
if @email.confirmed?
render json: { errors: t('.already_confirmed', email: @email.email) }, status: :bad_request
render json: { errors: t('errors.user.emails.already_confirmed', email: @email.email) }, status: :bad_request
else
@email.send_confirmation_instructions
head :ok
Expand Down
8 changes: 6 additions & 2 deletions app/controllers/user/registrations_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,11 @@ class User::RegistrationsController < Devise::RegistrationsController
# GET /resource/sign_up
def new
if @invitation&.confirmed?
message = @invitation.confirmer ? t('.used_with_email', email: @invitation.confirmer.email) : t('.used')
message = if @invitation.confirmer
t('errors.user.registrations.used_with_email', email: @invitation.confirmer.email)
else
t('errors.user.registrations.used')
end
render json: { message: message }, status: :conflict and return
elsif @invitation.is_a?(Course::UserInvitation)
course = @invitation.course
Expand All @@ -34,7 +38,7 @@ def new
def create
unless verify_recaptcha
build_resource(sign_up_params)
render json: { errors: { recaptcha: t('user.registrations.create.verify_recaptcha_alert') } },
render json: { errors: { recaptcha: t('errors.user.registrations.verify_recaptcha_alert') } },
status: :unprocessable_entity
return
end
Expand Down
2 changes: 1 addition & 1 deletion app/helpers/application_html_formatters_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ def sanitize_ckeditor_rich_text(text)
def format_code_block(code, language = nil, start_line = 1)
if code_size_exceeds_limit?(code)
content_tag(:div, class: 'alert alert-warning') do
I18n.t('layouts.code_formatter.size_too_big')
I18n.t('errors.code_formatter.size_too_big')
end
else
sanitize_and_format_code(code, language, start_line)
Expand Down
9 changes: 5 additions & 4 deletions app/helpers/application_jobs_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,14 @@ def job_error_message(error)

case error['class']
when Docker::Error::ConflictError.name
I18n.t('course.assessment.answer.programming_auto_grading.job.failure.time_limit_breached')
I18n.t('errors.course.assessment.answer.programming_auto_grading.job.failure.time_limit_breached')
when Timeout::Error.name
I18n.t('course.assessment.answer.programming_auto_grading.job.failure.timeout_error')
I18n.t('errors.course.assessment.answer.programming_auto_grading.job.failure.timeout_error')
when Docker::Error::TimeoutError
I18n.t('course.assessment.answer.programming_auto_grading.job.failure.container_unreachable')
I18n.t('errors.course.assessment.answer.programming_auto_grading.job.failure.container_unreachable')
else
I18n.t('course.assessment.answer.programming_auto_grading.job.failure.generic_error', error: error['message'])
I18n.t('errors.course.assessment.answer.programming_auto_grading.job.failure.generic_error',
error: error['message'])
end
end
end
2 changes: 1 addition & 1 deletion app/helpers/application_mailer_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ module ApplicationMailerHelper
# @param [string] text The text to display
# @param [string] url The URL to link to
def plain_link_to(text, url)
t('common.plain_text_link', text: text, url: url)
t('common.mailers.plain_text_link', text: text, url: url)
end
end
2 changes: 1 addition & 1 deletion app/models/course/assessment/live_feedback/thread.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ def validate_at_most_one_active_thread_per_submission_question

return if active_thread_count <= 1

errors.add(:base, I18n.t('course.assessment.live_feedback.thread.only_one_active_thread'))
errors.add(:base, I18n.t('errors.course.assessment.live_feedback.thread.only_one_active_thread'))
end

def sent_user_messages(user_id)
Expand Down
2 changes: 1 addition & 1 deletion app/models/user/email.rb
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ def set_new_user_primary_email

return if user.set_next_email_as_primary

errors.add(:base, I18n.t('user.emails.set_primary.no_confirmed_emails'))
errors.add(:base, I18n.t('errors.user.emails.no_confirmed_emails'))
raise ActiveRecord::Rollback
end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ def build_test_case_records_from_test_results(question, auto_grading, evaluation
# @return [Array<Course::Assessment::Question::ProgrammingTestCase>]
def build_failed_test_case_records(question, auto_grading)
messages = {
error: I18n.t('course.assessment.answer.programming_auto_grading.grade.evaluation_failed_syntax')
error: I18n.t('errors.course.assessment.answer.programming_auto_grading.grade.evaluation_failed_syntax')
}
remaining_test_cases = question.test_cases - auto_grading.test_results.map(&:test_case)
remaining_test_cases.map do |test_case|
Expand Down
2 changes: 1 addition & 1 deletion app/services/course/assessment/authentication_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ def authenticate(password_input)
set_session_token!
true
else
@assessment.errors.add(:password, I18n.t('helpers.password.wrong_password'))
@assessment.errors.add(:password, I18n.t('errors.authentication.wrong_password'))
false
end
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -220,13 +220,13 @@ def process_evaluation_results
def status_error_messages
{
CODAVERI_STATUS_RUNTIME_ERROR =>
I18n.t('course.assessment.answer.programming_auto_grading.grade.evaluation_failed_syntax'),
I18n.t('errors.course.assessment.answer.programming_auto_grading.grade.evaluation_failed_syntax'),
CODAVERI_STATUS_TIMEOUT =>
I18n.t('course.assessment.answer.programming_auto_grading.grade.time_limit_error'),
I18n.t('errors.course.assessment.answer.programming_auto_grading.grade.time_limit_error'),
CODAVERI_STATUS_STDOUT_TOO_LONG =>
I18n.t('course.assessment.answer.programming_auto_grading.grade.stdout_too_long'),
I18n.t('errors.course.assessment.answer.programming_auto_grading.grade.stdout_too_long'),
CODAVERI_STATUS_STDERR_TOO_LONG =>
I18n.t('course.assessment.answer.programming_auto_grading.grade.stderr_too_long')
I18n.t('errors.course.assessment.answer.programming_auto_grading.grade.stderr_too_long')
}
end

Expand All @@ -240,13 +240,13 @@ def build_codaveri_error_message(result)

if [CODAVERI_STATUS_EXIT_SIGNAL, CODAVERI_STATUS_INTERNAL_ERROR].include?(compile_status)
compile_message = result.dig('compile', 'message')
return I18n.t('course.assessment.answer.programming_auto_grading.job.failure.generic_error',
return I18n.t('errors.course.assessment.answer.programming_auto_grading.job.failure.generic_error',
error: "Codaveri transaction id: #{@codaveri_evaluation_transaction_id}, #{compile_message}")
end

if [CODAVERI_STATUS_EXIT_SIGNAL, CODAVERI_STATUS_INTERNAL_ERROR].include?(run_status)
run_message = result.dig('run', 'message')
return I18n.t('course.assessment.answer.programming_auto_grading.job.failure.generic_error',
return I18n.t('errors.course.assessment.answer.programming_auto_grading.job.failure.generic_error',
error: "Codaveri transaction id: #{@codaveri_evaluation_transaction_id}, #{run_message}")
end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ class Error < StandardError
attr_reader :stdout, :stderr

def initialize(message, stdout = nil, stderr = nil)
message ||= I18n.t('course.assessment.answer.programming_auto_grading.grade.evaluation_failed_syntax')
message ||= I18n.t('errors.course.assessment.answer.programming_auto_grading.grade.evaluation_failed_syntax')
super(message)
@stdout = stdout
@stderr = stderr
Expand All @@ -71,22 +71,23 @@ def to_h
# Represents a Time or Docker Memory Limit Exceeded error while evaluating the package.
class TimeOrMemoryLimitExceededError < Error
def initialize(message, stdout = nil, stderr = nil)
message ||= I18n.t('course.assessment.answer.programming_auto_grading.grade.evaluation_failed_time_or_memory')
message ||=
I18n.t('errors.course.assessment.answer.programming_auto_grading.grade.evaluation_failed_time_or_memory')
super(message, stdout, stderr)
end
end

class TimeLimitExceededError < Error
def initialize(message, stdout = nil, stderr = nil)
message ||= I18n.t('course.assessment.answer.programming_auto_grading.grade.time_limit_error')
message ||= I18n.t('errors.course.assessment.answer.programming_auto_grading.grade.time_limit_error')
super(message, stdout, stderr)
end
end

# Represents a Time Limit Exceeded error while evaluating the package.
class MemoryLimitExceededError < Error
def initialize(message, stdout = nil, stderr = nil)
message ||= I18n.t('course.assessment.answer.programming_auto_grading.grade.memory_limit_error')
message ||= I18n.t('errors.course.assessment.answer.programming_auto_grading.grade.memory_limit_error')
super(message, stdout, stderr)
end
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ def authenticate(password)
create_new_token if @submission
true
else
@assessment.errors.add(:password, I18n.t('helpers.password.wrong_password'))
@assessment.errors.add(:password, I18n.t('errors.authentication.wrong_password'))
false
end
end
Expand Down
24 changes: 12 additions & 12 deletions app/services/course/assessment/submission/csv_download_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -62,34 +62,34 @@ def cleanup_entries

def submissions_csv_header(csv)
# Question Title
question_title = [I18n.t('course.assessment.submission.submissions.csv_download_service.note'), '', '', '',
I18n.t('course.assessment.submission.submissions.csv_download_service.question_title'),
question_title = [I18n.t('csv.assessment_submissions.note'), '', '', '',
I18n.t('csv.assessment_submissions.headers.question_title'),
*@question_assessments.map(&:display_title)]
# Remove note if there is no N/A answer
question_title[0] = '' if @questions_downloadable.values.all?
csv << question_title

# Question Type
csv << ['', '', '', '',
I18n.t('course.assessment.submission.submissions.csv_download_service.question_type'),
I18n.t('csv.assessment_submissions.headers.question_type'),
*@question_assessments.map { |x| x.question.question_type_readable }]

# Column Header
csv << [I18n.t('course.assessment.submission.submissions.csv_download_service.name'),
I18n.t('course.assessment.submission.submissions.csv_download_service.email'),
I18n.t('course.assessment.submission.submissions.csv_download_service.role'),
I18n.t('course.assessment.submission.submissions.csv_download_service.user_type'),
I18n.t('course.assessment.submission.submissions.csv_download_service.status')]
csv << [I18n.t('csv.assessment_submissions.headers.name'),
I18n.t('csv.assessment_submissions.headers.email'),
I18n.t('csv.assessment_submissions.headers.role'),
I18n.t('csv.assessment_submissions.headers.user_type'),
I18n.t('csv.assessment_submissions.headers.status')]
end

def submissions_csv_row(csv, submission, course_user) # rubocop:disable Metrics/AbcSize
row_array = [course_user.name,
course_user.user.email,
course_user.role,
if course_user.phantom?
I18n.t('course.assessment.submission.submissions.csv_download_service.phantom')
I18n.t('csv.assessment_submissions.values.phantom')
else
I18n.t('course.assessment.submission.submissions.csv_download_service.normal')
I18n.t('csv.assessment_submissions.values.normal')
end]

if submission
Expand All @@ -100,15 +100,15 @@ def submissions_csv_row(csv, submission, course_user) # rubocop:disable Metrics/
end
row_array.concat([submission.workflow_state, *answer_row])
else
row_array.append(I18n.t('course.assessment.submission.submissions.csv_download_service.unstarted'))
row_array.append(I18n.t('csv.assessment_submissions.values.unstarted'))
end

csv << row_array
end

def generate_answer_row(question, answer)
return 'N/A' unless @questions_downloadable[question.id]
return I18n.t('course.assessment.submission.submissions.csv_download_service.no_answer') if answer.nil?
return I18n.t('csv.assessment_submissions.values.no_answer') if answer.nil?

answer.specific.csv_download
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,19 +48,19 @@ def cleanup_entries
end

def download_statistics_header(csv)
csv << [I18n.t('course.assessment.submission.submissions.statistics_download_service.name'),
I18n.t('course.assessment.submission.submissions.statistics_download_service.phantom'),
I18n.t('course.assessment.submission.submissions.statistics_download_service.status'),
I18n.t('course.assessment.submission.submissions.statistics_download_service.start_date_time'),
I18n.t('course.assessment.submission.submissions.statistics_download_service.submitted_date_time'),
I18n.t('course.assessment.submission.submissions.statistics_download_service.time_taken'),
I18n.t('course.assessment.submission.submissions.statistics_download_service.graded_date_time'),
I18n.t('course.assessment.submission.submissions.statistics_download_service.grading_time'),
I18n.t('course.assessment.submission.submissions.statistics_download_service.grader'),
I18n.t('course.assessment.submission.submissions.statistics_download_service.publisher'),
I18n.t('course.assessment.submission.submissions.statistics_download_service.exp_points'),
I18n.t('course.assessment.submission.submissions.statistics_download_service.grade'),
I18n.t('course.assessment.submission.submissions.statistics_download_service.max_grade'),
csv << [I18n.t('csv.assessment_statistics.headers.name'),
I18n.t('csv.assessment_statistics.headers.phantom'),
I18n.t('csv.assessment_statistics.headers.status'),
I18n.t('csv.assessment_statistics.headers.start_date_time'),
I18n.t('csv.assessment_statistics.headers.submitted_date_time'),
I18n.t('csv.assessment_statistics.headers.time_taken'),
I18n.t('csv.assessment_statistics.headers.graded_date_time'),
I18n.t('csv.assessment_statistics.headers.grading_time'),
I18n.t('csv.assessment_statistics.headers.grader'),
I18n.t('csv.assessment_statistics.headers.publisher'),
I18n.t('csv.assessment_statistics.headers.exp_points'),
I18n.t('csv.assessment_statistics.headers.grade'),
I18n.t('csv.assessment_statistics.headers.max_grade'),
*csv_header_question_grade]
end

Expand Down Expand Up @@ -90,7 +90,7 @@ def download_statistics(csv, submission, assessment)
end

def csv_empty
I18n.t('course.assessment.submission.submissions.statistics_download_service.csv_empty')
I18n.t('csv.assessment_statistics.values.empty')
end

def csv_time_taken(submission)
Expand Down
10 changes: 5 additions & 5 deletions app/services/course/experience_points_download_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,11 @@ def load_exp_record_updater_service(exp_points_records)
end

def download_exp_points_header(csv)
csv << [I18n.t('course.experience_points_records.download.updated_at'),
I18n.t('course.experience_points_records.download.name'),
I18n.t('course.experience_points_records.download.updater'),
I18n.t('course.experience_points_records.download.reason'),
I18n.t('course.experience_points_records.download.exp_points')]
csv << [I18n.t('csv.experience_points.headers.updated_at'),
I18n.t('csv.experience_points.headers.name'),
I18n.t('csv.experience_points.headers.updater'),
I18n.t('csv.experience_points.headers.reason'),
I18n.t('csv.experience_points.headers.exp_points')]
end

def download_exp_points(csv, record)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,12 @@ def assessments

def download_score_summary(csv)
# header
csv << [I18n.t('course.statistics.name'), I18n.t('course.statistics.email'), I18n.t('course.statistics.type'),
*@assessments.map(&:title)]
csv << [
I18n.t('csv.score_summary.headers.name'),
I18n.t('csv.score_summary.headers.email'),
I18n.t('csv.score_summary.headers.type'),
*@assessments.map(&:title)
]

# content
@all_students.each do |student|
Expand Down
12 changes: 6 additions & 6 deletions app/services/course/survey/survey_download_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,11 @@ def generate_csv

def generate_header(questions)
[
I18n.t('course.surveys.survey_download_service.created_at'),
I18n.t('course.surveys.survey_download_service.updated_at'),
I18n.t('course.surveys.survey_download_service.course_user_id'),
I18n.t('course.surveys.survey_download_service.name'),
I18n.t('course.surveys.survey_download_service.role')
I18n.t('csv.survey.headers.created_at'),
I18n.t('csv.survey.headers.updated_at'),
I18n.t('csv.survey.headers.course_user_id'),
I18n.t('csv.survey.headers.name'),
I18n.t('csv.survey.headers.role')
] + questions.map { |q| format_rich_text_for_csv(q.description) }
end

Expand Down Expand Up @@ -88,7 +88,7 @@ def generate_value(answer)

return generate_mcq_mrq_value(answer) if question.multiple_choice? || question.multiple_response?

I18n.t('course.surveys.survey_download_service.unknown_question_type')
I18n.t('csv.survey.values.unknown_question_type')
end

def generate_mcq_mrq_value(answer)
Expand Down
Loading