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);
 }
Exemple #2
0
 /**
  * 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;
 }