From af2c6fd85e13139be3e3b2329a51c3a35acb3c40 Mon Sep 17 00:00:00 2001 From: erdgeist Date: Wed, 5 Aug 2026 23:56:56 +0200 Subject: Search assets and events, and order events by when they happen --- app/models/asset.rb | 14 ++++++++++++++ app/models/event.rb | 18 ++++++++++++++++++ 2 files changed, 32 insertions(+) (limited to 'app/models') diff --git a/app/models/asset.rb b/app/models/asset.rb index b256b929..4d43b18f 100644 --- a/app/models/asset.rb +++ b/app/models/asset.rb @@ -82,4 +82,18 @@ class Asset < ApplicationRecord destroy! end end + + def self.editor_search(term) + words = term.to_s.split(/\s+/).reject(&:blank?) + return none if words.empty? + + words.inject(all) do |scope, word| + like = "%#{sanitize_sql_like(word)}%" + scope.where( + "assets.name ILIKE :t OR assets.creator ILIKE :t OR " \ + "assets.upload_file_name ILIKE :t OR assets.source_url ILIKE :t OR " \ + "assets.upload_content_type ILIKE :t", :t => like + ) + end + end end diff --git a/app/models/event.rb b/app/models/event.rb index 792ab448..e7823617 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -54,6 +54,24 @@ class Event < ApplicationRecord destroyed end + def self.editor_search(term) + words = term.to_s.split(/\s+/).reject(&:blank?) + return none if words.empty? + + words.inject(all) do |scope, word| + like = "%#{sanitize_sql_like(word)}%" + tagged = ActsAsTaggableOn::Tagging + .where(:taggable_type => base_class.name) + .joins(:tag).where("tags.name ILIKE ?", like) + .select(:taggable_id) + scope.where( + "events.title ILIKE :t OR events.description ILIKE :t OR " \ + "events.location ILIKE :t OR events.url ILIKE :t OR " \ + "events.id IN (:tagged)", :t => like, :tagged => tagged + ) + end + end + private def generate_occurrences Occurrence.generate self -- cgit v1.3