function Show() { global $CCSUseAmp; global $Tpl; global $FileName; $this->EventResult = CCGetEvent($this->CCSEvents, "BeforeShow", $this); if (!$this->Visible) { return; } $RemoveFromUrl = array($this->TargetName . "Year", $this->TargetName . "Month", $this->TargetName . "Date"); $QueryString = CCGetQueryString("QueryString", $RemoveFromUrl); $ParentPath = $Tpl->block_path; $CalendarNavigatorBlock = "CalendarNavigator " . $this->CalendarNavigatorName; $Tpl->block_path = $ParentPath . "/" . $CalendarNavigatorBlock; $Tpl->SetBlockVar("", ""); $Tpl->SetBlockVar("Years", ""); $Tpl->SetBlockVar("Months", ""); $Tpl->SetBlockVar("Quarters", ""); $this->Attributes->Show(); $Blocks = array("Months", "Quarters", "Years"); foreach ($Blocks as $Block) { if ($Tpl->BlockExists($Block)) { if ($Block == "Years") { $this->CurrentProcessingDate = CCDateAdd($this->CurrentDate, "-" . $this->YearsRange . "years"); $LastDate = CCDateAdd($this->CurrentDate, "+" . $this->YearsRange . "years"); $add = "1year"; $name = "Year"; } elseif ($Block == "Quarters" && $this->CalendarType == "Quarter") { $this->CurrentProcessingDate = CCParseDate(CCFormatDate($this->CurrentDate, array("yyyy", "-01-01 00:00:00")), array("yyyy", "-", "mm", "-", "dd", " ", "HH", ":", "nn", ":", "ss")); $LastDate = CCDateAdd($this->CurrentProcessingDate, "+1year -1sec"); $add = "3month"; $name = "Quarter"; } elseif ($this->CalendarType != 12) { $this->CurrentProcessingDate = CCParseDate(CCFormatDate($this->CurrentDate, array("yyyy", "-01-01 00:00:00")), array("yyyy", "-", "mm", "-", "dd", " ", "HH", ":", "nn", ":", "ss")); $LastDate = CCDateAdd($this->CurrentProcessingDate, "+1year -1sec"); $add = "1month"; $name = "Month"; } else { continue; } while (CCCompareValues($this->CurrentProcessingDate, $LastDate, ccsDate) <= 0) { $NextDate = CCDateAdd($this->CurrentProcessingDate, $add); if ($Block == "Years" && $this->CurrentProcessingDate[ccsYear] == $this->CurrentDate[ccsYear] || $Block == "Months" && $this->CurrentProcessingDate[ccsMonth] == $this->CurrentDate[ccsMonth] || $Block == "Quarters" && ceil($this->CurrentProcessingDate[ccsMonth] / 3 + 0.1) == ceil($this->CurrentDate[ccsMonth] / 3)) { $this->ShowBlock($QueryString, $Block . "/Current_" . $name, $Block . "/Regular_" . $name); } else { $this->ShowBlock($QueryString, $Block . "/Regular_" . $name); } $this->CurrentProcessingDate = $NextDate; } $this->ShowBlock($QueryString, $Block); } } if ($Tpl->BlockExists("Prev_Year")) { $this->CurrentProcessingDate = CCDateAdd($this->CurrentDate, "-1year"); $this->ShowBlock($QueryString, "Prev_Year", "", false); } if ($Tpl->BlockExists("Next_Year")) { $this->CurrentProcessingDate = CCDateAdd($this->CurrentDate, "+1year"); $this->ShowBlock($QueryString, "Next_Year", "", false); } if ($this->CalendarType != 12) { if ($Tpl->BlockExists("Prev")) { $this->CurrentProcessingDate = $this->PrevProcessingDate; $this->ShowBlock($QueryString, "Prev", "", false); } if ($Tpl->BlockExists("Next")) { $this->CurrentProcessingDate = $this->NextProcessingDate; $this->ShowBlock($QueryString, "Next", "", false); } } $Tpl->block_path = $ParentPath; $ActionStr = $FileName . "?" . CCAddParam($QueryString, "ccsForm", $this->TargetName); if ($CCSUseAmp) { $ActionStr = str_replace('&', '&', $ActionStr); } $Tpl->SetVar("Action", $ActionStr); $Tpl->SetVar("CalendarName", $this->TargetName); $this->CurrentProcessingDate = $this->CurrentDate; $this->ShowBlock($QueryString, $CalendarNavigatorBlock, "", false); }
function CCDateAdd($date, $value) { if (CCValidateDate($date)) { $FormatArray = array("yyyy", "-", "mm", "-", "dd", " ", "HH", ":", "nn", ":", "ss"); $value = strtolower($value); preg_match_all("/([-+]?)(\\d+)\\s*(year(s?)|month(s?)|day(s?)|hour(s?)|minute(s?)|second(s?)|week(s?)|[ymdwhns])/", $value, $pieces); for ($i = 0; $i < count($pieces[0]); $i++) { $rel = $pieces[1][$i] == "-" ? -$pieces[2][$i] : $pieces[2][$i]; $BackMonth = false; switch ($pieces[3][$i]) { case "years": case "year": case "y": $date[ccsYear] += $rel; $BackMonth = true; break; case "months": case "month": case "m": $date[ccsMonth] += $rel; $BackMonth = true; break; case "weeks": case "week": case "w": $date[ccsDay] += $rel * 7; break; case "days": case "day": case "d": $date[ccsDay] += $rel; break; case "hours": case "hour": case "h": $date[ccsHour] += $rel; break; case "minutes": case "minute": case "min": case "n": $date[ccsMinute] += $rel; break; case "seconds": case "second": case "sec": case "s": $date[ccsSecond] += $rel; break; } if ($date[ccsSecond] >= 60) { $date[ccsMinute] += floor($date[ccsSecond] / 60); $date[ccsSecond] = $date[ccsSecond] % 60; } elseif ($date[ccsSecond] < 0) { $date[ccsMinute] += floor($date[ccsSecond] / 60); $date[ccsSecond] = ($date[ccsSecond] % 60 + 60) % 60; } if ($date[ccsMinute] >= 60) { $date[ccsHour] += floor($date[ccsMinute] / 60); $date[ccsMinute] = $date[ccsMinute] % 60; } elseif ($date[ccsMinute] < 0) { $date[ccsHour] += floor($date[ccsMinute] / 60); $date[ccsMinute] = ($date[ccsMinute] % 60 + 60) % 60; } if ($date[ccsHour] >= 24) { $date[ccsDay] += floor($date[ccsHour] / 24); $date[ccsHour] = $date[ccsHour] % 24; } elseif ($date[ccsHour] < 0) { $date[ccsDay] += floor($date[ccsHour] / 24); $date[ccsHour] = ($date[ccsHour] % 24 + 24) % 24; } if ($date[ccsMonth] > 12) { $date[ccsYear] += floor(($date[ccsMonth] - 1) / 12); $date[ccsMonth] = ($date[ccsMonth] - 1) % 12 + 1; } elseif ($date[ccsMonth] < 1) { $date[ccsYear] += floor(($date[ccsMonth] - 1) / 12); $date[ccsMonth] = (($date[ccsMonth] - 1) % 12 + 12) % 12 + 1; } $days = CCDaysInMonth($date[ccsYear], $date[ccsMonth]); if ($BackMonth && $date[ccsDay] > $days) { $date[ccsDay] = $days; } else { while ($date[ccsDay] > $days) { $date[ccsMonth] += 1; if ($date[ccsMonth] > 12) { $date[ccsYear] += 1; $date[ccsMonth] = 1; } $date[ccsDay] = $date[ccsDay] - $days; $days = CCDaysInMonth($date[ccsYear], $date[ccsMonth]); } } if ($BackMonth && $date[ccsDay] < 1) { $date[ccsDay] = 1; } else { $tmpDate = ""; while ($date[ccsDay] < 1) { if ($tmpDate == "") { $tmpDate = CCParseDate(CCFormatDate($date, array("yyyy", "-", "mm", "-01")), array("yyyy", "-", "mm", "-", "dd")); } $tmpDate = CCDateAdd($tmpDate, "-1month"); $days = CCDaysInMonth($tmpDate[ccsYear], $tmpDate[ccsMonth]); $date[ccsMonth] -= 1; if ($date[ccsMonth] == 0) { $date[ccsYear] -= 1; $date[ccsMonth] = 12; } $date[ccsDay] = $date[ccsDay] + $days; } } } $date[ccsTimestamp] = @mktime($date[ccsHour], $date[ccsMinute], $date[ccsSecond], $date[ccsMonth], $date[ccsDay], $date[ccsYear]); return $date; } return false; }
function CalculateCalendarPeriod() { $this->FirstProcessingDate = CCParseDate(CCFormatDate($this->CurrentDate, array("yyyy", "-", "mm", "-01 00:00:00")), array("yyyy", "-", "mm", "-", "dd", " ", "HH", ":", "nn", ":", "ss")); $Days = (CCFormatDate($this->FirstProcessingDate, array("w")) - $this->FirstWeekDay + 6) % 7; $this->StartDate = CCDateAdd($this->FirstProcessingDate, "-" . $Days . "day"); $this->LastProcessingDate = CCDateAdd($this->FirstProcessingDate, "1month -1second"); $Days = ($this->FirstWeekDay - CCFormatDate($this->LastProcessingDate, array("w")) + 7) % 7; $this->EndDate = CCDateAdd($this->LastProcessingDate, $Days . "day"); }