array('value'=>$anUserId, 'data_type'=>PDO::PARAM_INT), /// ':attributeId'=> array('value'=>$anAttributeId, 'data_type'=>PDO::PARAM_INT) ) /// @param $someOption function dbQuery($aDbConnection, $aQueryString, $aBindArray = array(), $someOptions = array()){ // 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; /// @toDo: Bisher wird nur die Rückgabe konvertiert. Eigentlich muss /// doch auch die Eingabe konvertiert werden. Aber das jetzt /// umzustellen wird schwer! Die User m Wettkampfplaner sind ja z.B. /// als UTF8 in latin1(?) gespeichert. /// @toDo: Die Standardwerte sollten vielleicht aus einer config /// kommen, nicht hardcoded try{ $pdoStatement = $aDbConnection->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(!$pdoResult){ echo("Error during dbQuery!\n"); echo("DB-Error:\n"); var_dump($aDbConnection->errorInfo()); } if($someOptions['dontFetch']){ $ret = NULL; } else{ $ret = $pdoStatement->fetchAll(PDO::FETCH_ASSOC); } } catch(PDOException $db_error){ print "Error!: " . $db_error->getMessage() . "
"; return null; } // 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; } function getLastAttendances($db, $minDate=null){ if ($minDate == null){ $minDate = new DateTime; $minDate->sub(new DateInterval("P1M")); // from the current date subtract a *P*eriod of *1* *M*onth } $query = << array('value' => $minDate->format('Y-m-d'), 'data_type' => PDO::PARAM_STR) ); $options = array(); $ret = dbQuery($db, $query, $params, $options); return $ret; } function getUsersWithAttribute($dbConnection, $attributeName){ $query = <<userAttributes` ON `cwsvjudo`.`wkParticipo_Users`.`id` =`cwsvjudo`.`wkParticipo_user<=>userAttributes`.`userId` WHERE `cwsvjudo`.`wkParticipo_user<=>userAttributes`.`attributeId` IN ( SELECT `id` FROM `cwsvjudo`.`wkParticipo_userAttributes` WHERE `name` = :attributeName ); SQL; $params = array( ':attributeName' => array('value'=>$attributeName, 'data_type'=>PDO::PARAM_STR) ); return dbQuery($dbConnection, $query, $params); } function giveUserAnUserAttribute($dbConnection, $userId, $attributeName){ $query = <<userAttributes` (`userId`, `attributeId`) SELECT :userId, `id` FROM `cwsvjudo`.`wkParticipo_userAttributes` WHERE `name` = :attributeName; SQL; $params = array( ':userId' => array('value'=>$userId, 'data_type'=>PDO::PARAM_INT), ':attributeName' => array('value'=>$attributeName, 'data_type'=>PDO::PARAM_STR) ); return dbQuery($dbConnection, $query, $params); } function hasUserAttribute($dbConnection, $userId, $attributeName){ $query = <<userAttributes`.userId, `wkParticipo_userAttributes`.name FROM `wkParticipo_user<=>userAttributes` LEFT JOIN `wkParticipo_userAttributes` ON `wkParticipo_user<=>userAttributes`.`attributeId` = `wkParticipo_userAttributes`.`id` WHERE `wkParticipo_userAttributes`.name = :attributeName AND userId=:userId;", SQL; $params = array( ':userId' => array('value'=>$userId, 'data_type'=>PDO::PARAM_INT), ':attributeName' => array('value'=>$attributeName, 'data_type'=>PDO::PARAM_STR) ); $attributedUsers = dbQuery($dbConnection, $query, $params); foreach($attributedUsers as $u) if($u['userId']==$userId) return true; return false; } function giveJudokasAttendence($dbConnection, $date, $ids){ $values = array(); try{ foreach( $ids as $id){ array_push( $values, "(\"".$date."\", ".$id.")");; } $query = "INSERT INTO `cwsvjudo`.`anwesenheit` (`date`, `userId`) VALUES ".join(",", $values).";"; dbQuery($dbConnection, $query, array(), ['dontFetch' => true]); } catch(PDOException $db_error){ print "Error!: " . $db_error->getMessage() . "
"; return null; } } function getUsersKidsIds($db, $userId){ $query = <<['value'=>$userId, 'data_type'=>PDO::PARAM_INT]]; $result = dbQuery($db, $query, $params); return $result; } function isUserInKidIds($uId, $idList){ foreach($idList as $id){ if($id['kidId'] == $uId) return true; } return false; } // @todo: Achtung, als id ist die id der Vormundschaft gespeichert. Unter kidId die des Kindes. function getUsersKids($db, $userId, $options = []){ $options['attribute'] ?? $query = <<['value'=>$userId, 'data_type'=>PDO::PARAM_INT]]; $result = dbQuery($db, $query, $params); return $result; } // updates corona data of an user function updateCoronaData($db, $userId, $columnName, $columnValue){ $coronaColumnNames = ["corona_PLZ", "corona_telephon", "corona_eMail"]; if( !in_array( $columnName, $coronaColumnNames) ){ return; } $query = "UPDATE `cwsvjudo`.`wkParticipo_Users` SET `".$columnName."`=:val WHERE `id`=:id;"; $params = array( ':val' => array('value'=>$columnValue, 'data_type'=>PDO::PARAM_STR), ':id' => array('value'=>$userId, 'data_type'=>PDO::PARAM_INT) ); dbQuery($db, $query, $params); return; } function addCoronaUser($db, $name, $vorname, $corona_PLZ, $corona_telephon, $corona_eMail){ $query = << array('value'=>$name, 'data_type'=>PDO::PARAM_STR), ':vorname' => array('value'=>$vorname, 'data_type'=>PDO::PARAM_STR), ':plz' => array('value'=>$corona_PLZ, 'data_type'=>PDO::PARAM_STR), ':telephon' => array('value'=>$corona_telephon, 'data_type'=>PDO::PARAM_STR), ':email' => array('value'=>$corona_eMail, 'data_type'=>PDO::PARAM_STR), ); dbQuery($db, $query, $params); $newId = $db->lastInsertId(); giveUserAnUserAttribute($db, $newId, "inTraining"); return; } function giveUserAnAchievement($db, $userId, $achievementId){ $query = <<user` (`userId`, `achievementId`) VALUE (:userId, :achievementId); SQL; $params = [':userId'=>['value'=>$userId, 'data_type'=>PDO::PARAM_INT], 'achievementId'=>['value'=>$achievementId, 'data_type'=>PDO::PARAM_INT]]; dbQuery($db, $query, $params); return; } function isUserAdmin($dbConn, $userId){ $adminUsers = dbQuery( $dbConn, "SELECT `wkParticipo_user<=>userAttributes`.userId, `wkParticipo_userAttributes`.name from `wkParticipo_user<=>userAttributes` LEFT JOIN `wkParticipo_userAttributes` ON `wkParticipo_user<=>userAttributes`.attributeId = `wkParticipo_userAttributes`.id WHERE `wkParticipo_userAttributes`.name = :attributeName;", array(":attributeName"=>array('value'=>"isAdmin", 'data_type'=>PDO::PARAM_STR)) ); foreach($adminUsers as $adminUser) if($adminUser['userId']==$userId) return true; return false; } function getUserData($db, $userId){ $query = <<['value'=>$userId, 'data_type'=>PDO::PARAM_INT]]; $userData = dbQuery($db, $query, $params); return $userData[0]; } function getAchievements($db){ $query = <<['value'=>$id, 'data_type'=>PDO::PARAM_INT]]; return dbQuery($db, $query, $params); } function addAchievement($db, $name, $rootId, $achievementGroupId, $level, $description, $imgUrl){ // var_dump($db); if($rootId=="") $rootId=null; if($imgUrl=="") $imgUrl=null; $query = << ['value'=>$name, 'data_type'=>PDO::PARAM_STR], ':rootId' => ['value'=>$rootId, 'data_type'=>PDO::PARAM_INT], ':achievementGroupId' => ['value'=>$achievementGroupId, 'data_type'=>PDO::PARAM_INT], ':level' => ['value'=>$level, 'data_type'=>PDO::PARAM_INT], ':description' => ['value'=>$description, 'data_type'=>PDO::PARAM_STR], ':imgUrl' => ['value'=>$imgUrl, 'data_type'=>PDO::PARAM_STR], ]; dbQuery($db, $query, $params, ['dontFetch'=>true]); return; } function addAchievementGroup($db, $name, $unlockingAchievementId, $imgUrl){ if($unlockingAchievementId=="") $unlockingAchievementId=null; if($imgUrl=="") $imgUrl=null; $query = << ['value'=>$name, 'data_type'=>PDO::PARAM_STR], ':unlockingAchievementId' => ['value'=>$unlockingAchievementId, 'data_type'=>PDO::PARAM_INT], ':imgUrl' => ['value'=>$imgUrl, 'data_type'=>PDO::PARAM_STR], ]; dbQuery($db, $query, $params, ['dontFetch'=>true]); return; } function updateAchievement($db, $achievementId, $name, $rootId, $achievementGroupId, $level, $description, $imgUrl){ if($rootId=="") $rootId=null; if($imgUrl=="") $imgUrl=null; $query = << ['value'=>$name, 'data_type'=>PDO::PARAM_STR], ':achievementGroupId' => ['value'=>$achievementGroupId, 'data_type'=>PDO::PARAM_INT], ':rootId' => ['value'=>$rootId, 'data_type'=>PDO::PARAM_INT], ':level' => ['value'=>$level, 'data_type'=>PDO::PARAM_INT], ':description' => ['value'=>$description, 'data_type'=>PDO::PARAM_STR], ':imgUrl' => ['value'=>$imgUrl, 'data_type'=>PDO::PARAM_STR], ':achievementId' => ['value'=>$achievementId, 'data_type'=>PDO::PARAM_INT], ]; dbQuery($db, $query, $params, ['dontFetch'=>true]); return; } function updateAchievementGroup($db, $achievementGroupId, $name, $unlockingAchievementId, $imgUrl){ if($unlockingAchievementId=="") $unlockingAchievementId=null; if($imgUrl=="") $imgUrl=null; $query = << ['value'=>$achievementGroupId, 'data_type'=>PDO::PARAM_INT], ':name' => ['value'=>$name, 'data_type'=>PDO::PARAM_STR], ':unlockingAchievementId' => ['value'=>$unlockingAchievementId, 'data_type'=>PDO::PARAM_INT], ':imgUrl' => ['value'=>$imgUrl, 'data_type'=>PDO::PARAM_STR], ]; dbQuery($db, $query, $params, ['dontFetch'=>true]); return; } function setBday($db, $userId, $bday){ $query = << ['value'=>$bday, 'data_type'=>PDO::PARAM_STR], ':userId' => ['value'=>$userId, 'data_type'=>PDO::PARAM_INT] ]; dbQuery($db, $query, $params, ['dontFetch'=>true]); return; } function setRecord($db, $userId, $achievementGroupId, $value){ $u = getUserData($db, $userId); $query = << ['value'=>$achievementGroupId, 'data_type'=>PDO::PARAM_INT], ':ageClass' => ['value'=>record::birthday2ageClass($u['gebDatum']), 'data_type'=>PDO::PARAM_INT], ':userId' => ['value'=>$userId, 'data_type'=>PDO::PARAM_INT], ':value' => ['value'=>$value, 'data_type'=>PDO::PARAM_INT], ]; dbQuery($db, $query, $params, ['dontFetch'=>true]); //var_dump($userId, $achievementGroupId, $value); //var_dump($query, $params); return; } function canUserGetAchievementToday($db, $userId){ $achievements = getUsersAchievements($db, $userId); foreach($achievements as $a){ if( date('Ymd') == date('Ymd', strtotime($a['timestamp'])) ){ return false; } } return true; } ?>