public function executeGetRepetitionParamSelectTag(sfWebRequest $request) { $id = $request->getParameter('id'); $value = $request->getParameter('value'); if (!$id) { return $this->renderText(''); } $summary = ''; $tag = ''; if ($repetition = PcRepetitionPeer::retrieveByPk($id)) { if ($repetition->needsParam()) { if ($repetition->getSpecial() == 'selected_wkdays') { $weekdaysSelected = DateFormat::fromIntegerToWeekdaysSetForRepetition($value); $selectedSun = $weekdaysSelected['sun'] ? "checked='checked'" : ''; $selectedMon = $weekdaysSelected['mon'] ? "checked='checked'" : ''; $selectedTue = $weekdaysSelected['tue'] ? "checked='checked'" : ''; $selectedWed = $weekdaysSelected['wed'] ? "checked='checked'" : ''; $selectedThu = $weekdaysSelected['thu'] ? "checked='checked'" : ''; $selectedFri = $weekdaysSelected['fri'] ? "checked='checked'" : ''; $selectedSat = $weekdaysSelected['sat'] ? "checked='checked'" : ''; $tag = ""; if (PcUserPeer::getLoggedInUser()->getWeekStart() == 0) { $tag .= "<input type='checkbox' id='wdfr_sun' name='weekdaysForRepetition' value='sun' {$selectedSun} ><label for='wdfr_sun'>" . __('ACCOUNT_DOW_SUN') . "</label>"; } $tag .= "<input type='checkbox' id='wdfr_mon' name='weekdaysForRepetition' value='mon' {$selectedMon} /><label for='wdfr_mon'>" . __('ACCOUNT_DOW_MON') . "</label>"; $tag .= "<input type='checkbox' id='wdfr_tue' name='weekdaysForRepetition' value='tue' {$selectedTue} /><label for='wdfr_tue'>" . __('ACCOUNT_DOW_TUE') . "</label>"; $tag .= "<input type='checkbox' id='wdfr_wed' name='weekdaysForRepetition' value='wed' {$selectedWed} /><label for='wdfr_wed'>" . __('ACCOUNT_DOW_WED') . "</label>"; $tag .= "<input type='checkbox' id='wdfr_thu' name='weekdaysForRepetition' value='thu' {$selectedThu} /><label for='wdfr_thu'>" . __('ACCOUNT_DOW_THU') . "</label>"; $tag .= "<input type='checkbox' id='wdfr_fri' name='weekdaysForRepetition' value='fri' {$selectedFri} /><label for='wdfr_fri'>" . __('ACCOUNT_DOW_FRI') . "</label>"; $tag .= "<input type='checkbox' id='wdfr_sat' name='weekdaysForRepetition' value='sat' {$selectedSat} /><label for='wdfr_sat'>" . __('ACCOUNT_DOW_SAT') . "</label>"; if (PcUserPeer::getLoggedInUser()->getWeekStart() == 1) { $tag .= "<input type='checkbox' id='wdfr_sun' name='weekdaysForRepetition' value='sun' {$selectedSun} ><label for='wdfr_sun'>" . __('ACCOUNT_DOW_SUN') . "</label>"; } $summary = $tag; } else { $min = $repetition->getMinParam(); $max = $repetition->getMaxParam(); $tag = "<select name=\"repetitionParam\">"; for ($i = $min; $i <= $max; $i++) { $selected = $value == $i ? 'selected="selected"' : ''; $label = $repetition->isParamCardinal() ? $i : PcUtils::getOrdinalFromCardinal($i); $tag .= "<option value=\"{$i}\" {$selected}>{$label}</option>"; } $tag .= "</select>"; $summary = str_replace(__('ACCOUNT_TASK_REPETITION_SELECT_LATER'), $tag, $repetition->getLocalizedHumanExpression()); } } } return $this->renderText($summary); }
/** * The same method is in the JS code: see PLANCAKE.localAPi__isTaskOnThisDay * * @param int $day - in the format YYYY-MM-DD (e.g.: 2011-12-25) * @return bool */ public function isOnThisDay($day) { if ($day === null || !strlen($day)) { return false; } $dayTimestamp = strtotime($day); $dayDowIndex = date('w', $dayTimestamp); // 0 -> Sun ...... 6-> Sat $taskDueDate = $this->getDueDate('Y-m-d'); $taskDueDateTimestamp = strtotime($taskDueDate); $taskDueDateDowIndex = date('w', $taskDueDateTimestamp); // 0 -> Sun ...... 6-> Sat $taskRepetitionId = $this->getRepetitionId(); $taskRepetitionParam = $this->getRepetitionParam(); $daysBetweenDayAndDueDate = ($dayTimestamp - $taskDueDateTimestamp) / 86400; $weeksBetweenDayAndDueDate = $daysBetweenDayAndDueDate / 7; $monthsBetweenDayAndDueDate = ((int) date('Y', $dayTimestamp) - (int) date('Y', $taskDueDateTimestamp)) * 12 + ((int) date('n', $dayTimestamp) - (int) date('n', $taskDueDateTimestamp)); if (!$taskDueDate) { return false; } // this is a repetiting task starting in the future, not on the current day if ($taskRepetitionId && $taskDueDateTimestamp > $dayTimestamp) { return false; } if ($taskDueDate == $day) { return true; } if ($taskRepetitionId < 7) { // every Sun, every Mon, ... or every Sat if ($taskRepetitionId - 1 === $dayDowIndex) { return true; } } if ($taskRepetitionId == 8) { // every day return true; } if ($taskRepetitionId == 9) { // every weekday if ($dayDowIndex > 0 && $dayDowIndex < 6) { return true; } } if ($taskRepetitionId == 10 && $taskRepetitionParam) { // every X days if (!($daysBetweenDayAndDueDate % $taskRepetitionParam)) { return true; } } if ($taskRepetitionId == 11) { // every week if ($dayDowIndex === $taskDueDateDowIndex) { return true; } } if ($taskRepetitionId == 12) { // every X weeks if ($dayDowIndex === $taskDueDateDowIndex && !($weeksBetweenDayAndDueDate % $taskRepetitionParam)) { return true; } } if ($taskRepetitionId == 13) { // every month on the due date day if (date('d', $taskDueDateTimestamp) === date('d', $dayTimestamp)) { return true; } } if ($taskRepetitionId == 14) { // every X months on the due date day if (date('d', $taskDueDateTimestamp) === date('d', $dayTimestamp) && !($monthsBetweenDayAndDueDate % $taskRepetitionParam)) { return true; } } if ($taskRepetitionId == 15) { // every year if (date('d', $taskDueDateTimestamp) === date('d', $dayTimestamp) && date('n', $taskDueDateTimestamp) === date('n', $dayTimestamp)) { return true; } } if ($taskRepetitionId == 16) { // every X years if (date('d', $taskDueDateTimestamp) === date('d', $dayTimestamp) && date('n', $taskDueDateTimestamp) === date('n', $dayTimestamp) && !((date('Y', $dayTimestamp) - date('Y', $taskDueDateTimestamp)) % $taskRepetitionParam)) { return true; } } if ($taskRepetitionId == 18) { // every [select later] month(s) on the last day if (!($monthsBetweenDayAndDueDate % $taskRepetitionParam) && date('t', $dayTimestamp) == date('d', $dayTimestamp)) { return true; } } if ($taskRepetitionId == 19) { // every [select later] month(s) on the second last day if (!($monthsBetweenDayAndDueDate % $taskRepetitionParam) && date('t', $dayTimestamp) - 1 == date('d', $dayTimestamp)) { return true; } } if ($taskRepetitionId >= 20 && $taskRepetitionId <= 26) { // every X month(s) on the first Sun/Mon..../Sat if (!($monthsBetweenDayAndDueDate % $taskRepetitionParam) && $dayDowIndex == $taskRepetitionId - 20 && date('j', $dayTimestamp) <= 7) { return true; } } if ($taskRepetitionId >= 27 && $taskRepetitionId <= 33) { // every X month(s) on the last Sun/Mon..../Sat if (!($monthsBetweenDayAndDueDate % $taskRepetitionParam) && $dayDowIndex == $taskRepetitionId - 27 && date('j', $dayTimestamp) > date('t', $dayTimestamp) - 7) { return true; } } if ($taskRepetitionId == 34) { // repeat weekly on some weekdays $weekdaysSet = DateFormat::fromIntegerToWeekdaysSetForRepetition($taskRepetitionParam); $key = strtolower(date('D', $dayTimestamp)); if ($weekdaysSet[$key]) { return true; } } if ($taskRepetitionId >= 40 && $taskRepetitionId <= 46) { // every X month(s) on the second Sun/Mon..../Sat if (!($monthsBetweenDayAndDueDate % $taskRepetitionParam) && $dayDowIndex == $taskRepetitionId - 40 && (date('j', $dayTimestamp) > 7 && date('j', $dayTimestamp) <= 14)) { return true; } } if ($taskRepetitionId >= 50 && $taskRepetitionId <= 56) { // every X month(s) on the third Sun/Mon..../Sat if (!($monthsBetweenDayAndDueDate % $taskRepetitionParam) && $dayDowIndex == $taskRepetitionId - 50 && (date('j', $dayTimestamp) > 14 && date('j', $dayTimestamp) <= 21)) { return true; } } if ($taskRepetitionId >= 60 && $taskRepetitionId <= 66) { // every X month(s) on the fourth Sun/Mon..../Sat if (!($monthsBetweenDayAndDueDate % $taskRepetitionParam) && $dayDowIndex == $taskRepetitionId - 60 && (date('j', $dayTimestamp) > 21 && date('j', $dayTimestamp) <= 28)) { return true; } } return false; }