public function testMonthlyRecurring() { // -- Last day of the week $monthly_ldotw_repetition = new Duration(); $monthly_ldotw_repetition->setStartDate(date('Y-m-d 01:00:00', strtotime('second saturday of december 1992'))); $monthly_ldotw_repetition->setEndDate(date('Y-m-d 03:00:00', strtotime('second saturday of december 1992'))); $monthly_ldotw_repetition->setEndDateAllDay(false); $monthly_ldotw_repetition->setStartDateAllDay(false); $monthly_ldotw_repetition->setRepeatPeriod($monthly_ldotw_repetition::REPEAT_MONTHLY); $monthly_ldotw_repetition->setRepeatMonthBy($monthly_ldotw_repetition::MONTHLY_REPEAT_LAST_WEEKDAY); $monthly_ldotw_repetition->setRepeatMonthLastWeekday(1); // Monday $monthly_ldotw_repetition->setRepeatEveryNum(1); $this->assertTrue($monthly_ldotw_repetition->isActive(strtotime(date('Y-m-d 01:30:00', strtotime('last monday of march ' . self::getFarYear(2205)))))); // -- Weekly $monthly_weekly_repetition = new Duration(); $monthly_weekly_repetition->setStartDate(date('Y-m-d 01:00:00', strtotime('second saturday of december 1992'))); $monthly_weekly_repetition->setEndDate(date('Y-m-d 03:00:00', strtotime('second saturday of december 1992'))); $monthly_weekly_repetition->setEndDateAllDay(false); $monthly_weekly_repetition->setStartDateAllDay(false); $monthly_weekly_repetition->setRepeatPeriod($monthly_weekly_repetition::REPEAT_MONTHLY); $monthly_weekly_repetition->setRepeatMonthBy($monthly_weekly_repetition::MONTHLY_REPEAT_WEEKLY); $monthly_weekly_repetition->setRepeatEveryNum(1); $this->assertTrue($monthly_weekly_repetition->isActive(strtotime(date('Y-m-d 01:30:00', strtotime('second saturday of march ' . self::getFarYear(2205)))))); // -- Monthly $monthly_weekly_repetition = new Duration(); $monthly_weekly_repetition->setStartDate('1990-05-21 01:00:00'); $monthly_weekly_repetition->setEndDate('1990-05-21 03:00:00'); $monthly_weekly_repetition->setEndDateAllDay(false); $monthly_weekly_repetition->setStartDateAllDay(false); $monthly_weekly_repetition->setRepeatPeriod($monthly_weekly_repetition::REPEAT_MONTHLY); $monthly_weekly_repetition->setRepeatMonthBy($monthly_weekly_repetition::MONTHLY_REPEAT_MONTHLY); $monthly_weekly_repetition->setRepeatEveryNum(1); $this->assertTrue($monthly_weekly_repetition->isActive(strtotime(date('Y-m-21 01:50:00', time())))); }
/** * @return Duration|null */ public static function createFromRequest() { $dt = Loader::helper('form/date_time'); $dateStart = $dt->translate('pdStartDate'); $dateEnd = $dt->translate('pdEndDate'); if ($dateStart || $dateEnd) { // create a Duration object $pd = new Duration(); if ($_REQUEST['pdStartDateAllDayActivate']) { $pd->setStartDateAllDay(1); $dateStart = date('Y-m-d 00:00:00', strtotime($dateStart)); } else { $pd->setStartDateAllDay(0); } if ($_REQUEST['pdEndDateAllDayActivate']) { $pd->setEndDateAllDay(1); $dateEnd = date('Y-m-d 23:59:59', strtotime($dateEnd)); } else { $pd->setEndDateAllDay(0); } $pd->setStartDate($dateStart); $pd->setEndDate($dateEnd); if ($_POST['pdRepeatPeriod'] && $_POST['pdRepeat']) { if ($_POST['pdRepeatPeriod'] == 'daily') { $pd->setRepeatPeriod(Duration::REPEAT_DAILY); $pd->setRepeatEveryNum($_POST['pdRepeatPeriodDaysEvery']); } elseif ($_POST['pdRepeatPeriod'] == 'weekly') { $pd->setRepeatPeriod(Duration::REPEAT_WEEKLY); $pd->setRepeatEveryNum($_POST['pdRepeatPeriodWeeksEvery']); $pd->setRepeatPeriodWeekDays($_POST['pdRepeatPeriodWeeksDays']); } elseif ($_POST['pdRepeatPeriod'] == 'monthly') { $pd->setRepeatPeriod(Duration::REPEAT_MONTHLY); $repeat_by = $_POST['pdRepeatPeriodMonthsRepeatBy']; $repeat = self::MONTHLY_REPEAT_WEEKLY; switch ($repeat_by) { case 'week': $repeat = self::MONTHLY_REPEAT_WEEKLY; break; case 'month': $repeat = self::MONTHLY_REPEAT_MONTHLY; break; case 'lastweekday': $repeat = self::MONTHLY_REPEAT_LAST_WEEKDAY; $dotw = $_POST['pdRepeatPeriodMonthsRepeatLastDay'] ?: 0; $pd->setRepeatMonthLastWeekday($dotw); break; } $pd->setRepeatMonthBy($repeat); $pd->setRepeatEveryNum($_POST['pdRepeatPeriodMonthsEvery']); } $pd->setRepeatPeriodEnd($dt->translate('pdEndRepeatDateSpecific')); } else { $pd->setRepeatPeriod(Duration::REPEAT_NONE); } $pd->save(); return $pd; } else { unset($pd); } return null; }