/** * @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 self(); 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(self::REPEAT_DAILY); $pd->setRepeatEveryNum($_POST['pdRepeatPeriodDaysEvery']); } elseif ($_POST['pdRepeatPeriod'] == 'weekly') { $pd->setRepeatPeriod(self::REPEAT_WEEKLY); $pd->setRepeatEveryNum($_POST['pdRepeatPeriodWeeksEvery']); $pd->setRepeatPeriodWeekDays($_POST['pdRepeatPeriodWeeksDays']); } elseif ($_POST['pdRepeatPeriod'] == 'monthly') { $pd->setRepeatPeriod(self::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(self::REPEAT_NONE); } $pd->save(); return $pd; } else { unset($pd); } return null; }