# frozen_string_literal: truerequire"icalendar"require"decidim/core"moduleDecidimmoduleMeetings# This is the engine that runs on the public interface of `decidim-meetings`.# It mostly handles rendering the created meeting associated to a participatory# process.classEngine<::Rails::Engineisolate_namespaceDecidim::Meetingsroutesdoresources:meetings,only: [:index,:show,:new,:create,:edit,:update,:withdraw]domemberdoput:withdrawendresources:meeting_closes,only: [:edit,:update]doget:proposals_picker,on: :collectionendresource:registration,only: [:create,:destroy]docollectiondoget:createget:decline_invitationget:join,action: :showpost:answerendendresources:versions,only: [:show,:index]resource:widget,only: :show,path: "embed"resource:live_event,only: :shownamespace:pollsdoresources:questions,only: [:index,:update]resources:answers,only: [:index,:create]endendrootto: "meetings#index"resource:calendar,only: [:show],format: :textdoresources:meetings,only: [:show],controller: :calendars,action: :meeting_calendarendendinitializer"decidim.content_processors"do|_app|Decidim.configuredo|config|config.content_processors+=[:meeting]endendinitializer"decidim_meetings.view_hooks"doDecidim.view_hooks.register(:participatory_space_highlighted_elements,priority: Decidim::ViewHooks::HIGH_PRIORITY)do|view_context|view_context.cell("decidim/meetings/highlighted_meetings",view_context.current_participatory_space)end# This view hook is used in card cells. It renders the next upcoming# meeting for the given participatory space.Decidim.view_hooks.register(:upcoming_meeting_for_card,priority: Decidim::ViewHooks::LOW_PRIORITY)do|view_context|published_components=Decidim::Component.where(participatory_space: view_context.current_participatory_space).publishedupcoming_meeting=Decidim::Meetings::Meeting.where(component: published_components).published.upcoming.order(:start_time,:end_time).firstnextunlessupcoming_meetingview_context.render(partial: "decidim/participatory_spaces/upcoming_meeting_for_card.html",locals: {upcoming_meeting: upcoming_meeting})endDecidim.view_hooks.register(:conference_venues,priority: Decidim::ViewHooks::HIGH_PRIORITY)do|view_context|published_components=Decidim::Component.where(participatory_space: view_context.current_participatory_space).publishedmeetings=Decidim::Meetings::Meeting.visible.not_hidden.published.where(component: published_components).group_by(&:address)meetings_geocoded=Decidim::Meetings::Meeting.visible.not_hidden.published.where(component: published_components).geocodednextunlessmeetings.any?view_context.render(partial: "decidim/participatory_spaces/conference_venues",locals: {meetings: meetings,meetings_geocoded: meetings_geocoded})endendinitializer"decidim_meetings.add_cells_view_paths"doCell::ViewModel.view_paths<<File.expand_path("#{Decidim::Meetings::Engine.root}/app/cells")Cell::ViewModel.view_paths<<File.expand_path("#{Decidim::Meetings::Engine.root}/app/views")# for partialsendinitializer"decidim_meetings.attended_meetings_badge"doDecidim::Gamification.register_badge(:attended_meetings)do|badge|badge.levels=[1,3,5,10,30]badge.reset=lambdado|user|Decidim::Meetings::Registration.where(user: user).countendendendinitializer"decidim_meetings.register_metrics"doDecidim.metrics_registry.register(:meetings)do|metric_registry|metric_registry.manager_class="Decidim::Meetings::Metrics::MeetingsMetricManage"metric_registry.settingsdo|settings|settings.attribute:highlighted,type: :boolean,default: falsesettings.attribute:scopes,type: :array,default: %w(home participatory_process)settings.attribute:weight,type: :integer,default: 5settings.attribute:stat_block,type: :string,default: "small"endendDecidim.metrics_operation.register(:followers,:meetings)do|metric_operation|metric_operation.manager_class="Decidim::Meetings::Metrics::MeetingFollowersMetricMeasure"endendinitializer"decidim_meetings.webpacker.assets_path"doDecidim.register_assets_pathFile.expand_path("app/packs",root)endinitializer"decidim_meetings.notification_settings"doDecidim.notification_settings(:close_meeting_reminder){|ns|ns.settings_area=:administrators}endinitializer"decidim_meetings.register_reminders"doDecidim.reminders_registry.register(:close_meeting)do|reminder_registry|reminder_registry.generator_class_name="Decidim::Meetings::CloseMeetingReminderGenerator"reminder_registry.settingsdo|settings|settings.attribute:reminder_times,type: :array,default: [3.days,7.days]endendendendendend