function OutputCategories() { global $ReportLanguage; foreach ($this->Categories as $cats) { $el = $this->XmlDoc->createElement("categories"); if (!isset($cats->CategoriesAttrs['bgColor'])) { $cats->CategoriesAttrs['bgColor'] = $this->CategoryColor; } if (!isset($cats->CategoriesAttrs['fontColor'])) { $cats->CategoriesAttrs['fontColor'] = $this->CategoryFontColor; } foreach ($cats->CategoriesAttrs as $attr => $value) { $this->SetAttribute($el, $attr, $value); } $this->Chart_DataRendered($el); $this->XmlDoc->documentElement->appendChild($el); if ($cats->Title != "") { // Title $cat = $this->XmlDoc->createElement("category"); $this->SetAttribute($cat, 'start', $this->DateToStr($this->StartDate)); $this->SetAttribute($cat, 'end', $this->DateToStr($this->EndDate)); $this->SetAttribute($cat, 'name', $cats->Title); foreach ($cats->CategoryAttrs as $attr => $value) { $this->SetAttribute($cat, $attr, $value); } $this->Chart_DataRendered($cat); $el->appendChild($cat); } else { // Intervals $arStart = $this->GetDateTime($this->StartDate); $arEnd = $this->GetDateTime($this->EndDate); if ($cats->Interval == EWR_GANTT_INTERVAL_YEAR) { $yrs = intval($arStart["year"]); $yre = intval($arEnd["year"]); for ($y = $yrs; $y <= $yre; $y++) { $cat = $this->XmlDoc->createElement("category"); $start = $y == $yrs ? $this->DateTimeToStr($arStart) : $this->YMDToStr($y, 1, 1); $end = $y == $yre ? $this->DateTimeToStr($arEnd) : $this->YMDToStr($y, 12, 31); $this->SetAttribute($cat, 'start', $start); $this->SetAttribute($cat, 'end', $end); //if ($start == $this->YMDToStr($y, 1, 1) && $end == $this->YMDToStr($y, 12, 31)) // Complete year $this->SetAttribute($cat, 'name', $y); foreach ($cats->CategoryAttrs as $attr => $value) { $this->SetAttribute($cat, $attr, $value); } $this->Chart_DataRendered($el); $el->appendChild($cat); } } elseif ($cats->Interval == EWR_GANTT_INTERVAL_QUARTER) { $yrs = intval($arStart["year"]); $mons = intval($arStart["mon"]); $qtrs = floor(($mons - 1) / 3) + 1; $qs = $yrs * 4 + $qtrs; $yre = intval($arEnd["year"]); $mone = intval($arEnd["mon"]); $qtre = floor(($mone - 1) / 3) + 1; $qe = $yre * 4 + $qtre; for ($q = $qs; $q <= $qe; $q++) { $cat = $this->XmlDoc->createElement("category"); $yr = floor($q / 4); $qtr = $q % 4; $yr = $qtr == 0 ? $yr - 1 : $yr; $qtr = $qtr == 0 ? 4 : $qtr; $mos = ($qtr - 1) * 3 + 1; $moe = $qtr * 3; $dys = $this->CreateDateTime(0, 0, 0, $mos, 1, $yr); if ($this->StartDate > $dys) { $dys = $this->StartDate; } $dy = ewr_DaysInMonth($yr, $moe); $dye = $this->CreateDateTime(0, 0, 0, $moe, $dy, $yr); if ($this->EndDate < $dye) { $dye = $this->EndDate; } $start = $q == $qs ? $this->DateToStr($dys) : $this->YMDToStr($yr, $mos, 1); $end = $q == $qe ? $this->DateToStr($dye) : $this->YMDToStr($yr, $moe, $dy); $this->SetAttribute($cat, 'start', $start); $this->SetAttribute($cat, 'end', $end); //if ($start == $this->YMDToStr($yr, $mos, 1) && $end == $this->YMDToStr($yr, $moe, $dy)) // Complete quarter $this->SetAttribute($cat, 'name', 'Q' . $qtr); foreach ($cats->CategoryAttrs as $attr => $value) { $this->SetAttribute($cat, $attr, $value); } $this->Chart_DataRendered($cat); $el->appendChild($cat); } } elseif ($cats->Interval == EWR_GANTT_INTERVAL_MONTH) { $yrs = intval($arStart["year"]); $mons = intval($arStart["mon"]); $ms = $yrs * 12 + $mons; $yre = intval($arEnd["year"]); $mone = intval($arEnd["mon"]); $me = $yre * 12 + $mone; for ($m = $ms; $m <= $me; $m++) { $cat = $this->XmlDoc->createElement("category"); $yr = floor($m / 12); $mo = $m % 12; $yr = $mo == 0 ? $yr - 1 : $yr; $mo = $mo == 0 ? 12 : $mo; $dy = ewr_DaysInMonth($yr, $mo); $start = $m == $ms ? $this->DateTimeToStr($arStart) : $this->YMDToStr($yr, $mo, 1); $end = $m == $me ? $this->DateTimeToStr($arEnd) : $this->YMDToStr($yr, $mo, $dy); $this->SetAttribute($cat, 'start', $start); $this->SetAttribute($cat, 'end', $end); if ($start == $this->YMDToStr($yr, $mo, 1) && $end == $this->YMDToStr($yr, $mo, $dy)) { // Complete month $this->SetAttribute($cat, 'name', ewr_MonthName($mo)); } // Or ewr_FormatMonth foreach ($cats->CategoryAttrs as $attr => $value) { $this->SetAttribute($cat, $attr, $value); } $this->Chart_DataRendered($cat); $el->appendChild($cat); } } elseif ($cats->Interval == EWR_GANTT_INTERVAL_WEEK) { $ds = $this->StartDate; $de = $this->EndDate; for ($d = $ds; $d < $de; $d += 86400) { $dts = $this->GetDateTime($d); //$dte = $this->GetDateTime($d + 6*86400); $wday = $dts["wday"]; $diff = $wday >= EWR_GANTT_WEEK_START ? $wday - EWR_GANTT_WEEK_START : $wday + 7 - EWR_GANTT_WEEK_START; $ws = $d == $ds ? $ds : $d - $diff * 86400; $we = $d == $de ? $de : $d + (6 - $diff) * 86400; $d = $we; $cat = $this->XmlDoc->createElement("category"); $this->SetAttribute($cat, 'start', $this->DateToStr($ws)); $this->SetAttribute($cat, 'end', $this->DateToStr($we)); if ($this->ShowWeekNumber && EWR_GANTT_WEEK_START == 1) { // Week start on Monday $this->SetAttribute($cat, 'name', $ReportLanguage->Phrase("Week") . " " . $this->FormatDate("W", $d)); } else { $this->SetAttribute($cat, 'name', $ReportLanguage->Phrase("Week")); } foreach ($cats->CategoryAttrs as $attr => $value) { $this->SetAttribute($cat, $attr, $value); } $this->Chart_DataRendered($cat); $el->appendChild($cat); } } elseif ($cats->Interval == EWR_GANTT_INTERVAL_DAY) { $ds = $this->StartDate; $de = $this->EndDate; for ($d = $ds; $d <= $de; $d += 86400) { $dt = $this->GetDateTime($d); $md = $dt["mday"]; $cat = $this->XmlDoc->createElement("category"); $sdt = $this->DateTimeToStr($dt); $this->SetAttribute($cat, 'start', $sdt); $this->SetAttribute($cat, 'end', $sdt); $this->SetAttribute($cat, 'name', $md); foreach ($cats->CategoryAttrs as $attr => $value) { $this->SetAttribute($cat, $attr, $value); } $this->Chart_DataRendered($cat); $el->appendChild($cat); } } } } }
function ewr_DateVal($FldOpr, $FldVal, $ValType) { // Compose date string switch (strtolower($FldOpr)) { case "year": if ($ValType == 1) { $wrkVal = "{$FldVal}-01-01"; } elseif ($ValType == 2) { $wrkVal = "{$FldVal}-12-31"; } break; case "quarter": list($y, $q) = explode("|", $FldVal); if (intval($y) == 0 || intval($q) == 0) { $wrkVal = "0000-00-00"; } else { if ($ValType == 1) { $m = ($q - 1) * 3 + 1; $m = str_pad($m, 2, "0", STR_PAD_LEFT); $wrkVal = "{$y}-{$m}-01"; } elseif ($ValType == 2) { $m = ($q - 1) * 3 + 3; $m = str_pad($m, 2, "0", STR_PAD_LEFT); $wrkVal = "{$y}-{$m}-" . ewr_DaysInMonth($y, $m); } } break; case "month": list($y, $m) = explode("|", $FldVal); if (intval($y) == 0 || intval($m) == 0) { $wrkVal = "0000-00-00"; } else { if ($ValType == 1) { $m = str_pad($m, 2, "0", STR_PAD_LEFT); $wrkVal = "{$y}-{$m}-01"; } elseif ($ValType == 2) { $m = str_pad($m, 2, "0", STR_PAD_LEFT); $wrkVal = "{$y}-{$m}-" . ewr_DaysInMonth($y, $m); } } break; case "day": $wrkVal = str_replace("|", "-", $FldVal); } // Add time if necessary if (preg_match('/(\\d{4}|\\d{2})-(\\d{1,2})-(\\d{1,2})/', $wrkVal)) { // Date without time if ($ValType == 1) { $wrkVal .= " 00:00:00"; } elseif ($ValType == 2) { $wrkVal .= " 23:59:59"; } } // Check if datetime if (preg_match('/(\\d{4}|\\d{2})-(\\d{1,2})-(\\d{1,2}) (\\d{1,2}):(\\d{1,2}):(\\d{1,2})/', $wrkVal)) { // DateTime $DateVal = $wrkVal; } else { $DateVal = ""; } return $DateVal; }