diff --git a/app/controllers/settings/preferences_controller.rb b/app/controllers/settings/preferences_controller.rb index 04a85849da28b9ff6dac9794ee2835840e6692fd..28757d1bcfa2a764a203195456ac351883eb1d07 100644 --- a/app/controllers/settings/preferences_controller.rb +++ b/app/controllers/settings/preferences_controller.rb @@ -26,7 +26,7 @@ class Settings::PreferencesController < ApplicationController def user_params params.require(:user).permit( :locale, - allowed_languages: [] + filtered_languages: [] ) end diff --git a/app/javascript/styles/forms.scss b/app/javascript/styles/forms.scss index ce31f01af7257b94aff8ea8b33579f9500e13c44..db60e1e10675a9d9c306ac22cdb7838203de8f89 100644 --- a/app/javascript/styles/forms.scss +++ b/app/javascript/styles/forms.scss @@ -352,7 +352,7 @@ code { } } -.user_allowed_languages { +.user_filtered_languages { li { float: left; width: 50%; diff --git a/app/models/account.rb b/app/models/account.rb index 726e6c127ce495ce66b61dde8c041b599228468f..7e4291d55c2540d88420d3ad10242ef7d28f1ad6 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -99,7 +99,7 @@ class Account < ApplicationRecord prefix: true, allow_nil: true - delegate :allowed_languages, to: :user, prefix: false, allow_nil: true + delegate :filtered_languages, to: :user, prefix: false, allow_nil: true def local? domain.nil? diff --git a/app/models/status.rb b/app/models/status.rb index a4e581a066923a61bc7e23a47c494e3804cf46a1..d7304152f57f899839ae826cf66b8daa28c13277 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -142,8 +142,8 @@ class Status < ApplicationRecord before_validation :set_conversation class << self - def in_allowed_languages(account) - where(language: account.allowed_languages) + def not_in_filtered_languages(account) + where.not(language: account.filtered_languages) end def as_home_timeline(account) @@ -234,7 +234,7 @@ class Status < ApplicationRecord def filter_timeline_for_account(query, account, local_only) query = query.not_excluded_by_account(account) query = query.not_domain_blocked_by_account(account) unless local_only - query = query.in_allowed_languages(account) if account.allowed_languages.present? + query = query.not_in_filtered_languages(account) if account.filtered_languages.present? query.merge(account_silencing_filter(account)) end diff --git a/app/models/user.rb b/app/models/user.rb index 7cf3a1290e43fa2766af88c551e138ac21fb32f3..2ad68f9aebcc4897b38eae3a3bb95cdaa6d6f07a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -30,7 +30,7 @@ # otp_required_for_login :boolean # last_emailed_at :datetime # otp_backup_codes :string is an Array -# allowed_languages :string default([]), not null, is an Array +# filtered_languages :string default([]), not null, is an Array # class User < ApplicationRecord @@ -83,6 +83,6 @@ class User < ApplicationRecord private def sanitize_languages - allowed_languages.reject!(&:blank?) + filtered_languages.reject!(&:blank?) end end diff --git a/app/views/settings/preferences/show.html.haml b/app/views/settings/preferences/show.html.haml index b64fd7c9690262123dce3b538900212659b78261..0532d1dc8c8a70e0efbf26e46db5077b3582e780 100644 --- a/app/views/settings/preferences/show.html.haml +++ b/app/views/settings/preferences/show.html.haml @@ -12,7 +12,7 @@ label_method: lambda { |locale| human_locale(locale) }, selected: I18n.locale - = f.input :allowed_languages, + = f.input :filtered_languages, collection: I18n.available_locales, wrapper: :with_label, include_blank: false, diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml index bc41c9fae7ef28979c09514a34265373b4639c45..5b45c1bb26bb4b241c9bfaac5156325fc0d34c43 100644 --- a/config/locales/simple_form.ar.yml +++ b/config/locales/simple_form.ar.yml @@ -12,8 +12,6 @@ ar: data: مل٠CSV تم تصديره من خادوم مثيل آخر لماستدون sessions: otp: أدخل الرمز الثنائي من هاتÙÙƒ أو استخدم Ø£Øد رموز الاسترداد. - user: - allowed_languages: سو٠يتم Ø§Ù„Ø³Ù…Ø§Ø Ø¨Ø¹Ø±Ø¶ اللغات المختارة على خيوطك المتسلسلة العامة أما التي لم يتم تØديدها Ùسو٠تصÙّى. labels: defaults: avatar: الصورة الرمزية diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 74dc16efea8f6e4f8ca166c6329494a1157fd2f6..ec74ff70dbdcdffd5c95dbb91160a2fcd382ac49 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -17,7 +17,7 @@ en: sessions: otp: Enter the Two-factor code from your phone or use one of your recovery codes. user: - allowed_languages: These languages will be allowed in your public timelines. Languages that are not selected will be filtered out. + filtered_languages: Selected languages will be removed from your public timelines. labels: defaults: avatar: Avatar diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml index e3c59fa4ab91e786ef95c33213f6c6fee9983bf1..77c043c5f3497ef624f0d19f8458cac7acc076b0 100644 --- a/config/locales/simple_form.fa.yml +++ b/config/locales/simple_form.fa.yml @@ -12,8 +12,6 @@ fa: data: پروندهٔ CSV Ú©Ù‡ از سرور ماستدون دیگری برون‌سپاری شده sessions: otp: کد تأیید دومرØله‌ای را از تلÙÙ† خود وارد کنید یا یکی از کدهای بازیابی را به کار ببرید. - user: - allowed_languages: این زبان‌ها در Ùهرست عمومی نوشته‌ها مجاز خواهند بود. زبان‌هایی Ú©Ù‡ انتخاب نشده باشند به این Ùهرست راه پیدا نمی‌کنند. labels: defaults: avatar: تصویر نمایه diff --git a/config/locales/simple_form.he.yml b/config/locales/simple_form.he.yml index 0f0949e87d6a604e5d64727015956022dbf31fad..e72d7f2bd5ccf10f41c0ef04da9f1bbb13b6bf63 100644 --- a/config/locales/simple_form.he.yml +++ b/config/locales/simple_form.he.yml @@ -16,8 +16,6 @@ he: data: 'קובץ CSV ×©×™×•×¦× ×ž×©×¨×ª מסטודון ×חר' sessions: otp: '× × ×œ×”×§×œ×™×“ קוד ×ימות דו-שלבי ממכשירך ×ו קוד ×חזור גישה.' - user: - allowed_languages: ×לו השפות שיהיה מותרות בצירי הזמן ×”×¦×™×‘×•×¨×™×™× ×©×œ×š. שפות ×©×œ× ×™×™×‘×—×¨×• יפולטרו ×ž×¢×™× ×™ הקור××™×. labels: defaults: avatar: ×ª×ž×•× ×ª פרופיל diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index 811e474fefb74942f32b5979ca01be8b4e932149..c0485779595d09e86c400a7facb400acf9a6e7a0 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -12,11 +12,8 @@ ja: data: ä»–ã® Mastodon インスタンスã‹ã‚‰ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã—ãŸCSVファイルをé¸æŠžã—ã¦ä¸‹ã•ã„ sessions: otp: æºå¸¯é›»è©±ã«è¡¨ç¤ºã•ã‚ŒãŸ2段階èªè¨¼ã‚³ãƒ¼ãƒ‰ã‚’入力ã™ã‚‹ã‹ã€ç”Ÿæˆã—ãŸãƒªã‚«ãƒãƒªãƒ¼ã‚³ãƒ¼ãƒ‰ã‚’使用ã—ã¦ãã ã•ã„。 - user: - allowed_languages: é¸æŠžã—ãŸè¨€èªžãŒã‚ãªãŸã®å…¬é–‹ã‚¿ã‚¤ãƒ ラインã«è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚é¸æŠžã—ã¦ã„ãªã„言語ã¯å–り除ã‹ã‚Œã¾ã™ã€‚ labels: defaults: - allowed_languages: 許å¯ã™ã‚‹è¨€èªž avatar: アイコン confirm_new_password: æ–°ã—ã„パスワード(確èªç”¨ï¼‰ confirm_password: パスワード(確èªç”¨ï¼‰ diff --git a/config/locales/simple_form.oc.yml b/config/locales/simple_form.oc.yml index 088a9393aabce6fb24bc2ee91f6cb511e125043a..d5a209271fa9d03bce7301cf69f8cc5629658588 100644 --- a/config/locales/simple_form.oc.yml +++ b/config/locales/simple_form.oc.yml @@ -12,11 +12,8 @@ oc: data: Fichièr CSV exportat d’una autra instà ncia Mastodon sessions: otp: Picatz lo còdi d’autentificacion en dos temps (Two factor code) de vòstre mobil o utilizatz un de vòstres còdis de recuperacion. - user: - allowed_languages: Aquestas lengas serà n las que serà n autorizadas dins vòstre flux public. Las lengas pas causidas serà n rescondudas. labels: defaults: - allowed_languages: Lengas autorizadas avatar: Avatar confirm_new_password: Confirmacion del nòu senhal confirm_password: Confirmatz lo nòu senhal diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml index 2d750b02c49af90680e09992d71e3c776625233a..40c4b73a8ccc6f6baf32705e3e1eb30d2394cc69 100644 --- a/config/locales/simple_form.pl.yml +++ b/config/locales/simple_form.pl.yml @@ -12,8 +12,6 @@ pl: data: Plik CSV wyeksportowany z innej instancji Mastodona sessions: otp: Wprowadź kod weryfikacji dwuetapowej z telefonu lub wykorzystaj jeden z kodów zapasowych. - user: - allowed_languages: Te jÄ™zyki bÄ™dÄ… wyÅ›wietlać siÄ™ na Twojej osi czasu. Wpisy w niezaznaczonych jÄ™zykach nie bÄ™dÄ… widoczne. labels: defaults: avatar: Awatar diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml index 82c9000f1deb51b2abbdbde3b7081aac6f3d2e15..1cbf6ea57750062c0edb94290dd9896322792cb5 100644 --- a/config/locales/simple_form.pt-BR.yml +++ b/config/locales/simple_form.pt-BR.yml @@ -12,8 +12,6 @@ pt-BR: data: Arquivo CSV exportado de outra instancia Mastodon sessions: otp: Entre com o código de 2 passos do seu telefone ou use os códiogos de recuperação. - user: - allowed_languages: Essas lÃnguas vão ser permitidas na sua timeline pública. LÃnguas que não forem selecionadas serão filtradas. labels: defaults: avatar: Avatar diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml index 388886bf0fd6e0be0f299bef6df4120570b8a58a..de206fe0dcf5d81a7cfbb1ef5af71a3411f316f4 100644 --- a/config/locales/simple_form.th.yml +++ b/config/locales/simple_form.th.yml @@ -9,15 +9,13 @@ th: other: '%{count} characters left' header: PNG, GIF or JPG. At most 2MB. Will be downscaled to 700x335px locked: Requires you to manually approve followers and defaults post privacy to followers-only - note: + note: one: '1 character left' other: '%{count} characters left' imports: data: CSV file exported from another Mastodon instance sessions: otp: Enter the Two-factor code from your phone or use one of your recovery codes. - user: - allowed_languages: These languages will be allowed in your public timelines. Languages that are not selected will be filtered out. labels: defaults: avatar: Avatar diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml index ed05eb38dc0a698f9335db7562412b7c8a420e48..7e9fd6d85e28ea9b408450ee81a4e5208e019041 100644 --- a/config/locales/simple_form.zh-CN.yml +++ b/config/locales/simple_form.zh-CN.yml @@ -12,8 +12,6 @@ zh-CN: data: 自其他æœåŠ¡ç«™å¯¼å‡ºçš„ CSV 文件 sessions: otp: è¾“å…¥ä½ æ‰‹æœºç”Ÿæˆçš„两æ¥éªŒè¯ç ,或者æ¢å¤ä»£ç 。 - user: - allowed_languages: å…许下列è¯è¨€çš„å†…å®¹å‡ºçŽ°åœ¨ä½ çš„å…¬å…±æ—¶é—´çº¿ä¸Šã€‚ labels: defaults: avatar: å¤´åƒ diff --git a/db/migrate/20170520145338_change_language_filter_to_opt_out.rb b/db/migrate/20170520145338_change_language_filter_to_opt_out.rb new file mode 100644 index 0000000000000000000000000000000000000000..8dac98ee876419d07ebde8cd8ab575eb1c3853cf --- /dev/null +++ b/db/migrate/20170520145338_change_language_filter_to_opt_out.rb @@ -0,0 +1,9 @@ +class ChangeLanguageFilterToOptOut < ActiveRecord::Migration[5.0] + def change + remove_index :users, :allowed_languages + remove_column :users, :allowed_languages + + add_column :users, :filtered_languages, :string, array: true, default: [], null: false + add_index :users, :filtered_languages, using: :gin + end +end diff --git a/db/schema.rb b/db/schema.rb index 8246e665a830c3e91e0e35553524fc519343d5a2..33c833615668c83ec085f3928814e0bb68da191f 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20170517205741) do +ActiveRecord::Schema.define(version: 20170520145338) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -350,11 +350,11 @@ ActiveRecord::Schema.define(version: 20170517205741) do t.boolean "otp_required_for_login" t.datetime "last_emailed_at" t.string "otp_backup_codes", array: true - t.string "allowed_languages", default: [], null: false, array: true + t.string "filtered_languages", default: [], null: false, array: true t.index ["account_id"], name: "index_users_on_account_id", using: :btree - t.index ["allowed_languages"], name: "index_users_on_allowed_languages", using: :gin t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true, using: :btree t.index ["email"], name: "index_users_on_email", unique: true, using: :btree + t.index ["filtered_languages"], name: "index_users_on_filtered_languages", using: :gin t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree end diff --git a/spec/controllers/settings/preferences_controller_spec.rb b/spec/controllers/settings/preferences_controller_spec.rb index 6805a2ce0c6afd0a458b2d88ef721f75dd675c10..38e43f211b902ab173e8cb3c66c5fd8fe1c32c22 100644 --- a/spec/controllers/settings/preferences_controller_spec.rb +++ b/spec/controllers/settings/preferences_controller_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe Settings::PreferencesController do render_views - let(:user) { Fabricate(:user, allowed_languages: []) } + let(:user) { Fabricate(:user, filtered_languages: []) } before do sign_in user, scope: :user @@ -18,12 +18,12 @@ describe Settings::PreferencesController do describe 'PUT #update' do it 'updates the user record' do - put :update, params: { user: { locale: 'en', allowed_languages: ['es', 'fr', ''] } } + put :update, params: { user: { locale: 'en', filtered_languages: ['es', 'fr', ''] } } expect(response).to redirect_to(settings_preferences_path) user.reload expect(user.locale).to eq 'en' - expect(user.allowed_languages).to eq ['es', 'fr'] + expect(user.filtered_languages).to eq ['es', 'fr'] end it 'updates user settings' do diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb index e9e55a92bbfde4638c432a129f13e7b78fb56eed..d3a66134b2096ebccc2374ee6bd7a1f82f90a03d 100644 --- a/spec/models/status_spec.rb +++ b/spec/models/status_spec.rb @@ -512,7 +512,7 @@ RSpec.describe Status, type: :model do context 'with language preferences' do it 'excludes statuses in languages not allowed by the account user' do - user = Fabricate(:user, allowed_languages: [:en, :es]) + user = Fabricate(:user, filtered_languages: [:fr]) @account.update(user: user) en_status = Fabricate(:status, language: 'en') es_status = Fabricate(:status, language: 'es') @@ -525,7 +525,7 @@ RSpec.describe Status, type: :model do end it 'includes all languages when user does not have a setting' do - user = Fabricate(:user, allowed_languages: []) + user = Fabricate(:user, filtered_languages: []) @account.update(user: user) en_status = Fabricate(:status, language: 'en') diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 04c39de3b288b3115b0485eda4eea0ab71e8db91..c3e924fd81e146bc473618e2950dfe2b7beb0ec7 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -24,9 +24,9 @@ RSpec.describe User, type: :model do end it 'cleans out empty string from languages' do - user = Fabricate.build(:user, allowed_languages: ['']) + user = Fabricate.build(:user, filtered_languages: ['']) user.valid? - expect(user.allowed_languages).to eq [] + expect(user.filtered_languages).to eq [] end end