Skip to content

Commit

Permalink
add admin tools
Browse files Browse the repository at this point in the history
  • Loading branch information
adrienpoly committed Aug 13, 2024
1 parent c8b40ed commit 00677b2
Show file tree
Hide file tree
Showing 7 changed files with 62 additions and 0 deletions.
28 changes: 28 additions & 0 deletions app/avo/actions/merge_speaker_into.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
class Avo::Actions::MergeSpeakerInto < Avo::BaseAction
self.name = "Merge Speaker Into"
self.visible = -> do
view == :show
end
self.message = "Are you sure you want to merge this speaker into the selected reciepient speaker. It will transfer all talks to the recipient speaker and delete this speaker"
self.confirm_button_label = "Merge and destroy speaker"
self.cancel_button_label = "Not yet"

def fields
field :speaker_id, as: :select, name: "Recipient speaker",
help: "The ID of the speaker to merge into",
options: -> { Speaker.order(:name).pluck(:name, :id) }
end

def handle(query:, fields:, current_user:, resource:, **args)
recipient_speaker = Speaker.find(fields[:speaker_id])
speaker_to_merge = query.first

speaker_to_merge.talks.each do |talk|
SpeakerTalk.find_or_create_by!(speaker: recipient_speaker, talk: talk)
end

speaker_to_merge.talks.destroy_all
speaker_to_merge.destroy
redirect_to avo.resources_speaker_path(recipient_speaker), allow_other_host: true, status: 303
end
end
8 changes: 8 additions & 0 deletions app/avo/filters/name.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
class Avo::Filters::Name < Avo::Filters::TextFilter
self.name = "Name"
self.button_label = "Filter by name (contains)"

def apply(request, query, value)
query.where("name LIKE ?", "%#{value}%")
end
end
8 changes: 8 additions & 0 deletions app/avo/filters/slug.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
class Avo::Filters::Slug < Avo::Filters::TextFilter
self.name = "Slug"
self.button_label = "Filter by slug (contains)"

def apply(request, query, value)
query.where("slug LIKE ?", "%#{value}%")
end
end
8 changes: 8 additions & 0 deletions app/avo/filters/title.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
class Avo::Filters::Title < Avo::Filters::TextFilter
self.name = "Title"
self.button_label = "Filter by title (contains)"

def apply(request, query, value)
query.where("title LIKE ?", "%#{value}%")
end
end
5 changes: 5 additions & 0 deletions app/avo/resources/organisation.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,9 @@ def fields
field :events, as: :has_many
field :talks, as: :has_many, through: :events
end

def filters
filter Avo::Filters::Name
filter Avo::Filters::Slug
end
end
3 changes: 3 additions & 0 deletions app/avo/resources/speaker.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,13 @@ def fields
end

def filters
filter Avo::Filters::Name
filter Avo::Filters::Slug
filter Avo::Filters::Github
end

def actions
action Avo::Actions::SpeakerGithub
action Avo::Actions::MergeSpeakerInto
end
end
2 changes: 2 additions & 0 deletions app/avo/resources/talk.rb
Original file line number Diff line number Diff line change
Expand Up @@ -55,5 +55,7 @@ def filters
filter Avo::Filters::RawTranscript
filter Avo::Filters::EnhancedTranscript
filter Avo::Filters::Summary
filter Avo::Filters::Title
filter Avo::Filters::Slug
end
end

0 comments on commit 00677b2

Please sign in to comment.