192 lines
7.9 KiB
PHP
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);
|
|
}
|
|
}
|