mirror of
https://github.com/neocities/neocities.git
synced 2025-04-24 17:22:35 +02:00
94 lines
2.3 KiB
Ruby
94 lines
2.3 KiB
Ruby
# frozen_string_literal: true
|
|
class Event < Sequel::Model
|
|
include Sequel::ParanoidDelete
|
|
|
|
many_to_one :site
|
|
many_to_one :follow
|
|
many_to_one :tip
|
|
one_to_one :tag
|
|
many_to_one :site_change
|
|
many_to_one :profile_comment
|
|
one_to_many :likes
|
|
one_to_many :comments, order: :created_at
|
|
many_to_one :site
|
|
many_to_one :actioning_site, key: :actioning_site_id, class: :Site
|
|
|
|
PAGINATION_LENGTH = 10
|
|
GLOBAL_PAGINATION_LENGTH = 20
|
|
GLOBAL_SCORE_LIMIT = 2
|
|
ACTIVITY_TAG_SCORE_LIMIT = 0.2
|
|
|
|
def undeleted_comments_count
|
|
comments_dataset.exclude(is_deleted: true).count
|
|
end
|
|
|
|
def undeleted_comments(exclude_ids=nil)
|
|
ds = comments_dataset.exclude(is_deleted: true).order(:created_at)
|
|
if exclude_ids
|
|
ds = ds.exclude actioning_site_id: exclude_ids
|
|
end
|
|
ds.all
|
|
end
|
|
|
|
def self.news_feed_default_dataset
|
|
select(:events.*).
|
|
left_join(:sites, id: :site_id).
|
|
left_join(Sequel[:sites].as(:actioning_sites), id: :events__actioning_site_id).
|
|
exclude(sites__is_deleted: true).
|
|
exclude(actioning_sites__is_deleted: true).
|
|
exclude(events__is_deleted: true).
|
|
where(follow_id: nil).
|
|
order(:events__created_at.desc)
|
|
end
|
|
|
|
def created_by?(site)
|
|
return true if actioning_site_id == site.id
|
|
false
|
|
end
|
|
|
|
def liking_site_titles
|
|
likes_dataset.select(:actioning_site_id).all.collect do |like|
|
|
like.actioning_site_dataset.select(:domain,:title,:username).first.title
|
|
end
|
|
end
|
|
|
|
def liking_site_usernames
|
|
likes_dataset.select(:actioning_site_id).all.collect do |like|
|
|
like.actioning_site_dataset.select(:username).first.username
|
|
end
|
|
end
|
|
|
|
def add_site_comment(site, message)
|
|
add_comment actioning_site_id: site.id, message: message
|
|
end
|
|
|
|
def site_likes?(site)
|
|
likes_dataset.filter(actioning_site_id: site.id).count > 0
|
|
end
|
|
|
|
def site_like(site)
|
|
add_like actioning_site_id: site.id
|
|
end
|
|
|
|
def site_unlike(site)
|
|
likes_dataset.filter(actioning_site_id: site.id).delete
|
|
end
|
|
|
|
def toggle_site_like(site)
|
|
if site_likes? site
|
|
site_unlike site
|
|
false
|
|
else
|
|
site_like site
|
|
true
|
|
end
|
|
end
|
|
|
|
def name
|
|
return 'follow' if follow_id
|
|
return 'tip' if tip_id
|
|
return 'tag' if tag_id
|
|
return 'site change' if site_change_id
|
|
return 'comment' if profile_comment_id
|
|
end
|
|
end
|