From 986cc8a0fb407fb7747d20a2b67937f45dc37a80 Mon Sep 17 00:00:00 2001 From: Tarek Khalil <45508821+khalilovcmded@users.noreply.github.com> Date: Wed, 27 Feb 2019 13:49:07 +0000 Subject: [PATCH] FEATURE: Introduce Ignore user (#7072) --- .../components/user-card-contents.js.es6 | 10 +++ .../discourse/controllers/user.js.es6 | 10 +++ .../javascripts/discourse/models/user.js.es6 | 14 ++++ .../components/user-card-contents.hbs | 15 ++++ .../javascripts/discourse/templates/user.hbs | 27 +++++-- app/controllers/users_controller.rb | 18 ++++- app/models/ignored_user.rb | 20 ++++++ app/serializers/user_serializer.rb | 10 +++ config/locales/client.en.yml | 2 + config/routes.rb | 2 + config/site_settings.yml | 3 + .../20190225133654_add_ignored_users_table.rb | 12 ++++ lib/topic_view.rb | 40 ++++++----- spec/fabricators/ignored_user.rb | 3 + spec/requests/users_controller_spec.rb | 70 +++++++++++++++++++ .../web_hook_user_serializer_spec.rb | 2 +- 16 files changed, 233 insertions(+), 25 deletions(-) create mode 100644 app/models/ignored_user.rb create mode 100644 db/migrate/20190225133654_add_ignored_users_table.rb create mode 100644 spec/fabricators/ignored_user.rb diff --git a/app/assets/javascripts/discourse/components/user-card-contents.js.es6 b/app/assets/javascripts/discourse/components/user-card-contents.js.es6 index d13fcd101c1..4849a917af8 100644 --- a/app/assets/javascripts/discourse/components/user-card-contents.js.es6 +++ b/app/assets/javascripts/discourse/components/user-card-contents.js.es6 @@ -195,6 +195,16 @@ export default Ember.Component.extend( this._close(); }, + ignoreUser() { + this.get("user").ignore(); + this._close(); + }, + + watchUser() { + this.get("user").watch(); + this._close(); + }, + showUser() { this.showUser(this.get("user")); this._close(); diff --git a/app/assets/javascripts/discourse/controllers/user.js.es6 b/app/assets/javascripts/discourse/controllers/user.js.es6 index e0b31bd1727..d6f577fe37f 100644 --- a/app/assets/javascripts/discourse/controllers/user.js.es6 +++ b/app/assets/javascripts/discourse/controllers/user.js.es6 @@ -145,6 +145,16 @@ export default Ember.Controller.extend(CanCheckEmails, { adminDelete() { this.get("adminTools").deleteUser(this.get("model.id")); + }, + + ignoreUser() { + const user = this.get("model"); + user.ignore().then(() => user.set("ignored", true)); + }, + + watchUser() { + const user = this.get("model"); + user.watch().then(() => user.set("ignored", false)); } } }); diff --git a/app/assets/javascripts/discourse/models/user.js.es6 b/app/assets/javascripts/discourse/models/user.js.es6 index 428f08ba5bf..ab7f31538d6 100644 --- a/app/assets/javascripts/discourse/models/user.js.es6 +++ b/app/assets/javascripts/discourse/models/user.js.es6 @@ -615,6 +615,20 @@ const User = RestModel.extend({ } }, + ignore() { + return ajax(`${userPath(this.get("username"))}/ignore.json`, { + type: "PUT", + data: { ignored_user_id: this.get("id") } + }); + }, + + watch() { + return ajax(`${userPath(this.get("username"))}/ignore.json`, { + type: "DELETE", + data: { ignored_user_id: this.get("id") } + }); + }, + dismissBanner(bannerKey) { this.set("dismissed_banner_key", bannerKey); ajax(userPath(this.get("username") + ".json"), { diff --git a/app/assets/javascripts/discourse/templates/components/user-card-contents.hbs b/app/assets/javascripts/discourse/templates/components/user-card-contents.hbs index a7fc8cac358..e40a5a2abe6 100644 --- a/app/assets/javascripts/discourse/templates/components/user-card-contents.hbs +++ b/app/assets/javascripts/discourse/templates/components/user-card-contents.hbs @@ -48,6 +48,21 @@ icon="envelope" label="user.private_message"}} + {{#if user.can_ignore_user}} +
  • + {{#if user.ignored}} + {{d-button class="btn-default" + action=(action "watchUser") + icon="eye" + label="user.watch"}} + {{else}} + {{d-button class="btn-danger" + action=(action "ignoreUser") + icon="eye-slash" + label="user.ignore"}} + {{/if}} +
  • + {{/if}} {{/if}} {{#if showFilter}} diff --git a/app/assets/javascripts/discourse/templates/user.hbs b/app/assets/javascripts/discourse/templates/user.hbs index 0376714d9ad..755d9090f1f 100644 --- a/app/assets/javascripts/discourse/templates/user.hbs +++ b/app/assets/javascripts/discourse/templates/user.hbs @@ -43,12 +43,27 @@