Update the destination category id when a user changes it
This commit is contained in:
parent
6e4b8901ce
commit
38af67eb73
|
@ -1,4 +1,5 @@
|
|||
import computed from 'ember-addons/ember-computed-decorators';
|
||||
import { ajax } from 'discourse/lib/ajax';
|
||||
|
||||
export default Ember.Component.extend({
|
||||
tagName: '',
|
||||
|
@ -11,8 +12,14 @@ export default Ember.Component.extend({
|
|||
},
|
||||
|
||||
actions: {
|
||||
publish() {
|
||||
updateDestinationCategory(category) {
|
||||
ajax(`/t/${this.get('topic.id')}/shared-draft`, {
|
||||
method: 'PUT',
|
||||
data: { category_id: category.get('id') }
|
||||
});
|
||||
},
|
||||
|
||||
publish() {
|
||||
bootbox.confirm(I18n.t('shared_drafts.confirm_publish'), result => {
|
||||
if (result) {
|
||||
this.set('publishing', true);
|
||||
|
|
|
@ -6,7 +6,9 @@
|
|||
|
||||
<div class='publish-field'>
|
||||
<label>{{i18n "shared_drafts.destination_category"}}</label>
|
||||
{{category-chooser value=topic.destination_category_id}}
|
||||
{{category-chooser
|
||||
value=topic.destination_category_id
|
||||
onChooseCategory=(action "updateDestinationCategory")}}
|
||||
</div>
|
||||
|
||||
<div class='publish-field'>
|
||||
|
|
|
@ -98,6 +98,12 @@ export default ComboBoxComponent.extend({
|
|||
this.appEvents.off("composer:resized");
|
||||
},
|
||||
|
||||
didSelect(computedContentItem) {
|
||||
if (this.attrs.onChooseCategory) {
|
||||
this.attrs.onChooseCategory(computedContentItem.originalContent);
|
||||
}
|
||||
},
|
||||
|
||||
computeContent() {
|
||||
const categories = Discourse.SiteSettings.fixed_category_positions_on_create ?
|
||||
Category.list() :
|
||||
|
|
|
@ -11,6 +11,7 @@ class TopicsController < ApplicationController
|
|||
:timings,
|
||||
:destroy_timings,
|
||||
:update,
|
||||
:update_shared_draft,
|
||||
:destroy,
|
||||
:recover,
|
||||
:status,
|
||||
|
@ -236,6 +237,17 @@ class TopicsController < ApplicationController
|
|||
render body: nil
|
||||
end
|
||||
|
||||
def update_shared_draft
|
||||
topic = Topic.find_by(id: params[:id])
|
||||
guardian.ensure_can_edit!(topic)
|
||||
guardian.ensure_can_create_shared_draft!
|
||||
raise Discourse::NotFound unless topic.shared_draft.present?
|
||||
|
||||
SharedDraft.where(topic_id: topic.id).update_all(category_id: params[:category_id].to_i)
|
||||
|
||||
render json: success_json
|
||||
end
|
||||
|
||||
def update
|
||||
topic = Topic.find_by(id: params[:topic_id])
|
||||
guardian.ensure_can_edit!(topic)
|
||||
|
|
|
@ -599,6 +599,7 @@ Discourse::Application.routes.draw do
|
|||
put "t/:id/move-to-inbox" => "topics#move_to_inbox"
|
||||
put "t/:id/convert-topic/:type" => "topics#convert_topic"
|
||||
put "t/:id/publish" => "topics#publish"
|
||||
put "t/:id/shared-draft" => "topics#update_shared_draft"
|
||||
put "topics/bulk"
|
||||
put "topics/reset-new" => 'topics#reset_new'
|
||||
post "topics/timings"
|
||||
|
|
|
@ -464,6 +464,36 @@ RSpec.describe TopicsController do
|
|||
SiteSetting.shared_drafts_category = shared_drafts_category.id
|
||||
end
|
||||
|
||||
describe "#update_shared_draft" do
|
||||
let(:category) { Fabricate(:category) }
|
||||
let(:other_cat) { Fabricate(:category) }
|
||||
let(:topic) { Fabricate(:topic, category: shared_drafts_category, visible: false) }
|
||||
let!(:shared_draft) { Fabricate(:shared_draft, topic: topic, category: category) }
|
||||
let(:moderator) { Fabricate(:moderator) }
|
||||
|
||||
context "anonymous" do
|
||||
it "doesn't allow staff to update the shared draft" do
|
||||
put "/t/#{topic.id}/shared-draft.json", params: { category_id: other_cat.id }
|
||||
expect(response.code.to_i).to eq(403)
|
||||
topic.reload
|
||||
expect(topic.shared_draft.category_id).to eq(category.id)
|
||||
end
|
||||
end
|
||||
|
||||
context "as a moderator" do
|
||||
before do
|
||||
sign_in(moderator)
|
||||
end
|
||||
|
||||
it "allows staff to update the category id" do
|
||||
put "/t/#{topic.id}/shared-draft.json", params: { category_id: other_cat.id }
|
||||
expect(response).to be_success
|
||||
topic.reload
|
||||
expect(topic.shared_draft.category_id).to eq(other_cat.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#publish" do
|
||||
let(:category) { Fabricate(:category) }
|
||||
let(:topic) { Fabricate(:topic, category: shared_drafts_category, visible: false) }
|
||||
|
|
Loading…
Reference in New Issue