Files
cwsvJudo/homepage/machs/machs.php
2020-10-28 14:02:40 +01:00

204 lines
6.5 KiB
PHP

<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors',1);
$basePath = "/users/cwsvjudo/www";
require_once($basePath."/config/cwsvJudo.config.php");
require_once($basePath."/ressourcen/phpLib/cwsvJudo/miscAssis.php");
/// einem User ein achievement zuordnen
///
/// @param $aDbConnection PDO-Datenbankverbindung, die benutzt werden soll
/// @param $anUserId ID des Users, der das Attribut erhalten soll
/// @param $anachievementId ID des zu vergebenden Attributes
///
/// - Es erfolgt keine Kontrolle, ob:
/// - die achievementId überhaupt existiert,
/// - ob die userId überhaupt existiert,
/// - ob der User das achievement bereits hat,
function giveUserAnAchievment($aDbConnection, $anUserId, $anAchievementId){
withdrawUsersAchievement($aDbConnection, $anUserId, $anAchievementId);
try{
dbQuery(
$aDbConnection,
"INSERT INTO `achievements<=>user` (userId, achievementId) VALUES (:userId, :achievementId);",
array(
':userId' => array('value'=>$anUserId, 'data_type'=>PDO::PARAM_INT),
':achievementId'=> array('value'=>$anAchievementId, 'data_type'=>PDO::PARAM_INT)
)
);
}
catch(PDOException $db_error){
print "Error!: " . $db_error->getMessage() . "<br/>queryString: ".$queryString."<br />"; var_dump($bindArray);
}
return;
}
/// einem User ein Achievement entziehen
function withdrawUsersAchievement($aDbConnection, $anUserId, $anAchievementId, $limit = NULL){
try{
// Variablen für das Binden an die Query vorbereiten
// inklusive Validierung der Werte
$bindArray = array();
if( is_positive_integer( $anUserId ) ){
$bindArray[':userId'] = array('value'=>$anUserId, 'data_type'=>PDO::PARAM_INT);
}
else{
throw new InvalidArgumentException("withdrawUsersAchievement: userId must be positive integer!");
}
if( is_positive_integer($anAchievementId) ){
$bindArray[':achievementId'] = array('value'=>$anAchievementId, 'data_type'=>PDO::PARAM_INT);
}
else{
throw new InvalidArgumentException("withdrawUsersAchievement: anAchievementId must be positive integer");
}
if( is_positive_integer( $limit ) ){
$bindArray[':limit'] = array('value' => $limit, 'data_type' => PDO::PARAM_INT);
}
// Zusammenstellen der Query
$queryString =
"DELETE FROM `achievements<=>user` ".
"WHERE `userId`=:userId ".
"AND `achievementId`=:achievementId".
(is_positive_integer( $limit )?" LIMIT :limit":"").
";";
echo("queryString: ".$queryString."<br />"); var_dump($bindArray);
dbQuery(
$aDbConnection,
$queryString,
$bindArray
);
}
catch(PDOException $db_error){
print "Error!: " . $db_error->getMessage() . "<br/>queryString: ".$queryString."<br />"; var_dump($bindArray);
}
return;
}// Ende withdrawUsersAchievement
var_dump($_GET);
$actions = ["giveUserAnAchievement", "withdrawUsersAchievement"];
$dbConn = getCwsvJudoDbConn();
$dbConn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
if(isset($_GET['action'])){
switch($_GET['action']){
case "giveUserAnAchievement":
try{
giveUserAnAchievment($dbConn, intval($_GET['userId']), intval($_GET['achievementId']));
}
catch(Exception $e){
print("UPS: ".$e->getMessage());
}
break;
case "withdrawUsersAchievement":
try{
withdrawUsersAchievement($dbConn, intval($_GET['userId']), intval($_GET['achievementId']));
}
catch(Exception $e){
print("UPS: ".$e->getMessage());
}
break;
default:
echo("Ungültige Aktion (".$_GET['action'].") erwünscht!");
break;
}
}
$users =
dbQuery(
$dbConn,
"SELECT * FROM cwsvjudo.wkParticipo_Users;"
);
$userAchievements =
dbQuery(
$dbConn,
"SELECT * FROM cwsvjudo.achievements;"
);
?>
<html>
<head>
</head>
<body>
<form>
<label>Action:
<select name="action">
<option disabled selected value> -- Aktion auswählen -- </option>
<?php
foreach($actions as $action)
echo("<option>".$action."</option>");
?>
</select>
</label>
<label>User:
<select name="userId">
<option disabled selected value> -- User auswählen -- </option>
<?php
foreach($users as $user)
echo("<option value=\"".$user['id']."\">".$user['loginName']."</option>");
?>
</select>
</label>
<label>Attribut:
<select name="achievementId">
<option disabled selected value> -- Attribut auswählen -- </option>
<?php
foreach($userAchievements as $userAchievement)
echo("<option value=\"".$userAchievement['id']."\">".$userAchievement['name']."</option>");
?>
</select>
</label>
<button type="submit">Eingaben absenden</button>
</form>
<h1>Attribute</h1>
<?php echo(array2htmlTableString($userAchievements));?>
<?php
foreach($userAchievements as $userAchievement){
echo("<h2>".$userAchievement["name"]."</h2>");
// get the users with the attribute by a cross join
// remark: there are two id-columns, from which one gets lost (the one from the user) in the phpArray.
// so we (have to) use the userId from the attribute
// in short attributed => userId, unattributed => id (is the id of the user)
$achievedUsers =
dbQuery(
$dbConn,
"SELECT * FROM wkParticipo_Users, `achievements<=>user` WHERE wkParticipo_Users.id = `achievements<=>user`.userId AND `achievements<=>user`.achievementId = :achievementId;",
array(":achievementId"=>array('value'=>$userAchievement['id'], 'data_type'=>PDO::PARAM_INT))
);
// Add a withthraw link entry
foreach($achievedUsers as $index => $user){
$achievedUsers[$index] += ["withdrawLink" => "<a href=\"?action=withdrawUsersAchievement&userId=".$user["userId"]."&achievementId=".$userAchievement["id"]."\">withdraw ".$userAchievement["name"]."</a>"];
}
echo( "<h3>have it</h3>".arrayKeyed2htmlTableString($achievedUsers, ["userId", "name", "vorname", "withdrawLink"]) );
$achievedKeyList = [];
foreach($achievedUsers as $user){
$achievedKeyList[] = $user["userId"];
}
$unachievedUsers = array();
foreach($users as $user){
if(!in_array($user["id"], $achievedKeyList)){
$unachievedUsers[] = $user;
}
}
// Add a giveAttribute link entry to every user
foreach($unachievedUsers as $index => $user){
$unachievedUsers[$index] += ["giveAchievementLink" => "<a href=\"?action=giveUserAnAchievement&userId=".$user["id"]."&achievementId=".$userAchievement["id"]."\">give Attribute ".$userAchievement["name"]."</a>"];
}
echo( "<h3>give it</h3>".arrayKeyed2htmlTableString($unachievedUsers, ["id", "name", "vorname", "giveAchievementLink"]) );
}
?>
<h1>User</h1>
<?php echo(array2htmlTableString($users));?>
</body>
</html>