working draft attendance

This commit is contained in:
marko
2021-12-29 14:27:01 +01:00
parent 98398120ef
commit 3048cf2e9c
2 changed files with 213 additions and 242 deletions

View File

@@ -0,0 +1,213 @@
<?php
setlocale (LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge');
require_once("config/participo.php");
require_once("./local/dbConf.php");
require_once("./local/cwsvJudo.php");
require_once("./lib/db.php");
require_once("./lib/api.php");
require_once("./lib/participoLib/participo.php");
require_once("./auth.php");
require_once($config['basePath']."/config/cwsvJudo.config.php");
require_once($config['basePath']."/config/phpcount.config.php");
$dbConnection = getPdoDbConnection(
$cwsvJudoConfig["db"]["host"],
$cwsvJudoConfig["db"]["name"],
$cwsvJudoConfig["db"]["user"],
$cwsvJudoConfig["db"]["password"]
);
$userData = getUserData($dbConnection, $_SESSION['user']['userId']);
$usersKids = getUsersKids($dbConnection, $_SESSION['user']['userId']);
/**
* Datastructure and interface for attendances
*/
class Attendance{
private $id = null; //< id in the db
private $userId = null; //< user of the attendance
private $date = null; //< date of the attendance
static private $NameOfMonth =["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"];
/**
* Undocumented function
*
* @param string/int $id id in the db
* @param string/int $userId user of the attendance
* @param string $date date of the attendance
*/
function __construct($id, $userId, $date){
$this->id = (int)$id;
$this->userId = (int)$userId;
$this->date = DateTime::createFromFormat("Y-m-d", $date);
}
/**
* create an Attendance from an assoziative array
*
* @param array $member
* @return Attendance
*/
static function constructFromArray($member){
return new Attendance($member['id'], $member['userId'], $member['date']);
}
/**
* request a users attendances from the database
*
* @param PDO $db
* @param int/string $userId
* @return array with attendances
*/
static function getUsersAttendance($db, $userId){
$userId = (int)$userId;
$query = "SELECT `id`, `date` FROM `cwsvjudo`.`anwesenheit` WHERE `userId` = :userId";
$response = dbQuery($db, $query, [':userId'=>['value'=>$userId, 'data_type'=>PDO::PARAM_INT]]);
$attendances = [];
foreach($response as $r){
$attendances[] = new Attendance($r['id'], $userId, $r['date']);
}
return $attendances;
}
/**
* html table with users attendances
*
* @param PDO $db
* @param string/int $userId
* @return string with html code of the attendance table
*/
static function userAttendanceHtmlTable($db, $userId){
$htmlTableString = "";
$htmlTableString .= "<ul>";
$userAttendances = Attendance::groupAttendances(
Attendance::getUsersAttendance($db, $userId)
);
krsort($userAttendances);
foreach( $userAttendances as $year=>$months ){
$htmlTableString .= "<li>".$year."<dl>";
// Counting the attendances per half year
$attendanceCountH1 = 0;
$attendanceCountH2 = 0;
foreach($months as $month=>$days){
if(1<=$month and $month<=7){
$attendanceCountH1 += count($days);
}
if(7<=$month and $month <= 12){
$attendanceCountH2 += count($days);
}
}
$htmlTableString .= "<dt>Gesamt erstes Halbjahr:</dt><dd>".$attendanceCountH1."</dd>";
$htmlTableString .= "<dt>Gesamt zweites Halbjahr:</dt><dd>".$attendanceCountH2."</dd>";
krsort($months);
foreach($months as $month=>$days){
$htmlTableString .= "<dt>".Attendance::$NameOfMonth[$month-1]."</dt>";
$htmlTableString .= "<dd>".join(", ", $days)."</dd>";
}
$htmlTableString .= "</dl></li>";
}
$htmlTableString .= "</ul>";
return $htmlTableString;
}
static function groupAttendances($attendances){
$groupedAttendances = [];
foreach($attendances as $a){
$year = $a->date->format("Y");
if(!array_key_exists($year, $groupedAttendances))
$groupedAttendances[$year] = [];
$month = $a->date->format("m");
if(!array_key_exists($month, $groupedAttendances[$year]))
$groupedAttendances[$year][$month] = [];
$day = $a->date->format("d");
$groupedAttendances[$year][$month][]=$day;
}
return $groupedAttendances;
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<?php readfile("./shared/imports.php");?>
<!-- inits for the materializeCss -->
<script>
document.addEventListener('DOMContentLoaded', function() {
var elems = document.querySelectorAll('.sidenav');
var instances = M.Sidenav.init(elems, {
// specify options here
});
});
</script>
<title>participo</title>
<meta name="description" content="Online-Apps der Judoka des Chemnitzer WSV">
<link rel="icon" href="<?echo($config['ressourceUrl']);?>/graphiken/icons/cwsv.ico" />
<link rel="apple-touch-icon" href="<?echo($config['baseUrl']);?>/apple-touch-icon.png">
</head>
<body>
<header>
<nav class="indigo darken-4">cwsvJudo Apps<a class="right top-nav sidenav-trigger waves-effect waves-light hide-on-large-only" href="#" data-target="nav-mobile">
<i class="material-icons">menu</i>
</a></nav>
<ul class="sidenav sidenav-fixed sidenav-close" id="nav-mobile">
<li class="logo">
<a style="height:auto;" class="brand-logo" id="logo-container" href="/participo/">
<img alt="cwsvJudoApps" style="max-width:100%;height:12vh;" class="responsive-img" src="http://cwsvjudo.bplaced.net/ressourcen/graphiken/logos/cwsvJudoLogoWappen.x256.png" />
</a>
</li>
<?php require_once("sidenav/loginStatus.php");?><!-- brings its own li -->
<li class="bold">
<a class="waves-effect waves-teal right-align" href="#attendance-<?php echo($userData['id']);?>">Selber</a>
</li>
<?php
foreach($usersKids as $k){
if($userData['id']==$k['id']) continue;
?>
<li class="bold">
<a class="waves-effect waves-teal right-align" href="#attendance-<?php echo($k['kidId']); ?>"><?php echo($k['vorname']." ".$k['name']);?></a>
</li>
<?php }?>
</ul>
</header>
<?php
if($_SESSION['login']){
?>
<main>
<?php // show own ...
$ownAttendances = Attendance::getUsersAttendance($dbConnection, $_SESSION['user']['userId']);
if (!empty($ownAttendances)){
echo(
"<h2 id=\"attendance-".$userData['id']."\">Eigene Anwesenheiten</h2>".
Attendance::userAttendanceHtmlTable($dbConnection, $userData['id'])
); require_once("./lib/participoLib/participo.php");
}
// ... and kids attendances
if (!empty($usersKids)){
echo("<h2>Anwesenheit der Kinder</h2>");
foreach($usersKids as $k){
if($userData['id']==$k['kidId']) continue;
echo(
"<h3 id=\"attendance-".$k['kidId']."\">".$k['vorname']." ".$k['name']."</h3>".
Attendance::userAttendanceHtmlTable($dbConnection, $k['kidId'])
);
}
}
?>
</main>
<?php
}
?>
</body>
</html>