id = (int)$id;
$this->familyName = $familyName;
$this->givenName = $givenName;
}
static function fromArray($member){
$id = $member['id'];
$familyName = $member['familyName'];
$givenName = $member['givenName'];
return new User($id, $familyName, $givenName);
}
static function getUsers($db, $options = []){
$attributeId = $options["attributeId"] ?? null;
$params = [];
$query = "SELECT ".
"`cwsvjudo`.`wkParticipo_Users`.`id` AS `id`".
", `cwsvjudo`.`wkParticipo_Users`.`vorname` AS `givenName`".
", `cwsvjudo`.`wkParticipo_Users`.`name` AS `familyName`".
", `cwsvjudo`.`wkParticipo_userAttributes`.`name` AS `attributeName`".
"FROM `cwsvjudo`.`wkParticipo_Users` ".
"JOIN `cwsvjudo`.`wkParticipo_user<=>userAttributes` ".
"ON `cwsvjudo`.`wkParticipo_Users`.`id` = `cwsvjudo`.`wkParticipo_user<=>userAttributes`.`userId`".
"JOIN `cwsvjudo`.`wkParticipo_userAttributes` ".
"ON `cwsvjudo`.`wkParticipo_user<=>userAttributes`.`attributeId` = `cwsvjudo`.`wkParticipo_userAttributes`.`id`";
if($attributeId != null){
$query .= " WHERE `cwsvjudo`.`wkParticipo_userAttributes`.`id` = :attributeId";
$params['attributeId'] = ['value'=>$attributeId, 'data_type'=>PDO::PARAM_INT];
}
$query .= ";";
$response = dbQuery($db, $query, $params);
$users = [];
foreach( $response as $r){
$users[] = User::fromArray($r);
}
return $users;
}
static function htmlTable($users){
echo("
Id Name Vorname ");
foreach( $users as $u){
echo("".$u->id." ".$u->familyName." ".$u->givenName." ");
}
echo("
");
}
}
/**
* 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
private $type = null; //< type of attendance
static private $Types = [
AttendanceType::Training => "Training"
, AttendanceType::Excused => "Entschuldigt"
, AttendanceType::Ill => "Krank"
, AttendanceType::SpecialTraining => "SonderTraining"
, AttendanceType::Competition => "Wettkampf"
];
static private $NameOfMonth = [1=>"Januar", 2=>"Februar", 3=>"März", 4=>"April", 4=>"Mai", 6=>"Juni", 7=>"Juli", 8=>"August", 9=>"September", 10=>"Oktober", 11=>"November", 12=>"Dezember"];
/**
* constructor
*
* @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 .= "";
$userAttendances = Attendance::groupAttendances(
Attendance::getUsersAttendance($db, $userId)
);
krsort($userAttendances);
foreach( $userAttendances as $year=>$months ){
$htmlTableString .= "".$year."";
// Counting the attendances per half year
$attendanceCountH1 = 0;
$attendanceCountH2 = 0;
foreach($months as $month=>$days){
if(1<=$month and $month<=6){
$attendanceCountH1 += count($days);
}
if(7<=$month and $month <= 12){
$attendanceCountH2 += count($days);
}
}
$htmlTableString .= "Gesamt erstes Halbjahr: ".$attendanceCountH1." ";
$htmlTableString .= "Gesamt zweites Halbjahr: ".$attendanceCountH2." ";
krsort($months);
foreach($months as $month=>$days){
$htmlTableString .= "".Attendance::$NameOfMonth[$month]." ";
$htmlTableString .= "".join(", ", $days)." ";
}
$htmlTableString .= " ";
}
$htmlTableString .= " ";
return $htmlTableString;
}
/**
* group the attendances by year and month.
*
* @param list $attendances list of attendances
* @return array[int][int](list of int) array with a list of days for every month in every year
*/
static function groupAttendances($attendances){
$groupedAttendances = [];
foreach($attendances as $a){
$year =(int) $a->date->format("Y");
if(!array_key_exists($year, $groupedAttendances))
$groupedAttendances[$year] = [];
$month = (int) $a->date->format("m");
if(!array_key_exists($month, $groupedAttendances[$year]))
$groupedAttendances[$year][$month] = [];
$day = (int) $a->date->format("d");
$groupedAttendances[$year][$month][]=$day;
}
return $groupedAttendances;
}
}
?>
participo
UserAttribute::InTraining]));?>
Eigene Anwesenheiten".
Attendance::userAttendanceHtmlTable(dbConnector::getDbConnection(), $userData['id'])
); require_once("./lib/participoLib/participo.php");
}
// ... and kids attendances
if (!empty($usersKids)){
echo("Anwesenheit der Kinder ");
foreach($usersKids as $k){
if($userData['id']==$k['kidId']) continue;
echo(
"".$k['vorname']." ".$k['name']." ".
Attendance::userAttendanceHtmlTable(dbConnector::getDbConnection(), $k['kidId'])
);
}
}
?>