FEATURE: add 'rebake post' in post wrench menu

This commit is contained in:
Régis Hanol 2014-09-11 16:04:40 +02:00
parent 6ca5a9b82c
commit e56fcf0c43
9 changed files with 90 additions and 2 deletions

View File

@ -393,6 +393,10 @@ export default ObjectController.extend(Discourse.SelectedPostsCount, {
} else {
post.set("post_type", moderator);
}
},
rebakePost: function (post) {
post.rebake();
}
},

View File

@ -400,6 +400,10 @@ Discourse.Post = Discourse.Model.extend({
cooked_hidden: false
});
});
},
rebake: function () {
return Discourse.ajax("/posts/" + this.get("id") + "/rebake", { type: "PUT" });
}
});

View File

@ -284,11 +284,15 @@ export default Discourse.View.extend({
postTypeIcon = '<i class="fa fa-shield"></i>',
postTypeText = isModerator ? I18n.t('post.controls.revert_to_regular') : I18n.t('post.controls.convert_to_moderator');
var rebakePostIcon = '<i class="fa fa-cog"></i>',
rebakePostText = I18n.t('post.controls.rebake');
var html = '<div class="post-admin-menu">' +
'<h3>' + I18n.t('admin_title') + '</h3>' +
'<ul>' +
'<li class="btn btn-admin" data-action="toggleWiki">' + wikiIcon + wikiText + '</li>' +
'<li class="btn btn-admin" data-action="togglePostType">' + postTypeIcon + postTypeText + '</li>' +
'<li class="btn btn-admin" data-action="rebakePost">' + rebakePostIcon + rebakePostText + '</li>' +
'</ul>' +
'</div>';
@ -309,6 +313,10 @@ export default Discourse.View.extend({
this.get("controller").send("togglePostType", this.get("post"));
},
clickRebakePost: function () {
this.get("controller").send("rebakePost", this.get("post"));
},
buttonForShowMoreActions: function() {
return new Button('showMoreActions', 'show_more', 'ellipsis-h');
},

View File

@ -54,7 +54,7 @@ Discourse.PostView = Discourse.GroupedView.extend(Ember.Evented, {
}
var $adminMenu = this.get('adminMenu');
if ($adminMenu && !$(e.target).is($adminMenu) && $adminMenu.has($(e.target)).length === 0) {
if ($adminMenu && !$(e.target).is($adminMenu)) {
$adminMenu.hide();
this.set('adminMenu', null);
}

View File

@ -252,6 +252,15 @@ class PostsController < ApplicationController
render nothing: true
end
def rebake
guardian.ensure_can_rebake!
post = find_post_from_params
post.rebake!(invalidate_oneboxes: true)
render nothing: true
end
def flagged_posts
params.permit(:offset, :limit)
guardian.ensure_can_see_flagged_posts!

View File

@ -1111,6 +1111,7 @@ en:
unwiki: "Unwiki post"
revert_to_regular: "Regular post"
convert_to_moderator: "Staff post"
rebake: "Rebake post"
actions:
flag: 'Flag'

View File

@ -264,6 +264,7 @@ Discourse::Application.routes.draw do
put "bookmark"
put "wiki"
put "post_type"
put "rebake"
get "replies"
get "revisions/:revision" => "posts#revisions"
put "recover"

View File

@ -169,6 +169,10 @@ module PostGuardian
is_staff?
end
def can_rebake?
is_staff?
end
def can_see_flagged_posts?
is_staff?
end

View File

@ -327,7 +327,7 @@ describe PostsController do
let(:user) {log_in}
let(:post) {Fabricate(:post, user: user)}
it "raises an error if the user doesn't have permission to see the post" do
it "raises an error if the user doesn't have permission to wiki the post" do
Guardian.any_instance.expects(:can_wiki?).returns(false)
xhr :put, :wiki, post_id: post.id, wiki: 'true'
@ -358,6 +358,63 @@ describe PostsController do
end
describe "post_type" do
include_examples "action requires login", :put, :post_type, post_id: 2
describe "when logged in" do
let(:user) {log_in}
let(:post) {Fabricate(:post, user: user)}
it "raises an error if the user doesn't have permission to change the post type" do
Guardian.any_instance.expects(:can_change_post_type?).returns(false)
xhr :put, :post_type, post_id: post.id, post_type: 2
response.should be_forbidden
end
it "can change the post type" do
Guardian.any_instance.expects(:can_change_post_type?).returns(true)
xhr :put, :post_type, post_id: post.id, post_type: 2
post.reload
post.post_type.should == 2
end
end
end
describe "rebake" do
include_examples "action requires login", :put, :rebake, post_id: 2
describe "when logged in" do
let(:user) {log_in}
let(:post) {Fabricate(:post, user: user)}
it "raises an error if the user doesn't have permission to rebake the post" do
Guardian.any_instance.expects(:can_rebake?).returns(false)
xhr :put, :rebake, post_id: post.id
response.should be_forbidden
end
it "can rebake the post" do
Guardian.any_instance.expects(:can_rebake?).returns(true)
xhr :put, :rebake, post_id: post.id
response.should be_success
end
end
end
describe 'creating a post' do
include_examples 'action requires login', :post, :create