Class: Decidim::Comments::CommentsController

Inherits:
ApplicationController show all
Includes:
ResourceHelper, SkipTimeoutable
Defined in:
decidim-comments/app/controllers/decidim/comments/comments_controller.rb

Overview

Controller that manages the comments for a commentable object.

Instance Method Summary collapse

Methods included from ResourceHelper

#linked_classes_filter_values_for, #linked_classes_for, #resource_locator, #resource_title

Methods inherited from ApplicationController

#permission_class_chain

Methods included from UserBlockedChecker

#check_user_block_status, #check_user_not_blocked

Methods included from NeedsSnippets

#snippets

Methods included from Headers::HttpCachingDisabler

#disable_http_caching

Methods included from HasStoredPath

#skip_store_location?, #store_current_location

Methods included from RegistersPermissions

register_permissions

Methods included from NeedsOrganization

enhance_controller, extended, included

Instance Method Details

#createObject



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'decidim-comments/app/controllers/decidim/comments/comments_controller.rb', line 74

def create
  enforce_permission_to(:create, :comment, commentable:)

  form = Decidim::Comments::CommentForm.from_params(
    params.merge(commentable:)
  ).with_context(
    current_organization:,
    current_component:
  )
  Decidim::Comments::CreateComment.call(form, current_user) do
    on(:ok) do |comment|
      handle_success(comment)
      respond_to do |format|
        format.js { render :create }
      end
    end

    on(:invalid) do
      @error = t("create.error", scope: "decidim.comments.comments")
      respond_to do |format|
        format.js { render :error }
      end
    end
  end
end

#current_componentObject



100
101
102
103
104
# File 'decidim-comments/app/controllers/decidim/comments/comments_controller.rb', line 100

def current_component
  return commentable.component if commentable.respond_to?(:component)
  return commentable.participatory_space if commentable.respond_to?(:participatory_space)
  return commentable if Decidim.participatory_space_manifests.find { |manifest| manifest.model_class_name == commentable.class.name }
end

#destroyObject



106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'decidim-comments/app/controllers/decidim/comments/comments_controller.rb', line 106

def destroy
  set_comment
  @commentable = @comment.commentable

  enforce_permission_to(:destroy, :comment, comment:)

  Decidim::Comments::DeleteComment.call(comment, current_user) do
    on(:ok) do
      @comments_count = @comment.root_commentable.comments_count
      respond_to do |format|
        format.js { render :delete }
      end
    end

    on(:invalid) do
      respond_to do |format|
        format.js { render :deletion_error }
      end
    end
  end
end

#indexObject



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'decidim-comments/app/controllers/decidim/comments/comments_controller.rb', line 18

def index
  enforce_permission_to(:read, :comment, commentable:)

  @comments = SortedComments.for(
    commentable,
    order_by: order,
    after: params.fetch(:after, 0).to_i
  )
  @comments = @comments.reject do |comment|
    next if comment.depth < 1
    next if !comment.deleted? && !comment.hidden?

    comment.commentable.descendants.where(decidim_commentable_type: "Decidim::Comments::Comment").not_hidden.not_deleted.blank?
  end
  @comments_count = commentable.comments_count

  respond_to do |format|
    format.js do
      if reload?
        render :reload
      else
        render :index
      end
    end

    # This makes sure bots are not causing unnecessary log entries.
    format.html { redirect_to commentable_path }
  end
end

#updateObject



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'decidim-comments/app/controllers/decidim/comments/comments_controller.rb', line 48

def update
  set_comment
  set_commentable
  enforce_permission_to(:update, :comment, comment:)

  form = Decidim::Comments::CommentForm.from_params(
    params.merge(commentable: comment.commentable)
  ).with_context(
    current_organization:
  )

  Decidim::Comments::UpdateComment.call(comment, current_user, form) do
    on(:ok) do
      respond_to do |format|
        format.js { render :update }
      end
    end

    on(:invalid) do
      respond_to do |format|
        format.js { render :update_error }
      end
    end
  end
end