mirror of
https://github.com/projekteuler/projekteuler.git
synced 2025-12-10 00:36:42 +01:00
Add ability to accept or decline translations
This commit is contained in:
parent
0dd3092c4c
commit
3a2aa6ea1a
@ -1,3 +1,6 @@
|
||||
# Place all the behaviors and hooks related to the matching controller here.
|
||||
# All this logic will automatically be available in application.js.
|
||||
# You can use CoffeeScript in this file: http://coffeescript.org/
|
||||
|
||||
$(document).on "turbolinks:load", ->
|
||||
$('[data-toggle="tooltip"]').tooltip()
|
||||
@ -1,18 +1,28 @@
|
||||
class Admin::TranslationsController < AdminController
|
||||
before_action :set_translation, only: :show
|
||||
before_action :set_translation, only: [:show, :accept, :decline]
|
||||
|
||||
# GET /translations
|
||||
# GET /translations.json
|
||||
def index
|
||||
@translations = Translation.paginate(page: params[:page])
|
||||
@translations = Translation.pending.order(created_at: :desc).paginate(page: params[:page])
|
||||
end
|
||||
|
||||
# GET /translations/1
|
||||
# GET /translations/1.json
|
||||
def show
|
||||
end
|
||||
|
||||
def accept
|
||||
raise t('.must_be_pending') unless @translation.pending?
|
||||
@translation.problem.set_translation(@translation)
|
||||
redirect_to @translation.problem, notice: t('.success_message')
|
||||
end
|
||||
|
||||
def decline
|
||||
raise t('.must_be_pending') unless @translation.pending?
|
||||
@translation.declined!
|
||||
redirect_to admin_translations_path, notice: t('.success_message')
|
||||
end
|
||||
|
||||
def set_translation
|
||||
@translation = Translation.find(params[:id])
|
||||
@translation = Translation.find(params[:translation_id])
|
||||
end
|
||||
end
|
||||
|
||||
@ -15,7 +15,7 @@ class Problem < ApplicationRecord
|
||||
if self.is_translated?
|
||||
self.translation.outdated!
|
||||
end
|
||||
self.translation = translation
|
||||
self.update(translation: translation)
|
||||
self.translation.in_use!
|
||||
end
|
||||
|
||||
|
||||
@ -6,7 +6,8 @@
|
||||
<table class="table table-striped table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><%= Translation.human_attribute_name(:id) %></th>
|
||||
<th><%= Translation.human_attribute_name(:created_at) %></th>
|
||||
<th><%= Translation.human_attribute_name(:problem_id) %></th>
|
||||
<th><%= Translation.human_attribute_name(:title) %></th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -14,7 +15,8 @@
|
||||
<tbody>
|
||||
<% @translations.each do |translation| %>
|
||||
<tr>
|
||||
<td><%= translation.id %></td>
|
||||
<td><div data-toggle="tooltip" data-placement="left" title="<%= l translation.created_at %>"><%= time_ago_in_words(translation.created_at) %></div></td>
|
||||
<td><%= translation.problem_id %></td>
|
||||
<td><%= link_to translation.title, [:admin, translation] %></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
||||
@ -4,6 +4,20 @@
|
||||
<h1><%= @translation.title %> <small><%= t 'problems.show.problem_subtitle', id: @translation.problem_id %></small></h1>
|
||||
</div>
|
||||
|
||||
<% if @translation.problem.is_translated? %>
|
||||
<div class="alert alert-warning" role="alert"><%= t('.already_translated') %> <%= link_to t('.visit_current_translation'), @translation.problem, target: '_blank', class: 'alert-link' %></div>
|
||||
<% else %>
|
||||
<div class="alert alert-info" role="alert"><%= t('.is_new_translation') %></div>
|
||||
<% end %>
|
||||
<% if @translation.pending? %>
|
||||
<%= link_to admin_translation_decline_path(@translation), method: :post, class: 'btn btn-default btn-sm pull-right' do %>
|
||||
<%= icon :remove %> <%= t '.decline_translation' %>
|
||||
<% end %>
|
||||
<%= link_to admin_translation_accept_path(@translation), method: :post, class: 'btn btn-default btn-sm pull-right' do %>
|
||||
<%= icon :ok %> <%= t '.accept_translation' %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<%= panel do %>
|
||||
<div class="panel-body problem-content">
|
||||
<%= sanitize @translation.content %>
|
||||
|
||||
@ -9,4 +9,16 @@ de:
|
||||
update_problem_count:
|
||||
success_message: "Problem-Anzahl wurde erfolgreich aktualisiert!"
|
||||
failure_message: "Problem-Anzahl konnte nicht aktualisiert werden! Grund: %{error}"
|
||||
no_problem_count: "Keine Problem-Anzahl gegeben!"
|
||||
no_problem_count: "Keine Problem-Anzahl gegeben!"
|
||||
translations:
|
||||
must_be_pending: "Übersetzung muss ausstehend sein, um akzeptiert oder abgelehnt zu werden!"
|
||||
show:
|
||||
accept_translation: "Akzeptieren"
|
||||
decline_translation: "Ablehnen"
|
||||
visit_current_translation: "Aktuelle Übersetzung anschauen"
|
||||
already_translated: "Dieses Problem wurde bereits übersetzt."
|
||||
is_new_translation: "Dieses Problem hat bisher keine Übersetzung."
|
||||
accept:
|
||||
success_message: "Übersetzung wurde erfolgreich akzeptiert!"
|
||||
decline:
|
||||
success_message: "Übersetzung wurde erfolgreich abgelehnt!"
|
||||
@ -1,6 +1,9 @@
|
||||
# ruby encoding: utf-8
|
||||
|
||||
de:
|
||||
attributes:
|
||||
created_at: Erstellt
|
||||
updated_at: Aktualisiert
|
||||
application:
|
||||
site_title: "Projekt Euler"
|
||||
sign_in: 'Einloggen'
|
||||
|
||||
@ -26,6 +26,10 @@ Rails.application.routes.draw do
|
||||
namespace :admin do
|
||||
get '', to: 'dashboard#index', as: 'dashboard_index'
|
||||
post '/update_problem_count', to: 'dashboard#update_problem_count', as: 'dashboard_update_problem_count'
|
||||
resources :translations, only: [:index, :show]
|
||||
resources :translations, only: [:index] do
|
||||
get '', to: 'translations#show', as: ''
|
||||
post 'accept', to: 'translations#accept'
|
||||
post 'decline', to: 'translations#decline'
|
||||
end
|
||||
end
|
||||
end
|
||||
15
db/migrate/20190202113250_add_status_to_translations.rb
Normal file
15
db/migrate/20190202113250_add_status_to_translations.rb
Normal file
@ -0,0 +1,15 @@
|
||||
class AddStatusToTranslations < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
add_column :translations, :status, :integer, default: 0
|
||||
|
||||
reversible do |dir|
|
||||
dir.up do
|
||||
Problem.all.each do |problem|
|
||||
if problem.is_translated?
|
||||
problem.translation.in_use!
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -6,6 +6,7 @@ class Admin::TranslationsControllerTest < ActionDispatch::IntegrationTest
|
||||
setup do
|
||||
login
|
||||
@translation = translations(:translation_one)
|
||||
@translation_alternative = translations(:translation_two_alternative)
|
||||
end
|
||||
test "should get index" do
|
||||
get admin_translations_url
|
||||
@ -14,8 +15,19 @@ class Admin::TranslationsControllerTest < ActionDispatch::IntegrationTest
|
||||
end
|
||||
|
||||
test "should show translation" do
|
||||
get admin_translation_url(id: @translation)
|
||||
get admin_translation_url(translation_id: @translation)
|
||||
assert_response :success
|
||||
end
|
||||
|
||||
test "should accept translation" do
|
||||
post admin_translation_accept_path(@translation_alternative)
|
||||
assert_redirected_to problem_path(2)
|
||||
assert_equal @translation_alternative, Problem.find(2).translation
|
||||
end
|
||||
|
||||
test "should decline translation" do
|
||||
post admin_translation_decline_path(@translation_alternative)
|
||||
assert_redirected_to admin_translations_path
|
||||
assert Translation.find(@translation_alternative.id).declined?
|
||||
end
|
||||
end
|
||||
|
||||
@ -18,6 +18,7 @@ class ProblemTest < ActiveSupport::TestCase
|
||||
problems(:two).set_translation(translations(:translation_two_alternative))
|
||||
assert translations(:translation_two).outdated?
|
||||
assert translations(:translation_two_alternative).in_use?
|
||||
assert_equal translations(:translation_two_alternative), problems(:two).translation
|
||||
end
|
||||
|
||||
test "should have correct original url" do
|
||||
|
||||
Loading…
Reference in New Issue
Block a user