204 lines
6.5 KiB
PHP
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>
|