user` JOIN `wkParticipo_Users` ". "ON `wkParticipo_Users`.`id` = `achievements<=>user`.`userId` ". ( ($from!=null&&$to!=null)? (" WHERE `achievements<=>user`.`timestamp` BETWEEN CONVERT(\"".$from."\", datetime) AND CONVERT(\"".$to."\", datetime) "): ("") ). "GROUP BY `wkParticipo_Users`.`id` ". "ORDER BY `COUNT(*)` DESC;"; return dbQuery(self::$db, $query); } public static function getAllRecords(){ $query = <<['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 // // a record of an achievement group consists of: // - a value // - an age class public static function getGroupsRecords($groupId, $ageClass=null){ $query = "SELECT *, `cwsvjudo`.`machs_records`.`id` as `recordId`, `cwsvjudo`.`wkParticipo_Users`.`name` as `userName` FROM `cwsvjudo`.`machs_records` "; $query.= " JOIN `cwsvjudo`.`wkParticipo_Users` "; $query.= " ON `cwsvjudo`.`machs_records`.`userId` = `cwsvjudo`.`wkParticipo_Users`.`id` "; $query.= " JOIN `cwsvjudo`.`machs_achievementGroups` "; $query.= " ON `cwsvjudo`.`machs_achievementGroups`.`id` = `cwsvjudo`.`machs_records`.`achievementGroupId` "; $query.= " WHERE `cwsvjudo`.`machs_records`.`achievementGroupId` = :groupId "; $params =[ 'groupId'=>[ 'value'=>$groupId, 'data_type'=>PDO::PARAM_INT ] ]; if($ageClass != null){ $query.= " AND `cwsvjudo`.`machs_records`.`ageClass` <= :ageClass "; $params['ageClass'] = [ 'value'=>$ageClass, 'data_type'=>PDO::PARAM_INT ]; } $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 = "
"; foreach(self::$colNames as $i) $retHtml.= "
".$i."
".$r[$i]."
"; $retHtml.= "
"; return $retHtml; } public static function arrayRecord2htmlCardAction($r, $u, $gid){ $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, schickt als Nachweis ein Video des Rekordes hoch an cwsvJudo@arcor.de."; // $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.= "
"; if(isUserAdmin(record::$db, $_SESSION['user']['userId'])){ $retHtml.= ""; } else{ $retHtml.= ""; } $retHtml.= ""; $retHtml.= ""; $retHtml.= $u['vorname']." ".$u['name']." hat geschafft."; if(isUserAdmin(record::$db, $_SESSION['user']['userId'])){ $retHtml.= ""; } else{ $retHtml.= ""; } $retHtml.= "
"; $retHtml.= "

Sobald das Nachweisvideo gesichtet ist und es eine neue Bestleistung darstellt, wird der Rekord dann eingetragen und damit offiziell.

"; $retHtml.= "
"; $retHtml.= "
"; $retHtml.= "Zurück"; $retHtml.= "
"; $retHtml.= "
"; return $retHtml; } /// @param $r record joined with it's holder as associative array /// @param $u user for whom the record is shown public static function arrayRecord2collapsible($r, $u, $gid, $noForm=true){ $currentRecord = ""; if(empty($r)){ $currentRecord.= "Noch kein Rekord für die Altersklasse U".record::birthday2ageClass($u['gebDatum']); } else{ $currentRecord.= $r['vorname']." ".$r['userName']." mit ".$r['value']." in der U".$r['ageClass']; } $recordRequest = record::arrayRecord2htmlCardAction($r, $u, $gid, $noForm); return <<
  • ﹀ $currentRecord
    $recordRequest
  • COLLAPSIBLE; } /// @param $r record joined with it's holder as associative array /// @param $u user for whom the record is shown public static function arrayRecord2htmlCard($r, $u, $gid, $noForm=true, $frameTag="div"){ $group = new achievementGroup; $group->loadAchievementGroupFromDb($gid); $retHtml.= ""; // var_dump($group->canHaveRecords()); if($group->canHaveRecords()){ $retHtml = "<".$frameTag." class=\"card\">"; $retHtml.= "
    "; $retHtml.= "Zu schlagender Rekord"; if(empty($r)){ $retHtml.= "Noch kein Rekord für die Altersklasse U".record::birthday2ageClass($u['gebDatum']); } else{ // $retHtml.=record::arrayRecord2collapsible($records[0], $userData[0], $this->getId(), $noForm); $retHtml.=record::arrayRecord2collapsible($r, $u, $gid, $noForm); //$retHtml.= $r['vorname']." ".$r['name']." mit ".$r['value']." in der U".$r['ageClass']; } $retHtml.= "
    ";//end card-content // if(!$noForm){ // $retHtml.= record::arrayRecord2htmlCardAction($r, $u, $gid, $noForm); // } $retHtml.= ""; } 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 = <<['value'=>$ageClass, 'data_type'=>PDO::PARAM_INT], ':achievementGroupId'=>['value'=>$achievementGroupId, 'data_type'=>PDO::PARAM_INT], ]; $returns = query($this->getDbConnection(), $query, $params); return $records; } // returns all age classes with records public static function getAgeClassesWithRecord($achievementGroupId=null){ $params = null; $query="SELECT DISTINCT `ageClass` FROM `cwsvjudo`.`machs_records` "; if($achievementGroupId != null){ $query.="WHERE `achievementGroupId` = :achievementGroupId "; $params=[]; $params[':achievementGroupId'] = ['value'=>$achievementGroupId, 'data_type'=>PDO::PARAM_INT]; } $query.="ORDER BY `ageClass`"; $ageClasses = dbQuery(self::$db, $query, $params); return $ageClasses; } // load the achievement from the DB public function loadFromDb($id){ $query = "SELECT * from `cwsvjudo`.`machs_records` WHERE `id`=:id;"; $params = [':id'=>['value'=>$id, 'data_type'=>PDO::PARAM_INT]]; $achievements = query($this->getDbConnection(), $query, $params); $this->setFromAssocArray($achievements[0]); } // set the members of the record via an associative array (like the ones, that are returned by dbquery) public function setFromAssocArray($assocArray){ $this->id = (int)$assocArray['id']; $this->achievementGroupId = (int)$assocArray['achievementGroupId']; $this->ageClass = (int)$assocArray['ageClass']; $this->userId = (int)$assocArray['userId']; $this->timestap = $assocArray['userId']; $this->value = $assocArray['value']; } static public function htmlRanking($recordList){ if(empty($recordList)) return ""; $html = ""; $html.= ""; foreach($recordList as $record){ $html.=""; } $html.= "
    JudokaRekordVideo
    ".$record['vorname']." ".$record['name']."".$record['value']."Video
    "; return $html; } } /// Als String gegebene Altersklassen als Jahrgangsintervalle /// ausdrücken function akListString2jgArray($akListString, $year = NULL ){ $ret = array(); if($year==NULL) $year=date("Y"); else{ if( !((int)$year == $year && (int)$year >= 0) ) $year=date("Y"); } $year = (int)$year; foreach(explode(" ", $akListString) as $ak) array_push( $ret, akString2jgIntervall($ak, $year) ); return $ret; } /// Aus einer als String gegebenen Altersklasse ein Jahrgangsintervall /// machen function akString2jgIntervall($akString, $year=null){ if($year==NULL) $year=date("Y"); else{ if( !((int)$year == $year && (int)$year >= 0) ) $year=date("Y"); } $ret= array(NULL, NULL); // Speziell für die Ux-Altersklassen // Es fehlt noch das <=U $akUmatchString = "/(.*)U(.*)/"; $matches = array(); preg_match($akUmatchString, $akString, $matches); // Wenn wir nicht den gesamten akString Matchen ist etwas schief // gelaufen if($matches[0]==$akString){ // Das ausgelesene Alter der Ux sollte eine positive Integer sein, // sonst ist was schiefgelaufen $ageLimit = (int)$matches[2]; if( ($ageLimit == $matches[2] && $ageLimit > 0) ){ $ret[0] = $year-$ageLimit+1; if($matches[1] == "") $ret[1] = $year-$ageLimit+2; else{ if($matches[1] == "-") $ret[1] = $year-$ageLimit+3; else{ if($matches[1] == "--") $ret[1] = $year-$ageLimit+4; } } } return $ret; } // Speziell Altersklassen der Form Jg.x-y $akUmatchString = "/Jg\.(.*)\-(.*)/"; $matches = array(); preg_match($akUmatchString, $akString, $matches); // Wenn wir nicht den gesamten akString Matchen ist etwas schief // gelaufen if($matches[0]==$akString){ $ret[0]=(int)$matches[1]; $ret[1]=(int)$matches[2]; return $ret; } return $ret; } function validateDate($date, $format = 'Y-m-d') { $d = DateTime::createFromFormat($format, $date); // The Y ( 4 digits year ) returns TRUE for any integer with any number of digits so changing the comparison from == to === fixes the issue. return $d && $d->format($format) === $date; } ?>