diff --git a/app/assets/javascripts/admin/components/flagged-post.js.es6 b/app/assets/javascripts/admin/components/flagged-post.js.es6 new file mode 100644 index 00000000000..c798bb3ae7b --- /dev/null +++ b/app/assets/javascripts/admin/components/flagged-post.js.es6 @@ -0,0 +1,36 @@ +import showModal from 'discourse/lib/show-modal'; + +export default Ember.Component.extend({ + tagName: '', + + removeAfter(promise) { + return promise.then(() => { + this.attrs.removePost(); + }).catch(() => { + bootbox.alert(I18n.t("admin.flags.error")); + }); + }, + + _spawnModal(name, model, modalClass) { + let controller = showModal(name, { model, admin: true, modalClass }); + controller.removeAfter = (p) => this.removeAfter(p); + }, + + actions: { + showAgreeFlagModal() { + this._spawnModal('admin-agree-flag', this.get('flaggedPost'), 'agree-flag-modal'); + }, + + showDeleteFlagModal() { + this._spawnModal('admin-delete-flag', this.get('flaggedPost'), 'delete-flag-modal'); + }, + + disagree() { + this.removeAfter(this.get('flaggedPost').disagreeFlags()); + }, + + defer() { + this.removeAfter(this.get('flaggedPost').deferFlags()); + } + } +}); diff --git a/app/assets/javascripts/admin/controllers/modals/admin-agree-flag.js.es6 b/app/assets/javascripts/admin/controllers/modals/admin-agree-flag.js.es6 index a5f20e63683..43b14f4dbb1 100644 --- a/app/assets/javascripts/admin/controllers/modals/admin-agree-flag.js.es6 +++ b/app/assets/javascripts/admin/controllers/modals/admin-agree-flag.js.es6 @@ -5,7 +5,7 @@ export default Ember.Controller.extend(ModalFunctionality, { _agreeFlag(action) { let flaggedPost = this.get('model'); - return this.removeAfter(flaggedPost.agreeFlags(action), flaggedPost).then(() => { + return this.removeAfter(flaggedPost.agreeFlags(action)).then(() => { this.send('closeModal'); }); }, diff --git a/app/assets/javascripts/admin/controllers/modals/admin-delete-flag.js.es6 b/app/assets/javascripts/admin/controllers/modals/admin-delete-flag.js.es6 index 2cabebb04bc..be9f74d0eff 100644 --- a/app/assets/javascripts/admin/controllers/modals/admin-delete-flag.js.es6 +++ b/app/assets/javascripts/admin/controllers/modals/admin-delete-flag.js.es6 @@ -6,14 +6,14 @@ export default Ember.Controller.extend(ModalFunctionality, { actions: { deletePostDeferFlag() { let flaggedPost = this.get('model'); - this.removeAfter(flaggedPost.deferFlags(true), flaggedPost).then(() => { + this.removeAfter(flaggedPost.deferFlags(true)).then(() => { this.send('closeModal'); }); }, deletePostAgreeFlag() { let flaggedPost = this.get('model'); - this.removeAfter(flaggedPost.agreeFlags('delete'), flaggedPost).then(() => { + this.removeAfter(flaggedPost.agreeFlags('delete')).then(() => { this.send('closeModal'); }); } diff --git a/app/assets/javascripts/admin/models/flagged-post.js.es6 b/app/assets/javascripts/admin/models/flagged-post.js.es6 index c1517836dbd..4f1cc61d106 100644 --- a/app/assets/javascripts/admin/models/flagged-post.js.es6 +++ b/app/assets/javascripts/admin/models/flagged-post.js.es6 @@ -27,7 +27,7 @@ const FlaggedPost = Post.extend({ disposedAt: postAction.disposed_at, dispositionIcon: this.dispositionIcon(postAction.disposition), tookAction: postAction.staff_took_action - } + }; }); }, @@ -144,25 +144,31 @@ const FlaggedPost = Post.extend({ }); FlaggedPost.reopenClass({ - findAll(args) { - let { offset, filter } = args; - offset = offset || 0; + let { filter } = args; let result = []; result.set('loading', true); - return ajax('/admin/flags/' + filter + '.json?offset=' + offset).then(function (data) { + let data = {}; + if (args.topic_id) { + data.topic_id = args.topic_id; + } + if (args.offset) { + data.offset = args.offset; + } + + return ajax(`/admin/flags/${filter}.json`, { data }).then(response => { // users let userLookup = {}; - data.users.forEach(user => userLookup[user.id] = AdminUser.create(user)); + response.users.forEach(user => userLookup[user.id] = AdminUser.create(user)); // topics let topicLookup = {}; - data.topics.forEach(topic => topicLookup[topic.id] = Topic.create(topic)); + response.topics.forEach(topic => topicLookup[topic.id] = Topic.create(topic)); // posts - data.posts.forEach(post => { + response.posts.forEach(post => { let f = FlaggedPost.create(post); f.userLookup = userLookup; f.topicLookup = topicLookup; diff --git a/app/assets/javascripts/admin/routes/admin-flags-posts-active.js.es6 b/app/assets/javascripts/admin/routes/admin-flags-posts-active.js.es6 index c38488e0f6e..c1d2dd21017 100644 --- a/app/assets/javascripts/admin/routes/admin-flags-posts-active.js.es6 +++ b/app/assets/javascripts/admin/routes/admin-flags-posts-active.js.es6 @@ -2,6 +2,6 @@ import FlaggedPost from 'admin/models/flagged-post'; export default Discourse.Route.extend({ model() { - return FlaggedPost.findAll('active'); + return FlaggedPost.findAll({ filter: 'active' }); } }); diff --git a/app/assets/javascripts/admin/routes/admin-flags-posts-old.js.es6 b/app/assets/javascripts/admin/routes/admin-flags-posts-old.js.es6 index 312e2405275..ff3c1305984 100644 --- a/app/assets/javascripts/admin/routes/admin-flags-posts-old.js.es6 +++ b/app/assets/javascripts/admin/routes/admin-flags-posts-old.js.es6 @@ -2,6 +2,6 @@ import FlaggedPost from 'admin/models/flagged-post'; export default Discourse.Route.extend({ model() { - return FlaggedPost.findAll('old'); + return FlaggedPost.findAll({ filter: 'old' }); }, }); diff --git a/app/assets/javascripts/admin/routes/admin-flags-topics-show.js.es6 b/app/assets/javascripts/admin/routes/admin-flags-topics-show.js.es6 index 66b87352268..fca10d61511 100644 --- a/app/assets/javascripts/admin/routes/admin-flags-topics-show.js.es6 +++ b/app/assets/javascripts/admin/routes/admin-flags-topics-show.js.es6 @@ -8,7 +8,10 @@ export default Ember.Route.extend({ return Ember.RSVP.hash({ topic, - flaggedPosts: FlaggedPost.findAll({ filter: 'active' }) + flaggedPosts: FlaggedPost.findAll({ + filter: 'active', + topic_id: params.id + }) }); }, diff --git a/app/assets/javascripts/admin/templates/components/flagged-post.hbs b/app/assets/javascripts/admin/templates/components/flagged-post.hbs new file mode 100644 index 00000000000..1a2ce66c413 --- /dev/null +++ b/app/assets/javascripts/admin/templates/components/flagged-post.hbs @@ -0,0 +1,169 @@ +
{{{flaggedPost.excerpt}}}
+ {{/if}} + {{/unless}} +{{{flaggedPost.excerpt}}}
+ {{/if}} + {{/if}} ++ {{#link-to 'adminUser' flagger.user}} + {{avatar flagger.user imageSize="medium"}} + {{/link-to}} + | +
+ {{#link-to 'adminUser' flagger.user}}
+ {{flagger.user.username}}
+ {{/link-to}}
+ {{format-age flagger.flaggedAt}}
+ + {{flagger.flagType}} + |
+
+ {{#link-to 'adminUser' flagger.disposedBy}} + {{avatar flagger.disposedBy imageSize="medium"}} + {{/link-to}} + | ++ {{format-age flagger.disposedAt}} + {{{flagger.dispositionIcon}}} + {{#if flagger.tookAction}} + {{d-icon "gavel" title="admin.flags.took_action"}} + {{/if}} + | +
{{{flaggedPost.excerpt}}}
- {{/if}} - {{/unless}} -{{{flaggedPost.excerpt}}}
- {{/if}} - {{/if}} -- {{#link-to 'adminUser' flagger.user}} - {{avatar flagger.user imageSize="medium"}} - {{/link-to}} - | -
- {{#link-to 'adminUser' flagger.user}}
- {{flagger.user.username}}
- {{/link-to}}
- {{format-age flagger.flaggedAt}}
- - {{flagger.flagType}} - |
-
- {{#link-to 'adminUser' flagger.disposedBy}} - {{avatar flagger.disposedBy imageSize="medium"}} - {{/link-to}} - | -- {{format-age flagger.disposedAt}} - {{{flagger.dispositionIcon}}} - {{#if flagger.tookAction}} - {{d-icon "gavel" title="admin.flags.took_action"}} - {{/if}} - | -
{{i18n 'admin.flags.no_results'}}
{{/if}} diff --git a/app/assets/javascripts/discourse/components/flagged-posts.js.es6 b/app/assets/javascripts/discourse/components/flagged-posts.js.es6 index 99a7e58e48b..c381c197601 100644 --- a/app/assets/javascripts/discourse/components/flagged-posts.js.es6 +++ b/app/assets/javascripts/discourse/components/flagged-posts.js.es6 @@ -1,39 +1,20 @@ import FlaggedPost from 'admin/models/flagged-post'; -import showModal from 'discourse/lib/show-modal'; export default Ember.Component.extend({ canAct: Ember.computed.equal('filter', 'active'), showResolvedBy: Ember.computed.equal('filter', 'old'), - removeAfter(promise, flaggedPost) { - return promise.then(() => { - this.get('flaggedPosts').removeObject(flaggedPost); - }).catch(() => { - bootbox.alert(I18n.t("admin.flags.error")); - }); - }, - - _spawnModal(name, flaggedPost, modalClass) { - let controller = showModal(name, { - model: flaggedPost, - admin: true, - modalClass - }); - controller.removeAfter = (p, f) => this.removeAfter(p, f); - }, - actions: { - disagree(flaggedPost) { - this.removeAfter(flaggedPost.disagreeFlags(), flaggedPost); - }, - - defer(flaggedPost) { - this.removeAfter(flaggedPost.deferFlags(), flaggedPost); + removePost(flaggedPost) { + this.get('flaggedPosts').removeObject(flaggedPost); }, loadMore() { const flaggedPosts = this.get('flaggedPosts'); - return FlaggedPost.findAll(this.get('query'), flaggedPosts.length+1).then(data => { + return FlaggedPost.findAll({ + filter: this.get('query'), + offset: flaggedPosts.length+1 + }).then(data => { if (data.length===0) { flaggedPosts.set("allLoaded",true); } @@ -41,12 +22,5 @@ export default Ember.Component.extend({ }); }, - showAgreeFlagModal(flaggedPost) { - this._spawnModal('admin-agree-flag', flaggedPost, 'agree-flag-modal'); - }, - - showDeleteFlagModal(flaggedPost) { - this._spawnModal('admin-delete-flag', flaggedPost, 'delete-flag-modal'); - } } }); diff --git a/app/assets/javascripts/discourse/templates/components/d-button.hbs b/app/assets/javascripts/discourse/templates/components/d-button.hbs index d06d14e66df..755e4ea857f 100644 --- a/app/assets/javascripts/discourse/templates/components/d-button.hbs +++ b/app/assets/javascripts/discourse/templates/components/d-button.hbs @@ -3,7 +3,7 @@ {{/if}} {{#if translatedLabel}} - + {{/if}} {{yield}}