");
foreach($achievementGroups as $g){
echo($g->asHtmlCard($_SESSION['user']['userId']));
}
@@ -78,7 +58,7 @@ processPostData($dbConnection, $_POST);
foreach($usersKids as $k){
if( hasUserAttribute($dbConnection, $k['kidId'], "inTraining" ) ){
echo( "
");
+ echo( "
");
foreach($achievementGroups as $g){
echo($g->asHtmlCard($k['kidId'], ['noForm'=>false]));
}
diff --git a/homepage/machs/lib/api.php b/homepage/machs/lib/api.php
index c3801ff..2b2f9ba 100644
--- a/homepage/machs/lib/api.php
+++ b/homepage/machs/lib/api.php
@@ -8,6 +8,13 @@ function processPostData($db, $post, $redirectLocation = "."){
$post['userId'],
$post['achievementId']
);
+ $u = getUserData($db, $post['userId']);
+ $a = getAchievement($db, $post['achievementId']);
+ sendEmail(
+ "cwsvjudo@arcor.de",
+ "kwT",
+ $u['vorname']." ".$u['name']." got achievement ".$a[0]['name']
+ );
}
if($post['action']=="addAchievement"){
addAchievement(
@@ -31,6 +38,18 @@ function processPostData($db, $post, $redirectLocation = "."){
);
}
+ if($post['action']=="autoAddAchievements"){
+ $g=new achievementGroup;
+ $g->setDbConnection($db);
+ $g->loadAchievementGroupFromDb($post['achievementGroupId']);
+ $g->autoAddAchievements(
+ $post['messageTemplate'],
+ $post['from'],
+ $post['to'],
+ $post['step']
+ );
+ }
+
if($post['action']=="updateAchievement"){
updateAchievement(
$db,
@@ -63,19 +82,21 @@ function processPostData($db, $post, $redirectLocation = "."){
);
}
if($post['action']=="setRecord"){
-# $u = getUserData($db, $post['userId']);
-# $ag = new achievementGroup;
-# achievementGroup::setDbConnection($db);
-# $ag->loadAchievementGroupFromDb($post['achievementGroupId']);
-# $m = $u['vorname']." ".$u['name']." hat in ".$ag->getName()." ".$post['value']." geschafft!";
- $m = $post['userId']." hat in ".$post['achievementGroupId']." ".$post['value']." geschafft!";
- sendEmail("cwsvjudo@arcor.de", $m, "[machs] Rekord eingetragen");
-# setRecord(
-# $db,
-# $post['userId'],
-# $post['achievementGroupId'],
-# $post['value']
-# );
+ $u = getUserData($db, $post['userId']);
+ $g = new achievementGroup;
+ $g->setDbConnection($db);
+ $g->loadAchievementGroupFromDb($post['achievementGroupId']);
+ sendEmail(
+ "cwsvjudo@arcor.de",
+ $u['vorname']." ".$u['name']." got ".$post['value']." in ".$g->getName(),
+ "[machs] Rekord eingetragen"
+ );
+ //setRecord(
+ //$db,
+ //$post['userId'],
+ //$post['achievementGroupId'],
+ //$post['value']
+ //);
}
if($post['action']=="reportRecord"){
# $u = getUserData($db, $post['userId']);
diff --git a/homepage/machs/lib/db.php b/homepage/machs/lib/db.php
index a6f65d1..059ce33 100644
--- a/homepage/machs/lib/db.php
+++ b/homepage/machs/lib/db.php
@@ -64,6 +64,8 @@ if( empty($someOptions['dontFetch' ]) ) $someOptions['dontFetch' ] = false;
if(!$pdoResult){
echo("Error during dbQuery!\n");
echo("DB-Error:\n"); var_dump($aDbConnection->errorInfo());
+// var_dump($aQueryString);
+// var_dump($aBindArray);
// echo($pdoStatement.errorInfo());
}
if($someOptions['dontFetch']){
@@ -245,8 +247,6 @@ INSERT INTO `cwsvjudo`.`achievements<=>user` (`userId`, `achievementId`) VALUE (
SQL;
$params = [':userId'=>['value'=>$userId, 'data_type'=>PDO::PARAM_INT], 'achievementId'=>['value'=>$achievementId, 'data_type'=>PDO::PARAM_INT]];
dbQuery($db, $query, $params);
- sendEmail("cwsvjudo@arcor.de", "kwT", "User ".$userId." got achievement ".$achievementId);
-//var_dump($query, $params);
return;
}
@@ -282,7 +282,18 @@ SQL;
return dbQuery($db, $query);
}
+function getAchievement($db, $id){
+ $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=="")
diff --git a/homepage/machs/lib/machs/achievementGroup.php b/homepage/machs/lib/machs/achievementGroup.php
index 4eb2882..288194d 100644
--- a/homepage/machs/lib/machs/achievementGroup.php
+++ b/homepage/machs/lib/machs/achievementGroup.php
@@ -4,24 +4,34 @@ require_once('./lib/db.php');
// A series of achievements
class achievementGroup{
+// data from the achievements group table
+ // id of the group
private $id;
+ // name of the group
private $name;
+ // Achievement, that unlocks the group
private $unlockingAchievementId;
+ // an image for the group
private $imageUrl;
+ // achievements, that belong to this group
private $achievements;
-
+
+ // pointer to the db that shall be used for queries
private static $db=null;
+ // name of the table
// private static $tableName = "`cwsvjudo`.`machs_achievementGroups`";
- static function setDbConnection($dbConnection){
+ // set the dbConnection (just setting, no establishing)
+ public static function setDbConnection($dbConnection){
if($dbConnection instanceof PDO)
self::$db = $dbConnection;
else
self::$db = null;
return;
}
- static function getDbConnection(){
+ // get the db pointer
+ public static function getDbConnection(){
return self::$db;
}
@@ -46,7 +56,7 @@ SQL;
return $groups;
}
- //getter functions for the member variables
+ //getter functions for the (primitive) member variables
function getId(){return $this->id;}
function getName(){return $this->name;}
function getUnlockingAchievementId(){return $this->unlockingAchievementId;}
@@ -69,13 +79,13 @@ SQL;
return $this->achievements;
} // end getAchievements
- /// Load the achievementgroup $id from the db into the
+ /// Load the achievementgroup $id from the db (into this)
function loadAchievementGroupFromDb($id){
$query = <<['value'=>$id, 'data_type'=>PDO::PARAM_INT]];
- $result = dbQuery(self::$db, $query, $param);
+ $result = dbQuery(self::$db, $query, $params);
$this->setAchievementGroupData(
$result[0]['id'],
@@ -94,23 +104,6 @@ SQL;
$this->imageUrl = $imageUrl;
}
- /// A simple representation of the group in html code
- function html(){
- $html = "";
- $html .= "";
- $html .= "
";
- $html .= "- Id:
- ".$this->id."
";
- $html .= "- name:
- ".$this->name."
";
- $html .= "- unlockingAchievementId:
- ".$this->unlockingAchievementId."
";
- $html .= "- Achievements:
";
- foreach($this->achievements as $a)
- $html .= "- ".$a['name']."
";
- $html .= "
";
- $html .= "
";
- $html .= "
";
- return $html;
- }
-
/// gets all achievements of that user in that group reachedd
function getUsersAchievements($userId, $options=[]){
$getAll = $options['getAll']??false;
@@ -131,7 +124,7 @@ return $result;
///
/// @param $uId id of the user the achievements should be
function asHtmlCard($uId, $options=[]){
- $noForm = $options['noForm']??true;
+ $noForm = $options['noForm']??true; // for deactivating the give achievement form
$retHtml = "";
$userData = record::getUserData($uId);
$usersAchievements = $this->getUsersAchievements( $uId, ['getAll'=>true] );
@@ -139,6 +132,7 @@ return $result;
foreach($usersAchievements as $a){
$usersAchievementIds[]=(int)$a['achievementId'];
}
+ // If the user hasn't have the needed Achievement
if(!in_array($this->getUnlockingAchievementId(), $usersAchievementIds))
return "";
$records = record::getGroupsRecords(
@@ -149,15 +143,17 @@ return $result;
$retHtml .= "";
$retHtml .= "
";
- $retHtml .= "
";
+
if($this->imageUrl != null){
$retHtml .= "

imageUrl."\">";
- }
- $retHtml .= "
".$this->name."";
- if($this->imageUrl != null){
+ $retHtml .= "
".$this->name."";
$retHtml .= "
";
}
- $retHtml .= "
";
+ else
+ $retHtml .= "".$this->name."";
+
+ $retHtml .= "";
+ $retHtml .= "
";
+ $retHtml .= "
";// end card-content
+ $retHtml .= "";
+ if(!$noForm){
+ if( canUserGetAchievementToday( $this->getDbConnection(), $uId) or isUserAdmin($this->getDbConnection(), $_SESSION['user']['userId']) ){
+ $retHtml .= "
";
+ }
+ if( validateDate($userData[0]['gebDatum'])){
+ $retHtml.=record::arrayRecord2htmlCardAction($records[0], $userData[0], $this->getId(), "li");
+ }
+ else{
+ $retHtml.="
";
+ }
+ }
$retHtml .= "
";
- $retHtml .= "
";
- $retHtml .= "
";
+
+ $retHtml .= "
";// end card
+ $retHtml .= "";// end col
return $retHtml;
}// end asHtmlCard
@@ -228,5 +233,73 @@ return $result;
return $html;
}
+ static function htmlAutoAddAchievementsForm($achievementGroupId, $messageTemplate=null, $from=null, $to=null, $step=null){
+ $html = "";
+ $html .= "
";
+ return $html;
+ }
+
+ /// auto generate the achievements for this group
+ /// @todo only for empty groups?
+ function autoAddAchievements($messageTemplate, $from, $to, $step){
+ if(!empty($this->getAchievements())){
+ echo("Won't auto-add Achievements to non-empty AchievementGroup!");
+ return;
+ }
+ $level = 1;
+ for ($value = (int)$from; $value <= (int)$to; $value+=(int)$step) {
+ $name = $this->getName()." ".intToRomanRepresentation($level++);
+ $description = str_replace("%value%", (string)$value, $messageTemplate);
+ $this->addAchievement($name, $description, $level);
+ }
+ }
+
+ // adds an achievement to the group (in the db!)
+ function addAchievement($name, $description, $level, $rootId=null){
+ addAchievement(
+ $this->getDbConnection(),
+ $name,
+ $rootId,
+ $this->getId(),
+ $level,
+ $description,
+ null
+ );
+ }
+}
+
+/// convert an int number to roman representation
+/// @param int $number
+/// @return string
+function intToRomanRepresentation($number){
+ $map = array('M' => 1000, 'CM' => 900, 'D' => 500, 'CD' => 400, 'C' => 100, 'XC' => 90, 'L' => 50, 'XL' => 40, 'X' => 10, 'IX' => 9, 'V' => 5, 'IV' => 4, 'I' => 1);
+ $returnValue = '';
+ while ($number > 0) {
+ foreach ($map as $roman => $int) {
+ if($number >= $int) {
+ $number -= $int;
+ $returnValue .= $roman;
+ break;
+ }
+ }
+ }
+ return $returnValue;
}
?>
diff --git a/homepage/machs/lib/machs/materializeInit.php b/homepage/machs/lib/machs/materializeInit.php
index 10acf22..775f066 100644
--- a/homepage/machs/lib/machs/materializeInit.php
+++ b/homepage/machs/lib/machs/materializeInit.php
@@ -11,4 +11,8 @@ document.addEventListener('DOMContentLoaded', function() {
var elems = document.querySelectorAll('.sidenav');
var instances = M.Sidenav.init(elems, options);
});
+document.addEventListener('DOMContentLoaded', function() {
+ var elems = document.querySelectorAll('.collapsible');
+ var instances = M.Collapsible.init(elems, options);
+});
diff --git a/homepage/machs/lib/machs/sidenav.php b/homepage/machs/lib/machs/sidenav.php
index 26a53ee..0e7c86d 100644
--- a/homepage/machs/lib/machs/sidenav.php
+++ b/homepage/machs/lib/machs/sidenav.php
@@ -2,6 +2,7 @@
- Achievements
+ - Rekorde
- Benutzerdaten
['value'=>$userId, 'data_type'=>PDO::PARAM_INT]]);
}
+
// request the records of a group together with its holder
// @param $groupId id of the group of achievements where the records are wanted
// @param $ageClass the age class (as int only) for which the record is holding
@@ -50,12 +55,10 @@ SQL;
// - a value
// - an age class
public static function getGroupsRecords($groupId, $ageClass=null){
-// var_dump($groupId, $ageClass);
- //$ageClass = null; // DEBUG
- $query = "SELECT * FROM `cwsvjudo`.`machs_records` ";
- $query.= "JOIN `cwsvjudo`.`wkParticipo_Users` ";
- $query.= " ON `cwsvjudo`.`machs_records`.`userId` = `cwsvjudo`.`wkParticipo_Users`.`id` ";
- $query.= "WHERE `cwsvjudo`.`machs_records`.`achievementGroupId` = :groupId ";
+ $query = "SELECT *, `cwsvjudo`.`machs_records`.`id` as `recordId` FROM `cwsvjudo`.`machs_records` ";
+ $query.= " JOIN `cwsvjudo`.`wkParticipo_Users` ";
+ $query.= " ON `cwsvjudo`.`machs_records`.`userId` = `cwsvjudo`.`wkParticipo_Users`.`id` ";
+ $query.= " WHERE `cwsvjudo`.`machs_records`.`achievementGroupId` = :groupId ";
$params =[
'groupId'=>[ 'value'=>$groupId, 'data_type'=>PDO::PARAM_INT ]
];
@@ -63,10 +66,10 @@ SQL;
$query.= " AND `cwsvjudo`.`machs_records`.`ageClass` <= :ageClass ";
$params['ageClass'] = [ 'value'=>$ageClass, 'data_type'=>PDO::PARAM_INT ];
}
- $query.= "ORDER BY `cwsvjudo`.`machs_records`.`value`;";
- //var_dump($query, $params);
+ $query.= "ORDER BY `cwsvjudo`.`machs_records`.`value` DESC;";
return dbQuery(self::$db, $query, $params);
}
+
/// @param $r record as associative array
public static function arrayRecord2htmlDl($r){
$retHtml = "";
@@ -75,6 +78,46 @@ SQL;
$retHtml.= "
";
return $retHtml;
}
+
+ public static function arrayRecord2htmlCardAction($r, $u, $gid){
+// $retHtml.= "";
+ $retHtml.= "
Rekord melden";
+ $retHtml.= "
";
+ $retHtml.= "
";
+ $retHtml.= "Rekorde stellen in jeder Achievementgruppe und Altersklasse die Bestleistung unter allen Judoka dar. Rekorde können unabhänging vom eigenen, aktuellen Achievementstand aufgestellt werden.";
+ $retHtml.= "Die Rekorde der jüngeren gelten auch für die älteren, aber nicht umgekehrt. ";
+ $retHtml.= "Damit ein Rekord auch eingetragen wird, muss er mit einem Nachweis in Videoform gemeldet werden.";
+ $retHtml.= "
Rekord melden
";
+ $retHtml.= "Um einen Rekord zu melden, lade ein Video des Rekordes hoch:";
+ $retHtml.= htmlUsersUploadBox(self::$db, $u['id']);
+ $retHtml.= "Anschließend kannst Du den Rekord melden:";
+ $retHtml.= "";
+ $retHtml.= "";
+ $retHtml.= "";
+ $retHtml.= "
";
+// $retHtml.= "
";
+ return $retHtml;
+ }
+
/// @param $r record joined with it's holder as associative error
/// @param $u user for whom the record is shown
public static function arrayRecord2htmlCard($r, $u, $gid, $frameTag="div"){
@@ -88,52 +131,80 @@ SQL;
$retHtml.= $r['vorname']." ".$r['name']." mit ".$r['value']." in der U".$r['ageClass'];
}
$retHtml.= "
";
+
$retHtml.= "".$frameTag.">";
return $retHtml;
}
+
public static function birthday2ageClass($birthdateString){
$birthDate = DateTime::createFromFormat("Y-m-d", $birthdateString);
$birthYear= (int)$birthDate->format("Y");
$thisYear = (int)date('Y');
return $thisYear - $birthYear + 1;
}
+
+ // get an ageClasses records including its holders
+ public static function getRecordsOfAgeClass($ageClass, $achievementGroup, $options=[]){
+ $query = <<