Different fix (#7815)

This commit is contained in:
Osama Sayegh 2019-07-02 04:53:16 +03:00 committed by Sam
parent 4dcc5f16f1
commit f1c67729de
10 changed files with 78 additions and 12 deletions

View File

@ -5,6 +5,13 @@ import computed from "ember-addons/ember-computed-decorators";
export default Ember.Controller.extend(bufferedProperty("emailTemplate"), {
saved: false,
@computed("buffered.body", "buffered.subject")
saveDisabled(body, subject) {
return (
this.emailTemplate.body === body && this.emailTemplate.subject === subject
);
},
@computed("buffered")
hasMultipleSubjects(buffered) {
if (buffered.getProperties("subject")["subject"]) {

View File

@ -1,9 +1,15 @@
import { popupAjaxError } from "discourse/lib/ajax-error";
import { bufferedProperty } from "discourse/mixins/buffered-content";
import computed from "ember-addons/ember-computed-decorators";
export default Ember.Controller.extend(bufferedProperty("siteText"), {
saved: false,
@computed("buffered.value")
saveDisabled(value) {
return this.siteText.value === value;
},
actions: {
saveChanges() {
const buffered = this.buffered;

View File

@ -10,7 +10,7 @@
<label>{{i18n "admin.customize.email_templates.body"}}</label>
{{d-editor value=buffered.body}}
{{#save-controls model=emailTemplate action=(action "saveChanges") saved=saved}}
{{#save-controls model=emailTemplate action=(action "saveChanges") saved=saved saveDisabled=saveDisabled}}
{{#if emailTemplate.can_revert}}
{{d-button action=(action "revertChanges") label="admin.customize.email_templates.revert"}}
{{/if}}

View File

@ -6,7 +6,7 @@
{{expanding-text-area value=buffered.value rows="1" class="site-text-value"}}
{{#save-controls model=siteText action=(action "saveChanges") saved=saved}}
{{#save-controls model=siteText action=(action "saveChanges") saved=saved saveDisabled=saveDisabled}}
{{#if siteText.can_revert}}
{{d-button action=(action "revertChanges") label="admin.site_text.revert" class="revert-site-text"}}
{{/if}}

View File

@ -108,7 +108,7 @@ class Admin::EmailTemplatesController < Admin::AdminController
end
def index
render_serialized(self.class.email_keys, AdminEmailTemplateSerializer, root: 'email_templates', rest_serializer: true)
render_serialized(self.class.email_keys, AdminEmailTemplateSerializer, root: 'email_templates', rest_serializer: true, overridden_keys: overridden_keys)
end
private
@ -151,4 +151,8 @@ class Admin::EmailTemplatesController < Admin::AdminController
message = update_result[:error_messages].join("<br>")
I18n.t("errors.format_with_full_message", attribute: attribute, message: message)
end
def overridden_keys
TranslationOverride.where(locale: I18n.locale).pluck(:translation_key)
end
end

View File

@ -45,7 +45,7 @@ class Admin::SiteTextsController < Admin::AdminController
end
extras[:has_more] = true if results.size > 50
render_serialized(results[0..49], SiteTextSerializer, root: 'site_texts', rest_serializer: true, extras: extras)
render_serialized(results[0..49], SiteTextSerializer, root: 'site_texts', rest_serializer: true, extras: extras, overridden_keys: overridden_keys)
end
def show
@ -172,4 +172,8 @@ class Admin::SiteTextsController < Admin::AdminController
[k, value[k] || fallback_value[k] || fallback_value[:other]]
end.to_h
end
def overridden_keys
TranslationOverride.where(locale: I18n.locale).pluck(:translation_key)
end
end

View File

@ -28,11 +28,13 @@ class AdminEmailTemplateSerializer < ApplicationSerializer
end
def can_revert?
current_body, current_subject = body, subject
I18n.overrides_disabled do
return I18n.t("#{object}.subject_template") != current_subject ||
I18n.t("#{object}.text_body_template") != current_body
subject_key = "#{object}.subject_template"
body_key = "#{object}.text_body_template"
keys = [subject_key, body_key]
if options[:overridden_keys]
keys.any? { |k| options[:overridden_keys].include?(k) }
else
TranslationOverride.exists?(locale: I18n.locale, translation_key: keys)
end
end
end

View File

@ -12,8 +12,8 @@ class SiteTextSerializer < ApplicationSerializer
end
def overridden?
if I18n.exists?(object[:id])
I18n.overrides_disabled { I18n.t(object[:id]) != object[:value] }
if options[:overridden_keys]
options[:overridden_keys].include?(object[:id])
else
TranslationOverride.exists?(locale: I18n.locale, translation_key: object[:id])
end

View File

@ -40,6 +40,29 @@ RSpec.describe Admin::EmailTemplatesController do
json = ::JSON.parse(response.body)
expect(json['email_templates']).to be_present
end
it 'returns overridden = true if subject or body has translation_overrides record' do
sign_in(admin)
put '/admin/customize/email_templates/user_notifications.admin_login', params: {
email_template: { subject: original_subject, body: original_body }
}, headers: headers
expect(response.status).to eq(200)
get '/admin/customize/email_templates.json'
expect(response.status).to eq(200)
templates = JSON.parse(response.body)['email_templates']
template = templates.find { |t| t['id'] == 'user_notifications.admin_login' }
expect(template['can_revert']).to eq(true)
TranslationOverride.destroy_all
get '/admin/customize/email_templates.json'
expect(response.status).to eq(200)
templates = JSON.parse(response.body)['email_templates']
template = templates.find { |t| t['id'] == 'user_notifications.admin_login' }
expect(template['can_revert']).to eq(false)
end
end
context "#update" do
@ -142,7 +165,7 @@ RSpec.describe Admin::EmailTemplatesController do
include_examples "invalid email template"
end
context "when subject and body are invalid invalid" do
context "when subject and body are invalid" do
let(:email_subject) { 'Subject with %{invalid} interpolation key' }
let(:email_body) { 'Body with some invalid interpolation keys: %{invalid}' }

View File

@ -177,6 +177,26 @@ RSpec.describe Admin::SiteTextsController do
expect(response.status).to eq(404)
end
it 'returns overridden = true if there is a translation_overrides record for the key' do
key = 'js.topic.list'
put "/admin/customize/site_texts/#{key}.json", params: {
site_text: { value: I18n.t(key) }
}
expect(response.status).to eq(200)
get "/admin/customize/site_texts/#{key}.json"
expect(response.status).to eq(200)
json = JSON.parse(response.body)
expect(json['site_text']['overridden']).to eq(true)
TranslationOverride.destroy_all
get "/admin/customize/site_texts/#{key}.json"
expect(response.status).to eq(200)
json = JSON.parse(response.body)
expect(json['site_text']['overridden']).to eq(false)
end
context 'plural keys' do
before do
I18n.backend.store_translations(:en, colour: { one: '%{count} colour', other: '%{count} colours' })