Compare commits

...

68 Commits

Author SHA1 Message Date
MarvinF ba9c84dfe7 Merge pull request #139 from Deutscher-Tischfussballbund/sportsmanager2-stage
stage to prod merge
2025-08-12 00:31:56 +02:00
MarvinF f424dfe024 Merge pull request #138 from Deutscher-Tischfussballbund/sportsmanager2-dev
dev to stage merge
2025-08-12 00:31:06 +02:00
MarvinF f382c3a208 Merge pull request #137 from Deutscher-Tischfussballbund/chore/version
chore: read correct tag version
2025-08-12 00:30:13 +02:00
Marvin Flock 2d7fb27ee1 chore: read correct tag version 2025-08-12 00:03:51 +02:00
MarvinF 93769df3ac Merge pull request #136 from Deutscher-Tischfussballbund/sportsmanager2-stage
Sportsmanager2 stage
2025-08-11 23:55:48 +02:00
MarvinF ee6d559a7f Merge pull request #135 from Deutscher-Tischfussballbund/sportsmanager2-dev
dev to stage merge
2025-08-11 23:54:51 +02:00
MarvinF 6e9b2c4f5e Merge pull request #134 from Deutscher-Tischfussballbund/chore/version
chore: debug tag versions
2025-08-11 23:53:51 +02:00
Marvin Flock f713362c3e chore: debug tag versions 2025-08-11 23:51:45 +02:00
MarvinF 71dd59c3d8 Merge pull request #133 from Deutscher-Tischfussballbund/sportsmanager2-stage
stage to prod merge
2025-08-11 23:23:53 +02:00
MarvinF 9594ec84e2 Merge pull request #132 from Deutscher-Tischfussballbund/sportsmanager2-dev
dev to stage merge
2025-08-11 23:22:20 +02:00
MarvinF 79adb9efd2 Merge pull request #123 from Deutscher-Tischfussballbund/sportsmanager2-issue121
Sportsmanager2 issue121
2025-08-11 23:16:22 +02:00
MarvinF 7d7f162dde Merge branch 'sportsmanager2-dev' into sportsmanager2-issue121 2025-08-11 23:14:29 +02:00
MarvinF 1538738722 Merge pull request #124 from Deutscher-Tischfussballbund/feature/issue-85-query-performance-improv
Refactor: remove execute() on reading queries
2025-08-11 23:11:44 +02:00
Jürgen Meyer eb4bcf38d9 Änderungen nach review 2025-08-11 18:31:07 +02:00
Marvin Flock 0d8e61b3ca Merge branch 'sportsmanager2-dev' into feature/issue-85-query-performance-improv
# Conflicts:
#	src/structure/components/com_sportsmanager/admin.php
#	src/structure/components/com_sportsmanager/sportsmanager.php
2025-08-11 18:30:06 +02:00
MarvinF 3f26a340dc Merge pull request #112 from Deutscher-Tischfussballbund/fix/issue-6-sql-syntax-error
Issue 6: fix sql syntax error
2025-08-11 17:59:14 +02:00
MarvinF 87d9449417 Merge branch 'sportsmanager2-dev' into fix/issue-6-sql-syntax-error 2025-08-11 17:58:53 +02:00
MarvinF e0575dc125 Merge pull request #113 from Deutscher-Tischfussballbund/sportsmanager2-issue059
Sportsmanager2 issue059
2025-08-11 17:58:26 +02:00
MarvinF b1f67d1d13 Merge pull request #127 from Deutscher-Tischfussballbund/chore/version-from-tags
chore: create version in sportsmanager from git tag
2025-08-11 17:43:27 +02:00
Marvin Flock f119cae584 chore: restore breaks in switch statement 2025-08-11 00:19:43 +02:00
jmeyer26 18d346a4e9 Merge pull request #115 from Deutscher-Tischfussballbund/sportsmanager2-issue068
Sportsmanager2 issue068
2025-08-05 21:39:20 +02:00
Marvin Flock e81600dd86 Merge branch 'sportsmanager2-dev' into sportsmanager2-issue068 2025-08-05 21:30:57 +02:00
Marvin Flock ff7314cf3f chore: create version in sportsmanager from git tag 2025-08-05 21:21:11 +02:00
Jürgen Meyer 1fe9d4bc5f Änderung nach Review durchgeführt. 2025-08-05 20:45:33 +02:00
Marvin Flock 5e3996dd5e fix: add missing line breaks 2025-08-04 18:21:47 +02:00
Marvin Flock 9861f59662 refactor: remove execute() on reading queries 2025-08-04 00:00:42 +02:00
Jürgen Meyer 9f6c026b2b Verschachtelte Tabelle entfernt. Redundante if-Anweisungen entfernt. 2025-08-01 19:34:53 +02:00
Jürgen Meyer 850fd2c079 Einige Optimierungen durchgeführt. 2025-08-01 16:02:32 +02:00
MarvinF 762bf50f62 Merge pull request #111 from Deutscher-Tischfussballbund/fix/issue45-duplicate-license-on-ranking-duplication
Fix: duplicate Ranglisten should also duplicate license checkbox values of the duplicate source rangliste
2025-08-01 01:31:39 +02:00
MarvinF 19fc2c8800 Merge branch 'sportsmanager2-dev' into fix/issue45-duplicate-license-on-ranking-duplication 2025-08-01 01:30:28 +02:00
MarvinF be1b66eb8e Merge pull request #122 from Deutscher-Tischfussballbund/fix/explode-lizenzen
Fix: refresh rankings even when there are no licenses set
2025-07-31 17:05:32 +02:00
Marvin Flock cf14997acb fix: explode of licenses only if licenses are given 2025-07-31 16:59:12 +02:00
Jürgen Meyer 0d3e54a544 Mannschaftsdetails und Spielerdetails für Mobil angepasst 2025-07-31 12:01:52 +02:00
MarvinF 7b1cc50943 Merge pull request #120 from Deutscher-Tischfussballbund/sportsmanager2-stage
Stage -> Prod merge
2025-07-29 18:30:28 +02:00
MarvinF 133a983685 Merge pull request #119 from Deutscher-Tischfussballbund/sportsmanager2-dev
Dev -> Stage merge
2025-07-29 18:28:39 +02:00
MarvinF 20b956b239 Merge pull request #118 from Deutscher-Tischfussballbund/feature/refactor-readme
refactor: remove test from readme
2025-07-29 18:21:05 +02:00
Marvin Flock fedb300d8f refactor: remove test from readme 2025-07-29 18:19:01 +02:00
MarvinF 07121c2233 Merge pull request #114 from Deutscher-Tischfussballbund/fix/issue-108-yootheme-path-fix
fix: add base url to yootheme images
2025-07-29 18:01:16 +02:00
MarvinF 8dab7fa74f Merge branch 'sportsmanager2-dev' into fix/issue-108-yootheme-path-fix 2025-07-29 17:59:55 +02:00
Jürgen Meyer 3e577f6be1 Kein Aufruf Korrekturschleife, wenn kein Array Korrektur vorhanden. 2025-07-24 16:29:13 +02:00
Jürgen Meyer 2b6563dae0 Möglichkeit Direkter Vergleich in Teamsport (issue #68) 2025-07-23 09:40:05 +02:00
jmeyer26 1bd53893a8 Merge pull request #83 from Deutscher-Tischfussballbund/sportsmanager2-juergen
Fix: #74 Player picture improvements & remove 'Ranglisten' YooTheme Lazyloading optimizations
2025-07-22 05:49:22 +02:00
Jürgen Meyer acfcbb1010 Funktion yoothemeBild in rangliste wird wieder aufgerufen. 2025-07-22 05:46:23 +02:00
Marvin Flock a6aee26211 fix: add base url to yootheme images 2025-07-21 20:17:20 +02:00
MarvinF b24203ccb9 Merge pull request #109 from Deutscher-Tischfussballbund/sportsmanager2-issue108
Mannschaftsbilder in Teamsport zu klein gefixt (issue #108)
2025-07-21 19:43:44 +02:00
Jürgen Meyer 2ff39cf086 Fehler Versatz Header Tabelle wenn Bilder fehlen gefixt. 2025-07-16 10:34:40 +02:00
Jürgen Meyer 8479691824 Optimierung Ablöschung temporärer Import-Daten 2025-07-14 17:01:21 +02:00
Jürgen Meyer ca4ce6060e Überprüfung Format Spielernummer bei Import (issue #59) 2025-07-14 08:23:34 +02:00
Jürgen Meyer 0729291afc Fehler Anführungszeichen korrigiert. 2025-07-13 23:34:51 +02:00
Marvin Flock b57c7c148d fix: abort when id is null 2025-07-13 23:17:00 +02:00
Marvin Flock b17fcffdd5 fix: replace http:// with https:// 2025-07-13 22:06:50 +02:00
Marvin Flock 97c6d9ee03 fix: duplicate licence fields when duplicating ranking 2025-07-13 21:37:28 +02:00
Jürgen Meyer f3c2040632 Mannschaftsbilder in Teamsport zu klein gefixt (issue #108) 2025-07-02 08:19:44 +02:00
Jürgen Meyer 1235edde82 Letzte Änderung wegen Konflikten rückgängig gemacht. 2025-07-01 12:37:41 +02:00
Jürgen Meyer 763fd7d386 Tabellenformatierung angepasst (issue #108) 2025-07-01 12:31:03 +02:00
MarvinF 77e2c6e910 Merge pull request #77 from Deutscher-Tischfussballbund/issues/43
fix: #43 - remove css3.js reference
2025-06-30 18:57:43 +02:00
MarvinF a2aee3b135 Merge pull request #82 from Deutscher-Tischfussballbund/issues/73_missing-dropdown-in-league
fix: add season dropdown to events, even if there is just one event
2025-06-30 18:57:10 +02:00
MarvinF 9a7f8acc3b Merge pull request #107 from Deutscher-Tischfussballbund/fix/64_division_by_zero
Fix: add division by zero check, return zero instead of exception
2025-06-30 18:55:47 +02:00
Jürgen Meyer 9091b22859 Konfilkt mit README.md 2025-06-30 00:52:54 +02:00
Jürgen Meyer 839b27756a Konflikt mit README.md 2025-06-30 00:50:03 +02:00
Jürgen Meyer 0d0ee08199 Weitere Optimierungen der Tabellen Rangliste, Turnierergebnisse und Spielerstatistik 2025-06-30 00:16:05 +02:00
Jürgen Meyer 6609a4ca78 Änderungen nach Kommentaren in PR83 überarbeitet. 2025-06-29 19:00:59 +02:00
Marvin Flock 4ecf48d02e fix: add division by zero check, return zero instead of exception 2025-06-29 16:44:18 +02:00
Jürgen Meyer 56d8be9a55 Hilfskommentare in Programm zu issue #74 rausgelöscht. 2025-06-24 13:52:32 +02:00
Jürgen Meyer 29f0e6842b issue #74 Player image size (Details siehe issue #74) 2025-06-24 13:29:20 +02:00
Marvin Flock 22e96bf49d fix: add season dropdown to events, even if there is just one event 2025-06-23 21:12:43 +02:00
Marvin Flock 36dbfdb7c4 fix: check for null since str_starts_with is typed 2025-06-17 22:01:07 +02:00
Marvin Flock 5cfd8f3c1a fix: remove non existent css reference 2025-06-17 22:00:08 +02:00
20 changed files with 2272 additions and 5392 deletions
+19 -7
View File
@@ -6,7 +6,7 @@ name: Sportsmanager Release
on: on:
push: push:
tags: tags:
- 'v[0-9]+.[0-9]+.[0-9]+' # run only on version tags like v1.0.0 - 'v[0-9]+.[0-9]+.[0-9]+' # run only on version tags like v1.0.0
jobs: jobs:
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@@ -24,7 +24,19 @@ jobs:
- name: Install npm dependencies - name: Install npm dependencies
run: npm ci run: npm ci
- name: Get version from git tag
run: echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
- name: Update version.php
run: |
echo "<?php" > src/structure/components/com_sportsmanager/util/version.php
echo "defined('_JEXEC') or die;" >> src/structure/components/com_sportsmanager/util/version.php
echo "return [" >> src/structure/components/com_sportsmanager/util/version.php
echo " 'version' => '${{ env.VERSION }}'," >> src/structure/components/com_sportsmanager/util/version.php
echo " 'date' => '$(date +%F)'," >> src/structure/components/com_sportsmanager/util/version.php
echo "];" >> src/structure/components/com_sportsmanager/util/version.php
- name: Generate release notes - name: Generate release notes
id: release_notes_extension id: release_notes_extension
uses: release-drafter/release-drafter@v6 uses: release-drafter/release-drafter@v6
@@ -37,10 +49,10 @@ jobs:
- name: Save release notes to file - name: Save release notes to file
run: | run: |
echo "${{ steps.release_notes_extension.outputs.body }}" > RELEASE_NOTES.md echo "${{ steps.release_notes_extension.outputs.body }}" > RELEASE_NOTES.md
- name: Run build script - name: Run build script
run: npm run release run: npm run release
- name: Generate release notes - name: Generate release notes
id: release_notes_github id: release_notes_github
uses: release-drafter/release-drafter@v6 uses: release-drafter/release-drafter@v6
@@ -52,7 +64,7 @@ jobs:
- name: Save release notes to file - name: Save release notes to file
run: | run: |
echo "${{ steps.release_notes_github.outputs.body }}" > RELEASE_NOTES.md echo "${{ steps.release_notes_github.outputs.body }}" > RELEASE_NOTES.md
- name: Create GitHub Release - name: Create GitHub Release
uses: softprops/action-gh-release@v2 uses: softprops/action-gh-release@v2
with: with:
@@ -62,7 +74,7 @@ jobs:
body_path: "RELEASE_NOTES.md" body_path: "RELEASE_NOTES.md"
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Delete draft release via API # workaround: remove leftover draft by release-drafter - name: Delete draft release via API # workaround: remove leftover draft by release-drafter
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -70,7 +82,7 @@ jobs:
run: | run: |
drafts=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \ drafts=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \
https://api.github.com/repos/$REPO/releases | jq '.[] | select(.draft == true)') https://api.github.com/repos/$REPO/releases | jq '.[] | select(.draft == true)')
if [ -n "$drafts" ]; then if [ -n "$drafts" ]; then
id=$(echo "$drafts" | jq -r '.id') id=$(echo "$drafts" | jq -r '.id')
curl -s -X DELETE -H "Authorization: token $GITHUB_TOKEN" \ curl -s -X DELETE -H "Authorization: token $GITHUB_TOKEN" \
-4
View File
@@ -83,7 +83,3 @@ JConfig: `./data/joomla_data/configuration.php`
7. Click on "Start Listening for PHP Debug Connections" in the top row of intellij 7. Click on "Start Listening for PHP Debug Connections" in the top row of intellij
8. (Not sure if optional) Install a browser extension by Jetbrains 8. (Not sure if optional) Install a browser extension by Jetbrains
https://chromewebstore.google.com/detail/xdebug-helper-by-jetbrain/aoelhdemabeimdhedkidlnbkfhnhgnhm https://chromewebstore.google.com/detail/xdebug-helper-by-jetbrain/aoelhdemabeimdhedkidlnbkfhnhgnhm
=======
Test
+2
View File
@@ -0,0 +1,2 @@
This is no official release!
The Release and the release notes will be generated by github actions
File diff suppressed because it is too large Load Diff
@@ -4,10 +4,8 @@
*/ */
use JetBrains\PhpStorm\NoReturn; use JetBrains\PhpStorm\NoReturn;
use Joomla\CMS\Application\AdministratorApplication;
use Joomla\CMS\Application\SiteApplication; use Joomla\CMS\Application\SiteApplication;
use Joomla\CMS\Factory; use Joomla\CMS\Factory;
use Joomla\CMS\User\UserFactory;
use Joomla\CMS\User\UserFactoryInterface; use Joomla\CMS\User\UserFactoryInterface;
use Joomla\Registry\Registry; use Joomla\Registry\Registry;
@@ -43,8 +41,7 @@ function notifyChange($data): void
try { try {
$db = getDatabase(); $db = getDatabase();
$query = "SELECT wert from #__sportsmanager_einstellungen WHERE name='api_push_key'"; $query = "SELECT wert from #__sportsmanager_einstellungen WHERE name='api_push_key'";
$db->setQuery($query); $push_key = loadResult($db, $query);
$push_key = $db->loadResult();
$push_server = !empty($push_key) && isset(_payload($push_key)->aud) ? _payload($push_key)->aud : ''; $push_server = !empty($push_key) && isset(_payload($push_key)->aud) ? _payload($push_key)->aud : '';
if ($push_server != '' && $push_key != '') { if ($push_server != '' && $push_key != '') {
$url = $push_server . (str_ends_with($push_server, '/') ? '' : '/') . 'v1/notifications/send'; $url = $push_server . (str_ends_with($push_server, '/') ? '' : '/') . 'v1/notifications/send';
@@ -137,11 +134,8 @@ function begegnungVerlegenNotify($begegnung, $users, $vorschlagendes_team_id, $h
$expires->modify('+16 hours'); $expires->modify('+16 hours');
$db = getDatabase(); $db = getDatabase();
$query = "SELECT berechtigt_team_id from #__sportsmanager_berechtigt_fuer_team where berechtigt_user_id = $user_id"; $query = "SELECT berechtigt_team_id from #__sportsmanager_berechtigt_fuer_team where berechtigt_user_id = $user_id";
$db->setQuery($query); $team_id = loadObjectList($db, $query);
if (!$db->execute()) {
abortWithError($db->stderr(true));
}
$team_id = $db->loadObjectList();
JSON_sportsmanager::JSON([ JSON_sportsmanager::JSON([
'token' => jwt_token([ 'token' => jwt_token([
'sub' => $user_id, 'sub' => $user_id,
@@ -180,8 +174,7 @@ function begegnungVerlegenNotify($begegnung, $users, $vorschlagendes_team_id, $h
$db = getDatabase(); $db = getDatabase();
$query = $db->getQuery(true); $query = $db->getQuery(true);
$query->select('id')->from('#__users')->where('username = "' . $username . '"')->setLimit(1); $query->select('id')->from('#__users')->where('username = "' . $username . '"')->setLimit(1);
$db->setQuery($query); $user_id = loadResult($db, $query);
$user_id = $db->loadResult();
$user = $container->get(UserFactoryInterface::class)->loadUserById($user_id); $user = $container->get(UserFactoryInterface::class)->loadUserById($user_id);
//TODO: pw verification modernising: use php native methods, however this also needs new pw hashing. maybe force a pw reset on all accounts //TODO: pw verification modernising: use php native methods, however this also needs new pw hashing. maybe force a pw reset on all accounts
@@ -7,6 +7,8 @@ use Joomla\Database\DatabaseInterface;
use Joomla\Database\Mysql\MysqlDriver; use Joomla\Database\Mysql\MysqlDriver;
use Joomla\Database\Mysqli\MysqliDriver; use Joomla\Database\Mysqli\MysqliDriver;
require_once JPATH_SITE . '/components/com_sportsmanager/database/util.php';
function initDatabase(): void function initDatabase(): void
{ {
global $sportsmanager_database_local; global $sportsmanager_database_local;
@@ -22,11 +24,7 @@ function initDatabase(): void
$sportsmanager_database_local = Factory::getContainer()->get(DatabaseInterface::class); $sportsmanager_database_local = Factory::getContainer()->get(DatabaseInterface::class);
$query = "SELECT * FROM #__sportsmanager_einstellungen"; $query = "SELECT * FROM #__sportsmanager_einstellungen";
$sportsmanager_database_local->setQuery($query); $rows = loadObjectList($sportsmanager_database_local, $query);
if (!$sportsmanager_database_local->execute()) {
die($sportsmanager_database_local->stderr(true));
}
$rows = $sportsmanager_database_local->loadObjectList();
$database_driver = "mysql"; $database_driver = "mysql";
$database_host = ""; $database_host = "";
@@ -75,14 +73,13 @@ function initDatabase(): void
if ($sportsmanager_database_external === NULL) { if ($sportsmanager_database_external === NULL) {
echo "<strong>" . Text::_('COM_SPORTSMANAGER_CONNECTION_EXTERNAL_DB_FAILURE') . "</strong><br><br>"; echo "<strong>" . Text::_('COM_SPORTSMANAGER_CONNECTION_EXTERNAL_DB_FAILURE') . "</strong><br><br>";
} else { } else {
$query = "SELECT wert FROM #__sportsmanager_einstellungen WHERE name = 'datenbank_version'";
$sportsmanager_database_external->setQuery($query);
try { try {
if (!$sportsmanager_database_external->execute()) { if (!$sportsmanager_database_external->execute()) {
echo "<strong>" . Text::_('COM_SPORTSMANAGER_EXTERNAL_DB_NO_SM_TABLES') . "</strong><br><br>"; echo "<strong>" . Text::_('COM_SPORTSMANAGER_EXTERNAL_DB_NO_SM_TABLES') . "</strong><br><br>";
$sportsmanager_database_external = NULL; $sportsmanager_database_external = NULL;
} else { } else {
$db_version = $sportsmanager_database_external->loadResult(); $query = "SELECT wert FROM #__sportsmanager_einstellungen WHERE name = 'datenbank_version'";
$db_version = loadResult($sportsmanager_database_external, $query);
if ($db_version < 38) { if ($db_version < 38) {
echo "<strong>" . Text::_('COM_SPORTSMANAGER_EXTERNAL_DB_NO_SM_VERSION') . "</strong><br><br>"; echo "<strong>" . Text::_('COM_SPORTSMANAGER_EXTERNAL_DB_NO_SM_VERSION') . "</strong><br><br>";
$sportsmanager_database_external = NULL; $sportsmanager_database_external = NULL;
@@ -20,27 +20,15 @@ function updateDatabase(): void
$termin_aktionen_email_setzen = false; $termin_aktionen_email_setzen = false;
$query = "SHOW TABLE STATUS WHERE name = '" . $db->getPrefix() . "tsleague_basis' || name = '" . $db->getPrefix() . "tsleague_einstellungen'"; $query = "SHOW TABLE STATUS WHERE name = '" . $db->getPrefix() . "tsleague_basis' || name = '" . $db->getPrefix() . "tsleague_einstellungen'";
$db->setQuery($query); $rows = loadObjectList($db, $query);
if (!$db->execute()) {
die($db->stderr(true));
}
$rows = $db->loadObjectList();
if (count($rows) > 0) { if (count($rows) > 0) {
$query = "SHOW TABLE STATUS WHERE name = '" . $db->getPrefix() . "tsleague_basis'"; $query = "SHOW TABLE STATUS WHERE name = '" . $db->getPrefix() . "tsleague_basis'";
$db->setQuery($query); $rows = loadObjectList($db, $query);
if (!$db->execute()) {
die($db->stderr(true));
}
$rows = $db->loadObjectList();
if (count($rows) > 0) { if (count($rows) > 0) {
$query = "SELECT * FROM #__tsleague_basis"; $query = "SELECT * FROM #__tsleague_basis";
$db->setQuery($query); $rows = loadObjectList($db, $query);
if (!$db->execute()) {
die($db->stderr(true));
}
$rows = $db->loadObjectList();
if (count($rows) == 0) if (count($rows) == 0)
die(Text::_('COM_SPORTSMANAGER_EXTERNAL_DB_INCONSISTENCY')); die(Text::_('COM_SPORTSMANAGER_EXTERNAL_DB_INCONSISTENCY'));
@@ -337,11 +325,7 @@ function updateDatabase(): void
if ($datenbank_version < 9) { if ($datenbank_version < 9) {
$query = "SELECT spieler_id, geschlecht" $query = "SELECT spieler_id, geschlecht"
. "\n FROM #__tsleague_spieler"; . "\n FROM #__tsleague_spieler";
$db->setQuery($query); $spieler = loadObjectList($db, $query);
if (!$db->execute()) {
die($db->stderr(true));
}
$spieler = $db->loadObjectList();
$query = "ALTER TABLE #__tsleague_spieler CHANGE geschlecht geschlecht char(1)"; $query = "ALTER TABLE #__tsleague_spieler CHANGE geschlecht geschlecht char(1)";
$db->setQuery($query); $db->setQuery($query);
@@ -855,11 +839,7 @@ function updateDatabase(): void
} }
$query = "SELECT * FROM #__tsleague_einstellungen WHERE name = 'datenbank_version'"; $query = "SELECT * FROM #__tsleague_einstellungen WHERE name = 'datenbank_version'";
$db->setQuery($query); $rows = loadObjectList($db, $query);
if (!$db->execute()) {
die($db->stderr(true));
}
$rows = $db->loadObjectList();
if (count($rows) == 0) if (count($rows) == 0)
die(Text::_('COM_SPORTSMANAGER_EXTERNAL_DB_INCONSISTENCY')); die(Text::_('COM_SPORTSMANAGER_EXTERNAL_DB_INCONSISTENCY'));
@@ -1728,11 +1708,7 @@ function updateDatabase(): void
} }
$query = "SELECT * FROM #__sportsmanager_einstellungen WHERE name = 'datenbank_version'"; $query = "SELECT * FROM #__sportsmanager_einstellungen WHERE name = 'datenbank_version'";
$db->setQuery($query); $rows = loadObjectList($db, $query);
if (!$db->execute()) {
die($db->stderr(true));
}
$rows = $db->loadObjectList();
if (count($rows) == 0) if (count($rows) == 0)
die(Text::_('COM_SPORTSMANAGER_EXTERNAL_DB_INCONSISTENCY')); die(Text::_('COM_SPORTSMANAGER_EXTERNAL_DB_INCONSISTENCY'));
@@ -2174,11 +2150,7 @@ function updateDatabase(): void
. "\n SELECT YEAR(erster_tag) AS jahr FROM #__sportsmanager_bestenliste WHERE NOT ISNULL(erster_tag)" . "\n SELECT YEAR(erster_tag) AS jahr FROM #__sportsmanager_bestenliste WHERE NOT ISNULL(erster_tag)"
. "\n GROUP BY jahr" . "\n GROUP BY jahr"
. "\n ORDER BY jahr"; . "\n ORDER BY jahr";
$db->setQuery($query); $jahre = loadObjectList($db, $query);
if (!$db->execute()) {
die($db->stderr(true));
}
$jahre = $db->loadObjectList();
if (count($jahre) > 0) { if (count($jahre) > 0) {
foreach ($jahre as $jahr) { foreach ($jahre as $jahr) {
@@ -2199,11 +2171,7 @@ function updateDatabase(): void
} }
$query = "SELECT * FROM #__sportsmanager_saison ORDER BY saisonbezeichnung DESC LIMIT 1"; $query = "SELECT * FROM #__sportsmanager_saison ORDER BY saisonbezeichnung DESC LIMIT 1";
$db->setQuery($query); $saisons = loadObjectList($db, $query);
if (!$db->execute()) {
die($db->stderr(true));
}
$saisons = $db->loadObjectList();
$aktuelle_saison_id = $saisons[0]->saison_id; $aktuelle_saison_id = $saisons[0]->saison_id;
// Saisons den Veranstaltungen zuordnen // Saisons den Veranstaltungen zuordnen
@@ -2644,11 +2612,7 @@ function updateDatabase(): void
. "\n INNER JOIN #__sportsmanager_veranstaltung USING (veranstaltung_id)" . "\n INNER JOIN #__sportsmanager_veranstaltung USING (veranstaltung_id)"
. "\n LEFT JOIN #__sportsmanager_saison USING (saison_id)" . "\n LEFT JOIN #__sportsmanager_saison USING (saison_id)"
. "\n ORDER BY heimspielort_name, heimspielort_anschrift"; . "\n ORDER BY heimspielort_name, heimspielort_anschrift";
$db->setQuery($query); $teams = loadObjectList($db, $query);
if (!$db->execute()) {
die($db->stderr(true));
}
$teams = $db->loadObjectList();
$heimspielort_name = ""; $heimspielort_name = "";
$heimspielort_strasse = ""; $heimspielort_strasse = "";
@@ -3020,11 +2984,7 @@ function updateDatabase(): void
$query = "SELECT * FROM #__sportsmanager_turniervoranmeldung" $query = "SELECT * FROM #__sportsmanager_turniervoranmeldung"
. "\n ORDER BY turnierdisziplin_id"; . "\n ORDER BY turnierdisziplin_id";
$db->setQuery($query); $rows = loadObjectList($db, $query);
if (!$db->execute()) {
die($db->stderr(true));
}
$rows = $db->loadObjectList();
foreach ($rows as $row) { foreach ($rows as $row) {
$query = "INSERT INTO #__sportsmanager_turniermeldung (turnierdisziplin_id, rundenstufe, platz)" $query = "INSERT INTO #__sportsmanager_turniermeldung (turnierdisziplin_id, rundenstufe, platz)"
@@ -3215,11 +3175,7 @@ function updateDatabase(): void
if ($datenbank_version < 40) { if ($datenbank_version < 40) {
$query = "SELECT * FROM #__sportsmanager_kategorie ORDER BY typ, nummer, kategorie_id DESC"; $query = "SELECT * FROM #__sportsmanager_kategorie ORDER BY typ, nummer, kategorie_id DESC";
$db->setQuery($query); $rows = loadObjectList($db, $query);
if (!$db->execute()) {
die($db->stderr(true));
}
$rows = $db->loadObjectList();
$typ = -1; $typ = -1;
$nummer = -1; $nummer = -1;
@@ -4053,11 +4009,7 @@ function updateDatabase(): void
} }
$query = "SELECT * FROM #__sportsmanager_moderator"; $query = "SELECT * FROM #__sportsmanager_moderator";
$db->setQuery($query); $rows = loadObjectList($db, $query);
if (!$db->execute()) {
die($db->stderr(true));
}
$rows = $db->loadObjectList();
foreach ($rows as $row) { foreach ($rows as $row) {
$moderator_id = $row->moderator_id; $moderator_id = $row->moderator_id;
@@ -5214,8 +5166,7 @@ function updateDatabase(): void
->from('INFORMATION_SCHEMA.COLUMNS') ->from('INFORMATION_SCHEMA.COLUMNS')
->where('TABLE_NAME = ' . $db->quote($db->replacePrefix('#__sportsmanager_rangliste'))) ->where('TABLE_NAME = ' . $db->quote($db->replacePrefix('#__sportsmanager_rangliste')))
->where('COLUMN_NAME = ' . $db->quote('lizenzen')); ->where('COLUMN_NAME = ' . $db->quote('lizenzen'));
$db->setQuery($query); $exists = (bool)loadResult($db, $query);
$exists = (bool)$db->loadResult();
if (!$exists) { if (!$exists) {
$query = "ALTER TABLE #__sportsmanager_rangliste ADD lizenzen varchar(30) DEFAULT NULL AFTER streichergebnisse"; $query = "ALTER TABLE #__sportsmanager_rangliste ADD lizenzen varchar(30) DEFAULT NULL AFTER streichergebnisse";
@@ -5230,8 +5181,7 @@ function updateDatabase(): void
->from('INFORMATION_SCHEMA.COLUMNS') ->from('INFORMATION_SCHEMA.COLUMNS')
->where('TABLE_NAME = ' . $db->quote($db->replacePrefix('#__sportsmanager_spieler'))) ->where('TABLE_NAME = ' . $db->quote($db->replacePrefix('#__sportsmanager_spieler')))
->where('COLUMN_NAME = ' . $db->quote('lizenz')); ->where('COLUMN_NAME = ' . $db->quote('lizenz'));
$db->setQuery($query); $exists = (bool)loadResult($db, $query);
$exists = (bool)$db->loadResult();
if (!$exists) { if (!$exists) {
$query = "ALTER TABLE #__sportsmanager_spieler ADD lizenz varchar(30) DEFAULT NULL AFTER lizenznr"; $query = "ALTER TABLE #__sportsmanager_spieler ADD lizenz varchar(30) DEFAULT NULL AFTER lizenznr";
@@ -5266,14 +5216,39 @@ function updateDatabase(): void
} }
} }
if ($termin_aktionen_email_setzen) { if ($datenbank_version < 104) {
$query = "SELECT aktion_user_id, termin_aktion_id"
. "\n FROM #__sportsmanager_termin_aktion"; $query = "ALTER TABLE #__sportsmanager_veranstaltung ADD direktervergleich INT(4) NOT NULL DEFAULT '0' AFTER tabellenwertung;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$query = "ALTER TABLE #__sportsmanager_team ADD setzliste_nr INT(4) NULL DEFAULT NULL AFTER veranstaltung_id;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$query = "ALTER TABLE #__sportsmanager_begegnung ADD spiel_nr INT(4) NULL DEFAULT NULL AFTER spieltag;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$query = "UPDATE #__sportsmanager_einstellungen"
. "\n SET wert = '104'"
. "\n WHERE name = 'datenbank_version'";
$db->setQuery($query); $db->setQuery($query);
if (!$db->execute()) { if (!$db->execute()) {
die($db->stderr(true)); die($db->stderr(true));
} }
$rows = $db->loadObjectList(); }
if ($termin_aktionen_email_setzen) {
$query = "SELECT aktion_user_id, termin_aktion_id"
. "\n FROM #__sportsmanager_termin_aktion";
$rows = loadObjectList($db, $query);
foreach ($rows as $row) { foreach ($rows as $row) {
$container = Factory::getContainer(); $container = Factory::getContainer();
@@ -0,0 +1,47 @@
<?php
use Joomla\CMS\Log\Log;
/**
* @param $db
* @param $query
* @return mixed
* @since 2.0.5
*/
function loadObjectList($db, $query): mixed
{
try {
$db->setQuery($query);
$objList = $db->loadObjectList();
} catch (RuntimeException $e) {
Log::add("Database error: " . $e->getMessage(), Log::ERROR, "com_sportsmanager");
if(isJson()) {
abortWithError($e->getMessage());
} else {
throw $e;
}
}
return $objList;
}
/**
* @param $db
* @param $query
* @return mixed
* @since 2.0.5
*/
function loadResult($db, $query): mixed
{
try {
$db->setQuery($query);
$result = $db->loadResult();
} catch (RuntimeException $e) {
Log::add("Database error: " . $e->getMessage(), Log::ERROR, "com_sportsmanager");
if(isJson()) {
abortWithError($e->getMessage());
} else {
throw $e;
}
}
return $result;
}
@@ -2323,6 +2323,10 @@ function mp_mult_($p1, $p2): float|int
*/ */
function mp_div_($p1, $p2): float|int function mp_div_($p1, $p2): float|int
{ {
if ($p2 == 0) {
Log::add("Division by zero detected in mp_div_: divisor was 0. Returning 0 as fallback.", Log::WARNING, "com_sportsmanager");
return 0;
}
return $p1 / $p2; return $p1 / $p2;
} }
File diff suppressed because it is too large Load Diff
@@ -10,7 +10,6 @@ use Joomla\CMS\Factory;
use Joomla\CMS\Log\Log; use Joomla\CMS\Log\Log;
use Joomla\CMS\Router\Route; use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri; use Joomla\CMS\Uri\Uri;
use Joomla\CMS\User\User;
use Joomla\CMS\Version; use Joomla\CMS\Version;
defined('_JEXEC') or die('Restricted access'); defined('_JEXEC') or die('Restricted access');
@@ -7,6 +7,8 @@ use Joomla\CMS\Uri\Uri;
use Joomla\Filesystem\File; use Joomla\Filesystem\File;
use Joomla\Filesystem\Folder; use Joomla\Filesystem\Folder;
require_once JPATH_SITE . '/components/com_sportsmanager/database/util.php';
const SPORTSMANAGER_JOOMLA_PATH = JPATH_ROOT; const SPORTSMANAGER_JOOMLA_PATH = JPATH_ROOT;
define("SPORTSMANAGER_JOOMLA_URL", Uri::base()); define("SPORTSMANAGER_JOOMLA_URL", Uri::base());
@@ -241,11 +243,7 @@ function playerImage($playerId, $gender, $width = 180, $height = 240): ?string
. "\n FROM #__sportsmanager_spieler" . "\n FROM #__sportsmanager_spieler"
. "\n WHERE NOT ISNULL(aktueller_verein_id) AND NOT bild_ausblenden" . (!empty($spielernr) ? " AND spielernr = '$spielernr'" : " AND lizenznr = '$lizenznr'") . "\n WHERE NOT ISNULL(aktueller_verein_id) AND NOT bild_ausblenden" . (!empty($spielernr) ? " AND spielernr = '$spielernr'" : " AND lizenznr = '$lizenznr'")
. "\n ORDER BY spieler_id DESC"; . "\n ORDER BY spieler_id DESC";
$db->setQuery($query); $rows = loadObjectList($db, $query);
if (!$db->execute()) {
die($db->stderr(true));
}
$rows = $db->loadObjectList();
if (count($rows) < 1) { if (count($rows) < 1) {
ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind
header('HTTP/1.1 404 Not Found'); header('HTTP/1.1 404 Not Found');
@@ -382,7 +380,7 @@ function yoothemeBild($typ, $id, $alternativ, $resize = '', $zusatz = ""): ?stri
else else
return null; return null;
$bildpfad = "/images/sportsmanager/" . $typ . "/" . $typ_prefix . $id . "." . $ext; $bildpfad = SPORTSMANAGER_JOOMLA_URL . "images/sportsmanager/" . $typ . "/" . $typ_prefix . $id . "." . $ext;
return '<img class="el-image" data-src="' . $bildpfad . $resize . '" ' . $zusatz . ' uk-img />'; return '<img class="el-image" data-src="' . $bildpfad . $resize . '" ' . $zusatz . ' uk-img />';
} }
@@ -0,0 +1,6 @@
<?php // do not change this file, this is automatically updated while building releases, see .github/workflows/build_release.yml
defined('_JEXEC') or die;
return [
'version' => 'DEV',
'date' => '2025-08-05',
];
File diff suppressed because it is too large Load Diff
@@ -12,7 +12,8 @@ defined('_JEXEC') or die('Restricted access');
require_once JPATH_SITE . '/components/com_sportsmanager/views/sportsmanager/view_tools.php'; require_once JPATH_SITE . '/components/com_sportsmanager/views/sportsmanager/view_tools.php';
require_once JPATH_SITE . '/components/com_sportsmanager/util/image.php'; require_once JPATH_SITE . '/components/com_sportsmanager/util/image.php';
function formatTimediff( $timestamp1, $timestamp2, $verbose ) { function formatTimediff( $timestamp1, $timestamp2, $verbose ): string
{
if (empty($timestamp1) || empty($timestamp2)) { if (empty($timestamp1) || empty($timestamp2)) {
return ""; return "";
} else { } else {
@@ -27,7 +28,8 @@ function formatTimediff( $timestamp1, $timestamp2, $verbose ) {
} }
} }
function formatTeamName( $team_name, $team_id, $highlight_team_id ) { function formatTeamName( $team_name, $team_id, $highlight_team_id ): string
{
if ($team_id == $highlight_team_id) { if ($team_id == $highlight_team_id) {
return "<b><i>" . htmlentities_utf8($team_name) . "</i></b>"; return "<b><i>" . htmlentities_utf8($team_name) . "</i></b>";
} else { } else {
@@ -37,10 +39,25 @@ function formatTeamName( $team_name, $team_id, $highlight_team_id ) {
class HTML_sportsmanager_admin class HTML_sportsmanager_admin
{ {
private static $versionData = null;
private static function loadVersionData(): void
{
if (self::$versionData === null) {
self::$versionData = include JPATH_SITE . '/components/com_sportsmanager/util/version.php';
}
}
public static function getVersion(): string
{
self::loadVersionData();
return self::$versionData['version'] ?? 'DEV';
}
static function adminUebersicht($veranstaltungen, $spielerstatistiken, $turniere, $ranglisten, $individualwettbewerbe, $statistik, $saisons, $filter_saison_id, $externe_datenbank): void static function adminUebersicht($veranstaltungen, $spielerstatistiken, $turniere, $ranglisten, $individualwettbewerbe, $statistik, $saisons, $filter_saison_id, $externe_datenbank): void
{ {
function checkZeilenumbruch($Spalte_Nr, $max_Spalten) function checkZeilenumbruch($Spalte_Nr, $max_Spalten): int
{ {
$Spalte_Nr++; $Spalte_Nr++;
if ($Spalte_Nr >= $max_Spalten){ if ($Spalte_Nr >= $max_Spalten){
echo "</tr>\n<tr>\n"; echo "</tr>\n<tr>\n";
@@ -48,12 +65,12 @@ class HTML_sportsmanager_admin
} }
return $Spalte_Nr; return $Spalte_Nr;
} }
global $params; global $params;
?> ?>
<div class="componentheading<?php echo $params->get('pageclass_sfx'); ?>" style='font-weight: bold;'> <div class="componentheading<?php echo $params->get('pageclass_sfx'); ?>" style='font-weight: bold;'>
<a href="https://github.com/Deutscher-Tischfussballbund/" target="_blank"> <a href="https://github.com/Deutscher-Tischfussballbund/" target="_blank">
Sports Manager <?php echo SPORTS_MANAGER_VERSION; ?> </a> Sports Manager <?php echo self::getVersion(); ?> </a>
</div> </div>
<table> <table>
<tr> <tr>
@@ -2276,23 +2293,21 @@ class HTML_sportsmanager_admin
<?php <?php
} }
static function adminImportSpielerFehler($spieler): void static function adminImportSpielerFehler($spieler, $fehler): void
{ {
global $params; global $params;
$spieler_anzahl = count($spieler); $spieler_anzahl = count($spieler);
?> ?>
<div <div class="componentheading<?php echo $params->get('pageclass_sfx'); ?>">
class="componentheading<?php echo $params->get('pageclass_sfx'); ?>"><?php echo Text::_('COM_SPORTSMANAGER_PLAYERS_IMPORT2'); ?></div> <?php echo Text::_('COM_SPORTSMANAGER_PLAYERS_IMPORT2'); ?>
</div>
<table class="contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>"> <table class="contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>">
<tr> <tr>
<td> <td>
<?php <?php
if ($spieler_anzahl > 0) { if ($spieler_anzahl > 0) {
?> echo Text::_('COM_SPORTSMANAGER_IMPORT_CONFLICTS_MESSAGE');
<?php echo Text::_('COM_SPORTSMANAGER_IMPORT_CONFLICTS_MESSAGE'); ?>
<?php
} }
?> ?>
</td> </td>
@@ -2305,12 +2320,20 @@ class HTML_sportsmanager_admin
<table class="contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>"> <table class="contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>">
<tr> <tr>
<td nowrap class="contentheading<?php echo $params->get('pageclass_sfx'); ?>" <td nowrap class="contentheading<?php echo $params->get('pageclass_sfx'); ?>"
style="width: 100%"><?php echo Text::_('COM_SPORTSMANAGER_IMPORT_DUPLICATE_MESSAGE'); ?></td> style="width: 100%">
<?php
if ($fehler == "konflikt")
echo Text::_('COM_SPORTSMANAGER_IMPORT_DUPLICATE_MESSAGE');
if ($fehler == "Passnummer")
echo Text::_('COM_SPORTSMANAGER_IMPORT_WRONG_FORMAT_PLAYERNUMBER');
?>
</td>
</tr> </tr>
</table> </table>
<table class="contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>"> <table class="contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>">
<tr class="sectiontableheader<?php echo $params->get('pageclass_sfx'); ?>"> <tr class="sectiontableheader<?php echo $params->get('pageclass_sfx'); ?>">
<th nowrap><strong><?php echo Text::_('COM_SPORTSMANAGER_PLAYER_NUMBER_SHORT'); ?></strong></th>
<th nowrap><strong><?php echo Text::_('COM_SPORTSMANAGER_NAME'); ?></strong></th> <th nowrap><strong><?php echo Text::_('COM_SPORTSMANAGER_NAME'); ?></strong></th>
</tr> </tr>
<?php <?php
@@ -2320,6 +2343,7 @@ class HTML_sportsmanager_admin
?> ?>
<tr class="sectiontableentry<?php echo $k + 1; <tr class="sectiontableentry<?php echo $k + 1;
$k = ($k + 1) % 2; ?><?php echo $params->get('pageclass_sfx'); ?>"> $k = ($k + 1) % 2; ?><?php echo $params->get('pageclass_sfx'); ?>">
<td nowrap><?php echo htmlentities_utf8($s->spielernr); ?></td>
<td nowrap><?php echo htmlentities_utf8($s->nachname . ", " . $s->vorname); ?></td> <td nowrap><?php echo htmlentities_utf8($s->nachname . ", " . $s->vorname); ?></td>
</tr> </tr>
<?php <?php
@@ -2342,7 +2366,6 @@ class HTML_sportsmanager_admin
static function adminImportSpielerVorschau($import_verweigern, $spieler, $veranstalter, $session_id, $persoenliche_daten, $lizenznr_beibehalten, $spalten): void static function adminImportSpielerVorschau($import_verweigern, $spieler, $veranstalter, $session_id, $persoenliche_daten, $lizenznr_beibehalten, $spalten): void
{ {
global $params; global $params;
$spieler_anzahl = count($spieler); $spieler_anzahl = count($spieler);
?> ?>
@@ -4925,7 +4948,7 @@ class HTML_sportsmanager_admin
static function adminKategorien($kategorien): void static function adminKategorien($kategorien): void
{ {
global $params; global $params;
?> ?>
<div <div
class="componentheading<?php echo $params->get('pageclass_sfx'); ?>"><?php echo Text::_('COM_SPORTSMANAGER_CATEGORIES'); ?></div> class="componentheading<?php echo $params->get('pageclass_sfx'); ?>"><?php echo Text::_('COM_SPORTSMANAGER_CATEGORIES'); ?></div>
@@ -7204,6 +7227,22 @@ class HTML_sportsmanager_admin
</select> </select>
</td> </td>
</tr> </tr>
<tr id="tr_hthr">
<td nowrap style="width: 20%; text-align: right">
<label for="dd_hthr"><?php echo Text::_('COM_SPORTSMANAGER_HEAD_TO_HEAD_RECORD'); ?>
:</label>
</td>
<td nowrap>
<select class="uk-select uk-form-width-medium" name="direktervergleich" id="dd_hthr" size="1">
<?php
$direktervergleich = array(Text::_('COM_SPORTSMANAGER_NO'), Text::_('COM_SPORTSMANAGER_YES'));
for ($i = 0; $i <= 1; $i++) {
echo "<option value=\"" . $i . "\"" . ($row != null ? ($row->direktervergleich == $i ? " selected" : "") : "") . ">" . htmlentities_utf8($direktervergleich[$i]) . "</option>";
}
?>
</select>
</td>
</tr>
<tr> <tr>
<td nowrap style="width: 20%; text-align: right"> <td nowrap style="width: 20%; text-align: right">
<label <label
@@ -7378,6 +7417,26 @@ class HTML_sportsmanager_admin
<input type="hidden" name="task" value="admin_veranstaltung_save"/> <input type="hidden" name="task" value="admin_veranstaltung_save"/>
<input type="hidden" name="id" value="<?php echo($row != null ? $row->veranstaltung_id : "0"); ?>"/> <input type="hidden" name="id" value="<?php echo($row != null ? $row->veranstaltung_id : "0"); ?>"/>
</form> </form>
<script>
// Auswahlfeld Direkter Vergleich in Abhaengigkeit von Tabellenwertung anzeigen
const dropdown = document.getElementById("table_evaluation");
const zeile = document.getElementById("tr_hthr");
const unteroption = document.getElementById("dd_hthr");
function pruefeAnzeige() {
const wert = parseInt(dropdown.value);
if (wert >= 1 && wert <= 9) {
zeile.style.display = "";
} else {
zeile.style.display = "none";
unteroption.value = "0";
}
}
dropdown.addEventListener("change", pruefeAnzeige);
window.addEventListener("DOMContentLoaded", pruefeAnzeige);
</script>
<?php <?php
} }
@@ -8693,11 +8752,11 @@ class HTML_sportsmanager_admin
<td nowrap <td nowrap
style="text-align: center"><?php if ($ergebnis_vorhanden) echo $row->heim_spielpunkte . " : " . $row->gast_spielpunkte; else echo "_ : _" ?><?php if ($row->unbestaetigtes_ergebnis_id != null) echo "<br /><small>" . ($row->zwischenergebnis ? "live" : "unbest&auml;tigt") . "</small>"; ?></td> style="text-align: center"><?php if ($ergebnis_vorhanden) echo $row->heim_spielpunkte . " : " . $row->gast_spielpunkte; else echo "_ : _" ?><?php if ($row->unbestaetigtes_ergebnis_id != null) echo "<br /><small>" . ($row->zwischenergebnis ? "live" : "unbest&auml;tigt") . "</small>"; ?></td>
<td nowrap align="center"> <td nowrap align="center">
<?php echo <?php echo
formatTimediff($row->termin_spiel, $row->ergebnis_vorgeschlagen, false) formatTimediff($row->termin_spiel, $row->ergebnis_vorgeschlagen, false)
. " / " . " / "
. formatTimediff($row->ergebnis_vorgeschlagen, $row->ergebnis_akzeptiert, false); . formatTimediff($row->ergebnis_vorgeschlagen, $row->ergebnis_akzeptiert, false);
?> ?>
</td> </td>
<td nowrap><small><a <td nowrap><small><a
href="<?php echo SportsManagerURL('&task=admin_begegnung_heimtausch&veranstaltungid=' . $veranstaltung->veranstaltung_id . '&id=' . $row->begegnung_id); ?>"><?php echo Text::_('COM_SPORTSMANAGER_HOME_EXCHANGE'); ?></a></small> href="<?php echo SportsManagerURL('&task=admin_begegnung_heimtausch&veranstaltungid=' . $veranstaltung->veranstaltung_id . '&id=' . $row->begegnung_id); ?>"><?php echo Text::_('COM_SPORTSMANAGER_HOME_EXCHANGE'); ?></a></small>
@@ -291,8 +291,6 @@ class HTML_sportsmanager_ticker
type="text/css"/> type="text/css"/>
<script src="<?php echo Route::_(Uri::root(TRUE) . '/components/com_sportsmanager/js/jquery.min.js'); ?>" <script src="<?php echo Route::_(Uri::root(TRUE) . '/components/com_sportsmanager/js/jquery.min.js'); ?>"
type="text/javascript"></script> type="text/javascript"></script>
<script type="text/javascript"
src="<?php echo Route::_(Uri::root(TRUE) . '/components/com_sportsmanager/js/css3.js'); ?>"></script>
<script> <script>
let globalresize = 0; let globalresize = 0;
@@ -40,7 +40,7 @@ function addOnLoad($function): void
<?php <?php
} }
function SportsManagerURL($weitereParameter = null, $ssl = 0): ?string function SportsManagerURL($weitereParameter = "", $ssl = 0): ?string
{ {
$urlPath = handleFilter($weitereParameter); $urlPath = handleFilter($weitereParameter);
$joomlaBaseUrl = Uri::getInstance()->toString([ $joomlaBaseUrl = Uri::getInstance()->toString([
@@ -404,8 +404,9 @@ COM_SPORTSMANAGER_COUNTRY_CODE="Landeskennung"
COM_SPORTSMANAGER_IMPORT="Importieren" COM_SPORTSMANAGER_IMPORT="Importieren"
COM_SPORTSMANAGER_IMPORT_MESSAGE="Im Import sind ausschlie&szlig;lich Spielerdaten zum Verein %s enthalten. Soll ausschlie&szlig;lich der Spielerbestand des einen Vereins aktualisiert werden, muss der zugeh&ouml;rige Verein unten ausgew&auml;hlt werden. Beinhaltet der Import den gesamten Spielerbestand einer Organisation, muss die zugeh&ouml;rige Organisation gew&auml;hlt werden." COM_SPORTSMANAGER_IMPORT_MESSAGE="Im Import sind ausschlie&szlig;lich Spielerdaten zum Verein %s enthalten. Soll ausschlie&szlig;lich der Spielerbestand des einen Vereins aktualisiert werden, muss der zugeh&ouml;rige Verein unten ausgew&auml;hlt werden. Beinhaltet der Import den gesamten Spielerbestand einer Organisation, muss die zugeh&ouml;rige Organisation gew&auml;hlt werden."
COM_SPORTSMANAGER_CHECK="Pr&uuml;fen" COM_SPORTSMANAGER_CHECK="Pr&uuml;fen"
COM_SPORTSMANAGER_IMPORT_CONFLICTS_MESSAGE="Im Import sind Konflikte enthalten, die im Vorfeld manuell beseitigt werden müssen." COM_SPORTSMANAGER_IMPORT_CONFLICTS_MESSAGE="Im Import sind Fehler oder Konflikte enthalten, die im Vorfeld manuell beseitigt werden müssen."
COM_SPORTSMANAGER_IMPORT_DUPLICATE_MESSAGE="Versuch, Spielernr. auf eine bereits für einen anderen Spieler vergebene Spielernr. zu ändern" COM_SPORTSMANAGER_IMPORT_DUPLICATE_MESSAGE="Versuch, Spielernr. auf eine bereits für einen anderen Spieler vergebene Spielernr. zu ändern"
COM_SPORTSMANAGER_IMPORT_WRONG_FORMAT_PLAYERNUMBER="Eine oder mehrere Spielernummer enthalten ein ung&uuml;ltiges Format"
COM_SPORTSMANAGER_NAME2="Name" COM_SPORTSMANAGER_NAME2="Name"
COM_SPORTSMANAGER_DATA_IMPORT_ABORT_MESSAGE="Der Import wird abgebrochen, da Konflikte bei den zu importierenden Spielerdaten bestehen. Bitte kontaktiere einen Moderator und sende dabei die Importdatei mit!" COM_SPORTSMANAGER_DATA_IMPORT_ABORT_MESSAGE="Der Import wird abgebrochen, da Konflikte bei den zu importierenden Spielerdaten bestehen. Bitte kontaktiere einen Moderator und sende dabei die Importdatei mit!"
COM_SPORTSMANAGER_DATA_IMPORT_NO_CONFLICTS="Es bestehen keine Konflikte bei den zu importierenden Spielerdaten." COM_SPORTSMANAGER_DATA_IMPORT_NO_CONFLICTS="Es bestehen keine Konflikte bei den zu importierenden Spielerdaten."
@@ -536,6 +537,7 @@ COM_SPORTSMANAGER_FULL_RATING="Volle Wertung"
COM_SPORTSMANAGER_NO_RATING="Keine Wertung" COM_SPORTSMANAGER_NO_RATING="Keine Wertung"
COM_SPORTSMANAGER_TEAM_COMPETITIONS="Mannschaftswettbewerbe" COM_SPORTSMANAGER_TEAM_COMPETITIONS="Mannschaftswettbewerbe"
COM_SPORTSMANAGER_TABLE_SUMMARY="Tabellenwertung" COM_SPORTSMANAGER_TABLE_SUMMARY="Tabellenwertung"
COM_SPORTSMANAGER_HEAD_TO_HEAD_RECORD="Direkter Vergleich"
COM_SPORTSMANAGER_POINTS_WON_LOST_DIFFERENCE="Spielpunkte gewonnen, Spielpunkte verloren, Punktedifferenz" COM_SPORTSMANAGER_POINTS_WON_LOST_DIFFERENCE="Spielpunkte gewonnen, Spielpunkte verloren, Punktedifferenz"
COM_SPORTSMANAGER_PERFORMANCE_INDEX="Leistungsindex (SP+ * SP+ * 100) / (SP+ + SP-), Spielpunkte gewonnen, ..." COM_SPORTSMANAGER_PERFORMANCE_INDEX="Leistungsindex (SP+ * SP+ * 100) / (SP+ + SP-), Spielpunkte gewonnen, ..."
COM_SPORTSMANAGER_PERFORMANCE_INDEX2="Leistungsindex (S * P+ * 10) / (P+ + P-), Spielpunkte gewonnen, ..." COM_SPORTSMANAGER_PERFORMANCE_INDEX2="Leistungsindex (S * P+ * 10) / (P+ + P-), Spielpunkte gewonnen, ..."
@@ -404,8 +404,9 @@ COM_SPORTSMANAGER_COUNTRY_CODE="Country code"
COM_SPORTSMANAGER_IMPORT="Import" COM_SPORTSMANAGER_IMPORT="Import"
COM_SPORTSMANAGER_IMPORT_MESSAGE="In the import there are only player information about club %s present. Shall only the members of that one club be updated, the associated club has to be selected down here. If the import contains all members of the organisation then the organisation must be selected." COM_SPORTSMANAGER_IMPORT_MESSAGE="In the import there are only player information about club %s present. Shall only the members of that one club be updated, the associated club has to be selected down here. If the import contains all members of the organisation then the organisation must be selected."
COM_SPORTSMANAGER_CHECK="Check" COM_SPORTSMANAGER_CHECK="Check"
COM_SPORTSMANAGER_IMPORT_CONFLICTS_MESSAGE="There are conflicts in the import which have to be fixed manually first." COM_SPORTSMANAGER_IMPORT_CONFLICTS_MESSAGE="There are faults or conflicts in the import which have to be fixed manually first."
COM_SPORTSMANAGER_IMPORT_DUPLICATE_MESSAGE="Attempt to change player number into one that is already assigned to another player." COM_SPORTSMANAGER_IMPORT_DUPLICATE_MESSAGE="Attempt to change player number into one that is already assigned to another player."
COM_SPORTSMANAGER_IMPORT_WRONG_FORMAT_PLAYERNUMBER="One or more player numbers contain an invalid format"
COM_SPORTSMANAGER_NAME2="Name" COM_SPORTSMANAGER_NAME2="Name"
COM_SPORTSMANAGER_DATA_IMPORT_ABORT_MESSAGE="The import has been aborted because there are conflicts in the containing player information. Please contact a moderator and attach the import!" COM_SPORTSMANAGER_DATA_IMPORT_ABORT_MESSAGE="The import has been aborted because there are conflicts in the containing player information. Please contact a moderator and attach the import!"
COM_SPORTSMANAGER_DATA_IMPORT_NO_CONFLICTS="There are conflicts in the containing player information." COM_SPORTSMANAGER_DATA_IMPORT_NO_CONFLICTS="There are conflicts in the containing player information."
@@ -536,6 +537,7 @@ COM_SPORTSMANAGER_FULL_RATING="Full rating"
COM_SPORTSMANAGER_NO_RATING="No rating" COM_SPORTSMANAGER_NO_RATING="No rating"
COM_SPORTSMANAGER_TEAM_COMPETITIONS="Team competitions" COM_SPORTSMANAGER_TEAM_COMPETITIONS="Team competitions"
COM_SPORTSMANAGER_TABLE_SUMMARY="Table rating" COM_SPORTSMANAGER_TABLE_SUMMARY="Table rating"
COM_SPORTSMANAGER_HEAD_TO_HEAD_RECORD="Head-to-head record"
COM_SPORTSMANAGER_POINTS_WON_LOST_DIFFERENCE="Game points won, game points lost, point difference" COM_SPORTSMANAGER_POINTS_WON_LOST_DIFFERENCE="Game points won, game points lost, point difference"
COM_SPORTSMANAGER_PERFORMANCE_INDEX="Performance index (GP+ * GP+ * 100) / (GP+ + GP-), game points won, ..." COM_SPORTSMANAGER_PERFORMANCE_INDEX="Performance index (GP+ * GP+ * 100) / (GP+ + GP-), game points won, ..."
COM_SPORTSMANAGER_PERFORMANCE_INDEX2="Performance index (games * P+ * 10) / (P+ + P-), game points won, ..." COM_SPORTSMANAGER_PERFORMANCE_INDEX2="Performance index (games * P+ * 10) / (P+ + P-), game points won, ..."
+3
View File
@@ -137,6 +137,7 @@ return new class () implements InstallerScriptInterface
. "\n `tisch` tinytext DEFAULT NULL," . "\n `tisch` tinytext DEFAULT NULL,"
. "\n `zeitpunkt` datetime DEFAULT NULL," . "\n `zeitpunkt` datetime DEFAULT NULL,"
. "\n `spieltag` smallint(6) DEFAULT NULL," . "\n `spieltag` smallint(6) DEFAULT NULL,"
. "\n `spiel_nr` tinyint(4) DEFAULT NULL,"
. "\n `heim_punkte` smallint(6) DEFAULT NULL," . "\n `heim_punkte` smallint(6) DEFAULT NULL,"
. "\n `gast_punkte` smallint(6) DEFAULT NULL," . "\n `gast_punkte` smallint(6) DEFAULT NULL,"
. "\n `heim_spielpunkte` smallint(6) DEFAULT NULL," . "\n `heim_spielpunkte` smallint(6) DEFAULT NULL,"
@@ -680,6 +681,7 @@ return new class () implements InstallerScriptInterface
. "\n `teamgruppe_id` int(11) DEFAULT NULL," . "\n `teamgruppe_id` int(11) DEFAULT NULL,"
. "\n `verein_id` int(11) DEFAULT NULL," . "\n `verein_id` int(11) DEFAULT NULL,"
. "\n `veranstaltung_id` int(11) NOT NULL DEFAULT '0'," . "\n `veranstaltung_id` int(11) NOT NULL DEFAULT '0',"
. "\n `setzliste_nr` tinyint(4) DEFAULT NULL,"
. "\n `teamname` varchar(50) NOT NULL," . "\n `teamname` varchar(50) NOT NULL,"
. "\n `tischtyp` varchar(200) DEFAULT NULL," . "\n `tischtyp` varchar(200) DEFAULT NULL,"
. "\n `tischeigenschaften` varchar(200) DEFAULT NULL," . "\n `tischeigenschaften` varchar(200) DEFAULT NULL,"
@@ -1033,6 +1035,7 @@ return new class () implements InstallerScriptInterface
. "\n `modus_id` int(11) NOT NULL DEFAULT '0'," . "\n `modus_id` int(11) NOT NULL DEFAULT '0',"
. "\n `verschieberegel_id` int(11) NOT NULL DEFAULT '0'," . "\n `verschieberegel_id` int(11) NOT NULL DEFAULT '0',"
. "\n `tabellenwertung` tinyint(4) NOT NULL DEFAULT '0'," . "\n `tabellenwertung` tinyint(4) NOT NULL DEFAULT '0',"
. "\n `direktervergleich` tinyint(4) NOT NULL DEFAULT '0',"
. "\n `unterteilung` tinyint(4) NOT NULL DEFAULT '0'," . "\n `unterteilung` tinyint(4) NOT NULL DEFAULT '0',"
. "\n `erster_tag` date NOT NULL DEFAULT '0000-00-00'," . "\n `erster_tag` date NOT NULL DEFAULT '0000-00-00',"
. "\n `letzter_tag` date DEFAULT NULL," . "\n `letzter_tag` date DEFAULT NULL,"