2013-02-05 14:16:51 -05:00
require_dependency 'post_creator'
class PostsController < ApplicationController
# Need to be logged in for all actions here
before_filter :ensure_logged_in , except : [ :show , :replies , :by_number ]
def create
requires_parameter ( :post )
post_creator = PostCreator . new ( current_user ,
raw : params [ :post ] [ :raw ] ,
topic_id : params [ :post ] [ :topic_id ] ,
title : params [ :title ] ,
archetype : params [ :archetype ] ,
category : params [ :post ] [ :category ] ,
target_usernames : params [ :target_usernames ] ,
reply_to_post_number : params [ :post ] [ :reply_to_post_number ] ,
image_sizes : params [ :image_sizes ] ,
meta_data : params [ :meta_data ] )
post = post_creator . create
if post_creator . errors . present?
render_json_error ( post_creator )
else
post_serializer = PostSerializer . new ( post , scope : guardian , root : false )
post_serializer . topic_slug = post . topic . slug if post . topic . present?
post_serializer . draft_sequence = DraftSequence . current ( current_user , post . topic . draft_key )
render_json_dump ( post_serializer )
end
end
def update
requires_parameter ( :post )
2013-02-07 16:45:24 +01:00
2013-02-05 14:16:51 -05:00
@post = Post . where ( id : params [ :id ] ) . first
@post . image_sizes = params [ :image_sizes ] if params [ :image_sizes ] . present?
guardian . ensure_can_edit! ( @post )
if @post . revise ( current_user , params [ :post ] [ :raw ] )
TopicLink . extract_from ( @post )
end
if @post . errors . present?
render_json_error ( @post )
return
end
post_serializer = PostSerializer . new ( @post , scope : guardian , root : false )
post_serializer . draft_sequence = DraftSequence . current ( current_user , @post . topic . draft_key )
link_counts = TopicLinkClick . counts_for ( @post . topic , [ @post ] )
post_serializer . single_post_link_counts = link_counts [ @post . id ] if link_counts . present?
render_json_dump ( post_serializer )
end
def by_number
@post = Post . where ( topic_id : params [ :topic_id ] , post_number : params [ :post_number ] ) . first
2013-02-07 16:45:24 +01:00
guardian . ensure_can_see! ( @post )
2013-02-05 14:16:51 -05:00
@post . revert_to ( params [ :version ] . to_i ) if params [ :version ] . present?
post_serializer = PostSerializer . new ( @post , scope : guardian , root : false )
post_serializer . add_raw = true
render_json_dump ( post_serializer )
end
def show
2013-02-08 17:49:15 -05:00
@post = find_post_from_params
2013-02-05 14:16:51 -05:00
@post . revert_to ( params [ :version ] . to_i ) if params [ :version ] . present?
post_serializer = PostSerializer . new ( @post , scope : guardian , root : false )
post_serializer . add_raw = true
render_json_dump ( post_serializer )
end
def destroy
2013-02-08 17:49:15 -05:00
post = find_post_from_params
2013-02-07 15:12:55 -05:00
guardian . ensure_can_delete! ( post )
post . delete_by ( current_user )
render nothing : true
end
def recover
2013-02-08 17:49:15 -05:00
post = find_post_from_params
2013-02-07 15:12:55 -05:00
guardian . ensure_can_recover_post! ( post )
post . recover
2013-02-05 14:16:51 -05:00
render nothing : true
end
def destroy_many
requires_parameters ( :post_ids )
posts = Post . where ( id : params [ :post_ids ] )
raise Discourse :: InvalidParameters . new ( :post_ids ) if posts . blank?
# Make sure we can delete the posts
posts . each { | p | guardian . ensure_can_delete! ( p ) }
Post . transaction do
topic_id = posts . first . topic_id
posts . each { | p | p . destroy }
Topic . reset_highest ( topic_id )
end
render nothing : true
end
# Retrieves a list of versions and who made them for a post
def versions
2013-02-08 17:49:15 -05:00
post = find_post_from_params
2013-02-05 14:16:51 -05:00
render_serialized ( post . all_versions , VersionSerializer )
end
# Direct replies to this post
def replies
2013-02-08 17:49:15 -05:00
post = find_post_from_params
2013-02-05 14:16:51 -05:00
render_serialized ( post . replies , PostSerializer )
end
2013-02-14 12:10:53 -05:00
# Returns the "you're creating a post education"
def education_text
end
2013-02-05 14:16:51 -05:00
def bookmark
2013-02-08 17:49:15 -05:00
post = find_post_from_params
2013-02-07 16:45:24 +01:00
if current_user
2013-02-05 14:16:51 -05:00
if params [ :bookmarked ] == " true "
PostAction . act ( current_user , post , PostActionType . Types [ :bookmark ] )
else
PostAction . remove_act ( current_user , post , PostActionType . Types [ :bookmark ] )
end
end
render :nothing = > true
end
2013-02-08 17:49:15 -05:00
protected
def find_post_from_params
finder = Post . where ( id : params [ :id ] || params [ :post_id ] )
# Include deleted posts if the user is a moderator
finder = finder . with_deleted if current_user . try ( :has_trust_level? , :moderator )
2013-02-08 19:04:14 -05:00
post = finder . first
guardian . ensure_can_see! ( post )
post
2013-02-08 17:49:15 -05:00
end
2013-02-05 14:16:51 -05:00
end