WIP: bring participo back - consistent use of bootstrap - formatting -

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
This commit is contained in:
marko
2025-11-07 10:37:25 +01:00
parent 672eaccfc9
commit f28fa7b51b
96 changed files with 6152 additions and 6053 deletions

View File

@@ -5,144 +5,166 @@
*/
class dbConnector
{
private static $db = null;
private static $db = null;
// connect to the database
public static function connect($hostname, $dbName, $user, $password)
{
return self::setDbConnection(self::connectToPdo($hostname, $dbName, $user, $password));
}
public static $options = [
"dbCharset" => "ISO-8859-1",
"outCharset" => "UTF-8",
];
public static function getDbConnection()
{
return self::$db;
}
// connect to the database
public static function connect($hostname, $dbName, $user, $password)
{
return self::setDbConnection(
self::connectToPdo($hostname, $dbName, $user, $password),
);
}
public static function setOptions($options)
{
self::$options = $options;
}
/// perform a pdo-query
///
/// @param $aQueryString
/// @param $aBindArray e.g. array(
/// ':userId' => array('value'=>$anUserId, 'data_type'=>PDO::PARAM_INT),
/// ':attributeId'=> array('value'=>$anAttributeId, 'data_type'=>PDO::PARAM_INT) )
/// @param $someOption
public static function query($aQueryString, $aBindArray = [], $someOptions = [])
{
// var_dump($aQueryString, $aBindArray);
// Standardbelegungen
if (empty($someOptions['dbCharset'])) {
$someOptions['dbCharset'] = 'ISO-8859-1';
}
if (empty($someOptions['outCharset'])) {
$someOptions['outCharset'] = 'UTF-8';
}
if (empty($someOptions['dontFetch'])) {
$someOptions['dontFetch'] = false;
}
public static function getDbConnection()
{
return self::$db;
}
$ignoreErrors = $someOptions['ignoreErrors'] ?? false;
/// perform a pdo-query
///
/// @param $aQueryString
/// @param $aBindArray e.g. array(
/// ':userId' => array('value'=>$anUserId, 'data_type'=>PDO::PARAM_INT),
/// ':attributeId'=> array('value'=>$anAttributeId, 'data_type'=>PDO::PARAM_INT) )
/// @param $someOption
public static function query(
$aQueryString,
$aBindArray = [],
$someOptions = [],
) {
// var_dump($aQueryString, $aBindArray);
// Standardbelegungen
$someOptions["dbCharset"] =
$someOptions["dbCharset"] ??
(self::$options["dbCharset"] ?? "ISO-8859-1");
$someOptions["outCharset"] =
$someOptions["outCharset"] ??
(self::$options["outCharset"] ?? "UTF-8");
$someOptions["dontFetch"] = $someOptions["dontFetch"] ?? false;
/// @toDo: Bisher wird nur die Rückgabe konvertiert. Eigentlich muss
/// doch auch die Eingabe konvertiert werden. Aber das jetzt
/// umzustellen wird schwer! Die User im Wettkampfplaner sind ja z.B.
/// als UTF8 in latin1(?) gespeichert.
/// @toDo: Die Standardwerte sollten vielleicht aus einer config
/// kommen, nicht hardcoded
$ignoreErrors = $someOptions["ignoreErrors"] ?? false;
try {
$pdoStatement = self::$db->prepare($aQueryString);
foreach ($aBindArray as $bindName => $bind) {
if ($bind['data_type'] == PDO::PARAM_STR) {
$bind['value'] = iconv(
$someOptions['outCharset'],
$someOptions['dbCharset'],
$bind['value']
);
}
$pdoStatement->bindValue(
$bindName,
$bind['value'],
(isset($bind['data_type']) ? $bind['data_type'] : PDO::PARAM_STR)
);
}
$pdoResult = $pdoStatement->execute();
if (!$ignoreErrors && !$pdoResult) {
echo("Error during dbQuery!\n");
echo("DB-Error:\n");
var_dump(self::$db->errorInfo());
}
if ($someOptions['dontFetch']) {
$ret = null;
} else {
$ret = $pdoStatement->fetchAll(PDO::FETCH_ASSOC);
}
} catch(PDOException $db_error) {
print 'Error!: ' . $db_error->getMessage() . '<br/>';
return null;
}
/// @toDo: Bisher wird nur die Rückgabe konvertiert. Eigentlich muss
/// doch auch die Eingabe konvertiert werden. Aber das jetzt
/// umzustellen wird schwer! Die User im Wettkampfplaner sind ja z.B.
/// als UTF8 in latin1(?) gespeichert.
/// @toDo: Die Standardwerte sollten vielleicht aus einer config
/// kommen, nicht hardcoded
// Zeichensatzkonvertierung
if (is_array($ret)) {
foreach ($ret as &$entry) {
array_walk(
$entry,
function (&$value, $key, $someOptions) {
$value = iconv($someOptions['dbCharset'], $someOptions['outCharset'], $value);
},
$someOptions
);
}
}
return $ret;
}
try {
$pdoStatement = self::$db->prepare($aQueryString);
foreach ($aBindArray as $bindName => $bind) {
if (
$bind["data_type"] == PDO::PARAM_STR &&
$bind["value"] !== null
) {
$bind["value"] = iconv(
$someOptions["outCharset"],
$someOptions["dbCharset"],
$bind["value"],
);
}
$pdoStatement->bindValue(
$bindName,
$bind["value"],
$bind["data_type"] ?? PDO::PARAM_STR,
);
}
$pdoResult = $pdoStatement->execute();
if (!$ignoreErrors && !$pdoResult) {
echo "Error during dbQuery!\n";
echo "DB-Error:\n";
var_dump(self::$db->errorInfo());
}
$ret = !$someOptions["dontFetch"]
? $pdoStatement->fetchAll(PDO::FETCH_ASSOC)
: null;
} catch (PDOException $db_error) {
print "Error!: " . $db_error->getMessage() . "<br/>";
return null;
}
// @todo docu
public static function getLastInsertId()
{
return self::$db->lastInsertId();
}
// Zeichensatzkonvertierung
if (is_array($ret)) {
foreach ($ret as &$entry) {
array_walk(
$entry,
function (&$value, $key, $someOptions) {
if ($value !== null) {
$value = iconv(
$someOptions["dbCharset"],
$someOptions["outCharset"],
$value,
);
}
},
$someOptions,
);
}
}
return $ret;
}
// get a Connection to the database
private static function connectToPdo($hostname, $dbName, $user, $password)
{
// var_dump($hostname, $dbName, $user, $password);
$dbConnection = null;
try {
$dbConnection = new PDO(
'mysql:host=' . $hostname . ';dbname=' . $dbName,
$user,
$password
);
} catch(PDOException $dbError) {
echo('Error whilst getting a dbConnection!: ' . $dbError->getMessage());
}
return $dbConnection;
}
// @todo docu
public static function getLastInsertId()
{
return self::$db->lastInsertId();
}
// set the dbConnection (just setting, no establishing)
private static function setDbConnection($dbConnection)
{
$success = false;
if ($dbConnection instanceof PDO) {
self::$db = $dbConnection;
$success = true;
} else {
self::$db = null;
}
return $success;
}
// get a Connection to the database
private static function connectToPdo($hostname, $dbName, $user, $password)
{
// var_dump($hostname, $dbName, $user, $password);
$dbConnection = null;
try {
$dbConnection = new PDO(
"mysql:host=" . $hostname . ";dbname=" . $dbName,
$user,
$password,
);
} catch (PDOException $dbError) {
echo "Error whilst getting a dbConnection!: " .
$dbError->getMessage();
}
return $dbConnection;
}
public static function debugEchoQuery($query, $params)
{
foreach ($params as $key => $value) {
switch($value['data_type']) {
case PDO::PARAM_STR:{
$query = str_replace($key, '\'' . $value['value'] . '\'', $query);
}
default:{
$query = str_replace($key, $value['value'], $query);
}
}
};
echo('query: ' . $query . PHP_EOL);
}
// set the dbConnection (just setting, no establishing)
private static function setDbConnection($dbConnection)
{
$success = false;
if ($dbConnection instanceof PDO) {
self::$db = $dbConnection;
$success = true;
} else {
self::$db = null;
}
return $success;
}
public static function debugEchoQuery($query, $params)
{
foreach ($params as $key => $value) {
switch ($value["data_type"]) {
case PDO::PARAM_STR:
$query = str_replace(
$key,
'\'' . $value["value"] . '\'',
$query,
);
default:
$query = str_replace($key, $value["value"], $query);
}
}
echo "query: " . $query . PHP_EOL;
}
}