Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
timerec3public/kalender.php
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
235 lines (213 sloc)
8.83 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php session_start(); ?> | |
<?php | |
include('dbconnect.php'); | |
//Feiertag-Funktion | |
function feiertag($tag, $monat, $jahr){ | |
global $dbc; | |
//empty um wiederholte DB abfrage zu verhindern | |
if(empty($feiertage)){ | |
// Feste Feiertage werden nach dem Schema ddmm eingetragen | |
$feiertage[] = "0101"; // Neujahrstag | |
$feiertage[] = "0105"; // Tag der Arbeit | |
$feiertage[] = "0310"; // Tag der Deutschen Einheit | |
$feiertage[] = "2412"; // Weihnachten | |
$feiertage[] = "2512"; // Erster Weihnachtstag | |
$feiertage[] = "2612"; // Zweiter Weihnachtstag | |
$feiertage[] = "3112"; // Neujahr | |
// Bewegliche Feiertage berechnen | |
$tage = 60 * 60 * 24; | |
$ostersonntag = easter_date($jahr); | |
$feiertage[] = date("dm", $ostersonntag - 2 * $tage); // Karfreitag | |
$feiertage[] = date("dm", $ostersonntag + 1 * $tage); // Ostermontag | |
$feiertage[] = date("dm", $ostersonntag + 39 * $tage); // Himmelfahrt | |
$feiertage[] = date("dm", $ostersonntag + 50 * $tage); // Pfingstmontag | |
//freie Tage FHI aus Datenbank nehmen | |
$getfree = $dbc->query("select daymon from feiertag where year = $jahr;"); | |
foreach($getfree as $free){ | |
$bruecke[] = $free['daymon']; | |
} | |
} | |
// Prüfen, ob Feiertag | |
$code = $tag.$monat; | |
if(in_array($code, $bruecke)){ | |
return 2; | |
}elseif(in_array($code, $feiertage)){ | |
return 1; | |
}else{ | |
return 0; | |
} | |
} | |
//unbedingt deutsche Sprache auf Server nachrüsten mit: | |
//sudo locale-gen de_DE.UTF-8 | |
//sudo update-locale LANG=de_DE.UTF-8 | |
//sudo service apache2 restart | |
//wortlaut im setlocale() befehl MUSS korrekt sein! (s.u.) | |
setlocale(LC_TIME, 'de_DE.UTF8'); | |
//session_start(); | |
if(!$_SESSION['userid']){ | |
session_destroy(); | |
include('login.php'); | |
exit; | |
} | |
if(!$_SESSION['userarray']['admin'] && $_SESSION['userarray']['maID'] != $_SESSION['infoarray']['maID'] && | |
!in_array($_SESSION['infoarray']['agID'], $_SESSION['userarray']['ag_array'])){ | |
echo "<h3>keine Rechte, diese Seite einzusehen!</h3>"; | |
exit; | |
} | |
if(isset($_GET['jahr'])){ | |
$jahr = $_GET['jahr']; | |
}else{ | |
$jahr = new DateTime(); | |
$jahr = $jahr->format('Y'); | |
} | |
$maID = $_SESSION['infoarray']['maID']; | |
$name = $_SESSION['infoarray']['nachname'] . ", " . $_SESSION['infoarray']['vorname']; | |
$getazm = "select * from az_data_copy data where maID = '$maID' order by azdID desc, datum_ab desc;"; | |
$azm = $dbc->query($getazm); | |
foreach($azm as $az){ | |
$getazt = $dbc->query("select * from az_time where azdID = $az[azdID];"); | |
foreach($getazt as $aztline){ | |
$azt[$aztline['azdID']][$aztline['tag']] = $aztline; | |
} | |
} | |
//print_r($azt); | |
$getkalender = "select datum, typ, zt_bez, status from kalender k | |
join zeittyp zt on k.typ = zt.zt_ID | |
where maID = '$maID' and year(datum) = $jahr order by datum, k_id asc;"; | |
$reskalender = $dbc->query($getkalender); | |
foreach($reskalender as $kalendereintrag){ | |
$kalender[$kalendereintrag['datum']] = $kalendereintrag; | |
} | |
if($_SESSION['userarray']['admin'] && isset($_GET['berechnen'])){ | |
exec("./urlaubrun.php $jahr $maID"); | |
header("Location: kalender.php"); | |
exit; | |
} | |
?> | |
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8"> | |
<title>timerec | Kalender</title> | |
<link rel="stylesheet" type="text/css" href="style.css" media="screen"> | |
<link rel="stylesheet" type="text/css" href="print.css" media="print"> | |
<link rel="shortcut icon" href="favicon.ico"> | |
</head> | |
<body> | |
<?php | |
echo "<div id='headline'> | |
<a href='index.php?ma=".$_SESSION['infoarray']['maID']."'><button id='home'><< Menü</button></a> | |
<div id='back'><a href='kalender.php?jahr=".($jahr-1)."'><button><<<</button></a></div> | |
Jahreskalender <b>$jahr</b> für $name | |
<div id='forward'><a href='kalender.php?jahr=".($jahr+1)."'><button>>>></button></a></div> | |
</div> | |
<h2 id='ueberschrift' style='display: none'>Jahreskalender <strong>$jahr</strong> für $name</h2>"; | |
echo "<div id='kalender'>"; | |
echo "<table>"; | |
echo "<tr>"; | |
echo "<th> </th>"; | |
for($i = 1; $i <= 31; $i++){ //Kopfzeile Tage nummerieren | |
echo "<th>$i</th>"; | |
} | |
echo "</tr>"; | |
$genehmigt = 0; //genehmigte Tage zählen | |
for($m = 1; $m <= 12; $m++){ //vertikale Achse: Monatsweise Zeilen erzeugen | |
echo "<tr>"; | |
$date = new DateTime("$jahr-$m-01"); | |
$monat = strftime('%B', $date->getTimestamp()); | |
if($m < 10) $m = "0$m"; //<10 zweistellig machen | |
echo "<th>$monat</th>"; | |
for($t = 1; $t <= 31; $t++){ //pro Monat 31 Tage auflisten | |
if($t < 10) $t = "0$t"; //<10 zweistellig machen | |
$datestring = "$jahr-$m-$t"; | |
$date = new DateTime($datestring); | |
$heute = new DateTime(); | |
$heute = $heute->format('Y-m-d'); | |
if($heute == $datestring){ | |
$highlight = 'highlight'; | |
}else{ | |
$highlight = ''; | |
} | |
$wochentag = $date->format('N'); | |
if(!checkdate($m, $t, $jahr)){ //Nicht vorhandene Tage werden blau | |
$dark = "dark"; | |
}else{ | |
$dark = ""; | |
} | |
foreach($azm as $az){ //AZ-Modelle des MA durchlaufen und für dieses Datum geltendes verwenden | |
$az_ab = new DateTime($az['datum_ab']); | |
if($az_ab <= $date){ | |
break; | |
}else{ | |
$az = NULL; | |
} | |
} | |
$feiertag = feiertag($t, $m, $jahr); | |
//Debug: | |
//echo "<script>console.log('tag: $t.$m.$jahr -- $feiertag');</script>"; | |
if(!isset($azt[$az['azdID']][$wochentag])){ //arbeitsfreie Tage werden grau / rot | |
$disabled = 'disabled'; | |
$bruecke = false; | |
}elseif($feiertag){ | |
$disabled = 'disabled'; | |
if($feiertag == 2){ | |
$data = "B"; | |
$bruecke = true; | |
}else{ | |
$bruecke = false; | |
} | |
}else{ | |
$disabled = ""; | |
$bruecke = false; | |
} | |
if(in_array($datestring, array_keys($kalender))){ //Eintrag zu aktuellem Tag vorhanden? | |
//erweiterbar | |
$data = mb_substr($kalender[$datestring]["zt_bez"], 0,1, "UTF-8"); | |
switch($kalender[$datestring]["status"]){ | |
case "genehmigt": | |
$farbe = "green"; | |
if($kalender[$datestring]["typ"] == 10) $genehmigt++; //genehmigte Tage zählen //nur bei Urlaub zählen, nicht bei Gleittag! | |
break; | |
case "geprüft": | |
$farbe = "light-green"; | |
break; | |
case "abgelehnt": | |
$farbe = "red"; | |
break; | |
case "beantragt": | |
$farbe = "yellow"; | |
break; | |
default: | |
$farbe = ""; | |
} | |
}elseif(!$bruecke){ | |
$data = ""; | |
$farbe = ""; | |
} | |
//eigentliche Zelle wird hier erst geschrieben | |
echo "<td class='cell $farbe $dark $disabled $highlight'><a class='hiddenlink' href='buchen.php?datum=$datestring'>  $data  </a></td>"; | |
} | |
echo "</tr>"; | |
} | |
echo "</table>"; | |
$geturlaub = $dbc->query("select tage from urlaub where maID = $maID and jahr = $jahr;"); | |
$anspruch = $geturlaub->fetch_array()[0]; | |
$verbleibend = $anspruch - $genehmigt; | |
echo "<span class='abstand_oben'>Urlaub gesamt: <strong>$anspruch</strong></span><br>"; | |
echo "<span class='abstand_oben'>Urlaub genehmigt: <strong>$genehmigt</strong></span><br>"; | |
echo "<span class='abstand_oben'>Urlaub verbleibend: <strong>$verbleibend</strong></span>"; | |
if($_SESSION['userarray']['admin']){ | |
echo "<br><br><form id='neuladen' action='' method='get'><button name='berechnen' value='true'>Übertrag neu berechnen</button></form><br>"; | |
} | |
echo "<div id='legende'> | |
<h3>Legende</h3> | |
<span class='green'> </span> ---> genehmigt | |
<span class='light-green'> </span> ---> geprüft | |
<span class='yellow'> </span> ---> beantragt | |
<span class='red'> </span> ---> abgelehnt | |
<span class='disabled'> </span> ---> arbeitsfreier Tag | |
<span class='dark'> </span> ---> Tag existiert nicht | |
</div> | |
</div>"; | |
?> | |
</body> </html> |