/** * @param int $teamid * @param int $startTimestamp * @param int $endTimestamp * @param int[] $projectIds * @return GanttGraph */ private function getGanttGraph($teamid, $startTimestamp, $endTimestamp, array $projectIds) { $graph = new GanttGraph(); // set graph title $team = TeamCache::getInstance()->getTeam($teamid); if (0 != count($projectIds)) { $pnameList = ""; foreach ($projectIds as $pid) { if ("" != $pnameList) { $pnameList .= ","; } $project = ProjectCache::getInstance()->getProject($pid); $pnameList .= $project->getName(); } $graph->title->Set(T_('Team') . ' ' . $team->getName() . ' ' . T_('Project(s)') . ': ' . $pnameList); } else { $graph->title->Set(T_('Team') . ' ' . $team->getName() . ' (' . T_('All projects') . ')'); } // Setup scale $graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK); $graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAYWNBR); $gantManager = new GanttManager($teamid, $startTimestamp, $endTimestamp); $teamActivities = $gantManager->getTeamActivities(); // mapping to ease constrains building // Note: $issueActivityMapping must be completed before calling $a->getJPGraphBar() $issueActivityMapping = array(); $activityIdx = 0; foreach ($teamActivities as $a) { $a->setActivityIdx($activityIdx); $issueActivityMapping[$a->bugid] = $activityIdx; ++$activityIdx; } // Add the specified activities foreach ($teamActivities as $a) { // FILTER on projects if (NULL != $projectIds && 0 != sizeof($projectIds)) { $issue = IssueCache::getInstance()->getIssue($a->bugid); if (!in_array($issue->getProjectId(), $projectIds)) { // skip activity indexing continue; } } $filterTeamActivities[] = $a; // Shorten bar depending on gantt startDate if (NULL != $startTimestamp && $a->startTimestamp < $startTimestamp) { // leave one day to insert prefixBar $newStartTimestamp = $startTimestamp + 60 * 60 * 24; if ($newStartTimestamp > $a->endTimestamp) { // there is not enough space for a prefixBar $newStartTimestamp = $startTimestamp; self::$logger->debug("bugid=" . $a->bugid . ": Shorten bar to Gantt start date"); } else { $formattedStartDate = date('Y-m-d', $startTimestamp); $prefixBar = new GanttBar($a->activityIdx, "", $formattedStartDate, $formattedStartDate, "", 10); $prefixBar->SetBreakStyle(true, 'dotted', 1); $graph->Add($prefixBar); self::$logger->debug("bugid=" . $a->bugid . ": Shorten bar & add prefixBar"); } self::$logger->debug("bugid=" . $a->bugid . ": Shorten bar from " . date('Y-m-d', $a->startTimestamp) . " to " . date('Y-m-d', $newStartTimestamp)); $a->startTimestamp = $newStartTimestamp; } $bar = $a->getJPGraphBar($issueActivityMapping); $graph->Add($bar); } return $graph; }
function graph_schedule($data, $title, $show_day) { require_once "jpgraph/jpgraph.php"; require_once "jpgraph/jpgraph_gantt.php"; // Some sample Gantt data /* $data = array( array(0, " Bryce", "2009-08-28 11:00","2009-08-28 15:30"), array(1, " Kyla", "2009-08-28 08:00","2009-08-28 15:30"), array(2, " Nathan", "2009-08-28 08:00","2009-08-28 17:00") ); */ // Basic graph parameters $graph = new GanttGraph(700); $graph->SetMarginColor('darkgreen@0.8'); $graph->SetColor('white'); $graph->title->Set("{$title}'s Schedule"); $graph->title->SetColor('darkgray'); // We want to display day, hour and minute scales if ($show_day) { $graph->ShowHeaders(GANTT_HDAY | GANTT_HHOUR); } else { $graph->ShowHeaders(GANTT_HHOUR); } #$graph->ShowHeaders(GANTT_HDAY | GANTT_HHOUR); #$graph->ShowHeaders(GANTT_HHOUR); // Setup day format $graph->scale->day->SetBackgroundColor('lightyellow:1.5'); $graph->scale->day->SetStyle(DAYSTYLE_LONG); $graph->scale->day->SetFont(FF_FONT1, FS_NORMAL, 16); // Setup hour format $graph->scale->hour->SetIntervall(1); $graph->scale->hour->SetBackgroundColor('lightyellow:1.5'); $graph->scale->hour->SetStyle(HOURSTYLE_HAMPM); $graph->scale->hour->grid->SetColor('gray:0.8'); $graph->scale->hour->SetFont(FF_FONT1, FS_NORMAL, 13); for ($i = 0; $i < count($data); ++$i) { $bar = new GanttBar($data[$i][0], $data[$i][1], $data[$i][2], $data[$i][3], $data[$i][4]); $bar->SetPattern(BAND_RDIAG, "yellow"); $bar->SetFillColor("gray"); $graph->Add($bar); } // Draw graph $graph->Stroke(); }
} if ($g_index > 0) { $data[$g_index][3] = date("Y-m-d", $group_begin); $data[$g_index][4] = date("Y-m-d", $group_end - 86400); } } //$data = array( // array(0,ACTYPE_GROUP, "Phase 1", "2001-10-26","2001-11-23",''), // array(1,ACTYPE_NORMAL, " Label 2", "2001-11-01","2001-11-20",''), // array(2,ACTYPE_NORMAL, " Label 3", "2001-10-26","2001-11-03",''), // array(3,ACTYPE_MILESTONE," Phase 1 Done", "2001-11-23",'M2') ); // The constrains between the activities //$constrains = array(array(2,1,CONSTRAIN_ENDSTART), // array(1,3,CONSTRAIN_STARTSTART)); // progress //$progress = array(array(1,0.4)); // Create the basic graph $graph = new GanttGraph(); //$graph->title->SetFont(FF_BIG5,FS_NORMAL,10); $graph->title->Set('Projects for ' . $User->getRealName()); // Setup scale $graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK); $graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); // Add the specified activities //$graph->SetSimpleFont(FF_BIG5,10); $graph->CreateSimple($data, $constrains, $progress); $todayline = new GanttVLine(date('Y-m-d', time()), "Today"); $todayline->SetDayOffset(0.5); $graph->Add($todayline); // .. and stroke the graph $graph->Stroke();
// Open break; case 4: $pattern = 'yellow'; // Suspended break; default: $pattern = 'yellow'; // default color } $activity->SetPattern(BAND_RDIAG, $pattern); $activity->caption->Set($listTasks->tas_mem_login[$i] . ' (' . $printProgress . '%)'); $activity->caption->SetFont(FF_FONT0); $activity->SetFillColor($pattern); if ($listTasks->tas_priority[$i] == 4 || $listTasks->tas_priority[$i] == 5) { $activity->progress->SetPattern(BAND_SOLID, 'red'); } else { $activity->progress->SetPattern(BAND_SOLID, 'darkred'); } $activity->progress->Set($progress); $graph->Add($activity); } else { // build a milestone $ms_cnt++; $ms = new MileStone($i, $listTasks->tas_name[$i], $listTasks->tas_start_date[$i], 'M' . $ms_cnt); $ms->title->SetFont(FF_FONT1, FS_BOLD); $ms->title->SetColor('darkred'); $graph->Add($ms); } } $graph->Stroke();
if ($day_diff > 240) { //more than 240 days $graph2->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH); } else { if ($day_diff > 90) { //more than 90 days and less of 241 $graph2->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HWEEK); $graph2->scale->week->SetStyle(WEEKSTYLE_WNBR); } } $row = 0; if (!is_array($tasks) || sizeof($tasks) == 0) { $d = new CDate(); $bar = new GanttBar($row++, array(' ' . $AppUI->_('No tasks found'), ' ', ' ', ' '), $d->getDate(), $d->getDate(), ' ', 0.6); $bar->title->SetCOlor('red'); $graph2->Add($bar); } if (is_array($tasks)) { $nameUser = ''; foreach ($tasks as $t) { if ($nameUser != $t['user_name']) { $row++; $barTmp = new GanttBar($row++, array($t['user_name'], '', '', ' '), '0', '0;', 0.6); $barTmp->title->SetColor('#' . $t['project_color_identifier']); $barTmp->SetFillColor('#' . $t['project_color_identifier']); if (is_file(TTF_DIR . 'FreeSansBold.ttf')) { $barTmp->title->SetFont(FF_CUSTOM, FF_BOLD); } $graph2->Add($barTmp); } if ($locale_char_set == 'utf-8' && function_exists('utf_decode')) {
//more than 240 days $graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH); } else { if ($day_diff > 90) { //more than 90 days and less of 241 $graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HWEEK); $graph->scale->week->SetStyle(WEEKSTYLE_WNBR); } } $row = 0; if (!is_array($projects) || sizeof($projects) == 0) { $d = new CDate(); $bar = new GanttBar($row++, array(' ' . $AppUI->_('No projects found'), ' ', ' ', ' '), $d->getDate(), $d->getDate(), ' ', 0.6); $bar->title->SetFont(FF_CUSTOM, FS_NORMAL, 8); $bar->title->SetColor('red'); $graph->Add($bar); } if (is_array($projects)) { foreach ($projects as $p) { if ($locale_char_set == 'utf-8' && function_exists('utf8_decode')) { $name = mb_strlen(utf8_decode($p['project_name'])) > 25 ? mb_substr(utf8_decode($p['project_name']), 0, 22) . '...' : utf8_decode($p['project_name']); } else { //while using charset different than UTF-8 we need not to use utf8_deocde $name = mb_strlen($p['project_name']) > 25 ? mb_substr($p['project_name'], 0, 22) . '...' : $p['project_name']; } //using new jpGraph determines using Date object instead of string $start = $p['project_start_date'] > '0000-00-00 00:00:00' ? $p['project_start_date'] : date('Y-m-d H:i:s'); $end_date = $p['project_end_date'] > '0000-00-00 00:00:00' ? $p['project_end_date'] : date('Y-m-d H:i:s', time()); $end_date = new CDate($end_date); //$end->addDays(0); $end = $end_date->getDate();
public function graficar($filename) { $graph = new GanttGraph(); $graph->SetShadow(); $graph->SetBox(); // Only show part of the Gantt $graph = new GanttGraph(1000); /* $graph->title->Set('Proceso '.$this->dataSource->getParameter('desc_proceso_macro')."\n". 'Seguimiento de Solicitud '.$this->dataSource->getParameter('numero')."\n". 'Unidad '.$this->dataSource->getParameter('desc_uo')); $graph->title->SetFont(FF_ARIAL,FS_BOLD,6); */ define('UTF-8', $locale_char_set); // Setup some "very" nonstandard colors $graph->SetMarginColor('lightgreen@0.8'); $graph->SetBox(true, 'yellow:0.6', 2); $graph->SetFrame(true, 'darkgreen', 4); $graph->scale->divider->SetColor('yellow:0.6'); $graph->scale->dividerh->SetColor('yellow:0.6'); // Explicitely set the date range // (Autoscaling will of course also work) // Display month and year scale with the gridlines $graph->ShowHeaders(GANTT_HMONTH | GANTT_HYEAR | GANTT_HDAY); $graph->scale->month->grid->SetColor('gray'); $graph->scale->month->grid->Show(true); $graph->scale->year->grid->SetColor('gray'); $graph->scale->year->grid->Show(true); // Setup a horizontal grid $graph->hgrid->Show(); $graph->hgrid->SetRowFillColor('darkblue@0.9'); // Setup activity info // For the titles we also add a minimum width of 100 pixels for the Task name column $graph->scale->actinfo->SetColTitles(array('Tipo', 'Estado', 'Responsable', 'Duracion', 'Inicio', 'Fin'), array(40, 100)); $graph->scale->actinfo->SetBackgroundColor('green:0.5@0.5'); $graph->scale->actinfo->SetFont(FF_ARIAL, FS_NORMAL, 10); $data = array(); $dataset = $this->dataSource->getDataset(); $tamanioDataset = count($dataset); $fechaInicio = 0; $fechaFin = 0; for ($i = 0; $i < $tamanioDataset; $i++) { if ($i == 0) { $fechaInicio = $dataset[$i]['fecha_reg']; } /* if($dataset[$i]['nombre_estado']=='En_Proceso'||$dataset[$i]['nombre_estado']=='Habilitado para pagar'||$dataset[$i]['nombre_estado']=='En Pago'){ $milestone = new MileStone($i,$dataset[$i]['nombre_estado'],$dataset[$i]['fecha_reg'],$dataset[$i]['fecha_reg']); $milestone->title->SetColor("black"); $milestone->title->SetFont(FF_FONT1,FS_BOLD); $graph->Add($milestone); continue; } */ $actividad = array(); array_push($actividad, $i); if ($i == $tamanioDataset - 1) { $fechaFin = $dataset[$i]['fecha_reg']; } else { $fechaFin = $dataset[$i + 1]['fecha_reg']; } $startLiteral = new DateTime($dataset[$i]['fecha_reg']); $endLiteral = new DateTime($fechaFin); $start = strtotime($dataset[$i]['fecha_reg']); $end = strtotime($fechaFin); $days_between = round(($end - $start) / 86400); $cabecera = array($dataset[$i]['proceso'], $dataset[$i]['estado'], $dataset[$i]['funcionario'] != '-' ? $dataset[$i]['func'] : $dataset[$i]['depto'], "{$days_between}" . ' dias', $startLiteral->format('d M Y'), $endLiteral->format('d M Y')); array_push($actividad, $cabecera); array_push($actividad, $dataset[$i]['fecha_reg']); array_push($actividad, $fechaFin); array_push($actividad, FF_ARIAL); array_push($actividad, FS_NORMAL); array_push($actividad, 8); array_push($data, $actividad); } // Create the bars and add them to the gantt chart for ($i = 0; $i < count($data); $i++) { $bar = new GanttBar($data[$i][0], $data[$i][1], $data[$i][2], $data[$i][3], "[100%]", 10); if (count($data[$i]) > 4) { $bar->title->SetFont($data[$i][4], $data[$i][5], $data[$i][6]); } $bar->SetPattern(BAND_RDIAG, "yellow"); $bar->SetFillColor("gray"); $bar->progress->Set(1); $bar->progress->SetPattern(GANTT_SOLID, "darkgreen"); $graph->Add($bar); } //$graph->SetDateRange($fechaInicio,$fechaFin); $archivo = dirname(__FILE__) . '/../../../reportes_generados/' . $filename; //$graph->StrokeCSIM(); //exit; $graph->Stroke($archivo); }
$bar->SetFillColor("red"); // To indicate progress each bar can have a smaller bar within // For illustrative purpose just set the progress to 50% for each bar $bar->progress->Set(0.5); // Each bar may also have optional left and right plot marks // As illustration lets put a filled circle with a number at the end // of each bar $bar->rightMark->SetType(MARK_FILLEDCIRCLE); $bar->rightMark->SetFillColor("red"); $bar->rightMark->SetColor("red"); $bar->rightMark->SetWidth(10); // Title for the mark $bar->rightMark->title->Set("" . $i + 1); $bar->rightMark->title->SetColor("white"); $bar->rightMark->title->SetFont(FF_ARIAL, FS_BOLD, 10); $bar->rightMark->Show(); // ... and add the bar to the gantt chart $graph->Add($bar); } // Create a milestone mark $ms = new MileStone(7, "M5", "2001-12-10", "10/12"); $ms->title->SetFont(FF_FONT1, FS_BOLD); $graph->Add($ms); // Create a vertical line to emphasize the milestone $vl = new GanttVLine("2001-12-10 13:00", "Phase 1", "darkred"); $vl->SetDayOffset(0.5); // Center the line in the day $graph->Add($vl); // Output the graph $graph->Stroke(); // EOF
function ganttPDF($reportName, $listTasks) { include "../includes/jpgraph/jpgraph.php"; include "../includes/jpgraph/jpgraph_gantt.php"; $graph = new GanttGraph(); $graph->SetBox(); $graph->SetMarginColor("white"); $graph->SetColor("white"); $graph->title->Set($strings["project"] . " " . $reportName); // $graph->subtitle->Set("(".$strings["created"].": "..")"); $graph->title->SetFont(FF_FONT1); $graph->SetColor("white"); $graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK); $graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); $graph->scale->week->SetFont(FF_FONT0); $graph->scale->year->SetFont(FF_FONT1); $comptListTasks = count($listTasks->tas_id); $posGantt = 0; for ($i = 0; $i < $comptListTasks; $i++) { $listTasks->tas_name[$i] = str_replace('"', '"', $listTasks->tas_name[$i]); $listTasks->tas_name[$i] = str_replace("'", "'", $listTasks->tas_name[$i]); $progress = round($listTasks->tas_completion[$i] / 10, 2); $printProgress = $listTasks->tas_completion[$i] * 10; $activity = new GanttBar($posGantt, $listTasks->tas_pro_name[$i] . " / " . $listTasks->tas_name[$i], $listTasks->tas_start_date[$i], $listTasks->tas_due_date[$i]); $activity->SetPattern(BAND_LDIAG, "yellow"); $activity->caption->Set($listTasks->tas_mem_login[$i] . " (" . $printProgress . "%)"); $activity->SetFillColor("gray"); if ($listTasks->tas_priority[$i] == "4" || $listTasks->tas_priority[$i] == "5") { $activity->progress->SetPattern(BAND_SOLID, "#BB0000"); } else { $activity->progress->SetPattern(BAND_SOLID, "#0000BB"); } $activity->progress->Set($progress); $graph->Add($activity); // begin if subtask $tmpquery = "WHERE task = " . $listTasks->tas_id[$i]; $listSubTasks = new request(); $listSubTasks->openSubtasks($tmpquery); $comptListSubTasks = count($listSubTasks->subtas_id); if ($comptListSubTasks >= 1) { // list subtasks for ($j = 0; $j < $comptListSubTasks; $j++) { $listSubTasks->subtas_name[$j] = str_replace('"', '"', $listSubTasks->subtas_name[$j]); $listSubTasks->subtas_name[$j] = str_replace("'", "'", $listSubTasks->subtas_name[$j]); $progress = round($listSubTasks->subtas_completion[$j] / 10, 2); $printProgress = $listSubTasks->subtas_completion[$j] * 10; $posGantt += 1; // $activity = new GanttBar($posGantt,$listTasks->tas_pro_name[$i]." / ".$listSubTasks->subtas_name[$j],$listSubTasks->subtas_start_date[$j],$listSubTasks->subtas_due_date[$j]); // change name of project for name of parent task $activity = new GanttBar($posGantt, $listSubTasks->subtas_tas_name[$j] . " / " . $listSubTasks->subtas_name[$j], $listSubTasks->subtas_start_date[$j], $listSubTasks->subtas_due_date[$j]); //$activity = new GanttBar($j,$strings["project"].": ".$listSubTasks->subtas_pro_name[$j]." / ".$strings["task"].": ".$listSubTasks->subtas_name[$j],$listSubTasks->subtas_start_date[$j],$listSubTasks->subtas_due_date[$j]); $activity->SetPattern(BAND_LDIAG, "yellow"); $activity->caption->Set($listSubTasks->subtas_mem_login[$j] . " (" . $printProgress . "%)"); $activity->SetFillColor("gray"); if ($listSubTasks->subtas_priority[$j] == "4" || $listSubTasks->subtas_priority[$j] == "5") { $activity->progress->SetPattern(BAND_SOLID, "#BB0000"); } else { $activity->progress->SetPattern(BAND_SOLID, "#0000BB"); } $activity->progress->Set($progress); $graph->Add($activity); } // end for comptListSubTasks } // end if subtask $posGantt += 1; } // end for complisttask $tmpGantt = "../files/" . md5(uniqid(rand())); $graph->Stroke($tmpGantt); return $tmpGantt; }
// Specify progress to 60% $activity->progress->Set(0.6); $activity->progress->SetPattern(BAND_HVCROSS, "blue"); // Format the bar for the second activity // ($row,$title,$startdate,$enddate) $activity2 = new GanttBar(1, "Project", "2001-12-21", "2001-12-27", "[30%]"); // Yellow diagonal line pattern on a red background $activity2->SetPattern(BAND_RDIAG, "yellow"); $activity2->SetFillColor("red"); // Set absolute height $activity2->SetHeight(10); // Specify progress to 30% $activity2->progress->Set(0.3); $activity2->progress->SetPattern(BAND_HVCROSS, "blue"); // Finally add the bar to the graph $graph->Add($activity); $graph->Add($activity2); // Add text to top left corner of graph $txt1 = new Text(); $txt1->SetPos(5, 2); $txt1->Set("Note:\nEstimate done w148"); $txt1->SetFont(FF_ARIAL, FS_BOLD, 12); $txt1->SetColor('darkred'); $graph->Add($txt1); // Add text to the top bar $txt2 = new Text(); $txt2->SetScalePos("2002-01-01", 1); $txt2->SetFont(FF_ARIAL, FS_BOLD, 12); $txt2->SetAlign('left', 'center'); $txt2->Set("Remember this!"); $txt2->SetBox('yellow');
$graph->scale->month->SetFontColor("white"); $graph->scale->month->SetBackgroundColor("blue"); // 0 % vertical label margin $graph->SetLabelVMarginFactor(1); // 1=default value // Format the bar for the first activity // ($row,$title,$startdate,$enddate) $activity1 = new GanttBar(0, "Activity 1", "2001-12-21", "2001-12-26", ""); // Yellow diagonal line pattern on a red background $activity1->SetPattern(BAND_RDIAG, "yellow"); $activity1->SetFillColor("red"); // Format the bar for the first activity // ($row,$title,$startdate,$enddate) $break1 = new GanttBar(0, '', "2001-12-27", "2001-12-30", ""); $break1->SetBreakStyle(true, 'dotted', 2); $break1->SetColor('red'); $graph->Add($break1); // Format the bar for the second activity // ($row,$title,$startdate,$enddate) $activity2 = new GanttBar(0, "", "2001-12-31", "2002-01-2", "[BO]"); // ADjust font for caption $activity2->caption->SetFont(FF_ARIAL, FS_BOLD); $activity2->caption->SetColor("darkred"); // Yellow diagonal line pattern on a red background $activity2->SetPattern(BAND_RDIAG, "yellow"); $activity2->SetFillColor("red"); // Finally add the bar to the graph $graph->Add($activity1); $graph->Add($activity2); // ... and display it $graph->Stroke();
private function createGanttGraph($dataorder, $datalabel, $datastart, $dataende, $datamilestone, $dataprogress, $scale, $title, $constraitkey, $constraitvalue, $constrait, $startdate, $enddate) { // Create the graph. $graph = new GanttGraph($this->width, $this->height, "auto"); $graph->scale->actinfo->SetColTitles(array('Paket'), array(30)); // $icon = new IconPlot( dirname(__FILE__).'/../../themes/basic/gfx/logorisklogiq.png', 0.65,0.90,1 ,40); // $icon->SetAnchor( 'left', 'bottom'); // $graph->Add( $icon); $todaydate = new DateTime(); $vline = new GanttVLine($todaydate->format("Y-m-d"), "Today"); $graph->Add($vline); if ($startdate == NULL) { $myDate = new DateTime(); $startdate = $myDate->format("Y-m-d"); } if ($enddate == NULL) { $my2Date = new DateTime($startdate); $my2Date->modify("30days"); $enddate = $my2Date->format("Y-m-d"); } $graph->SetDateRange($startdate, $enddate); $graph->title->Set($title); $graph->title->SetFont(FF_FONT1, FS_BOLD); $graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); $graph->scale->week->setStyle(WEEKSTYLE_FIRSTDAY); $graph->scale->month->setStyle(MONTHSTYLE_SHORTNAMEYEAR2); // Setup a horizontal grid $graph->hgrid->Show(); $graph->hgrid->SetRowFillColor('darkblue@0.93'); if ($this->shadow) { $graph->SetShadow(); } $mapper = array(); $mydata = array(); $progress = array(); $color = array(); $ii = 0; foreach ($this->dataorder as $dorder) { if ($datamilestone[$ii] == 0) { $mapper[$dataorder[$ii]] = $ii; array_push($mydata, array($ii, ACTYPE_NORMAL, $datalabel[$ii], $datastart[$ii], $dataende[$ii], ' ')); array_push($progress, array($ii, $dataprogress[$ii] / 100)); array_push($color, array($ii, 'gray')); } else { $mapper[$dataorder[$ii]] = $ii; array_push($mydata, array($ii, ACTYPE_MILESTONE, $datalabel[$ii], $datastart[$ii], $datalabel[$ii])); } $ii++; } $myconstrait = array(); $ii = 0; foreach ($constraitkey as $dorder) { array_push($myconstrait, array($mapper[$constraitvalue[$ii]], $mapper[$constraitkey[$ii]], $constrait[$ii])); $ii++; } //print_r($myconstrait); //print_r($mydata); $graph->CreateSimple($mydata, $myconstrait, $progress, $color); return $graph; }
$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); // Make the week scale font smaller than the default if (isset($gantt_title_font_family)) { $graph->scale->week->SetFont(constant($gantt_title_font_family), FS_NORMAL, 9); $graph->scale->month->SetFont(constant($gantt_title_font_family), FS_NORMAL, 9); } // Use the short name of the month together with a 2 digit year // on the month scale $graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2); $rows = count($pt_arr); for ($i = 0; $i < $rows; $i++) { // Format the bar for the first activity // ($row,$title,$startdate,$enddate) $activity[$i] = new GanttBar($i, convert_unicode($pt_arr[$i]->getSummary()), date('Y-m-d', $pt_arr[$i]->getStartDate()), date('Y-m-d', $pt_arr[$i]->getEndDate() - 86400)); // Yellow diagonal line pattern on a red background $activity[$i]->SetPattern(BAND_RDIAG, "yellow"); $activity[$i]->SetFillColor("red"); $activity[$i]->progress->Set($pt_arr[$i]->getPercentComplete() ? $pt_arr[$i]->getPercentComplete() / 100 : 0); $activity[$i]->progress->SetPattern(BAND_RDIAG, "blue"); if (isset($gantt_task_font_family)) { $activity[$i]->title->SetFont(constant($gantt_task_font_family), constant($gantt_task_font_style), $gantt_task_font_size); } // Finally add the bar to the graph $graph->Add($activity[$i]); } //echo $rows; $todayline = new GanttVLine(date('Y-m-d', time()), "Today"); $todayline->SetDayOffset(0.5); $graph->Add($todayline); // Display the Gantt chart $graph->Stroke();
if (count($data[$i]) > 4) { $bar->title->SetFont($data[$i][4], $data[$i][5], $data[$i][6]); } $bar->rightMark->Show(); $bar->rightMark->SetType(MARK_FILLEDCIRCLE); $bar->rightMark->SetWidth(8); $bar->rightMark->SetColor("red"); $bar->rightMark->SetFillColor("red"); $bar->rightMark->title->Set($i + 1); $bar->rightMark->title->SetFont(FF_ARIAL, FS_BOLD, 12); $bar->rightMark->title->SetColor("white"); $bar->SetPattern(BAND_RDIAG, "yellow"); $bar->SetFillColor("red"); $bar->progress->Set($i / 10); $bar->progress->SetPattern(GANTT_SOLID, "darkgreen"); $graph->Add($bar); } // The line will NOT be shown since it is outside the specified slice $vline = new GanttVLine("2002-02-28"); $vline->title->Set("2002-02-28"); $vline->title->SetFont(FF_FONT1, FS_BOLD, 10); $graph->Add($vline); // The milestone will NOT be shown since it is outside the specified slice $ms = new MileStone(7, "M5", "2002-01-28", "28/1"); $ms->title->SetFont(FF_FONT1, FS_BOLD); $graph->Add($ms); $graph->Stroke(); ?>
// on the month scale $graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2); $graph->scale->month->SetFontColor("white"); $graph->scale->month->SetBackgroundColor("blue"); // 0 % vertical label margin $graph->SetLabelVMarginFactor(1); $i = 0; $activity = array(); $colornode =& atkGetNode("project.mastergantt_colorconfig"); foreach ($gant as $id => $gantphase) { // Projects that extent the selected period should be cut off. if ($gantphase['startdate'] < $from) { $gantphase['startdate'] = $from; } if ($gantphase['enddate'] > $to || $gantphase['enddate'] == '') { $gantphase['enddate'] = $to; } $caption = "[" . time_format($gantphase[$plannedbooked], true) . "]"; $activity[$i] = new GanttBar($i, $gantphase['name'], $gantphase['startdate'], $gantphase['enddate'], $caption); $colorbase = $gantphase[$plannedbooked]; $color = $colornode->getColor($colorbase / 60); $activity[$i]->SetPattern(BAND_SOLID, $color); $activity[$i]->SetHeight(10); $activity[$i]->SetFillColor($color); $i++; } atkimport("module.utils.dateutil"); for ($i = 0, $_i = count($activity); $i < $_i; $i++) { $graph->Add($activity[$i]); } $graph->Stroke();
<?php // Gantt example to create CSIM include "../jpgraph.php"; include "../jpgraph_gantt.php"; $bar1 = new GanttBar(0, "Activity 1", "2001-12-21", "2002-01-20"); $bar1->SetCSIMTarget('#', 'Go back 1'); $bar1->title->SetCSIMTarget('#', 'Go back 1 (title)'); $bar2 = new GanttBar(1, "Activity 2", "2002-01-03", "2002-01-25"); $bar2->SetCSIMTarget('#', 'Go back 2'); $bar2->title->SetCSIMTarget('#', 'Go back 2 (title)'); $graph = new GanttGraph(500); $graph->title->Set("Example with image map"); $graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK); $graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); $graph->scale->week->SetFont(FF_FONT1); $graph->Add(array($bar1, $bar2)); // And stroke $graph->StrokeCSIM(); ?>
<?php // Gantt example include "../jpgraph.php"; include "../jpgraph_gantt.php"; // Create the basic graph $graph = new GanttGraph(); $graph->title->Set("Example with multiple constrains"); $bar1 = new GanttBar(0, "Label 1", "2003-06-08", "2003-06-12"); $bar2 = new GanttBar(1, "Label 2", "2003-06-16", "2003-06-19"); $bar3 = new GanttBar(2, "Label 3", "2003-06-15", "2003-06-21"); //create constraints $bar1->SetConstrain(1, CONSTRAIN_ENDSTART); $bar1->SetConstrain(2, CONSTRAIN_ENDSTART); // Setup scale $graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK); $graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAYWNBR); // Add the specified activities $graph->Add($bar1); $graph->Add($bar2); $graph->Add($bar3); // .. and stroke the graph $graph->Stroke();
$graph->scale->month->SetBackgroundColor("blue"); // Format the bar for the first activity // ($row,$title,$startdate,$enddate) $activity = new GanttBar(0, "Project", "2001-12-21", "2002-01-20"); // Yellow diagonal line pattern on a red background $activity->SetPattern(BAND_RDIAG, "yellow"); $activity->SetFillColor("red"); // Add a right marker $activity->rightMark->Show(); $activity->rightMark->SetType(MARK_FILLEDCIRCLE); $activity->rightMark->SetWidth(13); $activity->rightMark->SetColor("red"); $activity->rightMark->SetFillColor("red"); $activity->rightMark->title->Set("M5"); $activity->rightMark->title->SetFont(FF_ARIAL, FS_BOLD, 12); $activity->rightMark->title->SetColor("white"); // Set absolute height $activity->SetHeight(8); // Finally add the bar to the graph $graph->Add($activity); // Create a miletone $milestone = new MileStone(2, "Milestone", "2002-01-15", "2002-01-15"); $milestone->title->SetColor("black"); $milestone->title->SetFont(FF_FONT1, FS_BOLD); $graph->Add($milestone); // Add a vertical line $vline = new GanttVLine("2001-12-24", "Phase 1"); $vline->SetDayOffset(0.5); $graph->Add($vline); // ... and display it $graph->Stroke();
function grafica($fecha_max, $fecha_min, $datos) { $graph = new GanttGraph(); $graph->title->Set(""); // Rango de fechas a presentar $graph->SetDateRange($fecha_min, $fecha_max); // linea de espaciado vertical entre los elementos $graph->SetVMarginFactor(2); // configuracion de colores $graph->SetMarginColor('lightgreen@0.8'); // color del fondo $graph->SetBox(true, 'yellow:0.6', 2); // contorno del marco interior $graph->SetFrame(true, 'darkgreen', 4); // contorno del marco exterior $graph->scale->divider->SetColor('yellow:0.6'); // linea divisora de datos y grafico $graph->scale->dividerh->SetColor('red:0.6'); //liena que divide el tiempo con las barras de la grafica // Ponemos la medida de tiempo que queremos usar, por ejemplo años, meses, dias, hors o minutos //por ejemplo, si queremos solamente la division por meses y semanas en lugar de tener //GANTT_HWEEK | GANTT_HMONTH | GANTT_HYEAR | GANTT_HDAY //dejamos //GANTT_HWEEK | GANTT_HMONTH // para mas opciones de division de tiempo ver comentarios abajo $graph->ShowHeaders(GANTT_HWEEK | GANTT_HMONTH | GANTT_HYEAR | GANTT_HDAY); $graph->scale->month->grid->SetColor('gray'); //lineas verticales que dividen los meses $graph->scale->month->grid->Show(true); $graph->scale->year->grid->SetColor('gray'); // linea verticales que dividen los años $graph->scale->year->grid->Show(true); $graph->scale->actinfo->SetColTitles(array('Acción', 'Duracion', 'Inicio', 'Final', 'Porcentaje'), array(30, 100)); $graph->scale->actinfo->SetBackgroundColor('blue:0.5@0.5'); //color de fondo de los titulos de la tabla $graph->scale->actinfo->SetFont(FF_ARIAL, FS_NORMAL, 12); //tipografia // division vertical de los datos a la izquierda, posibles valores 'solid', 'dotted', 'dashed' $graph->scale->actinfo->vgrid->SetStyle('solid'); $graph->scale->actinfo->vgrid->SetColor('red'); // color de las divisiones puestas en el renglon anterior // Configuración de los iconos que queremos usar //para poner algun icono no definido podemos usarlo de la siguiente manera //$icon = new IconImage("imagen.png",0.7); //en el ejemplo estoy usando una omagen desde blogspot //el numero que es el segundo parametro de IconImage es el porcentaje de la imagen, en este caso esta al 20% $erricon = new IconImage("logo-copia.png", 0.2); $startconicon = new IconImage(GICON_FOLDEROPEN, 0.6); $endconicon = new IconImage(GICON_TEXTIMPORTANT, 0.5); //ahora ponemos los datos de la tabla e iniciamos los datos de las barras // $data = array( // //valores del arreglo: // //indice del arreglo, arreglo de datos para la informacion a la izquierda, fecha de inicio de la barra, fecha final de la barra, tipografia, estilo,tamaño tipografia,% de progreso en la barra // array(0,array("Pre-study","17 days","1 Nov '2011","1 Mar '2012") // , "2011-11-01","2012-01-1",FF_ARIAL,FS_NORMAL,8, 0.5),//el 0.5 indica el 50%, que ocuparemos en la linea 74, dando su posicion en el arreglo // array(1,array("Prototype","10 days","26 Oct '2011","16 Nov '2011"), // "2011-10-26","2011-11-01",FF_ARIAL,FS_NORMAL,8, 0.12), // array(2,array("Report","12 days","1 Mar '2012","13 Mar '2012"), // "2012-03-01","2012-03-13",FF_ARIAL,FS_NORMAL,8, 1) // ); $data = $datos; // Crea las barras y las añade a la grafica gantt for ($i = 0; $i < count($data); ++$i) { $bar = new GanttBar($data[$i][0], $data[$i][1], $data[$i][2], $data[$i][3], '', 10); if (count($data[$i]) > 4) { $bar->title->SetFont($data[$i][4], $data[$i][5], $data[$i][6]); } $bar->SetPattern(BAND_RDIAG, "yellow"); $bar->SetFillColor("gray"); $bar->progress->Set($data[$i][7]); // ocupamos el % de adelanto en la actividad $bar->progress->SetPattern(GANTT_SOLID, "darkgreen"); //$bar->title->SetCSIMTarget(array('#1'.$i,'#2'.$i,'#3'.$i,'#4'.$i,'#5'.$i),array('11'.$i,'22'.$i,'33'.$i)); $graph->Add($bar); //echo "<br>--> ".$data[$i][7]; } // Creamos la imagen y le damos nombre, la imagen se guarda donde estan estos archivos $graph->Stroke('imagenprueba.jpg'); }
// 0 % vertical label margin $graph->SetLabelVMarginFactor(1); // Format the bar for the first activity // ($row,$title,$startdate,$enddate) $activity = new GanttBar(0, "Project", "2001-12-21", "2002-01-07", "[50%]"); // Yellow diagonal line pattern on a red background $activity->SetPattern(BAND_RDIAG, "yellow"); $activity->SetFillColor("red"); // Set absolute height $activity->SetHeight(10); // Specify progress to 60% $activity->progress->Set(0.6); // Format the bar for the second activity // ($row,$title,$startdate,$enddate) $activity2 = new GanttBar(1, "Project", "2001-12-21", "2002-01-02", "[30%]"); // Yellow diagonal line pattern on a red background $activity2->SetPattern(BAND_RDIAG, "yellow"); $activity2->SetFillColor("red"); // Set absolute height $activity2->SetHeight(10); // Specify progress to 30% $activity2->progress->Set(0.3); // Finally add the bar to the graph $graph->Add($activity); $graph->Add($activity2); // Add a vertical line $vline = new GanttVLine("2001-12-24", "Phase 1"); $vline->SetDayOffset(0.5); //$graph->Add($vline); // ... and display it $graph->Stroke();
/** * creates the image for the gantt chart * * @param $_params array containing projectdata, start- and enddate * @param $_filename filename for the image, if empty image gets printed to browser * @author Lars Kneschke / Bettina Gille * @returns nothing - writes image to disk */ function show_graph($params, $_filename = '') { $modernJPGraph = false; // no gd support if (!function_exists('imagecopyresampled')) { return false; } DEFINE("TTF_DIR", PHPGW_SERVER_ROOT . "/projects/ttf-bitstream-vera-1.10/"); if (file_exists(PHPGW_SERVER_ROOT . '/../jpgraph/src/jpgraph.php')) { include PHPGW_SERVER_ROOT . '/../jpgraph/src/jpgraph.php'; include PHPGW_SERVER_ROOT . '/../jpgraph/src/jpgraph_gantt.php'; } else { include PHPGW_SERVER_ROOT . '/projects/inc/jpgraph-1.5.2/src/jpgraph.php'; include PHPGW_SERVER_ROOT . '/projects/inc/jpgraph-1.5.2/src/jpgraph_gantt.php'; } //_debug_array($params); $project_array = $params['project_array']; $sdate = $params['sdate']; $edate = $params['edate']; $showMilestones = $params['showMilestones']; $showResources = $params['showResources']; $bocalendar = CreateObject('calendar.bocalendar'); $this->graph = CreateObject('phpgwapi.gdgraph', $this->debug); $bolink = CreateObject('infolog.bolink'); //$this->boprojects->order = 'parent'; $this->boprojects->limit = False; $this->boprojects->html_output = False; if (is_array($project_array)) { $projects = array(); foreach ($project_array as $pro) { $project = $this->boprojects->list_projects(array('action' => 'mainsubsorted', 'project_id' => $pro, 'mstones_stat' => True)); if (is_array($project)) { $i = count($projects); for ($k = 0; $k < count($project); $k++) { $projects[$i + $k] = $project[$k]; } } } } if (is_array($projects)) { $modernJPGraph = version_compare('1.13', JPG_VERSION); $sdate = $sdate + 60 * 60 * $GLOBALS['phpgw_info']['user']['preferences']['common']['tz_offset']; $sdateout = $GLOBALS['phpgw']->common->show_date($sdate, $GLOBALS['phpgw_info']['user']['preferences']['common']['dateformat']); $edate = $edate + 60 * 60 * $GLOBALS['phpgw_info']['user']['preferences']['common']['tz_offset']; $edateout = $GLOBALS['phpgw']->common->show_date($edate, $GLOBALS['phpgw_info']['user']['preferences']['common']['dateformat']); # $this->graph->title = lang('Gantt chart from %1 to %2',$sdateout,$edateout); // Standard calls to create a new graph if ($modernJPGraph) { $graph = new GanttGraph(940, -1, "auto"); } else { $graph = new GanttGraph(-1, -1, "auto"); } $graph->SetShadow(); $graph->SetBox(); $duration = $edate - $sdate; if ($duration < 5958000) { $graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK); if ($modernJPGraph) { $graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAYWNBR); } else { $graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); } } elseif ($duration < 13820400) { $graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); $graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HWEEK); } else { $graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH); } // For the week we choose to show the start date of the week // the default is to show week number (according to ISO 8601) #$graph->scale->SetDateLocale('de_DE'); // Change the scale font $graph->scale->week->SetFont(FF_VERA, FS_NORMAL, 8); $graph->scale->year->SetFont(FF_VERA, FS_BOLD, 10); // Titles for chart $graph->title->Set(lang('project overview')); $graph->subtitle->Set(lang('from %1 to %2', $sdateout, $edateout)); $graph->title->SetFont(FF_VERA, FS_BOLD, 12); $graph->subtitle->SetFont(FF_VERA, FS_BOLD, 10); // set the start and end date // add one day to the end is needed internaly by jpgraph $graph->SetDateRange(date('Y-m-d 00:00:00', $sdate), date('Y-m-d', $edate + 86400)); foreach ($projects as $pro) { $ptime_pro = $this->boprojects->return_value('ptime', $pro[project_id]); $acc = $this->boprojects->get_budget(array('project_id' => $pro[project_id], 'ptime' => $ptime_pro)); if ($ptime_pro > 0) { $finnishedPercent = 100 / $ptime_pro * $acc[uhours_jobs_wminutes]; } else { $finnishedPercent = 0; } $previous = ''; if ($pro['previous'] > 0) { $previous = $this->boprojects->read_single_project($pro['previous']); $spro[] = array('title' => str_repeat(' ', $spro['level']) . '[!]' . $previous['title'], 'extracolor' => 'darkorange', 'sdate' => $previous['sdate'], 'edate' => $previous['edate'], 'pro_id' => $previous['project_id'], 'f_sdate' => $pro['sdate']); $color_legend['previous'] = array('title' => '[!]' . lang('previous project'), 'extracolor' => 'darkorange'); } // add a empty row before new project if ($pro['level'] == 0 && $counter > 0) { $counter++; } $spro = array('title' => $pro['title'], 'sdate' => $pro['sdate'], 'edate' => $pro['edate'] ? $pro['edate'] : mktime(0, 0, 0, date('m'), date('d'), date('Y')), 'color' => $pro['level'], 'pro_id' => $pro['project_id'], 'previous' => $pro['previous']); // convert title to iso-8859-1 $spro[title] = $this->botranslation->convert($spro[title], $this->displayCharset, 'iso-8859-1'); if ($spro[edate] < $sdate) { continue; } if ($spro[edate] > $edate) { $spro[edate] = $edate; } if ($spro[sdate] < $sdate) { $spro[sdate] = $sdate; } $bar = new GanttBar($counter, $spro[title], date('Y-m-d', $spro[sdate]), date('Y-m-d', $spro[edate]), round($finnishedPercent) . '%', 0.5); // mark beginn of new project bold if ($pro['level'] == 0) { $bar->title->SetFont(FF_VERA, FS_BOLD, 9); #$bar->title->SetColor("#9999FF"); $bar->SetPattern(BAND_SOLID, "#9999FF"); } else { // For illustration lets make each bar be red with yellow diagonal stripes $bar->SetPattern(BAND_SOLID, "#ccccFF"); #$bar->title->SetColor("#ccccFF"); } // To indicate progress each bar can have a smaller bar within // For illustrative purpose just set the progress to 50% for each bar $bar->progress->SetHeight(0.2); $bar->SetColor('#777777'); if ($finnishedPercent > 100) { $bar->progress->Set(1); #$bar->progress->SetPattern(GANTT_SOLID,"darkred",98); $bar->caption->SetColor("red"); } else { $bar->progress->Set($finnishedPercent / 100); #$bar->progress->SetPattern(GANTT_SOLID,"darkgreen",98); } $bar->caption->SetFont(FF_VERA, FS_NORMAL, 8); // ... and add the bar to the gantt chart $graphs['bars'][] = $bar; #$graph->Add($bar); $counter++; // check for Resources if ($showResources == 'true') { $linkedObjects = $bolink->get_links('projects', $pro[project_id]); $projectACL = $this->boprojects->get_acl_for_project($pro[project_id]); if (is_array($projectACL)) { // if beginn foreach ($projectACL as $accountID) { #_debug_array($projectData); $accountData = CreateObject('phpgwapi.accounts', $accountID); $accountData->read_repository(); $accountName = $GLOBALS['phpgw']->common->display_fullname($accountData->data['account_lid'], $accountData->data['firstname'], $accountData->data['lastname']); $calData = array('syear' => date('Y', $sdate), 'smonth' => date('m', $sdate), 'sday' => date('d', $sdate), 'eyear' => date('Y', $edate), 'emonth' => date('m', $edate), 'eday' => date('d', $edate), 'owner' => array($accountID)); $calEntries = $bocalendar->store_to_cache($calData); $bocalendar->remove_doubles_in_cache(date('Y', $sdate) . date('m', $sdate) . date('d', $sdate), date('Y', $edate) . date('m', $edate) . date('d', $edate)); $calEntries = $bocalendar->cached_events; #_debug_array($calEntries); if (is_array($calEntries) && count($calEntries)) { #_debug_array($calEntries); foreach ($calEntries as $calDayDate => $calDayEntries) { foreach ($calDayEntries as $calDayEntry) { if ($calDayEntry['recur_type']) { $bocalendar->set_recur_date($calDayEntry, $calDayDate); } #_debug_array($calDayEntry); if (!$bocalendar->rejected_no_show($calDayEntry)) { $startDate = date('Y-m-d H:i:s', mktime($calDayEntry['start']['hour'], $calDayEntry['start']['min'], $calDayEntry['start']['sec'], $calDayEntry['start']['month'], $calDayEntry['start']['mday'], $calDayEntry['start']['year'])); $endDate = date('Y-m-d H:i:s', mktime($calDayEntry['end']['hour'], $calDayEntry['end']['min'], $calDayEntry['end']['sec'], $calDayEntry['end']['month'], $calDayEntry['end']['mday'], $calDayEntry['end']['year'])); #$endDate = $startDate+1000; #_debug_array($startDate); $bar = new GanttBar($counter, str_repeat(' ', $pro['level'] + 1) . $accountName, $startDate, $endDate, '', 0.5); $bar->SetPattern(BAND_SOLID, "#DDDDDD"); $bar->SetColor('#CCCCCC'); #$bar->SetShadow(true,"darkgray"); if (count($projectLinks = $bolink->get_links('calendar', $calDayEntry['id'], 'projects'))) { $projectLinks = array_flip($projectLinks); #_debug_array($projectLinks); if (isset($projectLinks[$pro[project_id]])) { $bar->SetPattern(BAND_SOLID, "#33FF33"); $bar->SetColor('#33FF33'); } } $graphs['bars'][] = $bar; #$graph->Add($bar); } else { print "rejected<br>"; } } } $counter++; } } } // if end } // check for milstones if (is_array($pro['mstones']) && $showMilestones == 'true') { $msColor = "#999999"; foreach ($pro['mstones'] as $ms) { if ($sdate < $ms['edate'] && $ms['edate'] <= $edate) { $ms[title] = $this->botranslation->convert($ms[title], $this->displayCharset, 'iso-8859-1'); $msData = array('title' => $ms['title'], 'extracolor' => 'yellow', 'edate' => $ms['edate'], 'pro_id' => $pro['project_id']); // Create a milestone mark $ms = new MileStone($counter, str_repeat(' ', $pro['level'] + 1) . lang('Milestone'), date('Y-m-d', $msData['edate']), $msData['title']); $ms->caption->SetFont(FF_VERA, FS_NORMAL, 8); $ms->title->SetFont(FF_VERA, FS_NORMAL, 8); $ms->mark->SetColor($msColor); $ms->mark->SetFillColor('#EEEEEE'); $graphs['ms'][$counter] = $ms; // Create a vertical line to emphasize the milestone $vl = new GanttVLine(date('Y-m-d', $msData[edate]), '', $msColor, 2); $vl->SetDayOffset(0.5); // Center the line in the day $graphs['vl'][$counter] = $vl; $counter++; } } } } // add the vertical lines if (is_array($graphs['vl'])) { foreach ($graphs['vl'] as $graphCounter => $graphPointer) { $graph->Add($graphPointer); } } // add the milestones if (is_array($graphs['ms'])) { foreach ($graphs['ms'] as $graphCounter => $graphPointer) { $graph->Add($graphPointer); } } // add the resources if (is_array($graphs['bars'])) { foreach ($graphs['bars'] as $graphCounter => $graphPointer) { $graph->Add($graphPointer); } } #$graph->Stroke(PHPGW_SERVER_ROOT . SEP . 'phpgwapi' . SEP . 'images' . SEP . 'draw_tmp.png'); $graph->Stroke($_filename); } }
$graph->scale->month->grid->SetColor('gray'); $graph->scale->month->grid->Show(true); $graph->scale->year->grid->SetColor('gray'); $graph->scale->year->grid->Show(true); // Setup activity info // For the titles we also add a minimum width of 100 pixels for the Task name column $graph->scale->actinfo->SetColTitles(array('Name', 'Duration', 'Start', 'Finish'), array(100)); $graph->scale->actinfo->SetBackgroundColor('green:0.5@0.5'); $graph->scale->actinfo->SetFont(FF_ARIAL, FS_NORMAL, 10); $graph->scale->actinfo->vgrid->SetStyle('solid'); $graph->scale->actinfo->vgrid->SetColor('gray'); // Data for our example activities $data = array(array(0, array("Pre-study", "102 days", "23 Nov '01", "1 Mar '02"), "2001-11-23", "2002-03-1", FF_ARIAL, FS_NORMAL, 8), array(1, array("Prototype", "21 days", "26 Oct '01", "16 Nov '01"), "2001-10-26", "2001-11-16", FF_ARIAL, FS_NORMAL, 8), array(2, array("Report", "12 days", "1 Mar '02", "13 Mar '02"), "2002-03-01", "2002-03-13", FF_ARIAL, FS_NORMAL, 8)); // Create the bars and add them to the gantt chart for ($i = 0; $i < count($data); ++$i) { $bar = new GanttBar($data[$i][0], $data[$i][1], $data[$i][2], $data[$i][3], "[50%]", 10); if (count($data[$i]) > 4) { $bar->title->SetFont($data[$i][4], $data[$i][5], $data[$i][6]); } $bar->SetPattern(BAND_RDIAG, "yellow"); $bar->SetFillColor("gray"); $bar->progress->Set(0.5); $bar->progress->SetPattern(GANTT_SOLID, "darkgreen"); $graph->Add($bar); } // Output the chart $graph->Stroke(); ?>
} } else { $activity[$i]->SetPattern(BAND_RDIAG, "red"); } $activity[$i]->caption->Set($caption); //$graph->Add($activity[$i]); $i++; } atkimport("module.utils.dateutil"); // milestones $milestonenode =& atkGetNode("project.deliverable"); $deliverables = $milestonenode->selectDb("project_id=" . $projectid, "duedate"); for ($i = 0, $_i = count($deliverables); $i < $_i; $i++) { $due = date("Y-m-d", dateutil::arr2stamp($deliverables[$i]["duedate"])); $ms = new MileStone(count($gant) + $i, $deliverables[$i]["name"], $due, $due . " (" . $deliverables[$i]["name"] . ")"); $graph->Add($ms); } // dependencies for ($i = 0, $_i = count($dbrecordsdep); $i < $_i; $i++) { $activity[$reverselookup[$dbrecordsdep[$i]["dependency_phaseid_row"]]]->SetConstrain($reverselookup[$dbrecordsdep[$i]["dependency_phaseid_col"]], CONSTRAIN_ENDSTART); } for ($i = 0, $_i = count($activity); $i < $_i; $i++) { $graph->Add($activity[$i]); } //TO DO: find a good solution for errorhandling //here you can set a subtitle //$graph->subtitle->Set('title'); if (count($gant) == 0) { $graph->SetDateRange(time(), time() + 86400); } //Add only a vertical line with the actual date when this actual date is between the start- and enddate of the project