app/controllers/decidim/meetings/meetings_controller.rb in decidim-meetings-0.22.0 vs app/controllers/decidim/meetings/meetings_controller.rb in decidim-meetings-0.23.0
- old
+ new
@@ -3,69 +3,132 @@
module Decidim
module Meetings
# Exposes the meeting resource so users can view them
class MeetingsController < Decidim::Meetings::ApplicationController
include FilterResource
+ include Flaggable
+ include FormFactory
include Paginable
helper Decidim::WidgetUrlsHelper
+ helper Decidim::ResourceVersionsHelper
helper_method :meetings, :meeting, :registration, :search
+ def new
+ enforce_permission_to :create, :meeting
+
+ @form = meeting_form.instance
+ end
+
+ def create
+ enforce_permission_to :create, :meeting
+
+ @form = meeting_form.from_params(params, current_component: current_component)
+
+ CreateMeeting.call(@form) do
+ on(:ok) do |meeting|
+ flash[:notice] = I18n.t("meetings.create.success", scope: "decidim.meetings")
+ redirect_to meeting_path(meeting)
+ end
+
+ on(:invalid) do
+ flash.now[:alert] = I18n.t("meetings.create.invalid", scope: "decidim.meetings")
+ render action: "new"
+ end
+ end
+ end
+
def index
- return unless search.results.blank? && params.dig("filter", "date") != "past"
+ return unless search.results.blank? && params.dig("filter", "date") != %w(past)
- @past_meetings = search_klass.new(search_params.merge(date: "past"))
+ @past_meetings = search_klass.new(search_params.merge(date: %w(past)))
if @past_meetings.results.present?
params[:filter] ||= {}
- params[:filter][:date] = "past"
+ params[:filter][:date] = %w(past)
@forced_past_meetings = true
@search = @past_meetings
end
end
def show
+ raise ActionController::RoutingError, "Not Found" unless meeting
+
+ @report_form = form(Decidim::ReportForm).from_params(reason: "spam")
+
return if meeting.current_user_can_visit_meeting?(current_user)
flash[:alert] = I18n.t("meeting.not_allowed", scope: "decidim.meetings")
redirect_to action: "index"
end
+ def edit
+ enforce_permission_to :update, :meeting, meeting: meeting
+
+ @form = meeting_form.from_model(meeting)
+ end
+
+ def update
+ enforce_permission_to :update, :meeting, meeting: meeting
+
+ @form = meeting_form.from_params(params)
+
+ UpdateMeeting.call(@form, current_user, meeting) do
+ on(:ok) do |meeting|
+ flash[:notice] = I18n.t("meetings.update.success", scope: "decidim.meetings")
+ redirect_to Decidim::ResourceLocatorPresenter.new(meeting).path
+ end
+
+ on(:invalid) do
+ flash.now[:alert] = I18n.t("meetings.update.invalid", scope: "decidim.meetings")
+ render :edit
+ end
+ end
+ end
+
private
def meeting
- @meeting ||= Meeting.where(component: current_component).find(params[:id])
+ @meeting ||= Meeting.not_hidden.where(component: current_component).find(params[:id])
end
def meetings
- @meetings ||= paginate(search.results)
+ @meetings ||= paginate(search.results.not_hidden)
end
def registration
@registration ||= meeting.registrations.find_by(user: current_user)
end
def search_klass
MeetingSearch
end
+ def meeting_form
+ form(Decidim::Meetings::MeetingForm)
+ end
+
def default_filter_params
{
- date: "upcoming",
search_text: "",
- scope_id: "",
- category_id: ""
+ date: %w(upcoming),
+ scope_id: default_filter_scope_params,
+ category_id: default_filter_category_params,
+ origin: default_filter_origin_params
}
end
+ def default_filter_origin_params
+ filter_origin_params = %w(citizens)
+ filter_origin_params << "official"
+ filter_origin_params << "user_group" if current_organization.user_groups_enabled?
+ filter_origin_params
+ end
+
def default_search_params
{
scope: Meeting.visible_meeting_for(current_user)
}
- end
-
- def context_params
- { component: current_component, organization: current_organization }
end
end
end
end