diff options
| author | erdgeist <erdgeist@erdgeist.org> | 2026-07-13 23:33:11 +0200 |
|---|---|---|
| committer | erdgeist <erdgeist@erdgeist.org> | 2026-07-13 23:33:11 +0200 |
| commit | 8eab68f2c5a3c126e2fec2ecdfa7ace87ce0937b (patch) | |
| tree | f446ebc26a7707c7b64a937aa51a155df146c80a /app/models/occurrence.rb | |
| parent | 42714c697273a7117c6b355fab26c8c35e336ad1 (diff) | |
| parent | cdf5d9941ca866d437612d2f863eac6eb0b3db12 (diff) | |
Merge branch 'erdgeist-revive-events'
Diffstat (limited to 'app/models/occurrence.rb')
| -rw-r--r-- | app/models/occurrence.rb | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/app/models/occurrence.rb b/app/models/occurrence.rb index 3baf447..c6a2380 100644 --- a/app/models/occurrence.rb +++ b/app/models/occurrence.rb | |||
| @@ -1,19 +1,19 @@ | |||
| 1 | # TODO Make a gem out of the c wrapper | ||
| 2 | require 'chaos_calendar' | 1 | require 'chaos_calendar' |
| 3 | 2 | ||
| 4 | class Occurrence < ApplicationRecord | 3 | class Occurrence < ApplicationRecord |
| 5 | 4 | ||
| 6 | # Associations | 5 | # Associations |
| 7 | 6 | ||
| 8 | belongs_to :node | 7 | belongs_to :node, optional: true |
| 9 | belongs_to :event | 8 | belongs_to :event |
| 10 | 9 | ||
| 11 | # Class Methods | 10 | # Class Methods |
| 12 | 11 | ||
| 13 | def self.find_in_range start_time, end_time | 12 | def self.find_in_range start_time, end_time |
| 14 | includes(:node) | 13 | joins(:event) |
| 15 | .where("start_time > ? AND end_time < ?", start_time, end_time) | 14 | .includes(:node) |
| 16 | .order("start_time") | 15 | .where("occurrences.start_time > ? AND occurrences.end_time < ?", start_time, end_time) |
| 16 | .order("occurrences.start_time") | ||
| 17 | end | 17 | end |
| 18 | 18 | ||
| 19 | def self.find_next | 19 | def self.find_next |
| @@ -27,6 +27,7 @@ class Occurrence < ApplicationRecord | |||
| 27 | # event are then calculated and created. | 27 | # event are then calculated and created. |
| 28 | def self.generate event | 28 | def self.generate event |
| 29 | self.where(:event_id => event.id).delete_all | 29 | self.where(:event_id => event.id).delete_all |
| 30 | return if event.start_time.nil? | ||
| 30 | 31 | ||
| 31 | node = event.node | 32 | node = event.node |
| 32 | duration = (event.end_time - event.start_time) | 33 | duration = (event.end_time - event.start_time) |
| @@ -36,7 +37,7 @@ class Occurrence < ApplicationRecord | |||
| 36 | self.create( | 37 | self.create( |
| 37 | :start_time => occurrence, | 38 | :start_time => occurrence, |
| 38 | :end_time => (occurrence + duration), | 39 | :end_time => (occurrence + duration), |
| 39 | :node_id => node.id, | 40 | :node_id => node&.id, |
| 40 | :event_id => event.id | 41 | :event_id => event.id |
| 41 | ) | 42 | ) |
| 42 | end | 43 | end |
| @@ -49,10 +50,11 @@ class Occurrence < ApplicationRecord | |||
| 49 | # Return value is always an array of Time objects. | 50 | # Return value is always an array of Time objects. |
| 50 | def self.generate_dates event | 51 | def self.generate_dates event |
| 51 | if event.rrule && !event.rrule.empty? | 52 | if event.rrule && !event.rrule.empty? |
| 52 | ChaosCalendar::occurrences( | 53 | ChaosCalendar::occurrences_for_timezone( |
| 53 | event.start_time, | 54 | event.start_time, |
| 54 | (Time.now + 5.years), | 55 | (Time.now + 5.years), |
| 55 | event.rrule | 56 | event.rrule, |
| 57 | Time.zone.tzinfo.identifier | ||
| 56 | ) | 58 | ) |
| 57 | else | 59 | else |
| 58 | [event.start_time] | 60 | [event.start_time] |
| @@ -64,7 +66,7 @@ class Occurrence < ApplicationRecord | |||
| 64 | # Instance Methods | 66 | # Instance Methods |
| 65 | 67 | ||
| 66 | def summary | 68 | def summary |
| 67 | node.head.title | 69 | node&.head&.title || event.display_title |
| 68 | end | 70 | end |
| 69 | 71 | ||
| 70 | end | 72 | end |
