FEATURE: allow every 4 weeks as an interval (#440)
This allows us to sync up 2 week and 4 week events, monthly goes out of sync Also fixes... test suite failing in Australia
This commit is contained in:
parent
0517e3a500
commit
b6ea7363d0
|
|
@ -392,12 +392,15 @@ module DiscoursePostEvent
|
|||
recurrence = "FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR"
|
||||
when "every_two_weeks"
|
||||
recurrence = "FREQ=WEEKLY;INTERVAL=2;"
|
||||
when "every_four_weeks"
|
||||
recurrence = "FREQ=WEEKLY;INTERVAL=4;"
|
||||
else
|
||||
byday = localized_start.strftime("%A").upcase[0, 2]
|
||||
recurrence = "FREQ=WEEKLY;BYDAY=#{byday}"
|
||||
end
|
||||
|
||||
next_starts_at = RRuleGenerator.generate(recurrence, localized_start, tzid: self.timezone)
|
||||
|
||||
difference = original_ends_at - original_starts_at
|
||||
next_ends_at = next_starts_at + difference.seconds
|
||||
|
||||
|
|
|
|||
|
|
@ -109,6 +109,12 @@ export default Controller.extend(ModalFunctionality, {
|
|||
"discourse_post_event.builder_modal.recurrence.every_two_weeks"
|
||||
),
|
||||
},
|
||||
{
|
||||
id: "every_four_weeks",
|
||||
name: I18n.t(
|
||||
"discourse_post_event.builder_modal.recurrence.every_four_weeks"
|
||||
),
|
||||
},
|
||||
]);
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -413,6 +413,7 @@ en:
|
|||
every_weekday: "Every weekday"
|
||||
every_week: "Every week at this weekday"
|
||||
every_two_weeks: "Every two weeks at this weekday"
|
||||
every_four_weeks: "Every four weeks at this weekday"
|
||||
minimal:
|
||||
label: "Minimal event"
|
||||
checkbox_label: "Hide Going/Not going buttons and invitees status"
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@ en:
|
|||
ends_at_before_starts_at: "An event can't end before it starts."
|
||||
start_must_be_present_and_a_valid_date: "An event requires a valid start date."
|
||||
end_must_be_a_valid_date: "End date must be a valid date."
|
||||
invalid_recurrence: "Recurrence must be one of: every_month, every_week, every_two_weeks, every_day, every_weekday."
|
||||
invalid_recurrence: "Recurrence must be one of: every_month, every_week, every_two_weeks, every_four_weeks, every_day, every_weekday."
|
||||
invalid_timezone: "Timezone not recognized."
|
||||
acting_user_not_allowed_to_create_event: "Current user is not allowed to create events."
|
||||
acting_user_not_allowed_to_act_on_this_event: "Current user is not allowed to act on this event."
|
||||
|
|
|
|||
|
|
@ -2,7 +2,14 @@
|
|||
|
||||
module DiscoursePostEvent
|
||||
class EventValidator
|
||||
VALID_RECURRENCES = %w[every_month every_week every_two_weeks every_day every_weekday]
|
||||
VALID_RECURRENCES = %w[
|
||||
every_month
|
||||
every_week
|
||||
every_two_weeks
|
||||
every_four_weeks
|
||||
every_day
|
||||
every_weekday
|
||||
]
|
||||
|
||||
def initialize(post)
|
||||
@post = post
|
||||
|
|
|
|||
|
|
@ -3,7 +3,9 @@
|
|||
require "rrule"
|
||||
|
||||
class RRuleGenerator
|
||||
def self.generate(base_rrule, starts_at, tzid: "UTC")
|
||||
def self.generate(base_rrule, starts_at, tzid: nil)
|
||||
tzid ||= "UTC"
|
||||
|
||||
rrule = generate_hash(base_rrule)
|
||||
rrule = set_mandatory_options(rrule, starts_at)
|
||||
|
||||
|
|
|
|||
|
|
@ -70,6 +70,16 @@ describe "discourse_post_event_recurrence" do
|
|||
end
|
||||
end
|
||||
|
||||
describe "every_four_weeks" do
|
||||
before { post_event_1.update!(recurrence: "every_four_weeks") }
|
||||
|
||||
it "sets in four weeks at the same weekday" do
|
||||
post_event_1.set_next_date
|
||||
|
||||
expect(post_event_1.starts_at).to eq_time(Time.zone.parse("2020-10-08 19:00"))
|
||||
end
|
||||
end
|
||||
|
||||
describe "every_day" do
|
||||
before { post_event_1.update!(recurrence: "every_day") }
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue