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/ag-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.
253 lines (238 sloc)
10.7 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
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8"> | |
<title>timerec</title> | |
<link rel="stylesheet" type="text/css" href="style.css"> | |
<link rel="shortcut icon" href="favicon.ico"> | |
<script> | |
function scrolltoview(element){ | |
for(option of element.childNodes){ | |
if(option.selected){ | |
option.scrollIntoView(); | |
break; | |
} | |
} | |
} | |
</script> | |
</head> | |
<body onload='scrolltoview(document.getElementById("agauswahl"));'> | |
<?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[] = "2512"; // Erster Weihnachtstag | |
$feiertage[] = "2612"; // Zweiter Weihnachtstag | |
// 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){ | |
$feiertage[] = $free['daymon']; | |
} | |
} | |
// Prüfen, ob Feiertag | |
$code = $tag.$monat; | |
return in_array($code, $feiertage); | |
} | |
//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; | |
} | |
$infoarray = $_SESSION['infoarray']; | |
$userarray = $_SESSION['userarray']; | |
$maID = $infoarray['maID']; | |
if(isset($_GET['y'], $_GET['m'])){ | |
$jahr = $_GET['y']; | |
$monat = $_GET['m']; | |
$datum = new DateTime("$jahr-$monat-01"); | |
}else{ | |
$datum = new DateTime(); | |
$jahr = $datum->format('Y'); | |
$monat = $datum->format('m'); | |
} | |
if(isset($_GET['ag'])){ | |
//AGs laden, die ausgewählt wurden | |
//gegen unerwünschtes Laden anderer AGs sichern per prüfung, | |
//ob GET wert in userarray->ag_array vorhanden ist | |
foreach($_GET['ag'] as $ag){ | |
if($userarray['admin'] || in_array($ag, $userarray['ag_array'])){ | |
$agtoload[] = $ag; | |
} | |
} | |
}else{ | |
//AG aus infoarray laden (-> AG des vorher gewählten MA wird geöffnet) | |
if($userarray['admin'] || in_array($infoarray['agID'], $userarray['ag_array'])){ | |
$agtoload[] = $infoarray['agID']; | |
} | |
} | |
if(!$_SESSION['userarray']['admin'] && empty($agtoload)){ | |
$agtoload[] = current($userarray['ag_array']); | |
} | |
$getkalenderstr = "select k.maID, datum, typ, zt_bez, status from kalender k | |
join mitarbeiter m on k.maID = m.maID | |
join zeittyp zt on k.typ = zt.zt_ID | |
where agID in ("; | |
$getagpplstr = "select maID, concat(nachname, ', ', vorname) as name from mitarbeiter where agID in ("; | |
foreach($agtoload as $ag){ | |
$getkalenderstr .= "$ag, "; | |
$getagpplstr .= "$ag, "; | |
$agidstr .= "&ag[]=$ag"; | |
} | |
$getagpplstr = substr($getagpplstr, 0, -2); | |
$getagpplstr .= ") order by nachname;"; | |
$getagppl = $dbc->query($getagpplstr); | |
$getkalenderstr = substr($getkalenderstr, 0, -2); | |
$getkalenderstr .= ") and year(datum) = $jahr and month(datum) = $monat order by nachname, datum, k_id asc;"; | |
$reskalender = $dbc->query($getkalenderstr); | |
foreach($reskalender as $kalendereintrag){ | |
//nur aktuellste einträge pro MA und datum nehmen | |
$kalender[$kalendereintrag['maID']][$kalendereintrag['datum']] = $kalendereintrag; | |
} | |
if($userarray['admin'] || !empty($userarray['ag_array'])){ | |
$agname = "<form id='agwahl' action='ag-kalender.php' method='get'> | |
<select id='agauswahl' class='auswahl inline' multiple name='ag[]' size=1 onmousedown='this.size=10' onblur='this.size=1; for(option of this.childNodes){if(option.selected){option.scrollIntoView(); break;}}'>"; | |
if(!$userarray['admin']){ | |
$notadmin = "where ag_ID in ("; | |
foreach($userarray['ag_array'] as $ag){ | |
$notadmin .= "$ag, "; | |
} | |
$notadmin = substr($notadmin, 0, -2); | |
$notadmin .= ")"; | |
}else{ | |
$notadmin = ""; | |
} | |
$getag = $dbc->query("select * from ag $notadmin order by name;"); | |
foreach($getag as $ag){ | |
$id = $ag['ag_ID']; | |
$agbez = $ag['name']; | |
if(in_array($id, $agtoload)){ | |
$selected = "selected"; | |
}else{ | |
$selected = ""; | |
} | |
$agname .= "<option $selected value='$id'>$agbez</option>"; | |
} | |
$agname .= "</select> | |
<input type='hidden' name='y' value='$jahr'> | |
<input type='hidden' name='m' value='$monat'> | |
<button type='submit'>ansehen</button> | |
</form>"; | |
}else{ | |
$getag = $dbc->query("select name from ag where ag_ID = $infoarray[agID];"); | |
$agname = $getag->fetch_array()[0]; | |
} | |
$datum->modify('+1 month'); | |
$nextdate = $datum->format('\y\=Y\&\m\=m'); | |
$datum->modify('-2 month'); | |
$prevdate = $datum->format('\y\=Y\&\m\=m'); | |
$datum->modify('+1 month'); //zurücksetzen | |
echo "<div id='headline'> | |
<a href='index.php?ma=".$_SESSION['infoarray']['maID']."'><button id='home'><< Menü</button></a> | |
<div id='back'><a href='ag-kalender.php?$prevdate$agidstr'><button><<<</button></a></div> | |
AG-Kalender für <b>".strftime('%B %Y', $datum->getTimestamp())."</b> für $agname | |
<div id='forward'><a href='ag-kalender.php?$nextdate$agidstr'><button>>>></button></a></div> | |
</div>"; | |
echo "<div id='kalender'> | |
<table>"; | |
echo "<tr> | |
<th>Mitarbeiter</th>"; | |
for($i = 1; $i <= 31; $i++){ | |
echo "<th>$i</th>"; | |
} | |
echo "</tr>"; | |
foreach($getagppl as $ma){ | |
$id = $ma['maID']; | |
echo "<tr>"; | |
echo "<th class='maname'>".$ma['name']."</th>"; | |
for($i = 1; $i <= 31; $i++){ | |
$thisdate = new DateTime("$jahr-$monat-$i"); | |
$thisdatestr = $thisdate->format('Y-m-d'); | |
$wochentag = $thisdate->format('N'); | |
if(!checkdate($monat, $i, $jahr)){ //Nicht vorhandene Tage werden blau | |
$dark = "dark"; | |
}else{ | |
$dark = ""; | |
} | |
$azm = $dbc->query("select * from az_data_copy | |
where maID = '$id' order by azdID desc, datum_ab desc;"); | |
foreach($azm as $az){ | |
$getazt = $dbc->query("select * from az_time where azdID = $az[azdID];"); | |
foreach($getazt as $aztime){ | |
$azt[$aztime['azdID']][$aztime['tag']] = $aztime; | |
} | |
} | |
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 <= $thisdate){ | |
break; | |
}else{ | |
$az = NULL; | |
} | |
} | |
if(!isset($azt[$az['azdID']][$wochentag]) || feiertag($i, $monat, $jahr)){ //arbeitsfreie Tage werden grau | |
$disabled = 'disabled'; | |
}else{ | |
$disabled = ""; | |
} | |
if(in_array($thisdatestr, array_keys($kalender[$id]))){ //Eintrag zu aktuellem Tag vorhanden? //erweiterbar | |
$data = mb_substr($kalender[$id][$thisdatestr]["zt_bez"], 0,1, "UTF-8"); | |
switch($kalender[$id][$thisdatestr]["status"]){ | |
case "genehmigt": | |
$farbe = "green"; | |
break; | |
case "geprüft": | |
$farbe = "light-green"; | |
break; | |
case "abgelehnt": | |
$farbe = "red"; | |
break; | |
case "beantragt": | |
$farbe = "yellow"; | |
break; | |
default: | |
$farbe = ""; | |
} | |
}else{ | |
$data = ""; | |
$farbe = ""; | |
} | |
//eigentliche Zelle wird hier erst geschrieben | |
echo "<td class='cell $farbe $dark $disabled'><a class='hiddenlink' href='index.php?ma=$id&toyearcal=".$thisdate->format('Y')."'>  $data  </a></td>"; | |
} | |
echo "</tr>"; | |
} | |
echo "</table> | |
<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> |