phpstan level 0 error free - fixes for kyu subpage - move mams into participo framework - remove legacy `lib/db.php` usage - add attributer admin function - add newsposter - fixing apiKey creation
231 lines
7.2 KiB
PHP
231 lines
7.2 KiB
PHP
<?php
|
|
namespace Participo\Attendance;
|
|
|
|
require_once "participoLib/dbConnector.php";
|
|
|
|
// @todo There are multiple functions aof that name and similar usage. Check possible single sourcing!
|
|
function processPostData($db, $post, $redirectLocation = "."): void
|
|
{
|
|
if (\array_key_exists("action", $post)) {
|
|
if ($post["action"] == "giveAttendance") {
|
|
giveJudokasAttendence(
|
|
$post["attandanceDate"],
|
|
$post["judokaIdsInTraining"],
|
|
);
|
|
}
|
|
if ($post["action"] == "updateCoronaData") {
|
|
updateCoronaData(
|
|
$post["userId"],
|
|
$post["columnName"],
|
|
$post["columnValue"],
|
|
);
|
|
}
|
|
if ($post["action"] == "addCoronaUser") {
|
|
if (
|
|
array_keys_exist($post, [
|
|
"name",
|
|
"vorname",
|
|
"corona_PLZ",
|
|
"corona_telephon",
|
|
"corona_eMail",
|
|
]) &&
|
|
isValid($post["corona_PLZ"], "plz") &&
|
|
isValid($post["corona_telephon"], "phonenumber") &&
|
|
isValid($post["corona_eMail"], "email")
|
|
) {
|
|
addCoronaUser(
|
|
$db,
|
|
$post["name"],
|
|
$post["vorname"],
|
|
$post["corona_PLZ"],
|
|
$post["corona_telephon"],
|
|
$post["corona_eMail"],
|
|
);
|
|
$redirectLocation .= "?addCoronaUserSuccess=true";
|
|
} else {
|
|
$redirectLocation .= "?addCoronaUserSuccess=false";
|
|
}
|
|
$redirectLocation .= "#addCoronaUser";
|
|
}
|
|
if ($post["action"] == "sendAttandeesPerEmail") {
|
|
sendEmail($post["toEmail"], $post["emailText"]);
|
|
}
|
|
header("Location: {$redirectLocation}");
|
|
}
|
|
return;
|
|
}
|
|
|
|
function attendancesAssocArray2mdList($attendancesAssocArray, $date = null)
|
|
{
|
|
if ($date == null) {
|
|
$date = new \DateTime();
|
|
}
|
|
$ret =
|
|
"# Anwesenheitsliste zur Corona-Kontaktverfolgung der Abteilung Judo des CWSV vom " .
|
|
$date->format("Y-m-d") .
|
|
"\n\n";
|
|
foreach ($attendancesAssocArray as $d => $attendees) {
|
|
$ret .= "## {$d}\n";
|
|
$i = 0;
|
|
foreach ($attendees as $a) {
|
|
$i += 1;
|
|
$ret .= "\n";
|
|
$ret .= $i . " " . $a["name"] . ", " . $a["vorname"] . "\n";
|
|
$ret .= " - PLZ: " . $a["corona_PLZ"] . "\n";
|
|
$ret .= " - Tel.: " . $a["corona_telephon"] . "\n";
|
|
$ret .= " - eMail: " . $a["corona_eMail"] . "\n";
|
|
}
|
|
$ret .= "\n";
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
function attendancesAssocArray2text($attendancesAssocArray)
|
|
{
|
|
$ret = "";
|
|
foreach ($attendancesAssocArray as $date => $attendees) {
|
|
$ret .= "{$date}\n";
|
|
foreach ($attendees as $a) {
|
|
$ret .= "\n";
|
|
$ret .= "Name: " . $a["name"] . ", " . $a["vorname"] . "\n";
|
|
$ret .= "PLZ: " . $a["corona_PLZ"] . "\n";
|
|
$ret .= "Tel.: " . $a["corona_telephon"] . "\n";
|
|
$ret .= "eMail: " . $a["corona_eMail"] . "\n";
|
|
}
|
|
$ret .= "\n";
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
function sendEmail($toEmail, $emailText)
|
|
{
|
|
try {
|
|
$date = new \DateTime();
|
|
mail(
|
|
$toEmail,
|
|
"Kontakliste CWSV-Judo vom " . $date->format("Y-m-d"),
|
|
$emailText,
|
|
);
|
|
} catch (\Exception $e) {
|
|
echo "Message: " . $e->getMessage();
|
|
}
|
|
}
|
|
|
|
/// Validaing a phone number
|
|
/// true if it validates, false if not
|
|
/// @todo input validation functions should be together (wherever the filterInit etc. are..)
|
|
function validate_phone_number($phone)
|
|
{
|
|
// Allow +, - and . in phone number
|
|
$filtered_phone_number = filter_var($phone, FILTER_SANITIZE_NUMBER_INT);
|
|
// Remove "-" from number
|
|
$phone_to_check = str_replace("-", "", $filtered_phone_number);
|
|
// Check the lenght of number
|
|
// This can be customized if you want phone number from a specific country
|
|
if (\strlen($phone_to_check) < 10 || \strlen($phone_to_check) > 14) {
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
/// validate different types of input
|
|
/// @todo input validation functions should be together (wherever the filterInit etc. are..)
|
|
function isValid($toValidate, $type)
|
|
{
|
|
// for now we disable the name validation: what do i know how people can be called!
|
|
// $regexName="/^[A-Z][a-zA-Z]*$/";
|
|
$regexPlz = "/^[0-9]{5}$/";
|
|
return match ($type) {
|
|
"plz" => preg_match($regexPlz, $toValidate) > 0,
|
|
"phonenumber" => validate_phone_number($toValidate),
|
|
"email" => filter_var($toValidate, FILTER_VALIDATE_EMAIL),
|
|
default => false,
|
|
};
|
|
}
|
|
|
|
//! Checks if multiple keys exist in an array
|
|
//!
|
|
//! @param array $array array to check for key
|
|
//! @param array|string $keys keys to check for
|
|
//!
|
|
//! @return bool true, if *all* keys are set in the array
|
|
function array_keys_exist(array $array, $keys)
|
|
{
|
|
if (!\is_array($keys)) {
|
|
$keys = \func_get_args();
|
|
array_shift($keys);
|
|
}
|
|
$count = 0;
|
|
foreach ($keys as $key) {
|
|
if (isset($array[$key]) || \array_key_exists($key, $array)) {
|
|
$count++;
|
|
}
|
|
}
|
|
|
|
return \count($keys) === $count;
|
|
}
|
|
|
|
function giveJudokasAttendence($date, $ids)
|
|
{
|
|
$values = [];
|
|
try {
|
|
foreach ($ids as $id) {
|
|
array_push($values, "(\"{$date}\", {$id})");
|
|
}
|
|
$query =
|
|
"INSERT INTO `anwesenheit` (`date`, `userId`) VALUES " .
|
|
join(",", $values) .
|
|
";";
|
|
\dbConnector::query($query, [], ["dontFetch" => true]);
|
|
} catch (\PDOException $db_error) {
|
|
print "Error!: " . $db_error->getMessage() . "<br/>";
|
|
return null;
|
|
}
|
|
}
|
|
|
|
// updates corona data of an user
|
|
function updateCoronaData($userId, $columnName, $columnValue)
|
|
{
|
|
$coronaColumnNames = ["corona_PLZ", "corona_telephon", "corona_eMail"];
|
|
|
|
if (!\in_array($columnName, $coronaColumnNames)) {
|
|
return;
|
|
}
|
|
$query = "UPDATE `wkParticipo_Users` SET ` {$columnName} `=:val WHERE `id`=:id;";
|
|
$params = [
|
|
":val" => ["value" => $columnValue, "data_type" => \PDO::PARAM_STR],
|
|
":id" => ["value" => $userId, "data_type" => \PDO::PARAM_INT],
|
|
];
|
|
\dbConnector::query($query, $params);
|
|
return;
|
|
}
|
|
|
|
function addCoronaUser(
|
|
$name,
|
|
$vorname,
|
|
$corona_PLZ,
|
|
$corona_telephon,
|
|
$corona_eMail,
|
|
) {
|
|
$query = <<<SQL
|
|
INSERT INTO `wkParticipo_Users` (name, vorname, corona_PLZ, corona_telephon, corona_eMail)
|
|
VALUES (:name, :vorname, :plz, :telephon, :email);
|
|
SQL;
|
|
$params = [
|
|
":name" => ["value" => $name, "data_type" => \PDO::PARAM_STR],
|
|
":vorname" => ["value" => $vorname, "data_type" => \PDO::PARAM_STR],
|
|
":plz" => ["value" => $corona_PLZ, "data_type" => \PDO::PARAM_STR],
|
|
":telephon" => [
|
|
"value" => $corona_telephon,
|
|
"data_type" => \PDO::PARAM_STR,
|
|
],
|
|
":email" => ["value" => $corona_eMail, "data_type" => \PDO::PARAM_STR],
|
|
];
|
|
\dbConnector::query($query, $params);
|
|
|
|
$newId = \dbConnector::getDbConnection()->lastInsertId();
|
|
giveUserAnUserAttribute($newId, "inTraining");
|
|
return;
|
|
}
|