diff --git a/packages/watten b/packages/watten
deleted file mode 160000
index de7be74..0000000
--- a/packages/watten
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit de7be741e38c818aec3849dca9b20d35b08c5478
diff --git a/packages/watten/Classes/Controller/EidController.php b/packages/watten/Classes/Controller/EidController.php
new file mode 100644
index 0000000..dc355cd
--- /dev/null
+++ b/packages/watten/Classes/Controller/EidController.php
@@ -0,0 +1,71 @@
+handle($request);
+ if (!isset($request->getQueryParams()['application'])) {
+ return $response;
+ }
+
+ switch (GeneralUtility::_GP('application')) {
+ case 'loadspieltag':
+ $arr = SpieltageRepository::loadSpieltag();
+ break;
+ case 'loadrangliste':
+ $activeTournament = GeneralUtility::_GP('tournament') ?? ErgebnisseRepository::getActiveTournament();
+ $arr = RanglisteRepository::loadRangliste($activeTournament);
+ break;
+ case 'loadgstrichenliste':
+ $activeTournament = GeneralUtility::_GP('tournament') ?? ErgebnisseRepository::getActiveTournament();
+ $arr = GstrichenRepository::loadGstrichenliste($activeTournament);
+ break;
+ case 'loadstatistik':
+ $event_id = GeneralUtility::_GP('event_id') ?? ErgebnisseRepository::getLastEventId();
+ $arr = StatistikRepository::loadStatistik($event_id);
+ break;
+ case 'loadstatistiktangliste':
+ $activeTournament = GeneralUtility::_GP('tournament') ?? ErgebnisseRepository::getActiveTournament();
+ $arr = StatistikRepository::loadStatistikRangliste($activeTournament);
+ break;
+ case 'loadtournamentathleten':
+ $activeTournament = GeneralUtility::_GP('tournament') ?? ErgebnisseRepository::getActiveTournament();
+ $arr = AthletenRepository::loadTournamentAthleten($activeTournament);
+ break;
+ case 'loadpaarlaufer';
+ $activeTournament = GeneralUtility::_GP('tournament') ?? ErgebnisseRepository::getActiveTournament();
+ $teilnehmer_id = GeneralUtility::_GP('teilnehmer_id');
+ $arr = StatistikRepository::loadPaarlauf($activeTournament, $teilnehmer_id);
+ break;
+ }
+
+ header('Content-Type: application/json');
+ echo json_encode((array) $arr);
+ exit();
+ }
+}
diff --git a/packages/watten/Classes/Controller/WattenController.php b/packages/watten/Classes/Controller/WattenController.php
new file mode 100644
index 0000000..469c9bd
--- /dev/null
+++ b/packages/watten/Classes/Controller/WattenController.php
@@ -0,0 +1,71 @@
+athletenRepository = $athletenRepository;
+ $this->ergebnisseRepository = $ergebnisseRepository;
+ $this->spieltageRepository = $spieltageRepository;
+ $this->ranglisteRepository = $ranglisteRepository;
+
+ $this->activeTournament = GeneralUtility::_GP('tournament') ?? $this->ergebnisseRepository->getActiveTournament();
+ $this->event_id = GeneralUtility::_GP('event_id') ?? $this->ergebnisseRepository->getLastEventId();
+ }
+
+ public function ergebnisseAction()
+ {
+ $tournaments = $this->ergebnisseRepository->findTournaments(false);
+ $this->view->assign('tournaments', $tournaments);
+ $this->view->assign('active_tournaments', $this->activeTournament);
+
+ $spieltage = $this->spieltageRepository->loadSpieltage();
+ $this->view->assign('spieltage', $spieltage);
+ $this->view->assign('active_event_id', $this->event_id);
+ }
+
+ public function ranglisteAction()
+ {
+ $tournaments = $this->ergebnisseRepository->findTournaments(true);
+ $this->view->assign('tournaments', $tournaments);
+ $this->view->assign('active', $this->activeTournament);
+ }
+
+ public function statistikAction()
+ {
+ $tournaments = $this->ergebnisseRepository->findTournaments(true);
+ $this->view->assign('tournaments', $tournaments);
+ $this->view->assign('active', $this->activeTournament);
+ $teilnehmer = $this->athletenRepository->loadTournamentAthleten($this->activeTournament);
+ $this->view->assign('teilnehmer', $teilnehmer);
+ }
+}
diff --git a/packages/watten/Classes/Daten/Berechnung.php b/packages/watten/Classes/Daten/Berechnung.php
new file mode 100644
index 0000000..3ad3c12
--- /dev/null
+++ b/packages/watten/Classes/Daten/Berechnung.php
@@ -0,0 +1,191 @@
+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);
+ }
+}
diff --git a/packages/watten/Classes/Domain/Model/Athleten.php b/packages/watten/Classes/Domain/Model/Athleten.php
new file mode 100644
index 0000000..1342247
--- /dev/null
+++ b/packages/watten/Classes/Domain/Model/Athleten.php
@@ -0,0 +1,117 @@
+setGender($gender);
+ $this->setName($name);
+ $this->setImage($image);
+ $this->setIsactive($isactive);
+ }
+
+ /**
+ *
+ * @param int $gender
+ *
+ * @return void
+ */
+ public function setGender(int $gender): void
+ {
+ $this->gender = $gender;
+ }
+
+ /**
+ *
+ * @return int
+ */
+ public function getGender(): int
+ {
+ return $this->gender;
+ }
+
+ /**
+ *
+ * @param string $name
+ *
+ * @return void
+ */
+ public function setName(string $name): void
+ {
+ $this->name = $name;
+ }
+
+ /**
+ *
+ * @return string
+ */
+ public function getName(): string
+ {
+ return $this->name;
+ }
+
+ /**
+ *
+ * @param string $image
+ *
+ * @return void
+ */
+ public function setImage(string $image): void
+ {
+ $this->image = $image;
+ }
+
+ /**
+ *
+ * @return string
+ */
+ public function getImage(): string
+ {
+ return $this->image;
+ }
+
+ /**
+ *
+ * @param int $isactive
+ *
+ * @return void
+ */
+ public function setIsactive(int $isactive): void
+ {
+ $this->isactive = $isactive;
+ }
+
+ /**
+ *
+ * @return int
+ */
+ public function getIsactive(): int
+ {
+ return $this->isactive;
+ }
+}
diff --git a/packages/watten/Classes/Domain/Model/Ergebnisse.php b/packages/watten/Classes/Domain/Model/Ergebnisse.php
new file mode 100644
index 0000000..1de8d8a
--- /dev/null
+++ b/packages/watten/Classes/Domain/Model/Ergebnisse.php
@@ -0,0 +1,170 @@
+setDatum($datum);
+ $this->setS1($s1);
+ $this->setS2($s2);
+ $this->setV1($v1);
+ $this->setV2($v2);
+ $this->setBumid($bumid);
+ }
+
+ /**
+ *
+ * @param DateTime $datum time stamp
+ *
+ * @return void
+ */
+ public function setDatum(int $datum): void
+ {
+ $this->datum = $datum;
+ }
+
+ /**
+ *
+ * @return DateTime
+ */
+ public function getDatum(): int
+ {
+ return $this->datum;
+ }
+
+
+ /**
+ *
+ * @param int $s1
+ *
+ * @return void
+ */
+ public function setS1(int $s1): void
+ {
+ $this->s1 = $s1;
+ }
+
+ /**
+ *
+ * @return Int
+ */
+ public function getS1(): int
+ {
+ return $this->s1;
+ }
+
+ /**
+ *
+ * @param int $s2
+ *
+ * @return void
+ */
+ public function setS2(int $s2): void
+ {
+ $this->s2 = $s2;
+ }
+
+ /**
+ *
+ * @return Int
+ */
+ public function getS2(): int
+ {
+ return $this->s2;
+ }
+
+ /**
+ *
+ * @param int $v1
+ *
+ * @return void
+ */
+ public function setV1(int $v1): void
+ {
+ $this->v1 = $v1;
+ }
+
+ /**
+ *
+ * @return Int
+ */
+ public function getV1(): int
+ {
+ return $this->v1;
+ }
+
+ /**
+ *
+ * @param int $v1
+ *
+ * @return void
+ */
+ public function setV2(int $v2): void
+ {
+ $this->v2 = $v2;
+ }
+
+ /**
+ *
+ * @return Int
+ */
+ public function getV2(): int
+ {
+ return $this->v2;
+ }
+
+ /**
+ *
+ * @param int $bumid
+ *
+ * @return void
+ */
+ public function setBumid(int $bumid): void
+ {
+ $this->bumid = $bumid;
+ }
+
+ /**
+ *
+ * @return Int
+ */
+ public function getBumid(): int
+ {
+ return $this->bumid;
+ }
+}
diff --git a/packages/watten/Classes/Domain/Model/Events.php b/packages/watten/Classes/Domain/Model/Events.php
new file mode 100644
index 0000000..d97e5eb
--- /dev/null
+++ b/packages/watten/Classes/Domain/Model/Events.php
@@ -0,0 +1,119 @@
+setDatum($datum);
+ $this->setTournamentId($tournaments_id);
+ $this->setEvent($event);
+ $this->setIsactive($isactive);
+ }
+
+ /**
+ *
+ * @param DateTime $datum
+ *
+ * @return void
+ */
+ public function setDatum(int $datum): void
+ {
+ $this->datum = $datum;
+ }
+
+ /**
+ *
+ * @return DateTime
+ */
+ public function getDatum(): int
+ {
+ return $this->datum;
+ }
+
+
+ /**
+ *
+ * @param int $tournaments_id
+ *
+ * @return void
+ */
+ public function setTournamentId(int $tournaments_id): void
+ {
+ $this->s1 = $tournaments_id;
+ }
+
+ /**
+ *
+ * @return Int
+ */
+ public function getTournamentId(): int
+ {
+ return $this->tournaments_id;
+ }
+
+ /**
+ *
+ * @param String $event
+ *
+ * @return void
+ */
+ public function setEvent(string $event): void
+ {
+ $this->event = $event;
+ }
+
+ /**
+ *
+ * @return String
+ */
+ public function getEvent(): string
+ {
+ return $this->event;
+ }
+
+ /**
+ *
+ * @param int $isactive
+ *
+ * @return void
+ */
+ public function setIsactive(int $isactive): void
+ {
+ $this->s1 = $isactive;
+ }
+
+ /**
+ *
+ * @return Int
+ */
+ public function getIsactive(): int
+ {
+ return $this->isactive;
+ }
+}
diff --git a/packages/watten/Classes/Domain/Repository/AthletenRepository.php b/packages/watten/Classes/Domain/Repository/AthletenRepository.php
new file mode 100644
index 0000000..e97fb81
--- /dev/null
+++ b/packages/watten/Classes/Domain/Repository/AthletenRepository.php
@@ -0,0 +1,49 @@
+getConnectionForTable('tx_watten_domain_model_athleten')->createQueryBuilder();
+ $res = $queryBuilder
+ ->select('uid', 'name')
+ ->from('tx_watten_domain_model_athleten')
+ ->execute();
+ $athleten = [];
+ foreach ($res as $value) {
+ $athleten[$value['uid']] = $value['name'];
+ }
+
+ $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tx_watten_domain_model_ergebnisse')->createQueryBuilder();
+ $res = $queryBuilder
+ ->select('s1', 's2', 'v1', 'v2')
+ ->from('tx_watten_domain_model_ergebnisse')
+ ->where(
+ $queryBuilder->expr()->eq('tournaments_id', (int) $activeTournament)
+ )
+ ->execute();
+ $active = [];
+ foreach ($res as $value) {
+ $active[] = $value['s1'];
+ $active[] = $value['s2'];
+ $active[] = $value['v1'];
+ $active[] = $value['v2'];
+ }
+ $active = array_unique($active);
+
+ $return = [];
+ $return[] = ['id' => 0, 'name' => 'Athleten'];
+ foreach ($athleten as $key => $name) {
+ if (in_array($key, $active)) {
+ $return[] = ['id' => $key, 'name' => $name];
+ }
+ }
+ return $return;
+ }
+}
diff --git a/packages/watten/Classes/Domain/Repository/ErgebnisseRepository.php b/packages/watten/Classes/Domain/Repository/ErgebnisseRepository.php
new file mode 100644
index 0000000..add8a8e
--- /dev/null
+++ b/packages/watten/Classes/Domain/Repository/ErgebnisseRepository.php
@@ -0,0 +1,120 @@
+getConnectionForTable('tx_watten_tournaments')->createQueryBuilder();
+ $res = $queryBuilder
+ ->select('uid')
+ ->from('tx_watten_tournaments')
+ ->where(
+ $queryBuilder->expr()->eq('active', (int) 1)
+ )
+ ->execute();
+ foreach ($res as $key => $value) {
+ return (int) $value['uid'];
+ }
+ return 0;
+ }
+
+ public static function getActiveTournament()
+ {
+ $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tx_watten_tournaments')->createQueryBuilder();
+ $res = $queryBuilder
+ ->select('uid')
+ ->from('tx_watten_tournaments')
+ ->where(
+ $queryBuilder->expr()->eq('active', (int) 1)
+ )
+ ->execute();
+ foreach ($res as $key => $value) {
+ return (int) $value['uid'];
+ }
+ return 0;
+ }
+
+ public function getLastEventId()
+ {
+ $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tx_watten_domain_model_events')->createQueryBuilder();
+ $res = $queryBuilder
+ ->select('uid')
+ ->from('tx_watten_domain_model_events')
+ ->where(
+ $queryBuilder->expr()->eq('isactive', (int) 1)
+ )
+ ->execute();
+ foreach ($res as $key => $value) {
+ return (int) $value['uid'];
+ }
+ return 0;
+ }
+
+ public function findTournaments($mitGesammt)
+ {
+ $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tx_watten_tournaments')->createQueryBuilder();
+ $res = $queryBuilder
+ ->select('uid', 'tournament', 'active')
+ ->from('tx_watten_tournaments')
+ ->execute();
+
+ $tournaments = [];
+ foreach ($res as $key => $value) {
+ $tmp = new stdClass();
+ $tmp->id = (int) $value['uid'];
+ $tmp->name = $value['tournament'];
+ $tmp->active = $value['active'];
+ $tournaments[] = $tmp;
+ }
+ if ($mitGesammt == true) {
+ $tmp = new stdClass();
+ $tmp->id = -1;
+ $tmp->name = "Gesamt";
+ $tournaments[] = $tmp;
+ }
+ return $tournaments;
+ }
+
+ public function findByEventId(int $event_id)
+ {
+ $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tx_watten_domain_model_athleten')->createQueryBuilder();
+ $res = $queryBuilder
+ ->select('uid', 'name')
+ ->from('tx_watten_domain_model_athleten')
+ ->execute();
+ $athleten = [];
+ foreach ($res as $key => $value) {
+ $athleten[$value['uid']] = $value['name'];
+ }
+
+ $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tx_watten_domain_model_ergebnisse')->createQueryBuilder();
+ $ergebnisse = $queryBuilder
+ ->select('uid', 'datum', 's1', 's2', 'v1', 'v2', 'bumid')
+ ->from('tx_watten_domain_model_ergebnisse')
+ ->where(
+ $queryBuilder->expr()->eq('event_id', (int) $event_id)
+ )
+ ->execute();
+
+ $return = [];
+ foreach ($ergebnisse as $key => $value) {
+ $tmp = [];
+ $tmp['uid'] = $value['uid'];
+ $tmp['s1'] = $athleten[$value['s1']];
+ $tmp['s2'] = $athleten[$value['s2']];
+ $tmp['v1'] = $athleten[$value['v1']];
+ $tmp['v2'] = $athleten[$value['v2']];
+ $tmp['bumid'] = $value['bumid'];
+ $return[] = $tmp;
+ }
+
+ return $return;
+ }
+}
\ No newline at end of file
diff --git a/packages/watten/Classes/Domain/Repository/GstrichenRepository.php b/packages/watten/Classes/Domain/Repository/GstrichenRepository.php
new file mode 100644
index 0000000..779fd1f
--- /dev/null
+++ b/packages/watten/Classes/Domain/Repository/GstrichenRepository.php
@@ -0,0 +1,111 @@
+getConnectionForTable('tx_watten_domain_model_athleten')->createQueryBuilder();
+ $res = $queryBuilder
+ ->select('uid', 'name')
+ ->from('tx_watten_domain_model_athleten')
+ ->execute();
+ $user = [];
+ foreach ($res as $key => $value) {
+ $user[$value['uid']] = $value['name'];
+ }
+
+ $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tx_watten_domain_model_ergebnisse')->createQueryBuilder();
+ if ($activeTournament < 0) {
+ $ergebnisse = $queryBuilder
+ ->select('s1', 's2', 'v1', 'v2', 'gstrichen')
+ ->from('tx_watten_domain_model_ergebnisse')
+ ->execute();
+ } else {
+ $ergebnisse = $queryBuilder
+ ->select('s1', 's2', 'v1', 'v2', 'gstrichen')
+ ->from('tx_watten_domain_model_ergebnisse')
+ ->where($queryBuilder->expr()->eq('tournaments_id', (int) $activeTournament))
+ ->execute();
+ }
+
+ $arr = [];
+ foreach ($ergebnisse as $key => $value) {
+ $s1 = $value['s1'];
+ $s2 = $value['s2'];
+ $v1 = $value['v1'];
+ $v2 = $value['v2'];
+ $gs = $value['gstrichen'];
+
+ if (!isset($arr[$s1]['s'])) {
+ $arr[$s1]['s'] = 0;
+ $arr[$s1]['v'] = 0;
+ }
+ if (!isset($arr[$s2]['s'])) {
+ $arr[$s2]['s'] = 0;
+ $arr[$s2]['v'] = 0;
+ }
+ if (!isset($arr[$v1]['v'])) {
+ $arr[$v1]['v'] = 0;
+ $arr[$v1]['s'] = 0;
+ }
+ if (!isset($arrv[$v2]['v'])) {
+ $arr[$v2]['v'] = 0;
+ $arr[$v2]['s'] = 0;
+ }
+ if ($gs) {
+ $arr[$s1]['s']++;
+ $arr[$s2]['s']++;
+ $arr[$v1]['v']++;
+ $arr[$v2]['v']++;
+ }
+ }
+
+ $sieger = [];
+ $verlierer = [];
+ $i = 1;
+ foreach ($arr as $userid => $value) {
+ $sieger[$i]['sieger'] = $user[$userid];
+ $sieger[$i]['gewonnen'] = $value['s'];
+
+ $verlierer[$i]['verlierer'] = $user[$userid];
+ $verlierer[$i]['verloren'] = $value['v'];
+
+ $i++;
+ }
+ $gewonnen = array_column($sieger, 'gewonnen');
+ array_multisort($gewonnen, SORT_NUMERIC, SORT_DESC, $sieger);
+ $verloren = array_column($verlierer, 'verloren');
+ array_multisort($verloren, SORT_NUMERIC, SORT_DESC, $verlierer);
+
+ $return = [];
+ $s = 0;
+ $v = 0;
+ foreach ($gewonnen as $key => $value) {
+ $return[$key] = array_merge($sieger[$key], $verlierer[$key]);
+ $return[$key]['platz'] = $key + 1;
+
+ if ($return[$key]['gewonnen'] == 0) {
+ $return[$key]['sieger'] = '';
+ $return[$key]['gewonnen'] = '';
+ $s = 1;
+ }
+ if ($return[$key]['verloren'] == 0) {
+ $return[$key]['verloren'] = '';
+ $return[$key]['verlierer'] = '';
+ $v = 1;
+ }
+ if ($s and $v) {
+ unset($return[$key]);
+ }
+ }
+
+ return $return;
+ }
+}
diff --git a/packages/watten/Classes/Domain/Repository/RanglisteRepository.php b/packages/watten/Classes/Domain/Repository/RanglisteRepository.php
new file mode 100644
index 0000000..5c7a34b
--- /dev/null
+++ b/packages/watten/Classes/Domain/Repository/RanglisteRepository.php
@@ -0,0 +1,149 @@
+getConnectionForTable('tx_watten_domain_model_athleten')->createQueryBuilder();
+ $res = $queryBuilder
+ ->select('uid', 'name')
+ ->from('tx_watten_domain_model_athleten')
+ ->execute();
+ $user = [];
+ foreach ($res as $key => $value) {
+ $user[$value['uid']] = $value['name'];
+ }
+
+ $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tx_watten_domain_model_ergebnisse')->createQueryBuilder();
+ if ($activeTournament < 0) {
+ $ergebnisse = $queryBuilder
+ ->select('s1', 's2', 'v1', 'v2', 'bumid', 'gstrichen')
+ ->from('tx_watten_domain_model_ergebnisse')
+ ->execute();
+ } else {
+ $ergebnisse = $queryBuilder
+ ->select('s1', 's2', 'v1', 'v2', 'bumid', 'gstrichen')
+ ->from('tx_watten_domain_model_ergebnisse')
+ ->where($queryBuilder->expr()->eq('tournaments_id', (int) $activeTournament))
+ ->execute();
+ }
+ // debug($queryBuilder->getSQL());
+
+ $arr = [];
+ foreach ($ergebnisse as $key => $value) {
+ $bum = $value['bumid'];
+ $s1 = $value['s1'];
+ $s2 = $value['s2'];
+ $v1 = $value['v1'];
+ $v2 = $value['v2'];
+ $ge = $value['gstrichen'];
+
+ 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;
+ }
+ if (!isset($arr[$s1]['sg'])) {
+ $arr[$s1]['sg'] = 0;
+ }
+ if (!isset($arr[$s2]['sg'])) {
+ $arr[$s2]['sg'] = 0;
+ }
+ if (!isset($arr[$v1]['vg'])) {
+ $arr[$v1]['vg'] = 0;
+ }
+ if (!isset($arr[$v2]['vg'])) {
+ $arr[$v2]['vg'] = 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']++;
+ if ($ge) {
+ $arr[$s1]['sg']++;
+ $arr[$s2]['sg']++;
+ $arr[$v1]['vg']++;
+ $arr[$v2]['vg']++;
+ }
+ }
+
+ 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]['name'] = $user[$userid];
+ unset($arr[$userid]['p']);
+ }
+
+ $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]) ?? '';
+ $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] : '';
+ $arr[$key]['sg'] = isset($value['sg']) && $value['sg'] != 0 ? $value['sg'] : '';
+ 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] : '';
+ $arr[$key]['vg'] = isset($value['vg']) && $value['vg'] != 0 ? $value['vg'] : '';
+ unset($arr[$key]['v']);
+ }
+ return $arr;
+ }
+}
diff --git a/packages/watten/Classes/Domain/Repository/SpieltageRepository.php b/packages/watten/Classes/Domain/Repository/SpieltageRepository.php
new file mode 100644
index 0000000..cc9fc81
--- /dev/null
+++ b/packages/watten/Classes/Domain/Repository/SpieltageRepository.php
@@ -0,0 +1,146 @@
+getConnectionForTable('tx_watten_domain_model_events')->createQueryBuilder();
+ $res = $queryBuilder
+ ->select('uid', 'datum', 'event', 'isactive')
+ ->from('tx_watten_domain_model_events')
+ ->where(
+ $queryBuilder->expr()->eq('tournaments_id', (int) $activeTournament)
+ )
+ ->addOrderBy('datum', 'DESC')
+ ->execute();
+
+ $spieltage = [];
+ $tmp = new stdClass();
+ $tmp->id = 0;
+ $tmp->name = 'Spieltag';
+ $spieltage[] = $tmp;
+ foreach ($res as $key => $value) {
+ $tmp = new stdClass();
+ $tmp->id = (int) $value['uid'];
+ // $tmp->selected = (int) $value['isactive'];
+ $tmp->name = date("d. M. Y", $value['datum']);
+ if ($value['event']) {
+ $tmp->name .= ' - ' . $value['event'];
+ }
+ $spieltage[] = $tmp;
+ }
+
+ return $spieltage;
+ }
+
+ public static function loadSpieltag()
+ {
+ $event_id = (int) GeneralUtility::_GP('event_id');
+ if (!$event_id) {
+ exit;
+ }
+
+ $return = [];
+
+ $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tx_watten_domain_model_events')->createQueryBuilder();
+ $res = $queryBuilder
+ ->select('story')
+ ->from('tx_watten_domain_model_events')
+ ->where(
+ $queryBuilder->expr()->eq('uid', (int) $event_id)
+ )
+ ->execute();
+ foreach ($res as $key => $value) {
+ $return['story'] = $value['story'];
+ }
+
+ $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tx_watten_domain_model_athleten')->createQueryBuilder();
+ $res = $queryBuilder
+ ->select('uid', 'name')
+ ->from('tx_watten_domain_model_athleten')
+ ->execute();
+ $athleten = [];
+ foreach ($res as $key => $value) {
+ $athleten[$value['uid']] = $value['name'];
+ }
+
+ $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tx_watten_domain_model_ergebnisse')->createQueryBuilder();
+ $ergebnisse = $queryBuilder
+ ->select('uid', 'datum', 's1', 's2', 'v1', 'v2', 'bumid', 'gstrichen')
+ ->from('tx_watten_domain_model_ergebnisse')
+ ->where(
+ $queryBuilder->expr()->eq('event_id', (int) $event_id)
+ )
+ ->execute();
+
+ $data = [];
+ foreach ($ergebnisse as $key => $value) {
+ $tmp = [];
+ $tmp['uid'] = (int) $value['uid'];
+ $tmp['s1'] = $athleten[$value['s1']];
+ $tmp['s2'] = $athleten[$value['s2']];
+ $tmp['v1'] = $athleten[$value['v1']];
+ $tmp['v2'] = $athleten[$value['v2']];
+ $tmp['gs'] = $value['gstrichen'] ? '||' : '';
+ $tmp['bumid'] = (int) $value['bumid'];
+ $tmp['datum'] = (int) $value['datum'];
+ $data[] = $tmp;
+ }
+ $return['data'] = $data;
+ $return['punkte'] = self::punkte($data);
+ return $return;
+ }
+
+ private static function punkte(array $data)
+ {
+ $punkte = [];
+ foreach ($data as $value) {
+ $s1 = $value['s1'];
+ $s2 = $value['s2'];
+ $v1 = $value['v1'];
+ $v2 = $value['v2'];
+ if (!isset($punkte[$s1])) {
+ $punkte[$s1] = $value['bumid'] + 0.1;
+ } else {
+ $punkte[$s1] = $punkte[$s1] + $value['bumid'] + 0.1;
+ }
+ if (!isset($punkte[$s2])) {
+ $punkte[$s2] = $value['bumid'] + 0.1;
+ } else {
+ $punkte[$s2] = $punkte[$s2] + $value['bumid'] + 0.1;
+ }
+ if (!isset($punkte[$v1])) {
+ $punkte[$v1] = - ($value['bumid']);
+ } else {
+ $punkte[$v1] = $punkte[$v1] - $value['bumid'];
+ }
+ if (!isset($punkte[$v2])) {
+ $punkte[$v2] = - ($value['bumid']);
+ } else {
+ $punkte[$v2] = $punkte[$v2] - $value['bumid'];
+ }
+ }
+ $return = [];
+ arsort($punkte);
+ $i = 1;
+ foreach ($punkte as $name => $value) {
+ $tmp = [];
+ $tmp['rang'] = $i;
+ $tmp['name'] = $name;
+ $tmp['punkte'] = round($value, 1);
+ $return[] = $tmp;
+ $i++;
+ }
+ return $return;
+ }
+}
diff --git a/packages/watten/Classes/Domain/Repository/StatistikRepository.php b/packages/watten/Classes/Domain/Repository/StatistikRepository.php
new file mode 100644
index 0000000..249a989
--- /dev/null
+++ b/packages/watten/Classes/Domain/Repository/StatistikRepository.php
@@ -0,0 +1,395 @@
+ 5.9
+ [spiele] => 13
+ [name] => Gerhard
+ [platz] => 1
+ [s1] => 9
+ [s2] =>
+ [s4] =>
+ [v1] => 4
+ [v2] =>
+ [v4] =>
+ */
+ $arr = RanglisteRepository::loadRangliste($activeTournament);
+ $return = [];
+ $tmp = [];
+ foreach ($arr as $key => $value) {
+ $return['labels'][] = $value['name'] . " " . $value['platz'] . ". Platz";
+ $tmp['s1']['label'] = "Gewonnen";
+ $tmp['s1']['data'][] = $value['s1'] ? $value['s1'] : 0;
+ $tmp['s2']['label'] = "Schneider";
+ $tmp['s2']['data'][] = $value['s2'] ? $value['s2'] : 0;
+ $tmp['s4']['label'] = "Retour Schneider";
+ $tmp['s4']['data'][] = $value['s4'] ? $value['s4'] : 0;
+ $tmp['v1']['label'] = "Verloren";
+ $tmp['v1']['data'][] = $value['v1'] ? $value['v1'] * -1 : 0;
+ $tmp['v2']['label'] = "Schneider Verloren";
+ $tmp['v2']['data'][] = $value['v2'] ? $value['v2'] * -1 : 0;
+ $tmp['v4']['label'] = "Retour Schneider Verloren";
+ $tmp['v4']['data'][] = $value['v4'] ? $value['v4'] * -1 : 0;
+ }
+ $datasets = [];
+ foreach ($tmp as $key => $value) {
+ if (array_sum($value['data']) != false) {
+ $value['borderWidth'] = 1;
+ $datasets[] = $value;
+ }
+ }
+ $return['datasets'] = $datasets;
+ // print_r($return);
+ return $return;
+ }
+
+
+ public static function loadStatistik($event_id)
+ {
+ $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tx_watten_domain_model_athleten')->createQueryBuilder();
+ $res = $queryBuilder
+ ->select('uid', 'name')
+ ->from('tx_watten_domain_model_athleten')
+ ->execute();
+ $user = [];
+ foreach ($res as $key => $value) {
+ $user[$value['uid']] = $value['name'];
+ }
+
+ $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tx_watten_domain_model_ergebnisse')->createQueryBuilder();
+ $ergebnisse = $queryBuilder
+ ->select('uid', 's1', 's2', 'v1', 'v2', 'bumid')
+ ->from('tx_watten_domain_model_ergebnisse')
+ ->where($queryBuilder->expr()->eq('event_id', (int) $event_id))
+ ->execute();
+
+ $usr = [];
+ $data = [];
+ foreach ($ergebnisse as $value) {
+ $usr[] = $value['s1'];
+ $usr[] = $value['s2'];
+ $usr[] = $value['v1'];
+ $usr[] = $value['v2'];
+ $data[] = $value;
+ }
+ $usr = array_unique($usr);
+
+ $arr = [];
+ $datasets = [];
+ foreach ($data as $value) {
+ $arr['labels'][] = $value['uid'];
+ $bum = $value['bumid'];
+ $s1 = $value['s1'];
+ $s2 = $value['s2'];
+ $v1 = $value['v1'];
+ $v2 = $value['v2'];
+
+ foreach ($usr as $key => $uid) {
+ if (isset($datasets[$uid])) {
+ $punkte = 0;
+ if ($s1 == $uid or $s2 == $uid) {
+ switch ($bum) {
+ case 1:
+ $punkte = 1.1;
+ break;
+ case 2:
+ $punkte = 2.1;
+ break;
+ case 4:
+ $punkte = 4.1;
+ break;
+ }
+ } elseif ($v1 == $uid or $v2 == $uid) {
+ switch ($bum) {
+ case 1:
+ $punkte = -1;
+ break;
+ case 2:
+ $punkte = -2;
+ break;
+ case 4:
+ $punkte = -4;
+ break;
+ }
+ }
+ $datasets[$uid]['stand'] = round($datasets[$uid]['stand'] + $punkte, 2);
+ $datasets[$uid]['data'][] = $datasets[$uid]['stand'];
+ } else {
+ $datasets[$uid]['label'] = $user[$uid];
+
+ $punkte = 0;
+ if ($s1 == $uid or $s2 == $uid) {
+ switch ($bum) {
+ case 1:
+ $punkte = 1.1;
+ break;
+ case 2:
+ $punkte = 2.1;
+ break;
+ case 4:
+ $punkte = 4.1;
+ break;
+ }
+ } elseif ($v1 == $uid or $v2 == $uid) {
+ switch ($bum) {
+ case 1:
+ $punkte = -1;
+ break;
+ case 2:
+ $punkte = -2;
+ break;
+ case 4:
+ $punkte = -4;
+ break;
+ }
+ }
+ $datasets[$uid]['stand'] = $punkte;
+ $datasets[$uid]['data'][] = $punkte;
+ }
+ }
+ }
+ foreach ($datasets as $value) {
+ unset($value['stand']);
+ $value['pointRadius'] = 2;
+ $value['tension'] = 0;
+ $value['borderWidth'] = 0.5;
+ $arr['datasets'][] = $value;
+ }
+ return $arr;
+ }
+
+ public static function loadPaarlauf($activeTournament, $athlet_1)
+ {
+ $athlet_1 = (int) $athlet_1;
+ $athlet_2 = 3;
+
+ $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tx_watten_domain_model_athleten')->createQueryBuilder();
+ $res = $queryBuilder
+ ->select('uid', 'name')
+ ->from('tx_watten_domain_model_athleten')
+ ->execute();
+ $user = [];
+ foreach ($res as $key => $value) {
+ $user[$value['uid']] = $value['name'];
+ }
+
+ $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tx_watten_domain_model_ergebnisse')->createQueryBuilder();
+ if ($activeTournament < 0) {
+ $res = $queryBuilder
+ ->select('s1', 's2', 'v1', 'v2', 'bumid', 'gstrichen')
+ ->from('tx_watten_domain_model_ergebnisse')
+ ->execute();
+ } else {
+ $res = $queryBuilder
+ ->select('s1', 's2', 'v1', 'v2', 'bumid', 'gstrichen')
+ ->from('tx_watten_domain_model_ergebnisse')
+ ->where($queryBuilder->expr()->eq('tournaments_id', (int) $activeTournament))
+ ->execute();
+ }
+
+ $_names = [
+ 'spiele' => 0,
+ 'siege' => 0,
+ 'verloren' => 0,
+ 'sn' => 0,
+ 'ss' => 0,
+ 'srs' => 0,
+ 'sg' => 0,
+ 'vn' => 0,
+ 'vs' => 0,
+ 'vrs' => 0,
+ 'vg' => 0,
+ ];
+ $_data = [];
+ foreach ($res as $row) {
+ if ($row['s1'] == $athlet_1 or $row['s2'] == $athlet_1) {
+ if ($row['s1'] == $athlet_1)
+ $partner = (int) $row['s2'];
+ else
+ $partner = (int) $row['s1'];
+ $gegner1 = (int) $row['v1'];
+ $gegner2 = (int) $row['v2'];
+ $bummalen = (int) $row['bumid'];
+ $gstrichen = (int) $row['gstrichen'];
+
+ if (!isset($_data[$partner])) {
+ $_data[$partner] = $_names;
+ }
+ $_data[$partner]['spiele']++;
+ $_data[$partner]['siege']++;
+ if ($bummalen == 1)
+ $_data[$partner]['sn']++;
+ else if ($bummalen == 2)
+ $_data[$partner]['ss']++;
+ else if ($bummalen == 4)
+ $_data[$partner]['srs']++;
+ if ($gstrichen == 1)
+ $_data[$partner]['sg']++;
+
+
+ if ($gegner1 < $gegner2) {
+ $team = "$gegner1:$gegner2";
+ } else {
+ $team = "$gegner2:$gegner1";
+ }
+ if (!isset($_data[$partner]['gegner'][$team])) {
+ $_data[$partner]['gegner'][$team] = $_names;
+ }
+ $_data[$partner]['gegner'][$team]['spiele']++;
+ $_data[$partner]['gegner'][$team]['siege']++;
+
+ if ($bummalen == 1)
+ $_data[$partner]['gegner'][$team]['sn']++;
+ else if ($bummalen == 2)
+ $_data[$partner]['gegner'][$team]['ss']++;
+ else if ($bummalen == 4)
+ $_data[$partner]['gegner'][$team]['srs']++;
+
+ if ($gstrichen == 1)
+ $_data[$partner]['gegner'][$team]['sg']++;
+
+ } else if ($row['v1'] == $athlet_1 or $row['v2'] == $athlet_1) {
+ if ($row['v1'] == $athlet_1)
+ $partner = $row['v2'];
+ else
+ $partner = (int) $row['v1'];
+ $gegner1 = (int) $row['s1'];
+ $gegner2 = (int) $row['s2'];
+ $bummalen = (int) $row['bumid'];
+ $gstrichen = (int) $row['gstrichen'];
+
+ if (!isset($_data[$partner])) {
+ $_data[$partner] = $_names;
+ }
+ $_data[$partner]['spiele']++;
+ $_data[$partner]['verloren']++;
+ if ($bummalen == 1)
+ $_data[$partner]['vn']++;
+ if ($bummalen == 2)
+ $_data[$partner]['vs']++;
+ if ($bummalen == 4)
+ $_data[$partner]['vrs']++;
+ if ($gstrichen == 1)
+ $_data[$partner]['vg']++;
+
+ if ($gegner1 < $gegner2) {
+ $team = "$gegner1:$gegner2";
+ } else {
+ $team = "$gegner2:$gegner1";
+ }
+ if (!isset($_data[$partner]['gegner'][$team])) {
+ $_data[$partner]['gegner'][$team] = $_names;
+ }
+ $_data[$partner]['gegner'][$team]['spiele']++;
+ $_data[$partner]['gegner'][$team]['verloren']++;
+ if ($bummalen == 1)
+ $_data[$partner]['gegner'][$team]['vn']++;
+ if ($bummalen == 2)
+ $_data[$partner]['gegner'][$team]['vs']++;
+ if ($bummalen == 4)
+ $_data[$partner]['gegner'][$team]['vrs']++;
+ if ($gstrichen == 1)
+ $_data[$partner]['gegner'][$team]['vg']++;
+
+ }
+ }
+
+ $return = [];
+ if(isset($user[$athlet_1])){
+ $athlet = $user[$athlet_1];
+ foreach ($_data as $partnerid => $row) {
+ $tmp = [];
+ $partner = $user[$partnerid];
+ $tmp['head'] = 1;
+ $tmp['teams'] = $athlet . ' & ' . $partner . ' ';
+ $tmp['spiele'] = $row['spiele'];
+ $tmp['siege'] = $row['siege'];
+ $tmp['verloren'] = $row['verloren'];
+ $tmp['sn'] = $row['sn'];
+ $tmp['ss'] = $row['ss'];
+ $tmp['srs'] = $row['srs'];
+ $tmp['sg'] = $row['sg'];
+ $tmp['vn'] = $row['vn'];
+ $tmp['vs'] = $row['vs'];
+ $tmp['vrs'] = $row['vrs'];
+ $tmp['vg'] = $row['vg'];
+ $return[] = $tmp;
+
+ foreach ($row['gegner'] as $team => $value) {
+ $tmp = [];
+ $tmp['head'] = 0;
+ $tmp['teams'] = $athlet . ' & ' . $partner . ' ' . self::getnames($user, $team);
+ $tmp['spiele'] = $value['spiele'];
+ $tmp['siege'] = $value['siege'];
+ $tmp['verloren'] = $value['verloren'];
+ $tmp['sn'] = $value['sn'];
+ $tmp['ss'] = $value['ss'];
+ $tmp['srs'] = $value['srs'];
+ $tmp['sg'] = $value['sg'];
+ $tmp['vn'] = $value['vn'];
+ $tmp['vs'] = $value['vs'];
+ $tmp['vrs'] = $value['vrs'];
+ $tmp['vg'] = $value['vg'];
+ $return[] = $tmp;
+ }
+ }
+ }
+
+ foreach ($return as $key1 => $row) {
+ foreach ($row as $key2 => $value) {
+ if ($key2 != 'teams' and $value == 0)
+ $return[$key1][$key2] = '';
+ }
+ }
+
+ return $return;
+ }
+
+ public function getnames(&$user, $team)
+ {
+ $_gegner = explode(':', $team);
+ $g1 = $_gegner[0];
+ $g2 = $_gegner[1];
+ return $user[$g1] . " & " . $user[$g2];
+ }
+}
+
+
+
+// Array
+// (
+// [26] => Array
+// (
+// [spiele] => 11
+// [siege] => 6
+// [verloren] => 5
+// [sn] => 0
+// [ss] => 0
+// [srs] => 0
+// [gs] => 0
+// [vn] => 0
+// [vs] => 0
+// [vrs] => 0
+// [vg] => 0
+// [6:31] => Array
+// (
+// [spiele] => 1
+// [siege] => 1
+// [verloren] => 0
+// [sn] => 1
+// [ss] => 0
+// [srs] => 0
+// [gs] => 0
+// [vn] => 0
+// [vs] => 0
+// [vrs] => 0
diff --git a/packages/watten/Classes/Hooks/DataHandler.php b/packages/watten/Classes/Hooks/DataHandler.php
new file mode 100644
index 0000000..3dd08c5
--- /dev/null
+++ b/packages/watten/Classes/Hooks/DataHandler.php
@@ -0,0 +1,75 @@
+log(
+ $table,
+ $id,
+ 2,
+ 0,
+ 1,
+ "Sichern des Eintrags misslang. Grund: Athleten müssen vollständig ausgefüllt werden.",
+ 1,
+ [$table]
+ );
+ // unset table to prevent saving
+ $table = '';
+ } elseif (\count($tmp) != 4) {
+ $parentObject->log(
+ $table,
+ $id,
+ 2,
+ 0,
+ 1,
+ "Sichern des Eintrags misslang. Grund: Athleten dürfen nicht doppelt vorkommen.",
+ 1,
+ [$table]
+ );
+ // unset table to prevent saving
+ $table = '';
+ }
+ }
+ }
+}
diff --git a/packages/watten/Classes/Scheduler/CronTask.php b/packages/watten/Classes/Scheduler/CronTask.php
new file mode 100644
index 0000000..55bdc1d
--- /dev/null
+++ b/packages/watten/Classes/Scheduler/CronTask.php
@@ -0,0 +1,20 @@
+run();
+
+ return true;
+ }
+}
diff --git a/packages/watten/Classes/Tca/Configuration.php b/packages/watten/Classes/Tca/Configuration.php
new file mode 100644
index 0000000..246a6e7
--- /dev/null
+++ b/packages/watten/Classes/Tca/Configuration.php
@@ -0,0 +1,34 @@
+getConnectionForTable('tx_watten_domain_model_ergebnisse')->createQueryBuilder();
+ $res = $queryBuilder
+ ->select('datum')
+ ->from('tx_watten_domain_model_ergebnisse')
+ ->addOrderBy('uid', 'DESC')
+ ->setMaxResults(1)
+ ->setFirstResult(0)
+ ->execute();
+ $spieltag = 0;
+ foreach ($res as $key => $value) {
+ $spieltag = (int) $value['datum'];
+ }
+ return $spieltag;
+ }
+}
diff --git a/packages/watten/Classes/Utilities/CookieUtility.php b/packages/watten/Classes/Utilities/CookieUtility.php
new file mode 100644
index 0000000..dfd6d48
--- /dev/null
+++ b/packages/watten/Classes/Utilities/CookieUtility.php
@@ -0,0 +1,55 @@
+, mindshape GmbH
+ *
+ ***/
+
+/**
+ * @package HermannTelser\Watten\Utility
+ */
+class CookieUtility
+{
+ public const DEFAULT_COOKIE_NAME = 'watten';
+
+ /**
+
+ * @param string $name
+ * @return array|null
+ */
+ public static function getCookieValue(string $name = self::DEFAULT_COOKIE_NAME): ?array
+ {
+ if (false === self::hasCookie($name)) {
+ return null;
+ }
+
+ return json_decode($_COOKIE[$name], true);
+ }
+
+ /**
+ * @param string $named
+ * @return bool
+ */
+ public static function hasCookie(string $name = self::DEFAULT_COOKIE_NAME): bool
+ {
+ return true === array_key_exists($name, $_COOKIE);
+ }
+
+ /**
+ * @param string $name
+ */
+ public static function deleteCookie(string $name = self::DEFAULT_COOKIE_NAME): void
+ {
+ unset($_COOKIE[$name]);
+ }
+}
diff --git a/packages/watten/Configuration/FlexForms/flexform_watten.xml b/packages/watten/Configuration/FlexForms/flexform_watten.xml
new file mode 100644
index 0000000..30ff372
--- /dev/null
+++ b/packages/watten/Configuration/FlexForms/flexform_watten.xml
@@ -0,0 +1,38 @@
+
+
';
+ var bum2 = ' ';
+ var bum4 = ' ';
+
+ function markName(classname) {
+ $('.athlet ').css('color', '#ddd');
+ $('.athlet ').css('font-weight', 'normal');
+ $('td.'+classname).css('color', '#CC7B2E');
+ $('td.'+classname).css('font-weight', 'bold');
+ }
+
+ $("#grid_ergebnisse").jsGrid({
+ height: "auto",
+ width: "100%",
+
+ heading: true,
+ filtering: false,
+ inserting: false,
+ editing: false,
+ selecting: true,
+ sorting: true,
+ paging: false,
+ pageLoading: false,
+
+ noDataContent: ' Spieltag wählen ',
+
+ loadIndication: true,
+ loadIndicationDelay: 500,
+ loadMessage: " Bitte, warten... ",
+ loadShading: true,
+
+ fields: [
+ { title: '' + v + ' '; }},
+ { title: '' + v + ' '; }},
+ { title: '' + v + ' '; }},
+ { title: '' + v + ' '; }},
+ { title: '
|
+ |
+
+ |
+
|
+ |
+
|
+ |
+
|
+ |
+
| ", field, "headercss", this.headerCellClass) + .append(this.renderTemplate(field.headerTemplate, field)) + .appendTo($result); + + if(this.sorting && field.sorting) { + $th.addClass(this.sortableClass) + .on("click", $.proxy(function() { + this.sort(index); + }, this)); + } + }); + + return $result; + }, + + _prepareCell: function(cell, field, cssprop, cellClass) { + return $(cell).css("width", field.width) + .addClass(cellClass || this.cellClass) + .addClass((cssprop && field[cssprop]) || field.css) + .addClass(field.align ? ("jsgrid-align-" + field.align) : ""); + }, + + _createFilterRow: function() { + if($.isFunction(this.filterRowRenderer)) + return $(this.renderTemplate(this.filterRowRenderer, this)); + + var $result = $(" |
|---|
| ", field, "filtercss") + .append(this.renderTemplate(field.filterTemplate, field)) + .appendTo($result); + }); + + return $result; + }, + + _createInsertRow: function() { + if($.isFunction(this.insertRowRenderer)) + return $(this.renderTemplate(this.insertRowRenderer, this)); + + var $result = $(" |
| ", field, "insertcss") + .append(this.renderTemplate(field.insertTemplate, field)) + .appendTo($result); + }); + + return $result; + }, + + _callEventHandler: function(handler, eventParams) { + handler.call(this, $.extend(eventParams, { + grid: this + })); + + return eventParams; + }, + + reset: function() { + this._resetSorting(); + this._resetPager(); + return this._loadStrategy.reset(); + }, + + _resetPager: function() { + this._firstDisplayingPage = 1; + this._setPage(1); + }, + + _resetSorting: function() { + this._sortField = null; + this._sortOrder = SORT_ORDER_ASC; + this._clearSortingCss(); + }, + + refresh: function() { + this._callEventHandler(this.onRefreshing); + + this.cancelEdit(); + + this._refreshHeading(); + this._refreshFiltering(); + this._refreshInserting(); + this._refreshContent(); + this._refreshPager(); + this._refreshSize(); + + this._callEventHandler(this.onRefreshed); + }, + + _refreshHeading: function() { + this._headerRow.toggle(this.heading); + }, + + _refreshFiltering: function() { + this._filterRow.toggle(this.filtering); + }, + + _refreshInserting: function() { + this._insertRow.toggle(this.inserting); + }, + + _refreshContent: function() { + var $content = this._content; + $content.empty(); + + if(!this.data.length) { + $content.append(this._createNoDataRow()); + return this; + } + + var indexFrom = this._loadStrategy.firstDisplayIndex(); + var indexTo = this._loadStrategy.lastDisplayIndex(); + + for(var itemIndex = indexFrom; itemIndex < indexTo; itemIndex++) { + var item = this.data[itemIndex]; + $content.append(this._createRow(item, itemIndex)); + } + }, + + _createNoDataRow: function() { + var amountOfFields = 0; + this._eachField(function() { + amountOfFields++; + }); + + return $(" |
| ").addClass(this.cellClass).attr("colspan", amountOfFields) + .append(this.renderTemplate(this.noDataContent, this))); + }, + + _createRow: function(item, itemIndex) { + var $result; + + if($.isFunction(this.rowRenderer)) { + $result = this.renderTemplate(this.rowRenderer, this, { item: item, itemIndex: itemIndex }); + } else { + $result = $(" |
| ").append(this.renderTemplate(field.itemTemplate || fieldValue, field, args)); + } + + return this._prepareCell($result, field); + }, + + _getItemFieldValue: function(item, field) { + var props = field.name.split('.'); + var result = item[props.shift()]; + + while(result && props.length) { + result = result[props.shift()]; + } + + return result; + }, + + _setItemFieldValue: function(item, field, value) { + var props = field.name.split('.'); + var current = item; + var prop = props[0]; + + while(current && props.length) { + item = current; + prop = props.shift(); + current = item[prop]; + } + + if(!current) { + while(props.length) { + item = item[prop] = {}; + prop = props.shift(); + } + } + + item[prop] = value; + }, + + sort: function(field, order) { + if($.isPlainObject(field)) { + order = field.order; + field = field.field; + } + + this._clearSortingCss(); + this._setSortingParams(field, order); + this._setSortingCss(); + return this._loadStrategy.sort(); + }, + + _clearSortingCss: function() { + this._headerRow.find("th") + .removeClass(this.sortAscClass) + .removeClass(this.sortDescClass); + }, + + _setSortingParams: function(field, order) { + field = this._normalizeField(field); + order = order || ((this._sortField === field) ? this._reversedSortOrder(this._sortOrder) : SORT_ORDER_ASC); + + this._sortField = field; + this._sortOrder = order; + }, + + _normalizeField: function(field) { + if($.isNumeric(field)) { + return this.fields[field]; + } + + if(typeof field === "string") { + return $.grep(this.fields, function(f) { + return f.name === field; + })[0]; + } + + return field; + }, + + _reversedSortOrder: function(order) { + return (order === SORT_ORDER_ASC ? SORT_ORDER_DESC : SORT_ORDER_ASC); + }, + + _setSortingCss: function() { + var fieldIndex = this._visibleFieldIndex(this._sortField); + + this._headerRow.find("th").eq(fieldIndex) + .addClass(this._sortOrder === SORT_ORDER_ASC ? this.sortAscClass : this.sortDescClass); + }, + + _visibleFieldIndex: function(field) { + return $.inArray(field, $.grep(this.fields, function(f) { return f.visible; })); + }, + + _sortData: function() { + var sortFactor = this._sortFactor(), + sortField = this._sortField; + + if(sortField) { + this.data.sort(function(item1, item2) { + return sortFactor * sortField.sortingFunc(item1[sortField.name], item2[sortField.name]); + }); + } + }, + + _sortFactor: function() { + return this._sortOrder === SORT_ORDER_ASC ? 1 : -1; + }, + + _itemsCount: function() { + return this._loadStrategy.itemsCount(); + }, + + _pagesCount: function() { + var itemsCount = this._itemsCount(), + pageSize = this.pageSize; + return Math.floor(itemsCount / pageSize) + (itemsCount % pageSize ? 1 : 0); + }, + + _refreshPager: function() { + var $pagerContainer = this._pagerContainer; + $pagerContainer.empty(); + + if(this.paging) { + $pagerContainer.append(this._createPager()); + } + + var showPager = this.paging && this._pagesCount() > 1; + $pagerContainer.toggle(showPager); + }, + + _createPager: function() { + var $result; + + if($.isFunction(this.pagerRenderer)) { + $result = $(this.pagerRenderer({ + pageIndex: this.pageIndex, + pageCount: this._pagesCount() + })); + } else { + $result = $(" |