wip: pmelo

This commit is contained in:
marko
2024-01-20 12:40:00 +01:00
parent d665230ad5
commit 62bd7cb14b
3 changed files with 73 additions and 14 deletions

View File

@@ -38,17 +38,20 @@ class PmElo{
}
}
if(!is_file("pmeloRanking.json")){
$this->log['info'][] = "Couldn't find `pmeloRanking.json`. Create a new one!";
file_put_contents("pmeloRanking.json", json_encode([]));
// load/recreate ranking data
if(!is_file(self::$pmeloJson)){
$this->log['info'][] = "Couldn't find `".self::$pmeloJson."`. Create a new one!";
file_put_contents(self::$pmeloJson, json_encode([]));
}
// init members
$this->trainees = self::getTrainees();
$this->var_log(array_map(function($user){return $user->getFirstName();},$this->trainees), "trainees from db");
$this->rankings = self::createRankings();
}
// load all active trainees into a id=>User assoc array
public static function getTrainees(){
$traineeList = array_map('User::fromDbArray', User::dbSelectWithAttribute(4));
$traineeAssocArray = [];
@@ -57,31 +60,51 @@ class PmElo{
}
return $traineeAssocArray;
}
// load ranking from json file
public static function loadRankings(){
return json_decode(file_get_contents("pmeloRanking.json"));
return json_decode(file_get_contents(self::$pmeloJson));
}
// save a ranking to json file
public static function saveRankings(array $rankings){
file_put_contents("pmeloRankings.json", json_encode($rankings));
file_put_contents(self::$pmeloJson, json_encode($rankings));
}
function var_log($variable, string $prefix=null, string $logChannel='info'){
if(!in_array($logChannel, ['info', 'warning', 'error'])){
$logChannel='info';
}
$prefix = (!empty($prefix) ? $prefix.": " : "");
$this->log[$logChannel][]=$prefix.var_export($variable, true);
}
public function createRankings(){
// load the last state of the ranking
$loadedRanking = self::loadRankings();
$this->var_log($loadedRanking,"ranking");
// check if the ranked trainees still are in training
$cleanRanking = [];
$toBeInsertedTrainees = [];
$toBeInsertedTrainees = $this->trainees;
foreach($loadedRanking as $rank=>$id){
if(array_key_exists($id, $this->trainees)){
$cleanRanking[] = $id;
continue;
// id of the not in the ranking, we have to insert
unset($toBeInsertedTrainees[$id]);
}
// id of the not in the ranking, we have to insert
$toBeInsertedTrainees[$id] = $this->trainees[$id];
}
usort($toBeInsertedTrainees, function($lhs, $rhs){return $lhs < $rhs ? -1 : 1;});
var_dump($toBeInsertedTrainees);
$newTraineesIds = array_map(function($u){return $u->getId();},$toBeInsertedTrainees);
usort(
$newTraineesIds
, function($lhs, $rhs){
return $this->trainees[$lhs]->getStrBirthday() < $this->trainees[$rhs]->getStrBirthday() ? -1 : ($this->trainees[$lhs]->getStrBirthday() > $this->trainees[$rhs]->getStrBirthday() ? 1 : 0);
}
);
$this->var_log(array_map(function($id){return $this->trainees[$id]->getStrBirthday();},$newTraineesIds), "newTrainieesIdsByAge");
$this->var_log($newTraineesIds, "newTrainieesIdsByAge");
$this->var_log(array_map(function($user){return $user->getFirstName();}, $toBeInsertedTrainees), "newTrainees");
// insert new trainees in the ranking
// foreach($this->trainees as $trainee){
@@ -96,4 +119,6 @@ class PmElo{
public $trainees = null;
// list of id-s in the order of the current ranking
public $rankings = null;
static $pmeloJson="pmeloRanking.json";
}