diff --git a/homepage/machs/auth.php b/homepage/machs/auth.php
new file mode 100644
index 0000000..1ab0da4
--- /dev/null
+++ b/homepage/machs/auth.php
@@ -0,0 +1,16 @@
+".
+ "Datum: ".date("Y-m-d")." ".
+ "Angemeldet als ".htmlspecialchars($_SESSION['user']['username'])." angemeldet. ".
+ "Sitzung beenden ".
+ "";
+ }
+?>
diff --git a/homepage/machs/config.php b/homepage/machs/config.php
new file mode 100644
index 0000000..297fb01
--- /dev/null
+++ b/homepage/machs/config.php
@@ -0,0 +1,8 @@
+
diff --git a/homepage/machs/images.d/Judo_Safari.png b/homepage/machs/images.d/Judo_Safari.png
new file mode 100644
index 0000000..1f9e678
Binary files /dev/null and b/homepage/machs/images.d/Judo_Safari.png differ
diff --git a/homepage/machs/images.d/original_Safari_Adler.jpg b/homepage/machs/images.d/original_Safari_Adler.jpg
new file mode 100644
index 0000000..03e6cce
Binary files /dev/null and b/homepage/machs/images.d/original_Safari_Adler.jpg differ
diff --git a/homepage/machs/images.d/original_Safari_Bär.jpg b/homepage/machs/images.d/original_Safari_Bär.jpg
new file mode 100644
index 0000000..d1fd8ce
Binary files /dev/null and b/homepage/machs/images.d/original_Safari_Bär.jpg differ
diff --git a/homepage/machs/images.d/original_Safari_Fuchs.jpg b/homepage/machs/images.d/original_Safari_Fuchs.jpg
new file mode 100644
index 0000000..57bbb47
Binary files /dev/null and b/homepage/machs/images.d/original_Safari_Fuchs.jpg differ
diff --git a/homepage/machs/images.d/original_Safari_Känguru.jpg b/homepage/machs/images.d/original_Safari_Känguru.jpg
new file mode 100644
index 0000000..4148959
Binary files /dev/null and b/homepage/machs/images.d/original_Safari_Känguru.jpg differ
diff --git a/homepage/machs/images.d/original_Safari_Panther.jpg b/homepage/machs/images.d/original_Safari_Panther.jpg
new file mode 100644
index 0000000..b1299dc
Binary files /dev/null and b/homepage/machs/images.d/original_Safari_Panther.jpg differ
diff --git a/homepage/machs/images.d/original_Safari_Schlange.jpg b/homepage/machs/images.d/original_Safari_Schlange.jpg
new file mode 100644
index 0000000..13d77d5
Binary files /dev/null and b/homepage/machs/images.d/original_Safari_Schlange.jpg differ
diff --git a/homepage/machs/index.php b/homepage/machs/index.php
new file mode 100644
index 0000000..d613c98
--- /dev/null
+++ b/homepage/machs/index.php
@@ -0,0 +1,57 @@
+getMessage() . " queryString: ".$queryString." "; var_dump($bindArray);
+ }
+
+?>
+
+
+
+
+
+
+ Achievements
+
+
+
+
+
+
+
+
+
+ Achievements
+
+
+
+
diff --git a/homepage/machs/lib/achievementsLib.php b/homepage/machs/lib/achievementsLib.php
new file mode 100644
index 0000000..e81bfc7
--- /dev/null
+++ b/homepage/machs/lib/achievementsLib.php
@@ -0,0 +1,36 @@
+";
+ if( !empty($anRetMessage['error']) ){
+ $retHtmlString .= "";
+ $retHtmlString .= "ERROR: ";
+ $retHtmlString .= $anRetMessage['error'];
+ $retHtmlString .= "
";
+ }
+ if( !empty($anRetMessage['warning']) ){
+ $retHtmlString .= "";
+ $retHtmlString .= "WARNING: ";
+ $retHtmlString .= $anRetMessage['warning'];
+ $retHtmlString .= "
";
+ }
+ if( !empty($anRetMessage['notice']) ){
+ $retHtmlString .= "";
+ $retHtmlString .= "Info: ";
+ $retHtmlString .= $anRetMessage['notice'];
+ $retHtmlString .= "
";
+ }
+ if( !empty($anRetMessage['success']) ){
+ $retHtmlString .= "";
+ $retHtmlString .= "SUCCESS: ";
+ $retHtmlString .= $anRetMessage['success'];
+ $retHtmlString .= "
";
+ }
+ $retHtmlString .= "";
+}
+// print_r($anRetMessage);
+return $retHtmlString;
+}
+?>
diff --git a/homepage/machs/local/.htaccess b/homepage/machs/local/.htaccess
new file mode 100644
index 0000000..3a42882
--- /dev/null
+++ b/homepage/machs/local/.htaccess
@@ -0,0 +1 @@
+Deny from all
diff --git a/homepage/machs/local/achievementsConf.php b/homepage/machs/local/achievementsConf.php
new file mode 100644
index 0000000..3517089
--- /dev/null
+++ b/homepage/machs/local/achievementsConf.php
@@ -0,0 +1,10 @@
+
diff --git a/homepage/machs/local/dbConf.php b/homepage/machs/local/dbConf.php
new file mode 100644
index 0000000..97efeba
--- /dev/null
+++ b/homepage/machs/local/dbConf.php
@@ -0,0 +1,8 @@
+
diff --git a/homepage/machs/login.php b/homepage/machs/login.php
new file mode 100644
index 0000000..214d393
--- /dev/null
+++ b/homepage/machs/login.php
@@ -0,0 +1,101 @@
+connect_error) {
+ $message['error'] = 'Datenbankverbindung fehlgeschlagen: ' . $mysqli->connect_error;
+ } else {
+ $query = sprintf(
+ "SELECT id, loginName, pwHash, config FROM wkParticipo_Users WHERE loginName = '%s'",
+ $mysqli->real_escape_string($_POST['f']['username'])
+ );
+ $result = $mysqli->query($query);
+ if ($row = $result->fetch_array(MYSQLI_ASSOC)) {
+ if( password_verify( $_POST['f']['password'], $row['pwHash']) ){
+ session_start();
+ $_SESSION = array(
+ 'login' => true,
+ 'user' => array(
+ 'username' => $row['loginName'],
+ 'userId' => $row['id'],
+ 'userConfig' => json_decode($row['config'], true)
+ ),
+ );
+ $message['success'] = 'Anmeldung erfolgreich, weiter zum Inhalt .';
+ header('Location: http://' . $_SERVER['HTTP_HOST'] . '/achievements?user=' . $_POST['f']['username']);
+ } else {
+ sleep(1);
+ $message['error'] = 'Das Kennwort ist nicht korrekt.';
+ }
+ }
+ }
+return $message;
+}
+
+
+if (isset($_SESSION['login'])) {
+ header('Location: http://' . $_SERVER['HTTP_HOST'] . '/index.php');
+}
+else{
+ if (!empty($_POST)) {
+ if (
+ empty($_POST['f']['username']) ||
+ empty($_POST['f']['password'])
+ ) {
+ $message['error'] = 'Es wurden nicht alle Felder ausgefüllt.';
+ } else {
+
+ $message = checkCredentials($_POST['f']['username'], $_POST['f']['password'], $db_server, $db_user, $db_password, $db_name);
+ if( !isset($message['error']) )
+ $message['notice'] = "Achievement-System der Judoka des Chemnitzer WSV";
+ }
+ }
+}
+?>
+
+
+
+
+ Wettkampfplanung - Login
+
+
+
+
+
+
+ Achievementsystem der Judoka des Chemnitzer WSV
+
+
+
+
diff --git a/homepage/machs/machs.php b/homepage/machs/machs.php
new file mode 100644
index 0000000..8d293fa
--- /dev/null
+++ b/homepage/machs/machs.php
@@ -0,0 +1,203 @@
+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() . " queryString: ".$queryString." "; 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." "); var_dump($bindArray);
+ dbQuery(
+ $aDbConnection,
+ $queryString,
+ $bindArray
+ );
+ }
+ catch(PDOException $db_error){
+ print "Error!: " . $db_error->getMessage() . " queryString: ".$queryString." "; 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;"
+ );
+
+
+?>
+
+
+
+
+
+ Attribute
+
+ ".$userAchievement["name"]."");
+ // 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" => "withdraw ".$userAchievement["name"]." "];
+ }
+ echo( "have it ".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" => "give Attribute ".$userAchievement["name"]." "];
+ }
+ echo( "give it ".arrayKeyed2htmlTableString($unachievedUsers, ["id", "name", "vorname", "giveAchievementLink"]) );
+ }
+ ?>
+
+ User
+
+
+