diff --git a/include/gantt.class.php b/include/gantt.class.php new file mode 100755 index 000000000..d1fc3bbe3 --- /dev/null +++ b/include/gantt.class.php @@ -0,0 +1,336 @@ + + */ + +require_once(dirname(__FILE__).'/basis_db.class.php'); +require_once(dirname(__FILE__).'/projektphase.class.php'); +require_once(dirname(__FILE__).'/projekt.class.php'); +require_once(dirname(__FILE__).'/datum.class.php'); +require_once(dirname(__FILE__).'/functions.inc.php'); + +class gantt extends basis_db +{ + + function __construct() + { + parent::__construct(); + } + + /** + * Gibt den SVG_String zu einem GANTT Diagramm zurück + * @param $projekt_kurzbz + * @param $studienjahr + * @return string + */ + function getBeschreibungGantt($projekt_kurzbz, $studienjahr, $ansicht='kalenderjahr') + { + + $svg_out = ''; + $projektphasen = new projektphase(); + if(!$projektphasen->getProjektphasen($projekt_kurzbz)) + die('Kein gültiges Projekt übergeben.'); + $projekt = new projekt(); + if(!$projekt->load($projekt_kurzbz)) + die('Konnte Projekt nicht laden.'); + + $datum = new datum(); + $widthPerWeek = 16; + $startX = 20; + $startY = 90; + // KW in der 28.12 liegt ist letzte KW + $datum_gesamt = $studienjahr.'-12-28'; + $timestamp_gesamt = $datum->mktime_fromdate($datum_gesamt); + $kw_gesamt = date('W',$timestamp_gesamt); + + // kommt auf Anzahl der Phasen an + $height = (count($projektphasen->result)) * 50; + + if($ansicht == 'kalenderjahr') + { + // Zeichne Kalenderjahr -> beginnend mit KW 1 + + $svg_out.= ' + '; + + $svg_out.= ' + '; + + // Überschriften + $svg_out.='Phasen Kalenderjahr: '.$studienjahr.''; + $svg_out.=' KW:'; + + // Zeichne Raster + for($i=1; $i<=$kw_gesamt; $i++) + { + $x1 = $startX + $i*$widthPerWeek; + $svg_out.= ''; + if($i%2 == 1) + $svg_out.= ''.$i.''; + + } + + // aktuelle KW markieren + $timestamp_now = time(); + $kw_now = kalenderwoche($timestamp_now); + $year_now=date("Y",$timestamp_now); + if($year_now == $studienjahr) + { + $x = (($startX +($kw_now*$widthPerWeek))-$widthPerWeek/2); + $svg_out.= ''; + } + + $i=0; + foreach($projektphasen->result as $phase) + { + $width = 0; + $x = 0; + // wenn kein start oder ende angegeben -> nichts zeichnen -> width=0 + if($phase->start != '' && $phase->ende != '') + { + $timestamp_beginn = $datum->mktime_fromdate($phase->start); + $timestamp_end = $datum->mktime_fromdate($phase->ende); + $kw_beginn = kalenderwoche($timestamp_beginn); + $kw_end = kalenderwoche($timestamp_end); + // kw soll bei 0 zu zeichnen beginnen + $kw_beginn = $kw_beginn -1; + $kw_end = $kw_end -1; + + $year_beginn=date("Y",$timestamp_beginn); + $year_end=date("Y",$timestamp_end); + + // phase beginnt und endet im Jahr + if($year_end == $year_beginn && $year_beginn == $studienjahr) + { + $width = ($kw_end - $kw_beginn+1)*$widthPerWeek; + $x = ($startX+$kw_beginn*$widthPerWeek); + } + // endet im nächsten jahr + else if($year_beginn == $studienjahr && $year_end > $year_beginn) + { + $width = ($kw_gesamt - $kw_beginn)*$widthPerWeek; + $x = ($startX+$kw_beginn*$widthPerWeek); + } + // geht über gesamtes jahr + else if($year_beginn < $studienjahr && $year_end > $studienjahr) + { + $width = ($kw_gesamt*$widthPerWeek); + $x = $startX; + } + // beginnt im vorigen und endet im aktuellen + else if($year_beginn < $studienjahr && $year_end == $studienjahr) + { + $width = ($kw_end+1)*$widthPerWeek; + $x = $startX; + } + } + + // zeichne balken + $svg_out.= ''; + $svg_out.=''.$phase->bezeichnung.''; + $i++; + } + $svg_out.='Projekt: '.$projekt->titel.''; + + $svg_out.= ''; + + return $svg_out; + } + else if($ansicht == 'studienjahr') + { + $svg_out.= ' + '; + $svg_out.= ''; + + // Überschriften + $svg_out.='Phasen Studienjahr: '.$studienjahr.'/'.($studienjahr+1).''; + $svg_out.=' KW:'; + + // WS + $year_old = $studienjahr.'-09-01'; + $timestamp_old = $datum->mktime_fromdate($year_old); + $kw_old = kalenderwoche($timestamp_old); + + // SS + $year_new = ($studienjahr+1).'-09-01'; + $timestamp_new = $datum->mktime_fromdate($year_new); + $kw_new = kalenderwoche($timestamp_new); + + // gesamtanzahl der KWs im Studienjahr + $y = 0; + // Zeichne Raster studienjahr WS + for($i=$kw_old; $i<=$kw_gesamt; $i++) + { + $x1 = ($startX +$y*$widthPerWeek); + $svg_out.= ''; + if($y%2 == 0) + $svg_out.= ''.$i.''; + $y++; + } + // Zeichne Raster studienjahr SS + for($i=1; $i<=$kw_new; $i++) + { + $x1 = ($startX +$y*$widthPerWeek); + $svg_out.= ''; + if($y%2 == 0) + $svg_out.= ''.$i.''; + $y++; + } + $svg_out.= ''; + + $i=0; + foreach($projektphasen->result as $phase) + { + $width = 0; + $x = 0; + // wenn kein start oder ende angegeben -> nichts zeichnen -> width=0 + if($phase->start != '' && $phase->ende != '') + { + $timestamp_beginn = $datum->mktime_fromdate($phase->start); + $timestamp_end = $datum->mktime_fromdate($phase->ende); + $kw_beginn = kalenderwoche($timestamp_beginn); + $kw_end = kalenderwoche($timestamp_end); + $kw_beginn = $kw_beginn; + $kw_end = $kw_end; + + $startSS = $kw_gesamt-$kw_old; + + $year_beginn=date("Y",$timestamp_beginn); + $year_end=date("Y",$timestamp_end); + $test = 0; + // phase beginnt und endet im WS + if($year_end == $year_beginn && $year_beginn == $studienjahr && $kw_beginn >= $kw_old) + { + $width = ($kw_end - $kw_beginn + 1)*$widthPerWeek; + $x = ($startX+($kw_beginn-$kw_old)*$widthPerWeek); + $test = 1; + } + // phase beginnt und endet im SS + if($year_end == $year_beginn && $year_beginn == $studienjahr+1 && $kw_beginn >= 1 && $kw_end <=$kw_new) + { + if($kw_end == 1)// es kann auch sein dass 31.12 des kalenderjahres schon in der 1. KW liegt + $kw_end =$kw_new; + $width = ($kw_end - $kw_beginn + 1)*$widthPerWeek; + $x = ($startX+($kw_beginn+$startSS)*$widthPerWeek); + $test = 2; + } + // phase beginnt im WS und endet im SS + else if($year_beginn == $studienjahr && $year_end == $studienjahr+1 && $kw_beginn >= $kw_old && $kw_end <= $kw_new) + { + $width = ($kw_gesamt - $kw_beginn + $kw_end + 1)*$widthPerWeek; + $x = ($startX+($kw_beginn-$kw_old)*$widthPerWeek); + $test = 3; + } + // geht über gesamtes studienjahr + else if($year_beginn == $studienjahr && $kw_beginn <= $kw_old && (($year_end == $studienjahr+1 && $kw_end >= $kw_new) || $year_end > $studienjahr+1)) + { + $width = $y*$widthPerWeek; + $x = $startX; + $test = 4; + } + // geht über gesamtes studienjahr + else if($year_beginn < $studienjahr && $year_end > $studienjahr+1) + { + $width = $y*$widthPerWeek; + $x = $startX; + $test = 5; + } + // beginnt früher und endet im aktuellen WS + else if((($year_beginn == $studienjahr && $kw_beginn < $kw_old) || ($year_beginn < $studienjahr)) && ($year_end == $studienjahr && $kw_end >= $kw_old)) + { + + $width = ($kw_end - $kw_old + 1)*$widthPerWeek; + $x = $startX; + $test = 6; + } + // beginnt früher und endet im aktuellen SS + else if((($year_beginn == $studienjahr && $kw_beginn < $kw_old) || ($year_beginn < $studienjahr)) && ($year_end == $studienjahr+1 && $kw_end <= $kw_new)) + { + if($kw_end == 1) // es kann auch sein dass 31.12 des kalenderjahres schon in der 1. KW liegt + $kw_end =$kw_new; + $width = ($kw_gesamt - $kw_old + $kw_end + 1)*$widthPerWeek; + $x = $startX; + $test = 7; + } + // beginnt im aktuellen WS und endet nach Studienjahr im aktuellen Kalenderjahr + else if(($year_beginn == $studienjahr && $kw_beginn >= $kw_old) && ($year_end == $studienjahr+1 && $kw_end > $kw_new)) + { + $width = ($kw_gesamt - $kw_beginn + $kw_new + 1)*$widthPerWeek; + $x = ($startX+($kw_beginn-$kw_old)*$widthPerWeek); + $test = 8; + } + // beginnt im aktuellen WS und endet nach Studienjahr und nach aktuellem Kalenderjahr + else if(($year_beginn == $studienjahr && $kw_beginn > $kw_old) && ($year_end > $studienjahr+1)) + { + $width = ($kw_gesamt - $kw_beginn + $kw_new + 1)*$widthPerWeek; + $x = ($startX+($kw_beginn-$kw_old)*$widthPerWeek); + $test = 9; + } + // beginnt im aktuellen SS und endet nach Studienjahr im aktuellen Kalenderjahr + else if(($year_beginn == $studienjahr+1 && $kw_beginn <= $kw_new) && ($year_end == $studienjahr+1 && ($kw_end > $kw_new || $kw_end == 1))) // da 31.123 + { + $width = ($y-$kw_beginn - $startSS)*$widthPerWeek; + $x = ($startX+($kw_beginn+$startSS)*$widthPerWeek); + $test = 10; + } + // beginnt im aktuellen SS und endet nach Studienjahr und nach aktuellem Kalenderjahr + else if(($year_beginn == $studienjahr+1 && $kw_beginn <= $kw_new) && ($year_end > $studienjahr+1)) + { + $width = ($y-$kw_beginn - $startSS)*$widthPerWeek; + $x = ($startX+($kw_beginn+$startSS)*$widthPerWeek); + $test = 11; + } + } + + // zeichne balken + $svg_out.= ''; + $svg_out.=''.$phase->bezeichnung.''; + $i++; + } + + $svg_out.='Projekt: '.$projekt->titel.''; + + // aktuelle KW markieren + $timestamp_now = time(); + $kw_now = kalenderwoche($timestamp_now); + $year_now=date("Y",$timestamp_now); + if($year_now == $studienjahr && $kw_now > $kw_old) + { + $x = (($startX +(($kw_now-$kw_old)*$widthPerWeek))-$widthPerWeek/2); + $svg_out.= ''; + } + else if($year_now == $studienjahr+1 && $kw_now < $kw_new) + { + $x = (($startX +(($kw_now+$kw_gesamt - $kw_old +1 )*$widthPerWeek))-$widthPerWeek/2); + $svg_out.= ''; + } + $svg_out.= ''; + + return $svg_out; + } + } +} + +?> diff --git a/include/projektphase.class.php b/include/projektphase.class.php index f26e3f7a5..e414f9965 100755 --- a/include/projektphase.class.php +++ b/include/projektphase.class.php @@ -162,11 +162,11 @@ class projektphase extends basis_db } /** - * Laedt die Projektphasen mit zu einem Projekt + * Laedt die Projektphasen zu einem Projekt * @param $projekt_kurzbz Projekt der zu ladenden Projektphasen * @param $foreignkey wenn ! gib nur die Erste Ebene der Projektphasen zurück * @return true wenn ok, false im Fehlerfall - */ + */ public function getProjektphasen($projekt_kurzbz, $foreignkey = null) { $this->result=array();