From ec30086dea9febcd8b01a8eac98d76eaeebf3df6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Hanol?= Date: Mon, 4 Aug 2014 22:48:04 +0200 Subject: [PATCH] FEATURE: agree all the flags --- .../admin/controllers/admin-agree-flag.js.es6 | 44 +++++++++++++++++++ ...controller.js => admin-delete-flag.js.es6} | 14 ++---- .../admin/controllers/admin-flags.js.es6 | 21 +++------ .../javascripts/admin/models/flagged_post.js | 4 +- .../admin/routes/admin_flags_route.js | 18 +++++++- .../admin/templates/flags.js.handlebars | 10 ++--- .../modal/admin_agree_flag.js.handlebars | 7 +++ .../modal/admin_delete_flag.js.handlebars | 2 +- .../views/modals/admin_agree_flag_view.js | 12 +++++ .../stylesheets/common/admin/admin_base.scss | 2 +- app/controllers/admin/flags_controller.rb | 21 +++++++-- config/locales/client.en.yml | 9 +++- 12 files changed, 122 insertions(+), 42 deletions(-) create mode 100644 app/assets/javascripts/admin/controllers/admin-agree-flag.js.es6 rename app/assets/javascripts/admin/controllers/{admin_delete_flag_controller.js => admin-delete-flag.js.es6} (70%) create mode 100644 app/assets/javascripts/admin/templates/modal/admin_agree_flag.js.handlebars create mode 100644 app/assets/javascripts/admin/views/modals/admin_agree_flag_view.js diff --git a/app/assets/javascripts/admin/controllers/admin-agree-flag.js.es6 b/app/assets/javascripts/admin/controllers/admin-agree-flag.js.es6 new file mode 100644 index 00000000000..658bb7b25ca --- /dev/null +++ b/app/assets/javascripts/admin/controllers/admin-agree-flag.js.es6 @@ -0,0 +1,44 @@ +/** + The modal for agreeing with a flag. + + @class AdminAgreeFlagController + @extends Discourse.Controller + @namespace Discourse + @uses Discourse.ModalFunctionality + @module Discourse +**/ +export default Discourse.ObjectController.extend(Discourse.ModalFunctionality, { + + needs: ["adminFlags"], + + actions: { + + agreeFlagHidePost: function () { + var adminFlagController = this.get("controllers.adminFlags"); + var post = this.get("content"); + var self = this; + + return post.agreeFlags("hide").then(function () { + adminFlagController.removeObject(post); + self.send("closeModal"); + }, function () { + bootbox.alert(I18n.t("admin.flags.error")); + }); + }, + + agreeFlagKeepPost: function () { + var adminFlagController = this.get("controllers.adminFlags"); + var post = this.get("content"); + var self = this; + + return post.agreeFlags("keep").then(function () { + adminFlagController.removeObject(post); + self.send("closeModal"); + }, function () { + bootbox.alert(I18n.t("admin.flags.error")); + }); + } + + } + +}); diff --git a/app/assets/javascripts/admin/controllers/admin_delete_flag_controller.js b/app/assets/javascripts/admin/controllers/admin-delete-flag.js.es6 similarity index 70% rename from app/assets/javascripts/admin/controllers/admin_delete_flag_controller.js rename to app/assets/javascripts/admin/controllers/admin-delete-flag.js.es6 index 89ee5371dd5..2d65c91cf86 100644 --- a/app/assets/javascripts/admin/controllers/admin_delete_flag_controller.js +++ b/app/assets/javascripts/admin/controllers/admin-delete-flag.js.es6 @@ -7,7 +7,7 @@ @uses Discourse.ModalFunctionality @module Discourse **/ -Discourse.AdminDeleteFlagController = Discourse.ObjectController.extend(Discourse.ModalFunctionality, { +export default Discourse.ObjectController.extend(Discourse.ModalFunctionality, { needs: ["adminFlags"], @@ -31,22 +31,14 @@ Discourse.AdminDeleteFlagController = Discourse.ObjectController.extend(Discours var post = this.get("content"); var self = this; - return post.agreeFlags(true).then(function () { + return post.agreeFlags("delete").then(function () { adminFlagController.removeObject(post); self.send("closeModal"); }, function () { bootbox.alert(I18n.t("admin.flags.error")); }); - }, - - /** - Deletes a user and all posts and topics created by that user. - - @method deleteSpammer - **/ - deleteSpammer: function () { - this.get("content.user").deleteAsSpammer(function() { window.location.reload(); }); } + } }); diff --git a/app/assets/javascripts/admin/controllers/admin-flags.js.es6 b/app/assets/javascripts/admin/controllers/admin-flags.js.es6 index 93cc6d6772d..de3a74fe795 100644 --- a/app/assets/javascripts/admin/controllers/admin-flags.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-flags.js.es6 @@ -8,20 +8,11 @@ **/ export default Ember.ArrayController.extend({ - adminOldFlagsView: Em.computed.equal('query', 'old'), - adminActiveFlagsView: Em.computed.equal('query', 'active'), + adminOldFlagsView: Em.computed.equal("query", "old"), + adminActiveFlagsView: Em.computed.equal("query", "active"), actions: { - agreeFlags: function (flaggedPost) { - var self = this; - flaggedPost.agreeFlags().then(function () { - self.removeObject(flaggedPost); - }, function () { - bootbox.alert(I18n.t("admin.flags.error")); - }); - }, - disagreeFlags: function (flaggedPost) { var self = this; flaggedPost.disagreeFlags().then(function () { @@ -41,15 +32,15 @@ export default Ember.ArrayController.extend({ }, doneTopicFlags: function(item) { - this.send('disagreeFlags', item); + this.send("disagreeFlags", item); }, }, loadMore: function(){ - var flags = this.get('model'); - return Discourse.FlaggedPost.findAll(this.get('query'),flags.length+1).then(function(data){ + var flags = this.get("model"); + return Discourse.FlaggedPost.findAll(this.get("query"),flags.length+1).then(function(data){ if(data.length===0){ - flags.set('allLoaded',true); + flags.set("allLoaded",true); } flags.addObjects(data); }); diff --git a/app/assets/javascripts/admin/models/flagged_post.js b/app/assets/javascripts/admin/models/flagged_post.js index 98110d0e2c9..35590c28922 100644 --- a/app/assets/javascripts/admin/models/flagged_post.js +++ b/app/assets/javascripts/admin/models/flagged_post.js @@ -104,8 +104,8 @@ Discourse.FlaggedPost = Discourse.Post.extend({ return Discourse.ajax('/admin/flags/defer/' + this.id, { type: 'POST', cache: false, data: { delete_post: deletePost } }); }, - agreeFlags: function (deletePost) { - return Discourse.ajax('/admin/flags/agree/' + this.id, { type: 'POST', cache: false, data: { delete_post: deletePost } }); + agreeFlags: function (actionOnPost) { + return Discourse.ajax('/admin/flags/agree/' + this.id, { type: 'POST', cache: false, data: { action_on_post: actionOnPost } }); }, postHidden: Em.computed.alias('hidden'), diff --git a/app/assets/javascripts/admin/routes/admin_flags_route.js b/app/assets/javascripts/admin/routes/admin_flags_route.js index a2bf110ea60..e1d30fe6865 100644 --- a/app/assets/javascripts/admin/routes/admin_flags_route.js +++ b/app/assets/javascripts/admin/routes/admin_flags_route.js @@ -13,6 +13,17 @@ Discourse.AdminFlagsRouteType = Discourse.Route.extend({ var adminFlagsController = this.controllerFor('adminFlags'); adminFlagsController.set('content', model); adminFlagsController.set('query', this.get('filter')); + }, + + actions: { + /** + Deletes a user and all posts and topics created by that user. + + @method deleteSpammer + **/ + deleteSpammer: function (user) { + user.deleteAsSpammer(function() { window.location.reload(); }); + } } }); @@ -22,7 +33,12 @@ Discourse.AdminFlagsActiveRoute = Discourse.AdminFlagsRouteType.extend({ actions: { - showDeleteFlagModal: function(flaggedPost) { + showAgreeFlagModal: function (flaggedPost) { + Discourse.Route.showModal(this, 'admin_agree_flag', flaggedPost); + this.controllerFor('modal').set('modalClass', 'agree-flag-modal'); + }, + + showDeleteFlagModal: function (flaggedPost) { Discourse.Route.showModal(this, 'admin_delete_flag', flaggedPost); this.controllerFor('modal').set('modalClass', 'delete-flag-modal'); } diff --git a/app/assets/javascripts/admin/templates/flags.js.handlebars b/app/assets/javascripts/admin/templates/flags.js.handlebars index 5758b8560d7..d630f739758 100644 --- a/app/assets/javascripts/admin/templates/flags.js.handlebars +++ b/app/assets/javascripts/admin/templates/flags.js.handlebars @@ -135,14 +135,14 @@ {{#if adminActiveFlagsView}} + {{#if flaggedPost.postHidden}} - + {{else}} - - + {{/if}} - - + + {{/if}} diff --git a/app/assets/javascripts/admin/templates/modal/admin_agree_flag.js.handlebars b/app/assets/javascripts/admin/templates/modal/admin_agree_flag.js.handlebars new file mode 100644 index 00000000000..e5f63c6677d --- /dev/null +++ b/app/assets/javascripts/admin/templates/modal/admin_agree_flag.js.handlebars @@ -0,0 +1,7 @@ +{{#unless postHidden}} + +{{/unless}} + +{{#if canDeleteAsSpammer}} + +{{/if}} diff --git a/app/assets/javascripts/admin/templates/modal/admin_delete_flag.js.handlebars b/app/assets/javascripts/admin/templates/modal/admin_delete_flag.js.handlebars index 35689dd9702..a26833c22f1 100644 --- a/app/assets/javascripts/admin/templates/modal/admin_delete_flag.js.handlebars +++ b/app/assets/javascripts/admin/templates/modal/admin_delete_flag.js.handlebars @@ -1,5 +1,5 @@ {{#if canDeleteAsSpammer}} - + {{/if}} diff --git a/app/assets/javascripts/admin/views/modals/admin_agree_flag_view.js b/app/assets/javascripts/admin/views/modals/admin_agree_flag_view.js new file mode 100644 index 00000000000..c28a4aaad48 --- /dev/null +++ b/app/assets/javascripts/admin/views/modals/admin_agree_flag_view.js @@ -0,0 +1,12 @@ +/** + A modal view for agreeing with a flag. + + @class AdminAgreeFlagView + @extends Discourse.ModalBodyView + @namespace Discourse + @module Discourse +**/ +Discourse.AdminAgreeFlagView = Discourse.ModalBodyView.extend({ + templateName: 'admin/templates/modal/admin_agree_flag', + title: I18n.t('admin.flags.agree_flag_modal_title') +}); diff --git a/app/assets/stylesheets/common/admin/admin_base.scss b/app/assets/stylesheets/common/admin/admin_base.scss index 161816b1fa5..64c66fc0800 100644 --- a/app/assets/stylesheets/common/admin/admin_base.scss +++ b/app/assets/stylesheets/common/admin/admin_base.scss @@ -1144,7 +1144,7 @@ button.ru { visibility: hidden; } -.delete-flag-modal { +.delete-flag-modal, .agree-flag-modal { .modal-inner-container { width: 400px; } diff --git a/app/controllers/admin/flags_controller.rb b/app/controllers/admin/flags_controller.rb index cf57307258a..1fdbab0ebff 100644 --- a/app/controllers/admin/flags_controller.rb +++ b/app/controllers/admin/flags_controller.rb @@ -19,32 +19,45 @@ class Admin::FlagsController < Admin::AdminController end def agree - params.permit(:id, :delete_post) + params.permit(:id, :action_on_post) + post = Post.find(params[:id]) post_action_type = PostAction.post_action_type_for_post(post.id) - PostAction.agree_flags!(post, current_user, params[:delete_post]) - if params[:delete_post] + + keep_post = params[:action_on_post] == "keep" + delete_post = params[:action_on_post] == "delete" + + PostAction.agree_flags!(post, current_user, delete_post) + + if delete_post PostDestroyer.new(current_user, post).destroy - else + elsif !keep_post PostAction.hide_post!(post, post_action_type) end + render nothing: true end def disagree params.permit(:id) post = Post.find(params[:id]) + PostAction.clear_flags!(post, current_user) + post.reload post.unhide! + render nothing: true end def defer params.permit(:id, :delete_post) post = Post.find(params[:id]) + PostAction.defer_flags!(post, current_user, params[:delete_post]) + PostDestroyer.new(current_user, post).destroy if params[:delete_post] + render nothing: true end diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index c5dd649319b..ba80f7688b0 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -1415,15 +1415,20 @@ en: old: "Old" active: "Active" + agree: "Agree" + agree_title: "Agree" + agree_flag_modal_title: "Agree and..." agree_flag_hide_post: "Agree (hide post + send PM)" agree_flag_hide_post_title: "Hide this post and automatically send the user a private message urging them to edit it" + agree_flag: "Agree with flag" + agree_flag_title: "Agree with flag and keep the post unchanged" defer_flag: "Defer" defer_flag_title: "No action is necessary at this time, defer any action on this flag until a later date, or never" delete: "Delete" delete_title: "Delete" - delete_post_defer_flag: "Delete Post and Defer flag" + delete_post_defer_flag: "Delete post and Defer flag" delete_post_defer_flag_title: "Delete post; if the first post, delete the topic" - delete_post_agree_flag: "Delete Post and Agree with flag" + delete_post_agree_flag: "Delete post and Agree with flag" delete_post_agree_flag_title: "Delete post; if the first post, delete the topic" delete_flag_modal_title: "Delete and..." delete_spammer: "Delete Spammer"