*/ global $projekt_kurzbz; global $oe; global $studienjahr; global $ansicht; if(isset($_REQUEST['projekt']) || isset($_REQUEST['oe'])) { $projekt_kurzbz = isset($_REQUEST['projekt'])?$_REQUEST['projekt']: ''; $oe = isset($_REQUEST['oe'])?$_REQUEST['oe']:''; } else die ('Kein Projekt oder OE übergeben!'); if(isset($_REQUEST['beginn']) && isset($_REQUEST['ende'])) { $beginn = $_REQUEST['beginn']; $ende = $_REQUEST['ende']; } if(isset($_REQUEST['studienjahr'])) $studienjahr = $_REQUEST['studienjahr']; if(isset($_REQUEST['ansicht'])) $ansicht = $_REQUEST['ansicht']; // header für no cache header("Cache-Control: no-cache"); header("Cache-Control: post-check=0, pre-check=0",false); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Pragma: no-cache"); // content type setzen header("Content-type: application/xhtml+xml"); require_once('../../config/vilesci.config.inc.php'); require_once('../../include/projektphase.class.php'); require_once('../../include/projekt.class.php'); require_once('../../include/functions.inc.php'); require_once('../../include/datum.class.php'); if($projekt_kurzbz != '') { // Zeichne alle Phasen vom übergebenen Projekt getProjektGantt(); } else { if(!isset($_REQUEST['beginn'])) getOeGantt(); else getOeGanttZeitraum($beginn, $ende); } function getOeGanttZeitraum($beginn, $ende) { global $oe; $datum = new datum(); $widthPerWeek = 16; $startX =50; $startY = 90; $split_date_beginn = explode('.', $beginn); $split_date_ende = explode('.', $ende); $timestampZeitraum_beginn = mktime(0,0,0,$split_date_beginn[1],$split_date_beginn[0], $split_date_beginn[2]); $timestampZeitraum_ende = mktime(0,0,0,$split_date_ende[1],$split_date_ende[0], $split_date_ende[2]); $cw = getCwRange($timestampZeitraum_beginn, $timestampZeitraum_ende); $anzahlKw = count($cw); $beginn = $datum->formatDatum($beginn, 'Y-m-d'); $ende = $datum->formatDatum($ende, 'Y-m-d'); $projekt = new projekt(); if(!$projekt->getProjekteInZeitraum($beginn, $ende, $oe)) die('Fehler beim laden der Projekte aufgetreten'); $height = (count($projekt->result)) * 50; echo ' '; echo ' '; // Überschriften echo'Projekte zwischen '.$beginn.' und '.$ende.''; echo' KW:'; // Zeichne Raster for($i=1; $i<=$anzahlKw; $i++) { $x1 = $startX + $i*$widthPerWeek; echo ''; if($i%2 == 1) echo ''.$cw[$i-1]['week'].''; } $i=0; foreach($projekt->result as $projekt) { $width = 0; $x = 0; // wenn kein start oder ende angegeben -> nichts zeichnen -> width=0 if($projekt->beginn != '' && $projekt->ende != '') { $timestamp_beginn = $datum->mktime_fromdate($projekt->beginn); $timestamp_end = $datum->mktime_fromdate($projekt->ende); $kw_beginn = kalenderwoche($timestamp_beginn); $kw_end = kalenderwoche($timestamp_end); $year_beginn=date("Y",$timestamp_beginn); $year_end=date("Y",$timestamp_end); $cw_projekt = getCwRange($timestamp_beginn, $timestamp_end); $anzahlKwProjekt = count($cw_projekt); // Projekt beginnt und endet in aktuellem Zeitraum //stimmt if($timestamp_beginn >= $timestampZeitraum_beginn && $timestamp_end <= $timestampZeitraum_ende) { $help = $kw_beginn-$cw[0]['week']; $x = ($startX + $help*$widthPerWeek); $width = $anzahlKwProjekt*$widthPerWeek; } // Projekt beginnt im und endet nach Zeitraum // stimmt if($timestamp_beginn>$timestampZeitraum_beginn && $timestamp_end > $timestampZeitraum_ende) { $cw_help = getCwRange($timestampZeitraum_beginn, $timestamp_beginn); $cw_help_anzahl = count($cw_help); // Anzahl der Wochen zwischen Zeitraumbeginn und Projektbeginn $x = $startX+($cw_help_anzahl*$widthPerWeek); $width = ($anzahlKw- $cw_help_anzahl)*$widthPerWeek; } // Projekt beginnt vor und endet im Zeitraum if($timestamp_beginn < $timestampZeitraum_beginn && $timestamp_end < $timestampZeitraum_ende) { $cw_help = getCwRange($timestampZeitraum_beginn, $timestamp_end); $cw_help_anzahl = count($cw_help); // Anzahl der Wochen zwischen Zeitraumbeginn und Projektbeginn $x = $startX; $width = ($cw_help_anzahl)*$widthPerWeek; } // Projekt beginnt vor und endet nach Zeitraum if($timestamp_beginn <= $timestampZeitraum_beginn && $timestamp_end >= $timestampZeitraum_ende) { $x = $startX; $width = $anzahlKw *$widthPerWeek; } } // zeichne balken echo ''; echo''.htmlspecialchars($projekt->titel).''; // Zeichne Phasen in Projektbalken $projektphasen = new projektphase(); $projektphasen->getProjektphasen($projekt->projekt_kurzbz); 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); $year_beginn=date("Y",$timestamp_beginn); $year_end=date("Y",$timestamp_end); $cw_projekt = getCwRange($timestamp_beginn, $timestamp_end); $anzahlKwProjekt = count($cw_projekt); // Projekt beginnt und endet in aktuellem Zeitraum //stimmt if($timestamp_beginn > $timestampZeitraum_beginn && $timestamp_end < $timestampZeitraum_ende) { $cw_help = getCwRange($timestampZeitraum_beginn, $timestamp_beginn); $cw_help_anzahl = count($cw_help); // Anzahl der Wochen zwischen Zeitraumbeginn und Projektbeginn $x = $startX+($cw_help_anzahl*$widthPerWeek); $width = $anzahlKwProjekt*$widthPerWeek; } // Projekt beginnt im und endet nach Zeitraum // stimmt if($timestamp_beginn>$timestampZeitraum_beginn && $timestamp_end > $timestampZeitraum_ende) { $cw_help = getCwRange($timestampZeitraum_beginn, $timestamp_beginn); $cw_help_anzahl = count($cw_help); // Anzahl der Wochen zwischen Zeitraumbeginn und Projektbeginn $x = $startX+($cw_help_anzahl*$widthPerWeek); $width = ($anzahlKw- $cw_help_anzahl)*$widthPerWeek; } // Projekt beginnt vor und endet im Zeitraum if($timestamp_beginn < $timestampZeitraum_beginn && $timestamp_end < $timestampZeitraum_ende && $timestamp_end > $timestampZeitraum_beginn) { $cw_help = getCwRange($timestampZeitraum_beginn, $timestamp_end); $cw_help_anzahl = count($cw_help); // Anzahl der Wochen zwischen Zeitraumbeginn und Projektbeginn $x = $startX; $width = ($cw_help_anzahl)*$widthPerWeek; } // Projekt beginnt vor und endet nach Zeitraum if($timestamp_beginn <= $timestampZeitraum_beginn && $timestamp_end >= $timestampZeitraum_ende) { $x = $startX; $width = $anzahlKw *$widthPerWeek; } } // zeichne phasenbalken echo ''; } $i++; } echo'Organisationseinheit: '.$projekt->oe_kurzbz.''; echo ''; } function getCwRange($start, $end) { if($start > $end) { throw new InvalidArgumentException('Falsche Reihenfolge der Argumente'); } $duration = ceil(($end-$start)/3600/24/7); for($i = 0; $i < $duration; ++$i) { $week = mktime(0, 0, 0, date('m', $start), date('d', $start)+($i*7), date('Y', $start)); $cw[$i]['week'] = date('W', $week); $cw[$i]['year'] = date('Y', $week); } return $cw; } /** * * Zeichnet den Chart für alle Projekte einer Übergebenen Organisationseinheit */ function getOeGantt() { global $oe; global $studienjahr; global $ansicht; $projekt = new projekt(); if(!$projekt->getProjekte($oe)) die('Keine gültige OE übergeben.'); $datum = new datum(); $widthPerWeek = 16; $startX =50; $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($projekt->result)) * 50; // Zeichne Kalenderjahr -> beginnend mit KW 1 if($ansicht=='kalenderjahr') { echo ' '; echo ' '; // Überschriften echo'Projekte Kalenderjahr: '.$studienjahr.''; echo' KW:'; // Zeichne Raster for($i=1; $i<=$kw_gesamt; $i++) { $x1 = $startX + $i*$widthPerWeek; echo ''; if($i%2 == 1) echo ''.$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); echo ''; } $i=0; foreach($projekt->result as $projekt) { $width = 0; $x = 0; // wenn kein start oder ende angegeben -> nichts zeichnen -> width=0 if($projekt->beginn != '' && $projekt->ende != '') { $timestamp_beginn = $datum->mktime_fromdate($projekt->beginn); $timestamp_end = $datum->mktime_fromdate($projekt->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 echo ''; echo''.htmlspecialchars($projekt->titel).''; // Zeichne Phasen in Projektbalken $projektphasen = new projektphase(); $projektphasen->getProjektphasen($projekt->projekt_kurzbz); 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 phasenbalken echo ''; } $i++; } echo'Organisationseinheit: '.htmlspecialchars($projekt->oe_kurzbz).''; echo ''; } else if($ansicht == 'studienjahr') { echo ' '; echo ''; // Überschriften echo'Projekte Studienjahr: '.$studienjahr.'/'.($studienjahr+1).''; echo' 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); echo ''; if($y%2 == 0) echo ''.$i.''; $y++; } // Zeichne Raster studienjahr SS for($i=1; $i<=$kw_new; $i++) { $x1 = ($startX +$y*$widthPerWeek); echo ''; if($y%2 == 0) echo ''.$i.''; $y++; } echo ''; $i=0; foreach($projekt->result as $projekt) { $width = 0; $x = 0; // wenn kein start oder ende angegeben -> nichts zeichnen -> width=0 if($projekt->beginn != '' && $projekt->ende != '') { $timestamp_beginn = $datum->mktime_fromdate($projekt->beginn); $timestamp_end = $datum->mktime_fromdate($projekt->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 //echo "test:".$test.$projekt->titel."jahr".$studienjahr; echo ''; echo''.htmlspecialchars($projekt->titel).''; // Zeichne Phasen in Projektbalken $projektphasen = new projektphase(); $projektphasen->getProjektphasen($projekt->projekt_kurzbz); 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 echo ''; } $i++; } echo'Organistationseinheit: '.$projekt->oe_kurzbz.''; // 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); echo ''; } else if($year_now == $studienjahr+1 && $kw_now < $kw_new) { $x = (($startX +(($kw_now+$kw_gesamt - $kw_old +1 )*$widthPerWeek))-$widthPerWeek/2); echo ''; } echo ''; } } /** * * Zeichnet den Chart für alle Phasen eines übergebenen Projektes */ function getProjektGantt() { global $projekt_kurzbz; global $studienjahr; global $ansicht; $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; // Zeichne Kalenderjahr -> beginnend mit KW 1 if($ansicht=='kalenderjahr') { echo ' '; echo ' '; // Überschriften echo'Phasen Kalenderjahr: '.$studienjahr.''; echo' KW:'; // Zeichne Raster for($i=1; $i<=$kw_gesamt; $i++) { $x1 = $startX + $i*$widthPerWeek; echo ''; if($i%2 == 1) echo ''.$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); echo ''; } $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; } } $style = ''; $pr_phase = new projektphase(); $ende_phase = $phase->ende; $date_now = date('Y-m-d', time()); // check ob phase in vergangenheit liegt und noch nicht abgeschlossen ist -> markieren if(!$pr_phase->isPhaseErledigt($phase->projektphase_id) && $date_now > $ende_phase) $style = 'style ="stroke:pink;stroke-width:10;"'; // zeichne balken echo ''; echo''.htmlspecialchars($phase->bezeichnung).''; $i++; } echo'Projekt: '.htmlspecialchars($projekt->titel).''; echo ''; } else if($ansicht == 'studienjahr') { echo ' '; echo ''; // Überschriften echo'Phasen Studienjahr: '.$studienjahr.'/'.($studienjahr+1).''; echo' 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); echo ''; if($y%2 == 0) echo ''.$i.''; $y++; } // Zeichne Raster studienjahr SS for($i=1; $i<=$kw_new; $i++) { $x1 = ($startX +$y*$widthPerWeek); echo ''; if($y%2 == 0) echo ''.$i.''; $y++; } echo ''; $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 $style = ''; $pr_phase = new projektphase(); $ende_phase = $phase->ende; $date_now = date('Y-m-d', time()); // check ob phase in vergangenheit liegt und noch nicht abgeschlossen ist -> markieren if(!$pr_phase->isPhaseErledigt($phase->projektphase_id) && $date_now > $ende_phase) $style = 'style ="stroke:pink;stroke-width:10;"'; echo ''; echo''.htmlspecialchars($phase->bezeichnung).''; $i++; } echo'Projekt: '.htmlspecialchars($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); echo ''; } else if($year_now == $studienjahr+1 && $kw_now < $kw_new) { $x = (($startX +(($kw_now+$kw_gesamt - $kw_old +1 )*$widthPerWeek))-$widthPerWeek/2); echo ''; } echo ''; } } ?>