Files
dotter_t3/packages/watten/Classes/Daten/Berechnung.php
T
2026-10-18 17:49:22 +02:00

192 lines
7.9 KiB
PHP

<?php
namespace HermannTelser\Watten\Daten;
// use Doctrine\DBAL\DBALException;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Database\Connection;
use TYPO3\CMS\Core\Utility\GeneralUtility;
class Berechnung
{
public static function run()
{
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tx_watten_domain_model_athleten')->createQueryBuilder();
$res = $queryBuilder
->select('uid', 'athlet')
->from('tx_watten_domain_model_athleten')
->execute();
$user = [];
foreach ($res as $key => $value) {
$user[$value['uid']] = $value['athlet'];
}
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tx_watten_tournaments')->createQueryBuilder();
$tournaments = $queryBuilder
->select('uid', 'tournament', 'active', 'king')
->from('tx_watten_tournaments')
->execute();
// TRUNCATE `tx_watten_tournaments_ergebnisse`
GeneralUtility::makeInstance(ConnectionPool::class)
->getConnectionForTable('tx_watten_tournaments_ergebnisse')
->truncate('tx_watten_tournaments_ergebnisse');
self::calcolate_data($user, ['uid' => 0, 'tournament' => 'Gesamt']);
foreach ($tournaments as $key => $row) {
self::calcolate_data($user, $row);
}
}
public static function calcolate_data($user, $row)
{
$tournamentid = $row['uid'];
$tournament = $row['tournament'];
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tx_watten_domain_model_ergebnisse')->createQueryBuilder();
if ($tournamentid == 0) {
// Gesamt
$_tournament = $queryBuilder
->select('s1', 's2', 'v1', 'v2', 'bumid')
->from('tx_watten_domain_model_ergebnisse')
->executeQuery()
->fetchAllAssociative();
} else {
$_tournament = $queryBuilder
->select('s1', 's2', 'v1', 'v2', 'bumid')
->from('tx_watten_domain_model_ergebnisse')
->where(
$queryBuilder->expr()->eq('tournaments_id', (int) $tournamentid)
)
->executeQuery()
->fetchAllAssociative();
}
$arr = [];
foreach ($_tournament as $key => $value) {
$bum = $value['bumid'];
$s1 = $value['s1'];
$s2 = $value['s2'];
$v1 = $value['v1'];
$v2 = $value['v2'];
if (!isset($arr[$s1]['s'][$bum])) {
$arr[$s1]['s'][$bum] = 0;
}
if (!isset($arr[$s2]['s'][$bum])) {
$arr[$s2]['s'][$bum] = 0;
}
if (!isset($arr[$v1]['v'][$bum])) {
$arr[$v1]['v'][$bum] = 0;
}
if (!isset($arr[$v2]['v'][$bum])) {
$arr[$v2]['v'][$bum] = 0;
}
if (!isset($arr[$s1]['p'])) {
$arr[$s1]['p'] = 0;
}
if (!isset($arr[$s2]['p'])) {
$arr[$s2]['p'] = 0;
}
if (!isset($arr[$v1]['p'])) {
$arr[$v1]['p'] = 0;
}
if (!isset($arr[$v2]['p'])) {
$arr[$v2]['p'] = 0;
}
$arr[$s1]['s'][$bum]++;
$arr[$s2]['s'][$bum]++;
$arr[$v1]['v'][$bum]++;
$arr[$v2]['v'][$bum]++;
$arr[$s1]['p']++;
$arr[$s2]['p']++;
$arr[$v1]['p']++;
$arr[$v2]['p']++;
}
foreach ($arr as $userid => $value) {
$punkte = 0;
if (isset($value['s'][1])) {
$punkte = $value['s'][1] * 1.1;
}
if (isset($value['s'][2])) {
$punkte += $value['s'][2] * 2.1;
}
if (isset($value['s'][4])) {
$punkte += $value['s'][4] * 4.1;
}
if (isset($value['v'][1])) {
$punkte -= $value['v'][1];
}
if (isset($value['v'][2])) {
$punkte -= $value['v'][2] * 2;
}
if (isset($value['v'][4])) {
$punkte -= $value['v'][4] * 4;
}
$arr[$userid]['punkte'] = round($punkte, 2);
$arr[$userid]['spiele'] = $value['p'];
$arr[$userid]['userid'] = $userid;
$arr[$userid]['name'] = $user[$userid];
$arr[$userid]['userid'] = $userid;
}
$punkte = array_column($arr, 'punkte');
array_multisort($punkte, SORT_NUMERIC, SORT_DESC, $arr);
$winner = $arr[0];
$looser = $arr[array_key_last($arr)];
foreach ($arr as $key => $value) {
$arr[$key]['platz'] = $key + 1;
$arr[$key]['s1'] = isset($value['s'][1]) ? $value['s'][1] : '';
$arr[$key]['s1'] = isset($value['s'][1]) ? $value['s'][1] : '';
$arr[$key]['s2'] = isset($value['s'][2]) ? $value['s'][2] : '';
$arr[$key]['s4'] = isset($value['s'][4]) ? $value['s'][4] : '';
unset($arr[$key]['s']);
$arr[$key]['v1'] = isset($value['v'][1]) ? $value['v'][1] : '';
$arr[$key]['v2'] = isset($value['v'][2]) ? $value['v'][2] : '';
$arr[$key]['v4'] = isset($value['v'][4]) ? $value['v'][4] : '';
unset($arr[$key]['v']);
}
$insert_value = [];
$insert_value['crdate'] = time();
$insert_value['tournament_id'] = $tournamentid;
$insert_value['tournament'] = (string)$tournament;
if ($tournamentid == 0) {
$insert_value['type'] = 'gesamt';
} elseif ($row['king'] == 1) {
$insert_value['type'] = 'king';
} elseif ($row['active'] == 1) {
$insert_value['type'] = 'active';
}
$insert_value['koenig'] = (string)$winner['name'];
$insert_value['koenig_id'] = (int)$winner['userid'];
$insert_value['koenig_spiele'] = isset($winner['spiele']) ? $winner['spiele'] : 0;
$insert_value['koenig_punkte'] = isset($winner['punkte']) ? (float) $winner['punkte'] : 0;
$insert_value['koenig_siege'] = isset($winner['s'][1]) ? $winner['s'][1] : 0;
$insert_value['koenig_niederlagen'] = isset($winner['v'][1]) ? $winner['v'][1] : 0;
$insert_value['koenig_schneider'] = isset($winner['s'][2]) ? $winner['s'][2] : 0;
$insert_value['koenig_schneider_niederlage'] = isset($winner['v'][2]) ? $winner['v'][2] : 0;
$insert_value['koenig_retour_schneider'] = isset($winner['s'][4]) ? $winner['s'][4] : 0;
$insert_value['koenig_retour_schneider_niederlage'] = isset($winner['v'][4]) ? $winner['v'][4] : 0;
$insert_value['schneewatter'] = (string)$looser['name'];
$insert_value['schneewatter_id'] = (int)$looser['userid'];
$insert_value['schneewatter_spiele'] = isset($looser['spiele']) ? $looser['spiele'] : 0;
$insert_value['schneewatter_punkte'] = isset($looser['punkte']) ? (float) $looser['punkte'] : 0;
$insert_value['schneewatter_siege'] = isset($looser['s'][1]) ? $looser['s'][1] : 0;
$insert_value['schneewatter_niederlagen'] = isset($looser['v'][1]) ? $looser['v'][1] : 0;
$insert_value['schneewatter_schneider'] = isset($looser['s'][2]) ? $looser['s'][2] : 0;
$insert_value['schneewatter_schneider_niederlage'] = isset($looser['v'][2]) ? $looser['v'][2] : 0;
$insert_value['schneewatter_retour_schneider'] = isset($looser['s'][4]) ? $looser['s'][4] : 0;
$insert_value['schneewatter_retour_schneider_niederlage'] = isset($looser['v'][4]) ? $looser['v'][4] : 0;
$insert_value['result_json'] = json_encode($arr);
GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tx_watten_tournaments_ergebnisse')
->insert('tx_watten_tournaments_ergebnisse', $insert_value);
}
}