Compare commits

...

125 Commits

Author SHA1 Message Date
MarvinF 24f4195403 Merge pull request #212 from Deutscher-Tischfussballbund/sportsmanager2-stage
stage to prod
2025-10-14 20:25:23 +02:00
MarvinF c1b7cb1e8c Merge pull request #211 from Deutscher-Tischfussballbund/sportsmanager2-dev
dev to stage merge
2025-10-14 20:23:35 +02:00
MarvinF 878cacd8cd Merge pull request #210 from Deutscher-Tischfussballbund/sportsmanager2-issue207
Sportsmanager2 issue207
2025-10-13 15:51:55 +02:00
MarvinF 5f830602ef Merge pull request #209 from Deutscher-Tischfussballbund/sportsmanager2-issue208
Vereinszuordnung Spieler korrigiert.
2025-10-12 23:31:46 +02:00
Jürgen Meyer eef105895b Spieleliste in Verein Details auskommentiert 2025-10-10 11:56:01 +02:00
Jürgen Meyer c0bdbb4bde Fehlerhaften Link Sortierung Vereine korrigiert. 2025-10-10 10:36:24 +02:00
Jürgen Meyer d05f3c5d7f Vereinszuordnung Spieler korrigiert. 2025-10-09 13:14:13 +02:00
MarvinF 0c334d897d Merge pull request #204 from Deutscher-Tischfussballbund/sportsmanager2-stage
downward merge stage to dev
2025-10-06 23:18:12 +02:00
MarvinF 79efed156b Merge pull request #203 from Deutscher-Tischfussballbund/sportsmanager2-prod
downward merge prod to stage
2025-10-06 23:17:24 +02:00
MarvinF 7984ea73aa Merge pull request #202 from Deutscher-Tischfussballbund/sportsmanager2-issue201
Zeileneinrückung in view.html.php korrigiert
2025-09-28 03:31:42 +02:00
Jürgen Meyer 7d07aee916 Zeileneinrückung in view.html.php korrigiert 2025-09-27 12:19:59 +02:00
MarvinF 43acc01861 Merge pull request #200 from Deutscher-Tischfussballbund/sportsmanager2-stage
stage to prod
2025-09-26 17:01:25 +02:00
MarvinF fa374986ca Merge pull request #199 from Deutscher-Tischfussballbund/sportsmanager2-dev
dev to stage
2025-09-26 17:00:10 +02:00
MarvinF aa68992d45 Merge pull request #197 from Deutscher-Tischfussballbund/fix/ranking_bug
website freezing up indefinitely
2025-09-26 16:52:53 +02:00
MarvinF 0d4381fc7f Merge pull request #84 from Deutscher-Tischfussballbund/feature/auto-email-missing-results
email reminder for tournament results
2025-09-26 16:51:54 +02:00
Marvin Flock 9b4eb13d52 feat: prevent email flood on new created tournaments when email reminder are turned on in later stages 2025-09-25 23:43:11 +02:00
Marvin Flock cfe4f871f7 Merge branch 'sportsmanager2-dev' into feature/auto-email-missing-results
# Conflicts:
#	src/structure/components/com_sportsmanager/database/update.php
#	src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php
2025-09-25 18:16:42 +02:00
Marvin Flock bbe786a075 fix: update regarding code review 2025-09-25 18:13:58 +02:00
Marvin Flock 64ce39a59f feat: add email reminder functionality 2025-09-25 02:53:50 +02:00
Jürgen Meyer d0258d967d Optimierung Inserts fuer Aktualisierung Ranglisten 2025-09-24 09:44:11 +02:00
MarvinF bf99d459fb Merge pull request #189 from Deutscher-Tischfussballbund/fix/183_long-discipline-names-break-layout
Long list of disciplines break tournament view
2025-09-23 20:18:30 +02:00
MarvinF bc91be9382 Merge pull request #195 from Deutscher-Tischfussballbund/sportsmanager2-issue193
change styling/sizing of tables
2025-09-23 20:14:24 +02:00
MarvinF 5c09a35485 Merge pull request #196 from Deutscher-Tischfussballbund/sportsmanager2-issue194
date formats break in group game import
2025-09-23 20:12:18 +02:00
MarvinF f14d5a1e8c Merge pull request #191 from Deutscher-Tischfussballbund/sportsmanager2-issue190
some live results will show up twice
2025-09-23 20:04:18 +02:00
MarvinF 26fd06afef Update view.html.php 2025-09-23 19:48:03 +02:00
Marvin Flock 1f147081e1 fix: add removed part back to sportsmanager 2025-09-23 18:18:24 +02:00
Jürgen Meyer 4f89abc630 Leerzeilen in Importdatei werden ignoriert. 2025-09-22 11:34:27 +02:00
Jürgen Meyer d84c2eefcf Kleine Korrektur 2025-09-22 06:37:27 +02:00
Jürgen Meyer ba73036b02 Import Gruppenspiele optimiert (issue #194) 2025-09-22 06:32:08 +02:00
Jürgen Meyer 29a108d88c Style Manuelle Tabelle an andere Tabellen angepasst (issue #193) 2025-09-22 04:52:40 +02:00
Jürgen Meyer 11e42c2374 tfvhh durch #_ ersetzt 2025-09-18 17:10:24 +02:00
Jürgen Meyer 56776c01f0 Doppelte Live-Ergebnisse eines Spiels (issue #190) 2025-09-18 16:54:22 +02:00
Marvin Flock 6187456e31 Merge branch 'sportsmanager2-dev' into feature/auto-email-missing-results
# Conflicts:
#	src/structure/components/com_sportsmanager/sportsmanager.php
2025-09-17 21:42:29 +02:00
Marvin Flock 49e3bde816 fix: display disciplines under each other in admin and public tournament view 2025-09-17 21:23:51 +02:00
MarvinF 15347b3ab7 Merge pull request #181 from Deutscher-Tischfussballbund/sportsmanager2-issue180
Überarbeitung Pokalauslosung (issue #180)
2025-09-17 20:37:19 +02:00
MarvinF 3363ec1a77 Merge pull request #182 from Deutscher-Tischfussballbund/sportsmanager2-issue178
Überarbeitung Anzeige Vereinsliste in Frontend (issue #178)
2025-09-17 20:36:49 +02:00
MarvinF 751c1919d4 Merge pull request #188 from Deutscher-Tischfussballbund/sportsmanager2-issue179
Initialisierung neuer Einstellungen (issue #179)
2025-09-17 20:36:08 +02:00
Jürgen Meyer 9babcec39e Passive und inaktive Spieler werden im oeffentlichen Bereich nicht mehr gezeigt (issue #150) 2025-09-17 19:17:30 +02:00
Jürgen Meyer e8c4ab2d1d Korrektur Dropdown Spielorte 2025-09-17 10:41:59 +02:00
Jürgen Meyer 53ff7ab566 Initialisierung neuer Einstellungen 2025-09-17 08:54:22 +02:00
Jürgen Meyer ac8bafaa9e Label für show_member_count angepasst 2025-09-17 08:08:36 +02:00
MarvinF 4f6edb0acb Merge pull request #187 from Deutscher-Tischfussballbund/sportsmanager2-stage
stage to prod
2025-09-16 20:37:44 +02:00
MarvinF 822708356b Merge pull request #186 from Deutscher-Tischfussballbund/sportsmanager2-dev
dev to stage
2025-09-16 20:36:49 +02:00
MarvinF 7c302d4ded Merge pull request #185 from Deutscher-Tischfussballbund/fix/live-encounters
live encounters missing in live ticker
2025-09-16 20:35:45 +02:00
Marvin Flock 1e63f2b542 fix: add live encounters to live ticker 2025-09-16 19:50:34 +02:00
Jürgen Meyer 1d9aa13300 Überarbeitung Anzeige Vereinsliste in Frontend (issue #178) 2025-09-12 10:56:25 +02:00
Jürgen Meyer ea85f102a5 Änderungen nach issue #180 2025-09-11 10:22:52 +02:00
MarvinF ebfd6ee4e9 Merge pull request #177 from Deutscher-Tischfussballbund/sportsmanager2-stage
stage to prod
2025-09-04 22:24:49 +02:00
MarvinF a503325ca4 Merge pull request #176 from Deutscher-Tischfussballbund/sportsmanager2-dev
dev to stage
2025-09-04 22:23:53 +02:00
MarvinF 218dc138fb Update build_release.yml 2025-09-04 22:22:18 +02:00
MarvinF eed53841cf Merge pull request #175 from Deutscher-Tischfussballbund/sportsmanager2-stage
stage to prod
2025-09-04 22:05:16 +02:00
MarvinF dbc79096d4 Merge pull request #174 from Deutscher-Tischfussballbund/sportsmanager2-dev
dev to stage
2025-09-04 22:04:25 +02:00
Marvin Flock 3e93e27f72 chore: add notification to teams 2025-09-04 22:02:39 +02:00
MarvinF 8c022f831a Merge pull request #173 from Deutscher-Tischfussballbund/sportsmanager2-stage
stage to prod
2025-09-04 21:56:02 +02:00
MarvinF 2ab429f949 Merge pull request #172 from Deutscher-Tischfussballbund/sportsmanager2-dev
dev to stage
2025-09-04 21:55:00 +02:00
MarvinF 6e53017158 Create teams_integration.yml 2025-09-04 21:40:02 +02:00
MarvinF 8764b0a337 Merge pull request #171 from Deutscher-Tischfussballbund/sportsmanager2-stage
stage to prod
2025-09-04 21:13:28 +02:00
MarvinF 07611a0087 Merge pull request #170 from Deutscher-Tischfussballbund/sportsmanager2-dev
dev to stage
2025-09-04 21:11:56 +02:00
MarvinF bc57da1eff Merge pull request #169 from Deutscher-Tischfussballbund/sportsmanager2-issue165
issue #165 gefixt. Tabelle wird falsch gespeichert bei Direkter Vergl…
2025-09-04 21:08:11 +02:00
MarvinF 1c380928f0 Merge branch 'sportsmanager2-dev' into sportsmanager2-issue165 2025-09-04 21:07:37 +02:00
Jürgen Meyer 1ddcfd87db issue #165 gefixt. Tabelle wird falsch gespeichert bei Direkter Vergleich. 2025-09-03 02:51:40 +02:00
Marvin Flock cb1493954f chore: update release date in manifest file on release build 2025-09-02 23:36:20 +02:00
MarvinF 9637f2a92a Merge pull request #168 from Deutscher-Tischfussballbund/sportsmanager2-issue166
issue #166 gefixt (Filter Land in Termine)
2025-09-02 23:21:33 +02:00
MarvinF a977343544 Merge branch 'sportsmanager2-dev' into sportsmanager2-issue166 2025-09-02 23:19:17 +02:00
MarvinF 1f5593d3e8 Merge pull request #167 from Deutscher-Tischfussballbund/sportsmanager2-issue164
Issue #164 - Fehler Export Spielberichte
2025-09-02 23:15:54 +02:00
Jürgen Meyer fff5f97971 issue #166 gefixt (Filter Land in Termine) 2025-09-02 16:01:09 +02:00
Jürgen Meyer 546b9c3af9 Issue #164 - Fehler Export Spielberichte 2025-09-02 13:23:54 +02:00
MarvinF 4ad93a8cf6 Merge pull request #162 from Deutscher-Tischfussballbund/sportsmanager2-stage
stage 2 prod pr
2025-09-02 01:48:44 +02:00
MarvinF 1b5e070026 Merge pull request #161 from Deutscher-Tischfussballbund/sportsmanager2-dev
dev 2 stage pr
2025-09-02 01:47:42 +02:00
MarvinF 114eba3a9c Merge pull request #160 from Deutscher-Tischfussballbund/temp_releasenotes
resize parameters of images are not working
2025-09-02 01:45:51 +02:00
Marvin Flock 9fb592ccbc chore: dummy commit for release notes 2025-09-02 01:44:07 +02:00
MarvinF f76ab18d4b Merge pull request #159 from Deutscher-Tischfussballbund/temp_releasenotes
optimize club details page for mobile
2025-09-02 01:43:08 +02:00
Marvin Flock 02e27d7747 chore: dummy commit for release notes 2025-09-02 01:41:00 +02:00
MarvinF 5375950049 Merge pull request #158 from Deutscher-Tischfussballbund/temp_releasenotes
locations can be reused for event creation
2025-09-02 01:39:52 +02:00
Marvin Flock 050b246fef chore: dummy commit for release notes 2025-09-02 01:38:18 +02:00
MarvinF 55b8cc52c7 Merge pull request #157 from Deutscher-Tischfussballbund/temp_releasenotes
improved the list of clubs with sorting and more configuration options
2025-09-02 01:37:19 +02:00
Marvin Flock aad70e5ab2 chore: dummy commit for release notes 2025-09-02 01:32:45 +02:00
MarvinF 37a98edbad Merge pull request #156 from Deutscher-Tischfussballbund/temp_releasenotes
while generating group games, the second encounter for two teams was ordered the same (home/guest) as the first encounter
2025-09-02 01:28:06 +02:00
Marvin Flock 228f68f90c chore: dummy commit for release notes 2025-09-02 01:22:03 +02:00
MarvinF 4f9df2ce89 Merge pull request #155 from Deutscher-Tischfussballbund/temp_releasenotes
team dropdown while generating group games shows a team twice
2025-09-02 01:20:56 +02:00
Marvin Flock 1a364a4e30 chore: dummy commit for release notes 2025-09-02 01:16:26 +02:00
MarvinF f3bf69c9ca Merge pull request #154 from Deutscher-Tischfussballbund/temp_releasenotes
When using direct comparison, if there are no encounters yet, an error is thrown
2025-09-02 01:13:58 +02:00
Marvin Flock cc81b97569 chore: dummy commit for release notes 2025-09-02 01:09:54 +02:00
MarvinF aaa5aaac1d Merge pull request #153 from Deutscher-Tischfussballbund/temp_releasenotes
Import options improvement: calendar week, matchday title, match number
2025-09-02 01:08:09 +02:00
Marvin Flock f9f9e58881 chore: dummy commit for release notes 2025-09-02 01:04:53 +02:00
MarvinF 671dfb7e8d Merge pull request #145 from Deutscher-Tischfussballbund/sportsmanager2-issue052
Änderungen für issue #52, issue #131 und issue #143
2025-09-02 00:23:13 +02:00
Marvin Flock 3ae15e2e70 Merge branch 'sportsmanager2-dev' into sportsmanager2-issue052
# Conflicts:
#	src/structure/components/com_sportsmanager/admin.php
#	src/structure/components/com_sportsmanager/database/update.php
#	src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php
#	src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php
#	src/structure/language/de-DE/de-DE.com_sportsmanager.ini
#	src/structure/language/en-GB/en-GB.com_sportsmanager.ini
#	src/structure/script.php
2025-09-02 00:21:11 +02:00
MarvinF ee0c19efe3 Merge pull request #147 from Deutscher-Tischfussballbund/sportsmanager2-issue125
Änderungen für issue #125, issue #116 und issue #117
2025-09-02 00:06:41 +02:00
MarvinF 87c9ec82fd Merge branch 'sportsmanager2-dev' into sportsmanager2-issue125 2025-09-02 00:06:05 +02:00
Jürgen Meyer 71d8460cd6 Entscheidung ob Verband angezeigt wird liegt allein bei Web Admin. 2025-09-01 20:56:57 +02:00
Jürgen Meyer d97713e73d Fehler bei Erstellung Spieleplen mit 4 Mannschaften mit Setzliste behoben. 2025-09-01 20:34:14 +02:00
Marvin Flock b16638ed47 fix: code review changes 2025-09-01 18:02:20 +02:00
MarvinF b511badad2 Merge pull request #144 from Deutscher-Tischfussballbund/fix/bayern-missing-argument
missing parameter in player details with ELO runs into error
2025-08-30 13:18:19 +02:00
Jürgen Meyer 42ff1155f3 Probleme mit Sonderzeichen in Turnierbaum gefixt. 2025-08-29 16:28:06 +02:00
Jürgen Meyer 17a9bfdd2e issue #151 2025-08-29 12:00:08 +02:00
Jürgen Meyer 3aa20036dc Issue #152 Heimrechtwechsel in Rückrunde 2025-08-29 11:22:13 +02:00
Jürgen Meyer fc1ce3bdd6 Alle offenen Mängel beseitigt. 2025-08-29 10:34:31 +02:00
Marvin Flock cf52c718e8 chore: some review fixes 2025-08-28 22:24:13 +02:00
Marvin Flock 8b29c8eba6 chore: some review fixes 2025-08-28 22:19:11 +02:00
Marvin Flock e9460ef8cc Merge branch 'sportsmanager2-dev' into sportsmanager2-issue052
# Conflicts:
#	src/structure/components/com_sportsmanager/admin.php
#	src/structure/components/com_sportsmanager/sportsmanager.php
#	src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php
2025-08-28 21:58:43 +02:00
Marvin Flock 3ac38abb92 chore: some review fixes 2025-08-28 21:42:52 +02:00
Marvin Flock 19ff8ebd08 chore: some review fixes 2025-08-28 21:20:20 +02:00
Marvin Flock 3ab2ae9206 chore: some review fixes 2025-08-28 21:18:23 +02:00
Marvin Flock 4820f82253 chore: some review fixes 2025-08-28 21:16:34 +02:00
Marvin Flock 0a06321a72 chore: remove unused style tag 2025-08-28 20:31:42 +02:00
Marvin Flock 60232d95b3 chore: remove empty class attributes, fix label for input 2025-08-28 20:18:52 +02:00
Marvin Flock f27b87a0d8 chore: add return types to methods 2025-08-28 20:01:58 +02:00
Jürgen Meyer bc6c44e82a Eingeschränkte Spieler erscheinen jetzt auch in Vereinsdetails. 2025-08-27 06:41:25 +02:00
Jürgen Meyer 01ac642de5 Passive Vereinsmitglieder werden in Vereinsdetails nicht mehr angezeigt. 2025-08-26 06:27:43 +02:00
Jürgen Meyer 825a072ace Änderungen zu issue #149 (Resize in yoothemeBild) 2025-08-19 10:07:12 +02:00
Jürgen Meyer 1aa9b924d7 Noch ein paar kleine Änderungen 2025-08-17 18:11:46 +02:00
Jürgen Meyer 4a96d9f0a9 Fehler in script.php und update.php behoben 2025-08-16 18:05:35 +02:00
Jürgen Meyer 7a59020e64 Änderungen für issue #125, issue #116 und issue #117 2025-08-16 17:48:14 +02:00
Jürgen Meyer 3f816235c8 Änderungen für issue #52, issue #131 und issue #143 2025-08-15 13:54:04 +02:00
Marvin Flock 4f264ed72d fix: add previously deleted parameter back into sprintf again with reference to $spieler 2025-08-14 22:34:33 +02:00
MarvinF a6f302cb63 Merge pull request #142 from Deutscher-Tischfussballbund/chore/automatic-version-update-in-manifest-xml
chore: update manifest xml sportsmanager version with pipeline
2025-08-12 20:44:48 +02:00
Marvin Flock 22c50e688a chore: update manifest xml sportsmanager version with pipeline 2025-08-12 01:44:13 +02:00
MarvinF fbd7e05abb Merge pull request #141 from Deutscher-Tischfussballbund/chore/add-release-process-to-readme
chore: update readme with more details to release process
2025-08-12 01:18:15 +02:00
MarvinF a36edeedca Merge branch 'sportsmanager2-dev' into chore/add-release-process-to-readme 2025-08-12 01:17:56 +02:00
Marvin Flock ea9fd038f3 chore: update readme with more details to release process 2025-08-12 01:17:00 +02:00
MarvinF e55d925034 Merge pull request #140 from Deutscher-Tischfussballbund/chore/add-release-process-to-readme
chore: add release process to readme
2025-08-12 01:14:05 +02:00
Marvin Flock 48d0bca1c6 chore: add release process to readme 2025-08-12 01:12:57 +02:00
Tim 56679669c0 feat: extend tournament result upload window to 14 days for uploaders 2025-06-24 13:58:02 +00:00
Tim 1e8a7a3ae0 chore: add migration script for tournament reminder fields 2025-06-24 13:53:11 +00:00
Tim 269af499c8 feat: add auto-email reminder script for missing tournament results 2025-06-24 13:48:13 +00:00
15 changed files with 7351 additions and 5404 deletions
+28
View File
@@ -28,6 +28,9 @@ jobs:
- name: Get version from git tag
run: echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
- name: Set DATE
run: echo "DATE=$(date +'%Y-%m-%d')" >> $GITHUB_ENV
- name: Update version.php
run: |
echo "<?php" > src/structure/components/com_sportsmanager/util/version.php
@@ -36,6 +39,10 @@ jobs:
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
echo "Updating version to $VERSION in sportsmanager.xml"
sed -i "s#<version>.*</version>#<version>$VERSION</version>#" src/structure/sportsmanager.xml
echo "Updating Date to $DATE in sportsmanager.xml"
sed -i "s#<creationDate>.*</creationDate>#<creationDate>$DATE</creationDate>#" src/structure/sportsmanager.xml
- name: Generate release notes
id: release_notes_extension
@@ -91,3 +98,24 @@ jobs:
else
echo "No draft releases found"
fi
- name: Send notification to Teams
run: |
curl -H 'Content-Type: application/json' \
-d "{
\"@type\": \"MessageCard\",
\"@context\": \"http://schema.org/extensions\",
\"summary\": \"New Release\",
\"themeColor\": \"0076D7\",
\"title\": \"🚀 New Release: ${{ github.ref_name }}\",
\"sections\": [{
\"activityTitle\": \"Repository: ${{ github.repository }}\",
\"text\": \"${{ steps.release_notes_github.outputs.body }}\"
}],
\"potentialAction\": [{
\"@type\": \"OpenUri\",
\"name\": \"View Release\",
\"targets\": [{ \"os\": \"default\", \"uri\": \"https://github.com/${{ github.repository }}/releases/tag/${{ github.ref_name }}\" }]
}]
}" \
${{ secrets.TEAMS_WEBHOOK_URL }}
+22
View File
@@ -83,3 +83,25 @@ JConfig: `./data/joomla_data/configuration.php`
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
https://chromewebstore.google.com/detail/xdebug-helper-by-jetbrain/aoelhdemabeimdhedkidlnbkfhnhgnhm
### How to release
Hint: for technical details regarding the release process have a look into .github/...
To create a release these steps need to be followed
1. make sure all needed code changes are merged from dev -> stage -> prod, since releases may only be build on prod branch
2. give pull requests meaningful names and label them enhancement/bug/chore since labels and names are used for release note generation
Hint: if a specific pull request should be ignored, add the label changelog-ignore
3. tag a commit (recommended is the latest merge on prod). The pipeline is listening for any tag fitting `v[0-9]+.[0-9]+.[0-9]+`
```shell
git tag -a v1.2.3 1a2b3c4 -m "Release version 1.2.3"
```
4. push the tag
```shell
git push origin --tags
```
5. the tag push will trigger the pipeline, and it will create the release and store in GitHub
A release can be created again anytime by deleting the release from GitHub, deleting the tag (from GitHub and additionally from git)
and repeating step 3 and 4
Further: merges from dev to stage and from stage to prod can only be done by creating pull requests. These pull requests will be automatically labeled as changelog-ignore
File diff suppressed because it is too large Load Diff
@@ -5245,6 +5245,139 @@ function updateDatabase(): void
}
}
if ($datenbank_version < 105) {
$query = "ALTER TABLE `#__sportsmanager_begegnung` ADD `spieltag_titel` VARCHAR(32) NOT NULL DEFAULT '' AFTER `spieltag`;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$query = "ALTER TABLE `#__sportsmanager_veranstaltung` ADD `spieltag_titel_zeigen` INT(4) NOT NULL DEFAULT '0' AFTER `unterteilung`;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$query = "ALTER TABLE `#__sportsmanager_team` ADD `teamname_kurz` VARCHAR(24) NOT NULL DEFAULT '' AFTER `teamname`;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$query = "UPDATE #__sportsmanager_einstellungen"
. "\n SET wert = '105'"
. "\n WHERE name = 'datenbank_version'";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
if ($datenbank_version < 106) {
$query = "ALTER TABLE `#__sportsmanager_verein` ADD `verstecken` INT(4) NOT NULL DEFAULT '0' AFTER `ausgetreten`;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$query = "UPDATE #__sportsmanager_einstellungen"
. "\n SET wert = '106'"
. "\n WHERE name = 'datenbank_version'";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
if ($datenbank_version < 107) {
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'anzahl_mitglieder_zeigen', wert = '0';";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'verband_anzeigen', wert = '1';";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'turnierbaum_zeigen', wert = '0';";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'spalte_mitglieder_zeigen', wert = '1';";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "UPDATE #__sportsmanager_einstellungen"
. "\n SET wert = '107'"
. "\n WHERE name = 'datenbank_version'";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
if ($datenbank_version < 108) {
$query = "DELETE t1 FROM #__sportsmanager_unbestaetigtes_ergebnis t1"
. "\n INNER JOIN #__sportsmanager_unbestaetigtes_ergebnis t2"
. "\n ON t1.begegnung_id = t2.begegnung_id"
. "\n AND t1.unbestaetigtes_ergebnis_id < t2.unbestaetigtes_ergebnis_id;";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = " ALTER TABLE `#__sportsmanager_unbestaetigtes_ergebnis`"
. "\n DROP INDEX `begegnung_id`, ADD UNIQUE `begegnung_id` (`begegnung_id`) USING BTREE;";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "UPDATE #__sportsmanager_einstellungen"
. "\n SET wert = '108'"
. "\n WHERE name = 'datenbank_version'";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
if ($datenbank_version < 109) {
$query = "ALTER TABLE #__sportsmanager_turnier ADD COLUMN `reminder_count` TINYINT DEFAULT '0'";
$db->setQuery($query);
if (!$db->execute()) { die($db->stderr(true)); }
// set all existing tournaments to 3 to prevent email flooding
$query = "UPDATE #__sportsmanager_turnier SET `reminder_count` = '3'";
$db->setQuery($query);
if (!$db->execute()) { die($db->stderr(true)); }
// 3: prevent email flood for past tournaments
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'enable_email_reminders', wert = '0';";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "UPDATE #__sportsmanager_einstellungen"
. "\n SET wert = '109'"
. "\n WHERE name = 'datenbank_version'";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
if ($datenbank_version < 110) {
$aktueller_verein_aktualisieren = true;
$query = "UPDATE #__sportsmanager_einstellungen"
. "\n SET wert = '110'"
. "\n WHERE name = 'datenbank_version'";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
if ($termin_aktionen_email_setzen) {
$query = "SELECT aktion_user_id, termin_aktion_id"
. "\n FROM #__sportsmanager_termin_aktion";
@@ -42,11 +42,14 @@ require_once JPATH_SITE . '/components/com_sportsmanager/views/sportsmanager/vie
require_once JPATH_SITE . '/components/com_sportsmanager/views/sportsmanager/view_admin.php';
require_once JPATH_SITE . '/components/com_sportsmanager/views/sportsmanager/view_ticker.php';
require_once JPATH_SITE . '/components/com_sportsmanager/util/image.php';
require_once JPATH_SITE . '/components/com_sportsmanager/util/email.php';
require_once JPATH_SITE . '/components/com_sportsmanager/database/update.php'; // will also include init.php and util.php
initDatabase();
updateDatabase();
sentEmailReminders();
if (isset($_POST['filter_saison_id']))
setcookie('sportsmanager_filter_saison_id', $_POST['filter_saison_id'], time() + (60 * 60 * 24));
else if (isset($_REQUEST['filter_saison_id']))
@@ -458,9 +461,18 @@ if ($task == "spielerbild") {
case 'admin_begegnungen_runde_erzeugen_form':
adminBegegnungenRundeErzeugenForm();
break;
case 'admin_begegnungen_pokalrunde_auslosen_form':
adminBegegnungenPokalrundeAuslosenForm();
break;
case 'admin_begegnungen_runde_erzeugen':
adminBegegnungenRundeErzeugen();
break;
case 'admin_begegnungen_pokalrunde_auslosen':
adminBegegnungenPokalrundeAuslosen();
break;
case 'admin_begegnungen_pokalrunde_setzliste':
adminBegegnungenPokalrundeSetzliste();
break;
case 'admin_begegnungen_alle_entfernen':
adminBegegnungenAlleEntfernen();
break;
@@ -724,8 +736,12 @@ if ($task == "spielerbild") {
break;
case 'verein_begegnungen_ical':
vereinBegegnungeniCal();
break;
case 'sort_by_vereinsname':
vereine("vereinsname");
break;
default:
vereine();
vereine("mitglieder");
break;
}
} else if ($content == "turniervoranmeldungen") {
@@ -1173,7 +1189,7 @@ function benutzerVeranstaltungModerator($veranstaltung_id = NULL): bool
return false;
$user_id = Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id;
$query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_veranstaltung INNER JOIN #__sportsmanager_veranstaltung ON veranstaltung_id = berechtigt_veranstaltung_id WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -14";
$query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_veranstaltung INNER JOIN #__sportsmanager_veranstaltung ON veranstaltung_id = berechtigt_veranstaltung_id WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -21";
if ($veranstaltung_id != NULL)
$query .= " AND berechtigt_veranstaltung_id = $veranstaltung_id";
$rows = loadObjectList($db, $query);
@@ -1191,7 +1207,7 @@ function benutzerVeranstaltungIdsModerator(): array
return array();
$user_id = Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id;
$query = "SELECT DISTINCT veranstaltung_id FROM #__sportsmanager_berechtigt_fuer_veranstaltung INNER JOIN #__sportsmanager_veranstaltung ON veranstaltung_id = berechtigt_veranstaltung_id WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -14";
$query = "SELECT DISTINCT veranstaltung_id FROM #__sportsmanager_berechtigt_fuer_veranstaltung INNER JOIN #__sportsmanager_veranstaltung ON veranstaltung_id = berechtigt_veranstaltung_id WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -21";
$rows = loadObjectList($db, $query);
$ids = array();
@@ -1209,7 +1225,7 @@ function benutzerTurnierModerator($turnier_id = NULL): bool
return false;
$user_id = Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id;
$query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_turnier INNER JOIN #__sportsmanager_turnier ON turnier_id = berechtigt_turnier_id WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -14";
$query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_turnier INNER JOIN #__sportsmanager_turnier ON turnier_id = berechtigt_turnier_id WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -21";
if ($turnier_id != NULL)
$query .= " AND berechtigt_turnier_id = $turnier_id";
$rows = loadObjectList($db, $query);
@@ -1372,6 +1388,7 @@ function aktuelleBegegnungen($pineingabe = FALSE): void
HTML_sportsmanager::aktuelleBegegnungenHeader($params->get('titel'), $params->get('beschreibung'), $ticker_anzeigen, $pineingabe_anzeigen);
if ($praesentation == 0) {
begegnungenAnzeigen(NULL, NULL, NULL, 7, true, true, false, Text::_('COM_SPORTSMANAGER_RUNNING_MATCHES'), true, true);
begegnungenAnzeigen(NULL, NULL, NULL, 7, false, true, true, Text::_('COM_SPORTSMANAGER_MATCHES_THE_LAST_7_DAYS'), true, true);
begegnungenAnzeigen(NULL, NULL, NULL, 14, true, false, true, Text::_('COM_SPORTSMANAGER_MATCHES_THE_NEXT_14_DAYS'), false, true);
administrationFooter();
@@ -1457,7 +1474,7 @@ function veranstaltungen(): void
'begegnungen' => begegnungenAnzeigen($veranstaltung, NULL, NULL, 0),
'tabelle' => NULL
];
if ($veranstaltung->tabellenwertung != 0) {
if (!in_array($veranstaltung->tabellenwertung, [0, -1, -3, -4]) || !$veranstaltung->platzierung_offen) {
$spieltag = null; // TODO: spieltag was not defined before, not sure what it should be
$competition['tabelle'] = tabelle($veranstaltung, $spieltag, true);
}
@@ -1471,7 +1488,7 @@ function veranstaltungen(): void
foreach ($veranstaltungen as $veranstaltung) {
if ($praesentation == 1 || $praesentation == 2)
echo "<td>\r\n";
if ($veranstaltung->tabellenwertung != 0 && ($veranstaltung->tabellenwertung != -1 || !$veranstaltung->platzierung_offen)) {
if (!in_array($veranstaltung->tabellenwertung, [0, -1, -3, -4]) || !$veranstaltung->platzierung_offen) {
HTML_sportsmanager::tabelleHeader($veranstaltung);
tabelle($veranstaltung, 0, false, $praesentation);
} else {
@@ -1516,7 +1533,8 @@ function veranstaltung(): void
$query = "SELECT saison_id, saisonbezeichnung"
. "\n FROM #__sportsmanager_veranstaltung"
. "\n INNER JOIN #__sportsmanager_saison USING (saison_id)"
. "\n WHERE status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_team INNER JOIN #__sportsmanager_begegnung ON heim_team_id = team_id WHERE #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id)" . kategorieFilter("AND #__sportsmanager_veranstaltung.kategorie IN")
. "\n WHERE status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_team INNER JOIN #__sportsmanager_begegnung ON heim_team_id = team_id"
. "\n WHERE #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id)" . kategorieFilter("AND #__sportsmanager_veranstaltung.kategorie IN")
. "\n GROUP BY saison_id"
. "\n ORDER BY saisonbezeichnung DESC";
$saisons = loadObjectList($db, $query);
@@ -1540,7 +1558,10 @@ function veranstaltung(): void
$spieltag = $jInput->get('spieltag', 0, 'INT');
// Veranstaltung ermitteln
$query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $id AND status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_team INNER JOIN #__sportsmanager_begegnung ON heim_team_id = team_id WHERE #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id)";
$query = "SELECT * FROM #__sportsmanager_veranstaltung"
. "\n WHERE veranstaltung_id = $id AND status > 0"
. "\n AND EXISTS(SELECT * FROM #__sportsmanager_team INNER JOIN #__sportsmanager_begegnung ON heim_team_id = team_id"
. "\n WHERE #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id)";
$rows = loadObjectList($db, $query);
if (count($rows) < 1)
die("Wrong id!");
@@ -1551,7 +1572,7 @@ function veranstaltung(): void
'veranstaltung' => $veranstaltung,
'begegnungen' => begegnungenAnzeigen($veranstaltung, NULL, NULL, 0)
];
if ($veranstaltung->tabellenwertung != 0) {
if (!in_array($veranstaltung->tabellenwertung, [0, -1, -3, -4])) {
$table = tabelle($veranstaltung, $spieltag, true);
$json['tabelle'] = $table['tabelle'];
$json['modus'] = $table['modus'];
@@ -1586,9 +1607,13 @@ function veranstaltung(): void
// Anzeigen
HTML_sportsmanager::veranstaltungHeaderAlone($veranstaltung, $vorherige_veranstaltung_id, $naechste_veranstaltung_id, $showSeasons, $saisons, $filter_saison_id);
if ($veranstaltung->tabellenwertung != 0)
if (!in_array($veranstaltung->tabellenwertung, [0, -1, -3, -4]))
tabelle($veranstaltung, $spieltag, true);
if (einstellungswert("turnierbaum_zeigen") && $veranstaltung->tabellenwertung == -4)
turnierbaumAnzeigen($veranstaltung);
begegnungenAnzeigen($veranstaltung, NULL, NULL, 0);
HTML_sportsmanager::iCalBegegnungen(SportsManagerURL('&task=veranstaltung_begegnungen_ical&id=' . $veranstaltung->veranstaltung_id));
}
@@ -1631,7 +1656,7 @@ function tabelle($veranstaltung, $spieltag, $alleine_angezeigt, $praesentation =
$teams = getTabelleAktuellerSpieltag($veranstaltung);
} else {
$teams = getTabelleSpieltag($veranstaltung,$spieltag);
if ($veranstaltung->direktervergleich AND $spieltag >= $anzahl_spieltage_komplett/2){
if ($veranstaltung->direktervergleich && $spieltag >= $anzahl_spieltage_komplett/2 && $anzahl_spieltage_komplett >= 3){
$teams = getTabelleDirekterVergleich($teams,$veranstaltung,$spieltag);
}
}
@@ -2079,6 +2104,300 @@ function getTabelleSpieltag($veranstaltung,$spieltag,$mannschaften = "",$offset_
jexit();
}
function erstelleSetzliste($teams): array
{
$seedingPairs[4] = [[1, 4], [2, 3]];
$seedingPairs[8] = [[1, 8], [4, 5], [3, 6], [2, 7]];
$seedingPairs[16] = [[1, 16], [8, 9], [5, 12], [4, 13],
[3, 14], [6, 11], [7, 10], [2, 15]];
$seedingPairs[32] = [[1, 32], [16, 17], [9, 24], [8, 25],
[5, 28], [12, 21], [13, 20], [4, 29],
[3, 30], [14, 19], [11, 22], [6, 27],
[7, 26], [10, 23], [15, 18], [2, 31]];
$seedingPairs[64] = [[1, 64], [32, 33], [17, 48], [16, 49],
[9, 56], [24, 41], [25, 40], [8, 57],
[5, 60], [28, 37], [21, 44], [12, 53],
[13, 52], [20, 45], [29, 36], [4, 61],
[3, 62], [30, 35], [19, 46], [14, 51],
[11, 54], [22, 43], [27, 38], [6, 59],
[7, 58], [26, 39], [23, 42], [10, 55],
[15, 50], [18, 47], [31, 34], [2, 63]];
$seedingPairs[128]= [[1,128], [64,65], [33,96], [32,97], [17,112], [48,81], [49,80], [16,113],
[9,120], [56,73], [41,88], [24,105], [25,104], [40,89], [57,72], [8,121],
[5,124], [60,69], [37,92], [28,101], [21,108], [44,85], [53,76], [12,117],
[13,116], [52,77], [45,84], [20,109], [29,100], [36,93], [61,68], [4,125],
[3,126], [62,67], [35,94], [30,99], [19,110], [46,83], [51,78], [14,115],
[11,118], [54,75], [43,86], [22,107], [27,102], [38,91], [59,70], [6,123],
[7,122], [58,71], [39,90], [26,103], [23,106], [42,87], [55,74], [10,119],
[15,114], [50,79], [47,82], [18,111], [31,98], [34,95], [63,66], [2,127]];
$matches = [];
// Teams durchschütteln
$keys = array_keys($teams);
shuffle($keys);
$mannschaften = [];
$nr = 0;
foreach ($keys as $key) {
$mannschaften[++$nr] = $teams[$key];
}
$anzahlTeams = count($mannschaften);
if ($anzahlTeams >= 1 && $anzahlTeams <= 4) {
$setzliste = $seedingPairs[4];
$runden = 2;
} else if ($anzahlTeams >= 5 && $anzahlTeams <= 8){
$setzliste = $seedingPairs[8];
$runden = 3;
} else if ($anzahlTeams >= 9 && $anzahlTeams <= 16){
$setzliste = $seedingPairs[16];
$runden = 4;
} else if ($anzahlTeams >= 17 && $anzahlTeams <= 32){
$setzliste = $seedingPairs[32];
$runden = 5;
} else if ($anzahlTeams >= 33 && $anzahlTeams <= 64){
$setzliste = $seedingPairs[64];
$runden = 6;
} else if ($anzahlTeams >= 65 && $anzahlTeams <= 128){
$setzliste = $seedingPairs[128];
$runden = 7;
} else {
$setzliste = [];
$runden = 0;
}
$turnier = [];
if ($runden > 1)
{
$nr = 0;
foreach($setzliste as $paarung){
$matches[1][++$nr]['heim'] = $mannschaften[$paarung[0]] ?? 'freilos';
$matches[1][$nr]['gast'] = $mannschaften[$paarung[1]] ?? 'freilos';
}
$turnier['runden'] = $runden;
$turnier['matches'] = $matches;
}
return $turnier;
}
function getSetzliste($anzahlRunden)
{
$maxTeams = pow(2, $anzahlRunden);
$seedingPairs[4] = [[1, 4], [2, 3]];
$seedingPairs[8] = [[1, 8], [4, 5], [3, 6], [2, 7]];
$seedingPairs[16] = [[1, 16], [8, 9], [5, 12], [4, 13],
[3, 14], [6, 11], [7, 10], [2, 15]];
$seedingPairs[32] = [[1, 32], [16, 17], [9, 24], [8, 25],
[5, 28], [12, 21], [13, 20], [4, 29],
[3, 30], [14, 19], [11, 22], [6, 27],
[7, 26], [10, 23], [15, 18], [2, 31]];
$seedingPairs[64] = [[1, 64], [32, 33], [17, 48], [16, 49],
[9, 56], [24, 41], [25, 40], [8, 57],
[5, 60], [28, 37], [21, 44], [12, 53],
[13, 52], [20, 45], [29, 36], [4, 61],
[3, 62], [30, 35], [19, 46], [14, 51],
[11, 54], [22, 43], [27, 38], [6, 59],
[7, 58], [26, 39], [23, 42], [10, 55],
[15, 50], [18, 47], [31, 34], [2, 63]];
$seedingPairs[128]= [[1,128], [64,65], [33,96], [32,97], [17,112], [48,81], [49,80], [16,113],
[9,120], [56,73], [41,88], [24,105], [25,104], [40,89], [57,72], [8,121],
[5,124], [60,69], [37,92], [28,101], [21,108], [44,85], [53,76], [12,117],
[13,116], [52,77], [45,84], [20,109], [29,100], [36,93], [61,68], [4,125],
[3,126], [62,67], [35,94], [30,99], [19,110], [46,83], [51,78], [14,115],
[11,118], [54,75], [43,86], [22,107], [27,102], [38,91], [59,70], [6,123],
[7,122], [58,71], [39,90], [26,103], [23,106], [42,87], [55,74], [10,119],
[15,114], [50,79], [47,82], [18,111], [31,98], [34,95], [63,66], [2,127]];
return $seedingPairs[$maxTeams];
}
function getAnzahlRunden($anzahlTeams)
{
if ($anzahlTeams >= 1 && $anzahlTeams <= 4) {
return 2;
} else if ($anzahlTeams >= 5 && $anzahlTeams <= 8){
return 3;
} else if ($anzahlTeams >= 9 && $anzahlTeams <= 16){
return 4;
} else if ($anzahlTeams >= 17 && $anzahlTeams <= 32){
return 5;
} else if ($anzahlTeams >= 33 && $anzahlTeams <= 64){
return 6;
} else if ($anzahlTeams >= 65 && $anzahlTeams <= 128){
return 7;
}
}
function getRundenTitel($anzahlTeams): string
{
if ($anzahlTeams >= 1 && $anzahlTeams <= 2)
return Text::_('COM_SPORTSMANAGER_FINAL');
if ($anzahlTeams >= 3 && $anzahlTeams <= 4)
return Text::_('COM_SPORTSMANAGER_HALF_FINAL');
if ($anzahlTeams >= 5 && $anzahlTeams <= 8)
return Text::_('COM_SPORTSMANAGER_QUARTER_FINAL');
if ($anzahlTeams >= 9 && $anzahlTeams <= 16)
return Text::_('COM_SPORTSMANAGER_ROUND_OF_16');
if ($anzahlTeams >= 17 && $anzahlTeams <= 32)
return Text::_('COM_SPORTSMANAGER_ROUND_OF_32_ALT');
if ($anzahlTeams >= 33 && $anzahlTeams <= 64)
return Text::_('COM_SPORTSMANAGER_ROUND_OF_64_ALT');;
if ($anzahlTeams >= 65 && $anzahlTeams <= 128)
return Text::_('COM_SPORTSMANAGER_ROUND_OF_128_ALT');
return "";
}
function turnierbaumAnzeigen($veranstaltung): void
{
$db = getDatabase();
$veranstaltungId = $veranstaltung->veranstaltung_id;
if ($veranstaltungId == 0) die("Missing id!");
//Infos Veranstaltung
$query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungId";
$rows = loadObjectList($db, $query);
if (count($rows) < 1) die("Wrong id!");
$veranstaltung = $rows[0];
//Alle Teams
$query = "SELECT *"
. "\n FROM #__sportsmanager_team"
. "\n WHERE veranstaltung_id = $veranstaltungId"
. "\n ORDER BY setzliste_nr;";
$teams_unformatiert = json_decode(json_encode(loadObjectList($db, $query)), true);
foreach($teams_unformatiert AS $team){
$teams[$team['setzliste_nr']] = $team;
}
$anzahlTeams = count($teams);
$anzahlRunden = getAnzahlRunden($anzahlTeams);
//Alle Begegnungen vorbelegen
$anzahlSpiele = pow(2, $anzahlRunden - 1);
for($runde_nr = 1; $runde_nr <= $anzahlRunden; $runde_nr++)
{
for($spiel_nr = 1; $spiel_nr <= $anzahlSpiele; $spiel_nr++)
{
$begegnungen[$runde_nr][$spiel_nr]['heim'] = "";
$begegnungen[$runde_nr][$spiel_nr]['gast'] = "";
$begegnungen[$runde_nr][$spiel_nr]['sieger'] = 0;
$begegnungen[$runde_nr][$spiel_nr]['link'] = "";
$begegnungen[$runde_nr][$spiel_nr]['id'] = "";
$begegnungen[$runde_nr][$spiel_nr]['erg_heim'] = "";
$begegnungen[$runde_nr][$spiel_nr]['erg_gast'] = "";
$begegnungen[$runde_nr][$spiel_nr]['tooltiptext'] = "";
}
$anzahlSpiele = $anzahlSpiele / 2;
}
//Alle Begegnungen aus der Setzliste
$setzliste = getSetzliste($anzahlRunden);
$spiel_nr = 0;
foreach($setzliste AS $setzung){
$spiel_nr++;
$begegnungen[1][$spiel_nr]['sieger'] = 0;
if ($setzung[0] <= $anzahlTeams) {
$begegnungen[1][$spiel_nr]['heim'] = htmlentities($teams[$setzung[0]]['teamname_kurz']) ?: htmlentities($teams[$setzung[0]]['teamname']);
} else {
$begegnungen[1][$spiel_nr]['heim'] = "freilos";
$begegnungen[1][$spiel_nr]['sieger'] = 2;
if ($spiel_nr %2)
$begegnungen[2][round($spiel_nr/2)]['heim'] = htmlentities($teams[$setzung[1]]['teamname_kurz']) ?: htmlentities($teams[$setzung[1]]['teamname']);
else
$begegnungen[2][round($spiel_nr/2)]['gast'] = htmlentities($teams[$setzung[1]]['teamname_kurz']) ?: htmlentities($teams[$setzung[1]]['teamname']);
}
if ($setzung[1] <= $anzahlTeams) {
$begegnungen[1][$spiel_nr]['gast'] = htmlentities($teams[$setzung[1]]['teamname_kurz']) ?: htmlentities($teams[$setzung[1]]['teamname']);
} else {
$begegnungen[1][$spiel_nr]['gast'] = "freilos";
$begegnungen[1][$spiel_nr]['sieger'] = 1;
if ($spiel_nr %2)
$begegnungen[2][round($spiel_nr/2)]['heim'] = htmlentities($teams[$setzung[0]]['teamname_kurz']) ?: htmlentities($teams[$setzung[0]]['teamname']);
else
$begegnungen[2][round($spiel_nr/2)]['gast'] = htmlentities($teams[$setzung[0]]['teamname_kurz']) ?: htmlentities($teams[$setzung[0]]['teamname']);
}
}
//Alle Begegnungen aus Datenbank
$query = "SELECT t4.bezeichnung AS Liga, t1.zeitpunkt AS Spielstart,"
. "\n if(t2.teamname_kurz <> '',t2.teamname_kurz, t2.teamname) AS Heim,"
. "\n if(t3.teamname_kurz <> '',t3.teamname_kurz, t3.teamname) AS Gast,"
. "\n t1.heim_team_id, t1.gast_team_id, t1.spieltag_titel AS Runde, t1.spieltag AS Spieltag_Nr,"
. "\n t1.spiel_nr AS Spiel_Nr, t1.heim_punkte AS Heim_Tore, t1.gast_punkte AS Gast_Tore,"
. "\n t1.heim_spielpunkte AS Heim_Satzpunkte, t1.gast_spielpunkte AS Gast_Satzpunkte, t1.begegnung_id"
. "\n FROM #__sportsmanager_begegnung AS t1"
. "\n LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id"
. "\n LEFT JOIN #__sportsmanager_team AS t3 ON t1.gast_team_id = t3.team_id"
. "\n LEFT JOIN #__sportsmanager_veranstaltung AS t4 ON t2.veranstaltung_id = t4.veranstaltung_id"
. "\n WHERE t4.veranstaltung_id = $veranstaltungId"
. "\n ORDER BY t4.veranstaltung_id, t1.spieltag, t1.spiel_nr;";
$begegnungen_unformatiert = json_decode(json_encode(loadObjectList($db, $query)), true);
foreach($begegnungen_unformatiert as $begegnung)
{
$begegnungen[$begegnung['Spieltag_Nr']][$begegnung['Spiel_Nr']]['Id'] = $begegnung['begegnung_id'];
$begegnungen[$begegnung['Spieltag_Nr']][$begegnung['Spiel_Nr']]['heim'] = htmlentities($begegnung['Heim']);
$begegnungen[$begegnung['Spieltag_Nr']][$begegnung['Spiel_Nr']]['gast'] = htmlentities($begegnung['Gast']);
$begegnungen[$begegnung['Spieltag_Nr']][$begegnung['Spiel_Nr']]['erg_heim'] = $begegnung['Heim_Satzpunkte'];
$begegnungen[$begegnung['Spieltag_Nr']][$begegnung['Spiel_Nr']]['erg_gast'] = $begegnung['Gast_Satzpunkte'];
$begegnungen[$begegnung['Spieltag_Nr']][$begegnung['Spiel_Nr']]['link'] = SportsManagerURL('&task=begegnung_spielplan&veranstaltungid=' . $veranstaltungId . '&id=' . $begegnung['begegnung_id']);
$tooltiptext = $begegnung['Runde'] . ": " . htmlentities($begegnung['Heim']) . " vs. " . htmlentities($begegnung['Gast']);
if ($begegnung['Heim_Satzpunkte'] > 0 || $begegnung['Gast_Satzpunkte'] > 0)
$tooltiptext .= " - " . $begegnung['Heim_Satzpunkte'] . " : " . $begegnung['Gast_Satzpunkte'];
$begegnungen[$begegnung['Spieltag_Nr']][$begegnung['Spiel_Nr']]['tooltiptext'] = $tooltiptext;
if ($begegnung['Heim_Satzpunkte'] > $begegnung['Gast_Satzpunkte']) {
$begegnungen[$begegnung['Spieltag_Nr']][$begegnung['Spiel_Nr']]['sieger'] = 1;
if ($begegnung['Spieltag_Nr'] < $anzahlRunden){
if (round($begegnung['Spiel_Nr'] % 2))
$begegnungen[$begegnung['Spieltag_Nr'] + 1][round($begegnung['Spiel_Nr'] / 2)]['heim'] = htmlentities($begegnung['Heim']);
else
$begegnungen[$begegnung['Spieltag_Nr'] + 1][round($begegnung['Spiel_Nr'] / 2)]['gast'] = htmlentities($begegnung['Heim']);
}
} else
if ($begegnung['Heim_Satzpunkte'] < $begegnung['Gast_Satzpunkte']) {
$begegnungen[$begegnung['Spieltag_Nr']][$begegnung['Spiel_Nr']]['sieger'] = 2;
if ($begegnung['Spieltag_Nr'] < $anzahlRunden){
if (round($begegnung['Spiel_Nr'] % 2))
$begegnungen[$begegnung['Spieltag_Nr'] + 1][round($begegnung['Spiel_Nr'] / 2)]['heim'] = htmlentities($begegnung['Gast']);
else
$begegnungen[$begegnung['Spieltag_Nr'] + 1][round($begegnung['Spiel_Nr'] / 2)]['gast'] = htmlentities($begegnung['Gast']);
}
} else {
$begegnungen[$begegnung['Spieltag_Nr']][$begegnung['Spiel_Nr']]['sieger'] = 0;
}
}
$veranstaltung->anzahlRunden = $anzahlRunden;
HTML_sportsmanager::turnierbaumAnzeigen($veranstaltung,$begegnungen);
}
function begegnungenAnzeigen($veranstaltung, $verein_id, $spielort_id, $zeitfenster, $ausgetragene_filtern = false, $auszutragende_filtern = false, $zwischenergebnisse_filtern = false, $titel = "", $umgekehrte_reihenfolge = false, $aus_uebersicht = false, $praesentation = 0, $year = NULL, $month = NULL)
{
$db = getDatabase();
@@ -2168,7 +2487,8 @@ function begegnungenAnzeigen($veranstaltung, $verein_id, $spielort_id, $zeitfens
. "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t2.veranstaltung_id = t5.veranstaltung_id"
. "\n LEFT JOIN #__sportsmanager_verschieberegel AS t6 ON t5.verschieberegel_id = t6.verschieberegel_id"
. "\n WHERE t5.status > 0" . kategorieFilter("AND t5.kategorie IN") . " AND t2.veranstaltung_id = $veranstaltung->veranstaltung_id" . ($zeitfenster > 0 ? " AND (ABS(DATEDIFF(zeitpunkt, CURDATE())) <= $zeitfenster OR (heim_punkte = 0 AND gast_punkte = 0 AND (SELECT IF(aktion NOT IN (0, 3, 4), 0, 1) FROM #__sportsmanager_begegnung_historie AS tt1 USE INDEX (begegnung_id) WHERE tt1.begegnung_id = t1.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) = 1))" : "") . ($ausgetragene_filtern ? " AND ISNULL(heim_punkte) AND ISNULL(gast_punkte)" : "") . ($auszutragende_filtern ? " AND (heim_punkte != 0 OR gast_punkte != 0)" : "")
. "\n ORDER BY " . ((($veranstaltung->unterteilung == 0 || $veranstaltung->unterteilung == 1) && $zeitfenster == 0) ? ("t1.spieltag" . ($umgekehrte_reihenfolge ? " DESC" : "") . ", s1.name, ") : "") . "t1.zeitpunkt" . ($umgekehrte_reihenfolge ? " DESC" : "") . ", heim_name";
. "\n ORDER BY " . ((($veranstaltung->unterteilung == 0 || $veranstaltung->unterteilung == 1) && $zeitfenster == 0) ? ("t1.spieltag" . ($umgekehrte_reihenfolge ? " DESC" : "") . ", t1.spiel_nr, s1.name, ") : "") . "t1.zeitpunkt" . ($umgekehrte_reihenfolge ? " DESC" : "") . ", heim_name";
$begegnungen = loadObjectList($db, $query);
$modus_id = $veranstaltung->modus_id;
@@ -2550,17 +2870,32 @@ function spieler(): void
$query .= ", teamname";
$query .= ", vereinsname, veranstalterbezeichnung"
. "\n FROM #__sportsmanager_spieler";
if (!empty($kategorieFilter) || !empty($veranstalterFilter))
$query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) INNER JOIN #__sportsmanager_veranstalter USING (veranstalter_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten" . $veranstalterFilter . $kategorieFilter . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)";
if ($veranstaltungid != 0)
$query .= "\n INNER JOIN (SELECT spieler_id, teamname FROM #__sportsmanager_veranstaltung INNER JOIN #__sportsmanager_team USING (veranstaltung_id) INNER JOIN #__sportsmanager_mitglied_von_team USING (team_id) WHERE status > 0 AND veranstaltung_id = $veranstaltungid AND NOT ausgetreten GROUP BY spieler_id ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, teamname) AS mannschaftsmitglied USING (spieler_id)";
if (!empty($kategorieFilter) || !empty($veranstalterFilter)){
$query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein"
. "\n INNER JOIN #__sportsmanager_verein USING (verein_id)"
. "\n INNER JOIN #__sportsmanager_veranstalter USING (veranstalter_id)"
. "\n WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten"
. "\n AND NOT #__sportsmanager_verein.ausgetreten" . $veranstalterFilter . $kategorieFilter
. "\n GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)";
}
if ($veranstaltungid != 0){
$query .= "\n INNER JOIN (SELECT spieler_id, teamname FROM #__sportsmanager_veranstaltung"
. "\n INNER JOIN #__sportsmanager_team USING (veranstaltung_id)"
. "\n INNER JOIN #__sportsmanager_mitglied_von_team USING (team_id)"
. "\n WHERE status > 0 AND veranstaltung_id = $veranstaltungid AND NOT ausgetreten"
. "\n GROUP BY spieler_id"
. "\n ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, teamname) AS mannschaftsmitglied"
. "\n USING (spieler_id)";
}
$query .= "\n LEFT JOIN #__sportsmanager_verein ON aktueller_verein_id = verein_id"
. "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)"
. "\n WHERE NOT ISNULL(aktueller_verein_id)";
. "\n LEFT JOIN #__sportsmanager_mitglied_von_verein USING (spieler_id)"
. "\n WHERE NOT ISNULL(aktueller_verein_id) AND #__sportsmanager_mitglied_von_verein.mitgliedsstatus IN (1,2)";
if (!empty($search))
$query .= "\n AND (CONCAT_WS(', ', nachname, vorname) LIKE '$searchEscapedWildcards' OR CONCAT_WS(' ', vorname, nachname) LIKE '$searchEscapedWildcards' OR spielernr = '$searchEscaped' OR lizenznr = '$searchEscaped')";
if ($einstufungid != 0)
$query .= "\n AND (einstufung_allgemein_id = $einstufungid OR einstufung_einzel_id = $einstufungid OR einstufung_doppel_id = $einstufungid)";
$query .= "\n GROUP BY spieler_id";
if (!empty($kategorie))
$query .= "\n HAVING kategorie = '" . $db->escape($kategorie) . "'";
$query .= "\n ORDER BY " . $sortierung_query
@@ -2679,7 +3014,11 @@ function spielerDetails(): void
$query = "SELECT vereinsname"
. "\n FROM #__sportsmanager_mitglied_von_verein, #__sportsmanager_verein"
. "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)"
. "\n WHERE #__sportsmanager_mitglied_von_verein.spieler_id = $id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id"
. "\n WHERE #__sportsmanager_mitglied_von_verein.spieler_id = $id "
. "\n AND NOT #__sportsmanager_verein.ausgetreten"
. "\n AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten"
. "\n AND #__sportsmanager_mitglied_von_verein.mitgliedsstatus IN (1,2)"
. "\n AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id"
. "\n ORDER BY vereinsname";
$vereine = loadObjectList($db, $query);
@@ -2687,7 +3026,12 @@ function spielerDetails(): void
$query = "SELECT veranstalterbezeichnung"
. "\n FROM #__sportsmanager_mitglied_von_verein, #__sportsmanager_verein"
. "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)"
. "\n WHERE #__sportsmanager_mitglied_von_verein.spieler_id = $id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id"
. "\n WHERE #__sportsmanager_mitglied_von_verein.spieler_id = $id"
. "\n AND NOT #__sportsmanager_verein.ausgetreten"
. "\n AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten"
. "\n AND #__sportsmanager_mitglied_von_verein.mitgliedsstatus IN (1,2)"
. "\n AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id"
. "\n GROUP BY veranstalterbezeichnung"
. "\n ORDER BY veranstalterbezeichnung";
$veranstalter = loadObjectList($db, $query);
@@ -3466,23 +3810,30 @@ function mannschaftDetails($ansicht_vereinigt, $unabhaengige_ansicht = false): v
die();
}
function vereine(): void
function vereine($sort): void
{
$db = getDatabase();
global $params;
$organisationAnzeigen = einstellungswert('verband_anzeigen');
$spalteMitgliederAnzeigen = einstellungswert('spalte_mitglieder_zeigen');
if (!$spalteMitgliederAnzeigen) $sort = "vereinsname";
$query = "SELECT t1.verein_id, t1.vereinsname, t1.vereinssitz,"
. "\n t2.veranstalterbezeichnung, COUNT(*) As mitglieder"
. "\n FROM #__sportsmanager_verein AS t1"
. "\n LEFT JOIN #__sportsmanager_veranstalter AS t2 USING (veranstalter_id)"
. "\n LEFT JOIN #__sportsmanager_mitglied_von_verein AS t3 USING (verein_id)"
. "\n WHERE t1.ausgetreten = 0 AND t1.verstecken = 0 AND t3.ausgetreten = 0"
. "\n GROUP BY t1.verein_id";
if ($sort == "mitglieder"){
$query .= "\n HAVING mitglieder >= " . einstellungswert('anzahl_mitglieder_zeigen');
$query .= "\n ORDER BY mitglieder DESC;";
}
if ($sort == "vereinsname"){
$query .= "\n ORDER BY t1.vereinsname;";
}
$query = "SELECT COUNT(DISTINCT veranstalter_id) FROM #__sportsmanager_verein WHERE NOT ausgetreten";
$organisationAnzeigen = loadResult($db, $query) > 1;
$query = "SELECT *, veranstalterbezeichnung"
. "\n FROM #__sportsmanager_verein"
. "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)"
. "\n WHERE NOT ausgetreten" . kategorieFilter("AND #__sportsmanager_veranstalter.kategorie IN")
. "\n ORDER BY IF(ISNULL(#__sportsmanager_veranstalter.veranstalter_id), 1, 0), veranstalterbezeichnung, vereinsname";
$vereine = loadObjectList($db, $query);
HTML_sportsmanager::vereine($params->get('titel'), $params->get('beschreibung'), $vereine, $organisationAnzeigen);
HTML_sportsmanager::vereine($params->get('titel'), $params->get('beschreibung'), $vereine, $organisationAnzeigen, $spalteMitgliederAnzeigen);
administrationFooter();
}
@@ -3510,7 +3861,12 @@ function vereinDetails(): void
$verein = $rows[0];
// Mitglieder ermitteln
$query = "SELECT * FROM #__sportsmanager_mitglied_von_verein LEFT JOIN #__sportsmanager_spieler ON #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id WHERE #__sportsmanager_mitglied_von_verein.verein_id = $verein->verein_id AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten ORDER BY nachname, vorname";
$query = "SELECT * FROM #__sportsmanager_mitglied_von_verein"
. "\n LEFT JOIN #__sportsmanager_spieler ON #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id"
. "\n WHERE #__sportsmanager_mitglied_von_verein.verein_id = $verein->verein_id"
. "\n AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten"
. "\n AND #__sportsmanager_mitglied_von_verein.mitgliedsstatus IN (1,2)"
. "\n ORDER BY nachname, vorname;";
$mitglieder = loadObjectList($db, $query);
$query = "SELECT vorname, nachname, email"
@@ -3520,6 +3876,7 @@ function vereinDetails(): void
. "\n ORDER BY vorname, nachname, email";
$rows = loadObjectList($db, $query);
// Mailverteiler ermitteln
$mailverteiler = array();
$mailverteiler["u"] = "";
$mailverteiler["p"] = "";
@@ -3575,10 +3932,11 @@ function vereinDetails(): void
$fruehere_teams = loadObjectList($db, $query);
HTML_sportsmanager::vereinDetails($verein, $mitglieder, $vereinsansprechpartner, $aktuelle_teams, $vorheriger_verein_id, $naechster_verein_id, $vereins_moderator, $details_anzeigen, $ansprechpartner_anzeigen);
begegnungenAnzeigen(NULL, $id, NULL, 92, true, true, false, Text::_('COM_SPORTSMANAGER_RUNNING_MATCHES'), true, true);
begegnungenAnzeigen(NULL, $id, NULL, 62, true, false, true, "Begegnungen der kommenden zwei Monate", false, true);
begegnungenAnzeigen(NULL, $id, NULL, 366, false, true, true, "Begegnungen des vergangenen Jahres", true, true);
HTML_sportsmanager::iCalBegegnungen(SportsManagerURL('&task=verein_begegnungen_ical&id=' . $verein->verein_id));
// Links in Begegnungen sind fehlerhaft bei Aufruf aus vereinDetails (Jürgen Meyer, 10.10.2025)
// begegnungenAnzeigen(NULL, $id, NULL, 92, true, true, false, Text::_('COM_SPORTSMANAGER_RUNNING_MATCHES'), true, true);
// begegnungenAnzeigen(NULL, $id, NULL, 62, true, false, true, "Begegnungen der kommenden zwei Monate", false, true);
// begegnungenAnzeigen(NULL, $id, NULL, 366, false, true, true, "Begegnungen des vergangenen Jahres", true, true);
// HTML_sportsmanager::iCalBegegnungen(SportsManagerURL('&task=verein_begegnungen_ical&id=' . $verein->verein_id));
HTML_sportsmanager::vereinDetailsErgaenzung($mailverteiler, $fruehere_teams, $vereins_moderator);
}
@@ -4349,8 +4707,15 @@ function teamstatistikAktualisieren($geaenderte_veranstaltung_id = 0, $geaendert
$anzahl_spieltage_gespielt = loadResult($db, $query);
$aktueller_spieltag = count($spieltage) > 0 ? $spieltage[0]->spieltag : 0;
//Platzierung ueberschreiben. Jetzige Platzierung kommt aus Tabelle und koennte falsch sein.
$platz = 0;
foreach($teams AS $team)
{
$team->platz = ++$platz;
}
// Direkter Vergleich, wenn mindestens die Hälfte der Spieltage gespielt sind.
if ($veranstaltung->direktervergleich AND $anzahl_spieltage_gespielt >= $anzahl_spieltage_komplett/2){
if ($veranstaltung->direktervergleich && $anzahl_spieltage_gespielt >= $anzahl_spieltage_komplett/2 && $anzahl_spieltage_komplett >= 3){
$teams = getTabelleDirekterVergleich($teams,$veranstaltung,$aktueller_spieltag);
}
@@ -4474,7 +4839,6 @@ function teamstatistikAktualisieren($geaenderte_veranstaltung_id = 0, $geaendert
function ranglisteAktualisieren($geaenderte_rangliste_id = 0, $geaenderte_turnierdisziplin_id = 0, $geaenderte_spieler_id = 0, $berechnungen_auswerten = FALSE): void
{
$db = getDatabase();
if ($geaenderte_spieler_id != 0) {
$query = "SELECT DISTINCT #__sportsmanager_rangliste.*"
. "\n FROM #__sportsmanager_turniermeldung_spieler"
@@ -4483,6 +4847,12 @@ function ranglisteAktualisieren($geaenderte_rangliste_id = 0, $geaenderte_turnie
. "\n INNER JOIN #__sportsmanager_rangliste_turnierdisziplin USING (turnierdisziplin_id)"
. "\n INNER JOIN #__sportsmanager_rangliste USING (rangliste_id)"
. "\n WHERE spieler_id = $geaenderte_spieler_id AND rundenstufe = 0";
} else if ($berechnungen_auswerten) {
$session_id = redirectRequestGetSessionId();
$query = "SELECT DISTINCT #__sportsmanager_rangliste.*"
. "\n FROM #__sportsmanager_berechnung"
. "\n INNER JOIN #__sportsmanager_rangliste ON id = rangliste_id"
. "\n WHERE typ = 'rangliste' AND " . (empty($session_id) ? ("session_id < SUBTIME(NOW(), '00:10:00')") : ("session_id = '" . $session_id . "'"));
} else if ($geaenderte_rangliste_id != 0) {
$query = "SELECT * FROM #__sportsmanager_rangliste"
. "\n WHERE rangliste_id = $geaenderte_rangliste_id";
@@ -4584,6 +4954,8 @@ function ranglisteAktualisieren($geaenderte_rangliste_id = 0, $geaenderte_turnie
$db->transactionStart();
$meldungen = array();
$Anzahl = 0;
$query = "INSERT INTO #__sportsmanager_rangliste_turnierdisziplin_punkte (rangliste_id, spieler_id, turnierdisziplin_id, platz, punkte) VALUES ";
foreach ($turnierplatzierungen as $index => $turnierplatzierung) {
if (empty($turnierplatzierung->spieler_id))
continue;
@@ -4675,7 +5047,12 @@ function ranglisteAktualisieren($geaenderte_rangliste_id = 0, $geaenderte_turnie
}
}
$punkte[$turnierplatzierung->spieler_id][] = $p;
$query = "INSERT INTO #__sportsmanager_rangliste_turnierdisziplin_punkte (rangliste_id, spieler_id, turnierdisziplin_id, platz, punkte) VALUES ('$rangliste_id', '$turnierplatzierung->spieler_id', '$turnierdisziplin->turnierdisziplin_id', '$turnierplatzierung->platz', '$p') ON DUPLICATE KEY UPDATE punkte = punkte + VALUES(punkte);";
if ($Anzahl > 0) $query .= ",";
$query .= "('$rangliste_id', '$turnierplatzierung->spieler_id', '$turnierdisziplin->turnierdisziplin_id', '$turnierplatzierung->platz', '$p')";
$Anzahl++;
}
$query .= " ON DUPLICATE KEY UPDATE punkte = punkte + VALUES(punkte);";
if ($Anzahl > 0){
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
@@ -4701,21 +5078,25 @@ function ranglisteAktualisieren($geaenderte_rangliste_id = 0, $geaenderte_turnie
$platz = 1;
$tatsaechlicher_platz = 1;
$spieler_punkte = 0;
$Anzahl = 0;
$db->transactionStart();
$query = "INSERT INTO #__sportsmanager_rangliste_punkte(rangliste_id, spieler_id, punkte, teilnahmen, platz) VALUES ";
foreach ($punkte_summe as $spieler_id => $spieler_punkte_summe) {
$spieler_teilnahmen = $teilnahmen[$spieler_id];
if ($platz == 1 || $spieler_punkte != $spieler_punkte_summe)
$tatsaechlicher_platz = $platz;
$query = "INSERT INTO #__sportsmanager_rangliste_punkte (rangliste_id, spieler_id, punkte, teilnahmen, platz) VALUES ('$rangliste_id', '$spieler_id', '$spieler_punkte_summe', '$spieler_teilnahmen', '$tatsaechlicher_platz') ON DUPLICATE KEY UPDATE punkte = VALUES(punkte), teilnahmen = VALUES(teilnahmen), platz = VALUES(platz);";
if ($Anzahl > 0) $query .= ",";
$query .= "('$rangliste_id', '$spieler_id', '$spieler_punkte_summe', '$spieler_teilnahmen', '$tatsaechlicher_platz') ";
$Anzahl++;
$spieler_punkte = $spieler_punkte_summe;
$platz++;
}
$query .= " ON DUPLICATE KEY UPDATE punkte = VALUES(punkte), teilnahmen = VALUES(teilnahmen), platz = VALUES(platz);";
if ($Anzahl > 0){
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$spieler_punkte = $spieler_punkte_summe;
$platz++;
}
$db->transactionCommit();
@@ -5218,7 +5599,13 @@ function aktuellerVereinAktualisieren($spieler_id = 0): void
$db = getDatabase();
$query = "UPDATE #__sportsmanager_spieler"
. "\n LEFT JOIN (SELECT spieler_id, verein_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"
. "\n LEFT JOIN (SELECT spieler_id, verein_id FROM #__sportsmanager_mitglied_von_verein"
. "\n INNER JOIN #__sportsmanager_verein USING (verein_id)"
. "\n WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten"
. "\n AND #__sportsmanager_mitglied_von_verein.mitgliedsstatus IN (1,2)"
. "\n AND NOT #__sportsmanager_verein.ausgetreten"
. "\n GROUP BY spieler_id"
. "\n ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"
. "\n SET aktueller_verein_id = mitgliedschaft.verein_id";
if ($spieler_id != 0)
$query .= "\n WHERE spieler_id = $spieler_id";
@@ -201,7 +201,7 @@ function kategorieFilter($prefix, $suffix = ""): string
function turnierFilter($prefix): string
{
$user_id = isExternalDatabase() ? 0 : Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id;
return " " . $prefix . " (SELECT berechtigt_turnier_id FROM #__sportsmanager_berechtigt_fuer_turnier WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -14) ";
return " " . $prefix . " (SELECT berechtigt_turnier_id FROM #__sportsmanager_berechtigt_fuer_turnier WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -21) ";
}
function vereinFilter($prefix): string
@@ -219,7 +219,7 @@ function veranstalterFilter($prefix): string
function veranstaltungFilter($prefix): string
{
$user_id = isExternalDatabase() ? 0 : Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id;
return " " . $prefix . " (SELECT berechtigt_veranstaltung_id FROM #__sportsmanager_berechtigt_fuer_veranstaltung INNER JOIN #__sportsmanager_veranstaltung ON veranstaltung_id = berechtigt_veranstaltung_id WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -14) ";
return " " . $prefix . " (SELECT berechtigt_veranstaltung_id FROM #__sportsmanager_berechtigt_fuer_veranstaltung INNER JOIN #__sportsmanager_veranstaltung ON veranstaltung_id = berechtigt_veranstaltung_id WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -21) ";
}
// Berechnet Datum zum Montag der ersten Kalenderwoche eines Jahres
@@ -0,0 +1,125 @@
<?php
use Joomla\CMS\Factory;
use Joomla\CMS\Log\Log;
use Joomla\CMS\Mail\MailerFactoryInterface;
use Joomla\CMS\Application\SiteApplication;
/**
* @since 2.2
* @throws Exception
*/
function sentEmailReminders(): void
{
$app = Factory::getContainer()->get(SiteApplication::class);
$db = getDatabase();
$query = $db->getQuery(true)
->select('wert')
->from('#__sportsmanager_einstellungen')
->where('name = ' . $db->quote('enable_email_reminders'));
$row = loadResult($db, $query);
if (!$row) {
return; // quit when email reminders are disabled
}
$query = $db->getQuery(true)
->select('tournament.turnier_id, tournament.turnierbezeichnung, tournament.letzter_tag, tournament.reminder_count, GROUP_CONCAT(user.email SEPARATOR ", ") as emails')
->from($db->quoteName('#__sportsmanager_turnier', 'tournament'))
->join('INNER', $db->quoteName('#__sportsmanager_berechtigt_fuer_turnier', 'entitled') . ' ON tournament.turnier_id = entitled.berechtigt_turnier_id')
->join('INNER', $db->quoteName('#__users', 'user') . ' ON entitled.berechtigt_user_id = user.id')
->where('tournament.reminder_count < 3')
->group('tournament.turnier_id, tournament.turnierbezeichnung');
$rows = loadObjectList($db, $query);
if(!empty($rows)) {
$mailFrom = $app->getCfg('mailfrom');
$fromName = $app->getCfg('fromname');
$mailer = Factory::getContainer()->get(MailerFactoryInterface::class)->createMailer();
$mailer->setSender($mailFrom, $fromName);
foreach ($rows as $row) {
$currentReminder = $row->reminder_count + 1;
if (hasResultsAlready($db, $row)) {
updateDBReminders($db, $row, 3); // do not sent any more reminders
continue;
}
if (!isset($row->emails) || $row->emails == "" || $row->emails == NULL) {
Log::add('can\'t sent ' . $currentReminder .'. email reminder for tournament ' . $row->turnierbezeichnung . ': no recipient set', Log::WARNING, 'com_sportsmanager');
continue;
}
$now = new DateTime();
$last_day = new DateTime($row->letzter_tag);
$last_day->modify('+1 day'); // start to count at the end of the day, not at the beginning
$diff = $now->getTimestamp() - $last_day->getTimestamp();
$reminderDelays = [
1 => 24*60*60, // 24h
2 => 3*24*60*60, // 3d
3 => 13*24*60*60 // 13d
];
foreach ($reminderDelays as $count => $delay) {
if ($diff >= $delay && $row->reminder_count < $count) {
$subject = ($row->reminder_count == 2 ? "Letzte " : "") . "Erinnerung: " . $row->turnierbezeichnung . " Ergebnisse einreichen!";
$body = "Hi,"
. "\n\nDies ist die " . $currentReminder . ". " . ($row->reminder_count == 2 ? "*und damit letzte* " : "") . "Erinnerung die Turnierergebnisse einzureichen."
. "\n\nTurnier: " . $row->turnierbezeichnung
. "\nTurnierende: " . FormatiertesDatum($row->letzter_tag, false, false)
. "\n\nLaut Turnierordnung müssen die Ergebnisse spätestens 24 Stunden nach Turnierende eingetragen werden. Bitte reich die Ergebnisse umgehend nach."
. "\n\nDu erhältst diese Mail, weil du als Berechtigter für das Turnier eingetragen wurdest. Falls du nicht der Veranstalter bist, leite diese Email bitte entsprechend weiter."
. "\n\nHochladen der Ergebnisse über " . SportsManagerURL('&task=admin_turnierdisziplinen&turnierid=' . $row->turnier_id, -1) . ".";
$mailer->setSubject($subject);
$mailer->setBody($body);
$emailArray = explode(", ", $row->emails);
foreach ($emailArray as $email) {
$mailer->addBcc($email);
}
$mailer->send();
updateDBReminders($db, $currentReminder, $row->turnier_id);
}
}
}
}
}
function updateDBReminders($db, $reminder, $tournamentId): void
{
$query = $db->getQuery(true)
->update($db->quoteName('#__sportsmanager_turnier'))
->set($db->quoteName('reminder_count') . ' = ' . $db->quote($reminder))
->where($db->quoteName('turnier_id') . ' = ' . $db->quote($tournamentId));
$db->setQuery($query);
$db->execute();
}
/**
* checks if a tournament has at least one result entry for a discipline
* @param $db
* @param $row mixed tournament entry
* @return bool true if at least one result is given, else false
* @since 2.2
*/
function hasResultsAlready($db, mixed $row): bool
{
$subQuery = $db->getQuery(true)
->select($db->quoteName('turnierdisziplin_id'))
->from($db->quoteName('#__sportsmanager_turnierdisziplin'))
->where($db->quoteName('turnier_id') . ' = ' . $db->quote($row->turnier_id));
$query = $db->getQuery(true)
->select('COUNT(*) AS count')
->from($db->quoteName('#__sportsmanager_turniermeldung', 'tm'))
->where($db->quoteName('tm.turnierdisziplin_id') . ' IN (' . $subQuery . ')');
$result = loadResult($db, $query);
return $result && $result[0]->count > 0;
}
@@ -356,7 +356,7 @@ function bildURL($typ, $id, $fixed_width = 0, $fixed_height = 0, $max_width = 0,
#crop=250,250,left
#crop=250,250,right
*/
function yoothemeBild($typ, $id, $alternativ, $resize = '', $zusatz = ""): ?string
function yoothemeBild($typ, $id, $alternativ, $zusatz = ""): ?string
{
$typ_exploded = explode("/", $typ);
$typ = $typ_exploded[0];
@@ -382,7 +382,7 @@ function yoothemeBild($typ, $id, $alternativ, $resize = '', $zusatz = ""): ?stri
$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 . '" ' . $zusatz . ' uk-img />';
}
function bildHTML($typ, $id, $fixed_width = 0, $fixed_height = 0, $max_width = 0, $max_height = 0, $zusatz = "", $alternativ = ""): ?string
@@ -444,7 +444,14 @@ static function turniere($turniere): void
if (!empty($turnier->disziplinen)) {
?>
<br/>
<small><?php echo $turnier->disziplinen; ?></small>
<small>
<?php
$parts = preg_split('/,(?![^()]*\))/m', $turnier->disziplinen);
$parts = array_map('trim', $parts); // remove extra spaces
foreach ($parts as $discipline) {
echo $discipline . "<br>";
} ?>
</small>
<?php
}
?>
@@ -1017,7 +1024,9 @@ static function turnierdisziplin($turnier, $disziplin, $meldungen, $meldungenSpi
static function begegnungenAnzeigen($veranstaltung, $modus, $rows, $zeitfenster, $titel, $aus_uebersicht, $praesentation = 0): void
{
global $params;
?>
<style>td{padding: 6px;}</style>
<?php
if (count($rows) > 0) {
$zeitpunkt_anzeigen = false;
foreach ($rows as $begegnung) {
@@ -1094,6 +1103,8 @@ static function begegnungenAnzeigen($veranstaltung, $modus, $rows, $zeitfenster,
<th nowrap style='text-align: left; font-size: 70%; font-style: italic;'>
<?php
echo htmlentities_utf8(Rundenbezeichnung($spieltag, $veranstaltung->unterteilung == 0));
if (!empty($row->spieltag_titel) && !empty($veranstaltung->spieltag_titel_zeigen))
echo "&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;" . $row->spieltag_titel;
if (!empty($spielort_name))
echo "<br />" . htmlentities_utf8($spielort_name);
?>
@@ -1226,6 +1237,143 @@ static function begegnungenAnzeigen($veranstaltung, $modus, $rows, $zeitfenster,
}
}
static function turnierbaumAnzeigen($veranstaltung,$begegnungen): void
{
$hoehe = 50;
$breite = 200;
$abstand = 20;
$anzahlRunden = $veranstaltung->anzahlRunden;
$matches = count($begegnungen[1]);
$mannschaften = pow(2, $anzahlRunden - 1) * 2;
$fontsize = 11;
?>
<style>
.container {
position: relative;
text-align: left;
height: <?php echo $matches * $hoehe + 50; ?>px;
width: <?php echo $anzahlRunden * ($breite + $abstand); ?>px;
overflow: auto;
z-index: 1;
}
.linien{
position: absolute;
height: <?php echo $matches * $hoehe; ?>px;
width: <?php echo $anzahlRunden * ($breite + $abstand); ?>px;
top: 0;
left: 0;
stroke: lightgray;
stroke-width: 2;
}
.matchbox {
position: absolute;
white-space: nowrap;
overflow: hidden;
height: 48px;
background: white;
color: black;
border: 1.5px solid #000000;
padding: 5px;
width: <?php echo $breite - 12; ?>px;
border-radius: 12px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
text-align: center;
font-size: <?php echo $fontsize; ?>px;
vertical-align: middle;
z-index: 10;
}
.winner {
font-weight: bold;
}
.looser {
text-decoration: line-through;
}
</style>
<div style='position: relative; text-align: left;'>
<div class="container" style="top: 0px; left: 20px;">
<?php
$anzahlSpiele = pow(2, $anzahlRunden - 1);
for ($runde = 0; $runde < $anzahlRunden; $runde++)
{
$offset = pow(2, $runde) * 25 - 25;
for ($spiel = 0; $spiel < $anzahlSpiele; $spiel++)
{
$class['heim'] = "";
$class['gast'] = "";
if ($begegnungen[$runde + 1][$spiel + 1]['sieger'] == 1) {
$class['heim'] = "winner";
$class['gast'] = "looser";
}
if ($begegnungen[$runde + 1][$spiel + 1]['sieger'] == 2) {
$class['heim'] = "looser";
$class['gast'] = "winner";
}
$oben = $hoehe * pow(2, $runde) * $spiel + $offset;
$links = ($breite + $abstand) * $runde;
echo "\n<div ";
if ($begegnungen[$runde + 1][$spiel + 1]['link'])
echo "onclick=\"window.location.href='" . $begegnungen[$runde + 1][$spiel + 1]['link'] . "';\" ";
echo "class='matchbox' style='top: " . $oben . "px; left: " . $links . "px;'
title='" . $begegnungen[$runde + 1][$spiel + 1]['tooltiptext'] . "'>";
echo "<span class='" . $class['heim'] . "'>";
echo $begegnungen[$runde + 1][$spiel + 1]['heim'] ?? '';
echo "</span>";
echo "<br>";
echo "<span class='" . $class['gast'] . "'>";
echo $begegnungen[$runde + 1][$spiel + 1]['gast'] ?? '';
echo "</span>";
echo "</div>\n";
}
$anzahlSpiele = $anzahlSpiele/2;
}
?>
<?php
$anzahlSpiele = pow(2, $anzahlRunden - 1);
echo "\n<svg class='linien'>";
for ($runde = 0; $runde < $anzahlRunden; $runde++)
{
$offset_oben = pow(2, $runde) * 25 - 1;
$offset_links = 12;
for ($spiel = 0; $spiel < $anzahlSpiele; $spiel++)
{
$oben = $hoehe * pow(2, $runde) * $spiel + $offset_oben;
$links = $breite * ($runde + 1) + $runde * $abstand - $offset_links;
$rechts = $links - $breite - $abstand/2 + $offset_links;
$mitte = $links + $abstand/2 + $offset_links/2;
if ($spiel % 2)
$startvertikal = $oben;
else
$endevertikal = $oben;
//Linie rechts von Box
if ($runde < $anzahlRunden - 1){
echo "\n<line x1='".$links."' y1='".$oben."' x2='".$mitte."' y2='".$oben."' />";
}
//Linie links von Box
if ($runde > 0){
echo "\n<line x1='".($rechts - $offset_links/2)."' y1='".$oben."' x2='".($rechts + $abstand/2)."' y2='".$oben."' />";
}
//Vertkal Linie
if ($spiel % 2)
echo "\n<line x1='".$mitte."' y1='".$startvertikal."' x2='".$mitte."' y2='".$endevertikal."' />";
}
$anzahlSpiele = $anzahlSpiele/2;
}
?>
</svg>
</div>
</div>
<?php
}
static function begegnungSpielplan($veranstaltung, $modus, $begegnung, $heim_team, $gast_team, $spiele, $vorherige_begegnung_id, $naechste_begegnung_id, $teamansicht_team, $details_anzeigen):void
{
global $params;
@@ -1590,8 +1738,8 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
<table style='width: 100%; border-collapse: collapse;'
class="uk-table-hover uk-table-divider uk-table-middle dtfl-table-medium contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>">
<tr class="sectiontableheader<?php echo $params->get('pageclass_sfx'); ?>">
<th><strong><?php echo Text::_('COM_SPORTSMANAGER_PLACE'); ?></strong></th>
<th style="text-align: left; width: 280px;">
<th style="text-align: center; width: 80px;"><strong><?php echo Text::_('COM_SPORTSMANAGER_PLACE'); ?></strong></th>
<th style="text-align: left; width: 320px;">
<strong><?php echo Text::_('COM_SPORTSMANAGER_TEAM'); ?></strong></th>
<?php
if ($bilder_anzeigen) {
@@ -1857,21 +2005,22 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
?>
<!-- Gruppentabelle Hauptrunde -->
<div class="uk-overflow-auto">
<table
class="uk-table uk-table-hover uk-table-divider uk-table-middle dtfl-table-small contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>">
<table style='width: 450px; border-collapse: collapse;'
class="uk-table-hover uk-table-divider uk-table-middle dtfl-table-small contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>">
<tr class="sectiontableheader<?php echo $params->get('pageclass_sfx'); ?>">
<th><strong><?php echo Text::_('COM_SPORTSMANAGER_PLACE'); ?></strong></th>
<th style="text-align: left">
<th style="text-align: center; width: 80px;"><strong><?php echo Text::_('COM_SPORTSMANAGER_PLACE'); ?></strong></th>
<th style="text-align: left; width: 320px;">
<strong><?php echo Text::_('COM_SPORTSMANAGER_TEAM'); ?></strong></th>
<?php if ($bilder_anzeigen) { ?>
<th style="text-align: center; width: 70px;"></th>
<?php } ?>
</tr>
<?php
$laufende_veranstaltung = $teams[count($teams) - 1]->platz == null;
$platz = -1;
$k = 0;
foreach ($teams
as $team) {
foreach ($teams as $team) {
if ($laufende_veranstaltung && $team->platz != $platz && $team->platz == null) {
?>
<tr>
@@ -1899,10 +2048,6 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
?>
</td>
<td nowrap>
<table style="width: 100%; border: none; border-spacing: 0; padding: 0">
<tr>
<td>
<?php
echo "<a href=\"" . SportsManagerURL('&task=team_details&id=' . $team->team_id) . "\">" . htmlentities_utf8(NichtLeererString($team->teamname)) . "</a>";
?>
@@ -1910,7 +2055,7 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
<?php
if ($bilder_anzeigen) {
?>
<td style="width: 50px" height="50" style="text-align: right">
<td style="text-align: center;">
<?php
$bild = bildHTML("mannschaften", $team->team_id, 50, 50, 0, 0, 'border="0"');
if ($bild != null) {
@@ -1926,34 +2071,7 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
}
?>
</tr>
</table>
</td>
<?php
/*
<td nowrap style="text-align: center">
<?php
echo Rundenbezeichnung($team->letzter_spieltag);
?>
</td>
<td nowrap style="text-align: center">
<?php
echo $team->letzter_spieltag;
?>
</td>
<td nowrap style="text-align: center">
<?php
echo $team->zuletzt_gewonnen;
?>
</td>
<td nowrap style="text-align: center">
<?php
echo $spieltag_verlorene_begegnungen . " | " . $spieltag_einmal_vollstaendig . " = ". $spieltag_mannschaften;
?>
</td>
</tr>
<?php
*/
}
?>
</table>
@@ -2338,7 +2456,6 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
style="border-spacing: 0;width: 100%">
<tr>
<?php
$n = 0;
foreach ($mitglieder as $row) {
if (($mitglieder_modus == 0 && !$mitglieder_ist_dauerhaft[$row->spieler_id])
|| ($mitglieder_modus == 1 && $mitglieder_ist_dauerhaft[$row->spieler_id]))
@@ -2942,10 +3059,9 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
}
}
static function vereine($titel, $beschreibung, $rows, $organisationAnzeigen): void
static function vereine($titel, $beschreibung, $rows, $organisationAnzeigen, $spalteMitgliederAnzeigen): void
{
global $params;
if (!empty($titel)) { ?>
<div
class="componentheading<?php echo $params->get('pageclass_sfx'); ?>"><?php echo htmlentities_utf8($titel); ?></div><?php }
@@ -2964,85 +3080,47 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
if (count($rows) > 0) {
$bilder_anzeigen = false;
foreach ($rows as $verein) {
if (bildHTML("vereine", $verein->verein_id, 28, 28) != null) {
if (bildHTML("vereine", $verein->verein_id, 40, 40) != null) {
$bilder_anzeigen = true;
break;
}
}
if ($organisationAnzeigen) {
$organisation = $rows[0]->veranstalterbezeichnung;
?>
<div class="uk-overflow-auto">
<table class="uk-table contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>">
<tr>
<td nowrap class="contentheading<?php echo $params->get('pageclass_sfx'); ?>"
style="width: 100%">
<?php echo $organisation != null ? htmlentities_utf8($organisation) : Text::_('COM_SPORTSMANAGER_NONE2'); ?>
</td>
</tr>
</table>
</div>
<?php
}
?>
<div class="uk-overflow-auto">
<table class="uk-table contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>">
<style>td{padding: 2px;}</style>
<div style="text-align: center;">
<div style="overflow-x: auto;display: inline-block;">
<table class="contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>">
<tr class="sectiontableheader<?php echo $params->get('pageclass_sfx'); ?>">
<th nowrap><strong><?php echo Text::_('COM_SPORTSMANAGER_TEAM_NAME2'); ?></strong></th>
<th nowrap><strong><?php echo Text::_('COM_SPORTSMANAGER_TEAM_SEAT'); ?></strong></th>
<?php if ($bilder_anzeigen) { ?>
<th style='text-align: center; width: 120px;' nowrap>Vereinslogo</th>
<?php } ?>
<th style='text-align: left;' nowrap><strong>
<a href="<?php echo SportsManagerURL('&view=sportsmanager&task=sort_by_vereinsname'); ?>">
<?php echo Text::_('COM_SPORTSMANAGER_TEAM_NAME2'); ?>
</a>
</strong></th>
<?php if ($spalteMitgliederAnzeigen){ ?>
<th style='text-align: center;width: 120px;' nowrap><strong>
<a href="<?php echo SportsManagerURL('&view=sportsmanager&task=sort_by_mitglieder'); ?>">
<?php echo Text::_('COM_SPORTSMANAGER_MEMBERS'); ?></a></strong></th>
<th style='text-align: left;' nowrap><strong><?php echo Text::_('COM_SPORTSMANAGER_TEAM_SEAT'); ?>
</strong></th>
<?php } ?>
<?php if ($organisationAnzeigen) { ?>
<th style='text-align: left;' nowrap>Organisation</th>
<?php } ?>
</tr>
<?php
$k = 0;
foreach ($rows as $row) {
if ($organisationAnzeigen) {
if ($row->veranstalterbezeichnung != $organisation) {
$organisation = $row->veranstalterbezeichnung;
?>
</table></div>
<span
class="article_seperator<?php echo $params->get('pageclass_sfx'); ?>">&nbsp;</span>
<div class="uk-overflow-auto">
<table class="uk-table contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>">
<tr>
<td nowrap
class="contentheading<?php echo $params->get('pageclass_sfx'); ?>"
style="width: 100%">
<?php echo $organisation != null ? htmlentities_utf8($organisation) : "Keine"; ?>
</td>
</tr>
</table>
</div>
<div class="uk-overflow-auto"><table class="uk-table contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>">
<tr class="sectiontableheader<?php echo $params->get('pageclass_sfx'); ?>">
<th nowrap><strong><?php echo Text::_('COM_SPORTSMANAGER_TEAM_NAME2'); ?></strong>
</th>
<th nowrap><strong><?php echo Text::_('COM_SPORTSMANAGER_TEAM_SEAT'); ?></strong>
</th>
</tr>
<?php
}
}
?>
<tr class="sectiontableentry<?php echo $k + 1;
$k = ($k + 1) % 2; ?><?php echo $params->get('pageclass_sfx'); ?>">
<td nowrap>
<table style="width: 100%; border: none; border-spacing: 0; padding: 0">
<tr>
<td>
<a id="id<?php echo $row->verein_id; ?>"></a><a
href="<?php echo SportsManagerURL('&task=verein_details&id=' . $row->verein_id); ?>"><?php echo htmlentities_utf8(NichtLeererString($row->vereinsname)); ?></a>
</td>
<?php
if ($bilder_anzeigen) {
?>
<td style="width: 29px">
<td style="text-align: center;width: 60px;">
<?php
$bild = bildHTML("vereine", $row->verein_id, 28, 28, 0, 0, 'border="0"');
$bild = bildHTML("vereine", $row->verein_id, 40, 40, 0, 0, 'border="0"');
if ($bild != null)
echo $bild;
?>
@@ -3050,16 +3128,28 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
<?php
}
?>
</tr>
</table>
<td style='text-align: left;'>
<a id="id<?php echo $row->verein_id; ?>"></a>
<a href="<?php echo SportsManagerURL('&task=verein_details&id=' . $row->verein_id); ?>">
<?php echo htmlentities_utf8(NichtLeererString($row->vereinsname)); ?></a>
</td>
<td nowrap><?php if (!empty($row->vereinssitz)) echo htmlentities_utf8($row->vereinssitz . (!empty($row->vereinssitz_ortsteil) ? ("-" . $row->vereinssitz_ortsteil) : "")); ?></td>
<?php if ($spalteMitgliederAnzeigen){ ?>
<td nowrap style="text-align: center">
<?php echo $row->mitglieder; ?>
</td>
<?php } ?>
<td style='text-align: left;' nowrap><?php if (!empty($row->vereinssitz)) echo htmlentities_utf8($row->vereinssitz . (!empty($row->vereinssitz_ortsteil) ? ("-" . $row->vereinssitz_ortsteil) : "")); ?></td>
<?php if ($organisationAnzeigen) {
echo "<td nowrap style='text-align: left;'>" . $row->veranstalterbezeichnung . "</td>";
} ?>
</tr>
<?php
}
?>
</table></div>
</table>
</div>
</div>
<?php
}
?>
@@ -3121,7 +3211,7 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
</table>
<div class="uk-overflow-auto">
<table class="uk-table contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>">
<table class="contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>">
<tr>
<td colspan="3">
<div>
@@ -3137,7 +3227,7 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
if ($bild != null) {
?>
<div class="uk-overflow-auto">
<table class="uk-table contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>">
<table class="contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>">
<tr>
<td nowrap><?php echo $bild; ?></td>
</tr>
@@ -3149,7 +3239,7 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
?>
<div class="uk-overflow-auto">
<table class="uk-table contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>">
<table class="contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>">
<tr>
<td>
<?php
@@ -3250,7 +3340,7 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
}
?>
<div class="uk-overflow-auto">
<table class="uk-table contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>">
<table class="contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>">
<tr>
<td nowrap class="contentheading<?php echo $params->get('pageclass_sfx'); ?>"
style="width: 100%"><?php echo Text::_('COM_SPORTSMANAGER_CURRENT_TEAMS'); ?></td>
@@ -3259,7 +3349,7 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
</div>
<div class="uk-overflow-auto">
<table class="uk-table 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'); ?>">
<th nowrap><strong><?php echo Text::_('COM_SPORTSMANAGER_TEAM'); ?></strong></th>
<th><strong><?php echo Text::_('COM_SPORTSMANAGER_COMPETITIONS'); ?></strong></th>
@@ -3312,76 +3402,57 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
if (count($mitglieder) > 0) {
?>
<div class="uk-overflow-auto">
<table class="uk-table contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>">
<table class="contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>">
<tr>
<td nowrap class="contentheading<?php echo $params->get('pageclass_sfx'); ?>"
style="width: 100%"><?php echo Text::_('COM_SPORTSMANAGER_MEMBERS'); ?></td>
style="width: 100%"><?php echo Text::_('COM_SPORTSMANAGER_ACTIVE_MEMBERS'); ?></td>
</tr>
</table>
</div>
<div class="uk-overflow-auto">
<table class="uk-table contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>"
style="border-spacing: 0">
<table class="contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>"
style="border-spacing: 0;width: 100%">
<tr>
<?php
$n = 0;
foreach ($mitglieder as $row) {
if ($n % 3 == 0 && $n != 0)
echo "</tr><tr>";
echo "<td style='text-align: center; vertical-align: center' class=\"sectiontableentry" . (($n % 2) + 1) . $params->get('pageclass_sfx') . "\">";
echo "<table>";
echo "<tr><td style='text-align: center'>";
?><a
href="<?php echo SportsManagerURL('&task=spieler_details&id=' . $row->spieler_id); ?>"><?php echo htmlentities_utf8($row->nachname . ", " . $row->vorname); ?></a><?php
echo "<table style='display: inline-table;'><tr>";
echo "<td style='text-align: center;vertical-align: center; width: 220px;' class=\"sectiontableentry" . (($n % 2) + 1) . $params->get('pageclass_sfx') . "\">";
?>
<a href="<?php echo SportsManagerURL('&task=spieler_details&id=' . $row->spieler_id); ?>">
<?php echo htmlentities_utf8($row->nachname . ", " . $row->vorname); ?></a><?php
if (!empty($row->spielernr))
echo "<br /><small>" . htmlentities_utf8($row->spielernr) . "</small>";
echo "</td></tr>";
if ($vereins_moderator) {
if (!empty($row->geburtsjahr)) {
echo "<tr><td style='text-align: center'>";
echo "<small>" . htmlentities_utf8($row->geburtsjahr) . "</small>";
echo "</td></tr>";
echo "<br /><small>" . htmlentities_utf8($row->geburtsjahr) . "</small>";
}
if (!empty($row->strasse) ||
!empty($row->plz) || !empty($row->ort)) {
echo "<tr><td style='text-align: center'>";
if (!empty($row->strasse))
echo "<small>" . htmlentities_utf8($row->strasse) . "</small><br />";
echo "<br /><small>" . htmlentities_utf8($row->strasse) . "</small><br />";
if (!empty($row->plz) || !empty($row->ort))
echo "<small>" . (!empty($row->plz) ? (htmlentities_utf8($row->plz) . " ") : "") . htmlentities_utf8($row->ort) . "</small>";
echo "</td></tr>";
}
if (!empty($row->telefon) ||
!empty($row->mobil) ||
!empty($row->email)) {
echo "<tr><td style='text-align: center'>";
echo "<br /><small>" . (!empty($row->plz) ? (htmlentities_utf8($row->plz) . " ") : "") . htmlentities_utf8($row->ort) . "</small>";
if (!empty($row->telefon))
echo "<small>" . htmlentities_utf8($row->telefon) . "</small><br />";
echo "<br /><small>" . htmlentities_utf8($row->telefon) . "</small><br />";
if (!empty($row->mobil))
echo "<small>" . htmlentities_utf8($row->mobil) . "</small><br />";
echo "<br /><small>" . htmlentities_utf8($row->mobil) . "</small><br />";
if (!empty($row->email)) {
$replacement = HTMLHelper::_('email.cloak', $row->email, 1, $row->email, 0);
echo "<small>" . $replacement . "</small>";
}
echo "</td></tr>";
echo "<br /><small>" . $replacement . "</small>";
}
}
echo "</table></td>";
echo "<td style='text-align: center' class=\"sectiontableentry" . (($n % 2) + 1) . $params->get('pageclass_sfx') . "\">";
echo "</td>";
echo "<td style='text-align: left; width: 120px;' class=\"sectiontableentry" . (($n % 2) + 1) . $params->get('pageclass_sfx') . "\">";
$bild = bildHTML("spieler", !$details_anzeigen && $row->bild_ausblenden ? '' : $row->mitglied_von_team_id, 90, 120, 0, 0, 'border="1"');
if ($bild == null)
$bild = bildHTML("spieler", !$details_anzeigen && $row->bild_ausblenden ? '' : $row->spieler_id, 90, 120, 0, 0, 'border="1"', $row->geschlecht == 'M' ? 'm' : 'w');
if ($bild != null) {
?>
<table style="padding: 4px">
<tr>
<td><?php echo $bild; ?></td>
</tr>
</table>
<?php
echo $bild;
}
echo "</td>";
$n++;
echo "</tr>";
echo "</table>";
}
?>
</tr>
@@ -4188,9 +4259,16 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
}
}
static function spielerDetails($spieler, $vereine, $veranstalter, $spieler_elo_verlauf_einzel, $spieler_elo_verlauf_doppel, $spielerNamen, $teamNamen, $veranstaltungBezeichnungen, $turnierdisziplinBezeichnungen, $individualwettbewerbBezeichnungen, $ranglistenplatzierungen, $turnierplatzierungen, $teams, $sortierung, $vorheriger_spieler_id, $naechster_spieler_id, $elo_detailliert, $statistik, $beginn, $kategorie, $einstufungen, $filter, $veranstaltungid, $veranstalterid, $einstufungid, $unabhaengige_ansicht, $details_anzeigen, $lizenz_anzeigen):void {
static function spielerDetails($spieler, $vereine, $veranstalter, $spieler_elo_verlauf_einzel, $spieler_elo_verlauf_doppel,
$spielerNamen, $teamNamen, $veranstaltungBezeichnungen, $turnierdisziplinBezeichnungen,
$individualwettbewerbBezeichnungen, $ranglistenplatzierungen, $turnierplatzierungen,
$teams, $sortierung, $vorheriger_spieler_id, $naechster_spieler_id, $elo_detailliert,
$statistik, $beginn, $kategorie, $einstufungen, $filter, $veranstaltungid, $veranstalterid,
$einstufungid, $unabhaengige_ansicht, $details_anzeigen, $lizenz_anzeigen):void {
global $params;
if (count($vereine) == 0){echo "Sie haben keine Berechtigung auf diesen Datensatz!!!"; die;}
?>
<table style="width: 100%; border: none; border-spacing: 0; padding: 3px">
<tr>
@@ -4322,7 +4400,7 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
:</strong></td>
<td nowrap style="text-align: right">
<?php
echo($spieler->elo_einzel_spiele == 1 ? Text::sprintf('COM_SPORTSMANAGER_GAME_ELO_IN_ONE_GAME', $spieler->elo_einzel) : Text::sprintf('COM_SPORTSMANAGER_GAME_ELO_IN_NUMBER_GAMES', $spieler->elo_einzel));
echo($spieler->elo_einzel_spiele == 1 ? Text::sprintf('COM_SPORTSMANAGER_GAME_ELO_IN_ONE_GAME', $spieler->elo_einzel) : Text::sprintf('COM_SPORTSMANAGER_GAME_ELO_IN_NUMBER_GAMES', $spieler->elo_einzel, $spieler->elo_einzel_spiele));
?>
</td>
</tr>
@@ -4336,7 +4414,7 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
:</strong></td>
<td nowrap style="text-align: right">
<?php
echo($spieler->elo_doppel_spiele == 1 ? Text::sprintf('COM_SPORTSMANAGER_GAME_ELO_IN_ONE_GAME', $spieler->elo_doppel) : Text::sprintf('COM_SPORTSMANAGER_GAME_ELO_IN_NUMBER_GAMES', $spieler->elo_doppel));
echo($spieler->elo_doppel_spiele == 1 ? Text::sprintf('COM_SPORTSMANAGER_GAME_ELO_IN_ONE_GAME', $spieler->elo_doppel) : Text::sprintf('COM_SPORTSMANAGER_GAME_ELO_IN_NUMBER_GAMES', $spieler->elo_doppel, $spieler->elo_doppel_spiele));
?>
</td>
</tr>
@@ -6717,6 +6795,9 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
static function rangliste($rangliste, $rangliste_punkte, $allein_angezeigt, $details_anzeigen): void
{
?>
<style>td{padding: 3px;}</style>
<?php
global $params;
if ($allein_angezeigt) {
?>
@@ -6795,15 +6876,15 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
?>
<!-- Tabelle Rangliste -->
<div class="uk-overflow-auto">
<table style='width: 100%; padding:1px 1px 1px 1px; border-collapse: collapse;'
<table style='width: 100%; border-collapse: collapse;'
class="uk-table-divider uk-table-hover uk-table-middle rangliste-width contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>">
<tr class="sectiontableheader<?php echo $params->get('pageclass_sfx'); ?>">
<th><strong><?php echo Text::_('COM_SPORTSMANAGER_RANK'); ?></strong></th>
<th></th>
<th style="text-align: left">
<th style="text-align: left;">
<strong><?php echo Text::_('COM_SPORTSMANAGER_PLAYER'); ?></strong>
</th>
<th style="text-align: center"><strong><?php echo Text::_('COM_SPORTSMANAGER_POINTS'); ?></strong></th>
<th style="text-align: center; width 70px;"><strong><?php echo Text::_('COM_SPORTSMANAGER_POINTS'); ?></strong></th>
</tr>
<?php
@@ -6820,10 +6901,10 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
?>
</td>
<td>
<td style="width 70px;">
<?php
if (($bild = yoothemeBild("spieler", !$details_anzeigen && $row->bild_ausblenden ? '' : $row->spieler_id, $row->geschlecht == 'M' ? 'm' : 'w', '#resize=75', 'border="1" style="text-align: left" hspace="8" vspace="2"')) != null)
echo $bild; ?>
if (($bild = yoothemeBild("spieler", !$details_anzeigen && $row->bild_ausblenden ? '' : $row->spieler_id, $row->geschlecht == 'M' ? 'm' : 'w', 'border="1" style="text-align: left; width: 60px;" hspace="8" vspace="2"')) != null)
echo "\n".$bild; ?>
</td>
<td>
<?php
@@ -197,6 +197,7 @@ class JSON_sportsmanager
#[NoReturn] static function spielerDetails($spieler, $vereine, $veranstalter, $spieler_elo_verlauf_einzel, $spieler_elo_verlauf_doppel, $spielerNamen, $teamNamen, $veranstaltungBezeichnungen, $turnierdisziplinBezeichnungen, $individualwettbewerbBezeichnungen, $ranglistenplatzierungen, $turnierplatzierungen, $teams, $elo_detailliert, $statistik, $einstufungen): void
{
if (count($vereine) == 0){die;}
$letzte_einzel = [];
$spieler->bild = playerImage($spieler->spieler_id, $spieler->geschlecht);
for ($i = sizeof($spieler_elo_verlauf_einzel) - 1; $i >= max(sizeof($spieler_elo_verlauf_einzel) - 10, 0); $i--) {
File diff suppressed because it is too large Load Diff
@@ -21,6 +21,7 @@ COM_SPORTSMANAGER_LOCATIONS="Spielorte"
COM_SPORTSMANAGER_SEASONS="Saisons"
COM_SPORTSMANAGER_TEAM_PLANS="Mannschaftsspielpl&auml;ne"
COM_SPORTSMANAGER_TEAM_NAME="Mannschaftsname"
COM_SPORTSMANAGER_TEAM_NAME_SHORT="Mannschaftsname kurz (max 24)"
COM_SPORTSMANAGER_TEAM_NAME2="Vereinsname"
COM_SPORTSMANAGER_TEAM_SEAT="Vereinssitz"
COM_SPORTSMANAGER_POSTPONE_RULES="Verschieberegeln"
@@ -38,6 +39,7 @@ COM_SPORTSMANAGER_ORGANISATION="Organisation"
COM_SPORTSMANAGER_TEAM_MEMBERS="Mannschaftsmitglieder"
COM_SPORTSMANAGER_TEAM_MEMBERS2=Vereinsmitglieder
COM_SPORTSMANAGER_MEMBERS="Mitglieder"
COM_SPORTSMANAGER_ACTIVE_MEMBERS="Aktive Mitglieder"
COM_SPORTSMANAGER_TEAMS="Mannschaften"
COM_SPORTSMANAGER_CURRENT_TEAMS="Aktuelle Mannschaften"
COM_SPORTSMANAGER_PREVIOUS_TEAMS="Fr&uuml;here Mannschaften"
@@ -130,10 +132,13 @@ COM_SPORTSMANAGER_QUARTER_FINAL_SHORTCUT="1/4"
COM_SPORTSMANAGER_ROUND_OF_16="Achtelfinale"
COM_SPORTSMANAGER_ROUND_OF_16_SHORTCUT="1/8"
COM_SPORTSMANAGER_ROUND_OF_32="Sechzehntelfinale"
COM_SPORTSMANAGER_ROUND_OF_32_ALT="16-tel-Finale"
COM_SPORTSMANAGER_ROUND_OF_32_SHORTCUT="1/16"
COM_SPORTSMANAGER_ROUND_OF_64="Zweiunddreißigstelfinale"
COM_SPORTSMANAGER_ROUND_OF_64_ALT="32-tel-Finale"
COM_SPORTSMANAGER_ROUND_OF_64_SHORTCUT="1/32"
COM_SPORTSMANAGER_ROUND_OF_128="Vierundsechzigstelfinale"
COM_SPORTSMANAGER_ROUND_OF_128_ALT="64-tel-Finale"
COM_SPORTSMANAGER_ROUND_OF_128_SHORTCUT="1/64"
COM_SPORTSMANAGER_DAY_0_SHORTCUT="So."
COM_SPORTSMANAGER_DAY_1_SHORTCUT="Mo."
@@ -311,6 +316,10 @@ COM_SPORTSMANAGER_FOR_OTHER_CONTACT="F&uuml;r andere Ansprechpartner"
COM_SPORTSMANAGER_DATES_REGISTERED_USERS="Termine beantragten durch angemeldete Benutzer"
COM_SPORTSMANAGER_VIEW_ELO_RATING="Elo-Wertung anzeigen"
COM_SPORTSMANAGER_VIEW_SPORTSMANAGER_LIZENZ="Lizenz anzeigen"
COM_SPORTSMANAGER_VIEW_LEAST_MEMBER_COUNT="Mindest Mitgliederzahl zeigen (Vereine)"
COM_SPORTSMANAGER_SHOW_ORGANISATION="Spalte Verband zeigen (Vereine)"
COM_SPORTSMANAGER_SHOW_MEMBER_COUNT="Spalte Mitglieder Zeigen (Vereine)"
COM_SPORTSMANAGER_SHOW_TOURNAMENT_BRACKET="Turnierbaum anzeigen"
COM_SPORTSMANAGER_PLAYER_DETAILS="Spielerdetails"
COM_SPORTSMANAGER_PLAYER_LIST_DETAILS="Spielerliste/-details"
COM_SPORTSMANAGER_PLAYER_EDIT="Spielerdaten durch Organisations-/Vereinsansprechpartner bearbeiten"
@@ -380,6 +389,7 @@ COM_SPORTSMANAGER_MEMBER_STATUS="Mitgliedsstatus"
COM_SPORTSMANAGER_ACTIVE="Aktiv"
COM_SPORTSMANAGER_RESTRICTED="Eingeschränkt"
COM_SPORTSMANAGER_BEATEN="Ausgetreten"
COM_SPORTSMANAGER_HIDE="Verstecken"
COM_SPORTSMANAGER_PASSIVE="Passiv"
COM_SPORTSMANAGER_BEATEN_CLUB="Verein ausgetreten"
COM_SPORTSMANAGER_SINGLE_SEED="Elo-Startwert Einzel"
@@ -606,7 +616,10 @@ COM_SPORTSMANAGER_ONLY_DETAILED_RATING_POINT_DIFFERENCE="Nur Detailwertung nach
COM_SPORTSMANAGER_ONLY_DETAILED_POINTS_AFTER_POINTSRATE="Nur Detailwertung nach Punktequote"
COM_SPORTSMANAGER_KO_SIMPLE_FULL="K.O. (einfach oder vollstaendige Ausspielung aller Plaetze)"
COM_SPORTSMANAGER_MANUAL_PRO_TEAMS="Manuell (pro Mannschaft)"
COM_SPORTSMANAGER_CUP_DRAW_EVERY_ROUND="Pokal: Jede Runde wird neu gelost"
COM_SPORTSMANAGER_CUP_USING_SEEDING_LIST="Pokal: Losen einer Setzliste"
COM_SPORTSMANAGER_SUBDIVISION="Unterteilung"
COM_SPORTSMANAGER_SHOW_MATCHDAY_TITLE="Titel von Spieltag zeigen"
COM_SPORTSMANAGER_ELO_RATING="ELO-Wertung"
COM_SPORTSMANAGER_ELIGIBLE_FOR_EVENT="Berechtigte f&uuml;r Veranstaltung"
COM_SPORTSMANAGER_TITLE_LOGO="Titel-Logo"
@@ -634,6 +647,9 @@ COM_SPORTSMANAGER_GAMEDAY="Spieltag"
COM_SPORTSMANAGER_GAMEDAYS="Spieltage"
COM_SPORTSMANAGER_ROUND="Runde"
COM_SPORTSMANAGER_ROUNDS="Runden"
COM_SPORTSMANAGER_ROUND_TITLE="Runde Bezeichnung"
COM_SPORTSMANAGER_DRAW_FOR_HOME="Heimrecht auslosen"
COM_SPORTSMANAGER_MATCH_PLACE3="Spiel um Platz 3"
COM_SPORTSMANAGER_MONTH="Monat"
COM_SPORTSMANAGER_MONTHS="Monate"
COM_SPORTSMANAGER_PLAYER_FROM_TEAM="Spieler von Mannschaft"
@@ -649,7 +665,9 @@ COM_SPORTSMANAGER_SO_FAR="bisher"
COM_SPORTSMANAGER_PLACEMENT_AREA="Platzierungsbereich"
COM_SPORTSMANAGER_IMAGE_WITHIN_TEAM="Bild innerhalb Mannschaft"
COM_SPORTSMANAGER_ADD_MEETING="Begegnung hinzuf&uuml;gen"
COM_SPORTSMANAGER_GAMEDAY_GENERATION="Spieltag erzeugen"
COM_SPORTSMANAGER_ROUND_GENERATION="Runde erzeugen"
COM_SPORTSMANAGER_CUP_ROUND_GENERATION="Pokalrunde auslosen"
COM_SPORTSMANAGER_GENERATE_GROUP_GAME="Gruppenspiele erzeugen"
COM_SPORTSMANAGER_IMPORT_GROUP_GAME="Gruppenspiele importieren"
COM_SPORTSMANAGER_IMPORT_GROUP_GAME2="Gruppenspiele: Importieren"
@@ -777,6 +795,7 @@ COM_SPORTSMANAGER_FEDERAL_STATES="Bundesl&auml;nder"
COM_SPORTSMANAGER_STATES="L&auml;nder"
COM_SPORTSMANAGER_YEAR="Jahr"
COM_SPORTSMANAGER_ADDITION="Zusatz"
COM_SPORTSMANAGER_LOCATION="Ort"
COM_SPORTSMANAGER_STATE="Land"
COM_SPORTSMANAGER_FEDERAL_="Bundes-"
COM_SPORTSMANAGER_INFO="Info"
@@ -995,3 +1014,4 @@ COM_SPORTSMANAGER_ARIA_LABEL_CLUB="Verein"
COM_SPORTSMANAGER_NUM_REQUESTED_SHIFTS="Verschiebungen"
COM_SPORTSMANAGER_NUM_REQUESTED_SHFITS_TOOLTIP="Spielverschiebungen durch diese Mannschaft"
COM_SPORTSMANAGER_GAME_RESULT_DELAYS="Verzögerung"
COM_SPORTSMANAGER_USE_EMAIL_REMINDERS="Verwende Email Erinnerungen"
@@ -21,6 +21,7 @@ COM_SPORTSMANAGER_LOCATIONS="Locations"
COM_SPORTSMANAGER_SEASONS="Seasons"
COM_SPORTSMANAGER_TEAM_PLANS="Team plans"
COM_SPORTSMANAGER_TEAM_NAME="Team name"
COM_SPORTSMANAGER_TEAM_NAME_SHORT="Team name short (max 24)"
COM_SPORTSMANAGER_TEAM_NAME2="Club name"
COM_SPORTSMANAGER_TEAM_SEAT="Club location"
COM_SPORTSMANAGER_POSTPONE_RULES="Postpone rules"
@@ -38,6 +39,7 @@ COM_SPORTSMANAGER_ORGANISATION="Organisation"
COM_SPORTSMANAGER_TEAM_MEMBERS="Team members"
COM_SPORTSMANAGER_TEAM_MEMBERS2="Club members"
COM_SPORTSMANAGER_MEMBERS="Members"
COM_SPORTSMANAGER_ACTIVE_MEMBERS="Active members"
COM_SPORTSMANAGER_TEAMS="Teams"
COM_SPORTSMANAGER_CURRENT_TEAMS="Current teams"
COM_SPORTSMANAGER_PREVIOUS_TEAMS="Previous teams"
@@ -129,11 +131,14 @@ COM_SPORTSMANAGER_QUARTER_FINAL="Quarter final"
COM_SPORTSMANAGER_QUARTER_FINAL_SHORTCUT="1/4"
COM_SPORTSMANAGER_ROUND_OF_16="Round of sixteen"
COM_SPORTSMANAGER_ROUND_OF_16_SHORTCUT="1/8"
COM_SPORTSMANAGER_ROUND_OF_32="Round of thiry-two"
COM_SPORTSMANAGER_ROUND_OF_32="Round of thirty-two"
COM_SPORTSMANAGER_ROUND_OF_32_ALT="Round of thirty-two"
COM_SPORTSMANAGER_ROUND_OF_32_SHORTCUT="1/16"
COM_SPORTSMANAGER_ROUND_OF_64="Round of sixty-four"
COM_SPORTSMANAGER_ROUND_OF_64_ALT="Round of sixty-four"
COM_SPORTSMANAGER_ROUND_OF_64_SHORTCUT="1/32"
COM_SPORTSMANAGER_ROUND_OF_128="Round of 128"
COM_SPORTSMANAGER_ROUND_OF_128_ALT="Round of 128"
COM_SPORTSMANAGER_ROUND_OF_128_SHORTCUT="1/64"
COM_SPORTSMANAGER_DAY_0_SHORTCUT="Su."
COM_SPORTSMANAGER_DAY_1_SHORTCUT="Mo."
@@ -311,6 +316,10 @@ COM_SPORTSMANAGER_FOR_OTHER_CONTACT="For other contact"
COM_SPORTSMANAGER_DATES_REGISTERED_USERS="Apply dates by registered users"
COM_SPORTSMANAGER_VIEW_ELO_RATING="View Elo rating"
COM_SPORTSMANAGER_VIEW_SPORTSMANAGER_LIZENZ="Show License"
COM_SPORTSMANAGER_VIEW_LEAST_MEMBER_COUNT="Show least member count (teams)"
COM_SPORTSMANAGER_SHOW_ORGANISATION="Show organisation (teams)"
COM_SPORTSMANAGER_SHOW_MEMBER_COUNT="Show member column (teams)"
COM_SPORTSMANAGER_SHOW_TOURNAMENT_BRACKET="Show Tournament Bracket"
COM_SPORTSMANAGER_PLAYER_DETAILS="Player details"
COM_SPORTSMANAGER_PLAYER_LIST_DETAILS="Player list details"
COM_SPORTSMANAGER_PLAYER_EDIT="Edit player data by organisation/club contacts"
@@ -380,6 +389,7 @@ COM_SPORTSMANAGER_MEMBER_STATUS="Member status"
COM_SPORTSMANAGER_ACTIVE="Active"
COM_SPORTSMANAGER_RESTRICTED="Restricted"
COM_SPORTSMANAGER_BEATEN="Excreted"
COM_SPORTSMANAGER_HIDE="Hide"
COM_SPORTSMANAGER_PASSIVE="Passive"
COM_SPORTSMANAGER_BEATEN_CLUB="Club excreted"
COM_SPORTSMANAGER_SINGLE_SEED="Elo starting value singles"
@@ -606,7 +616,10 @@ COM_SPORTSMANAGER_ONLY_DETAILED_RATING_POINT_DIFFERENCE="Only detailed ranking b
COM_SPORTSMANAGER_ONLY_DETAILED_POINTS_AFTER_POINTSRATE="Only detailed ranking by points rate"
COM_SPORTSMANAGER_KO_SIMPLE_FULL="K.O. (singles or full playout of all places)"
COM_SPORTSMANAGER_MANUAL_PRO_TEAMS="Manual (per team)"
COM_SPORTSMANAGER_CUP_DRAW_EVERY_ROUND="Cup: draw every round"
COM_SPORTSMANAGER_CUP_USING_SEEDING_LIST="Cup: draw seeding list"
COM_SPORTSMANAGER_SUBDIVISION="Subdivision"
COM_SPORTSMANAGER_SHOW_MATCHDAY_TITLE="Show title matchday"
COM_SPORTSMANAGER_ELO_RATING="Elo rating"
COM_SPORTSMANAGER_ELIGIBLE_FOR_EVENT="Eligibles for competition"
COM_SPORTSMANAGER_TITLE_LOGO="Title logo"
@@ -634,6 +647,9 @@ COM_SPORTSMANAGER_GAMEDAY="Gameday"
COM_SPORTSMANAGER_GAMEDAYS="Gamedays"
COM_SPORTSMANAGER_ROUND="Round"
COM_SPORTSMANAGER_ROUNDS="Rounds"
COM_SPORTSMANAGER_ROUND_TITLE="Round Title"
COM_SPORTSMANAGER_DRAW_FOR_HOME="Draw for home"
COM_SPORTSMANAGER_MATCH_PLACE3="Match for place 3"
COM_SPORTSMANAGER_MONTH="Month"
COM_SPORTSMANAGER_MONTHS="Months"
COM_SPORTSMANAGER_PLAYER_FROM_TEAM="Player of team"
@@ -649,7 +665,9 @@ COM_SPORTSMANAGER_SO_FAR="so far"
COM_SPORTSMANAGER_PLACEMENT_AREA="Placement area"
COM_SPORTSMANAGER_IMAGE_WITHIN_TEAM="Image within team"
COM_SPORTSMANAGER_ADD_MEETING="Add match"
COM_SPORTSMANAGER_GAMEDAY_GENERATION="Generate gameday"
COM_SPORTSMANAGER_ROUND_GENERATION="Generate round"
COM_SPORTSMANAGER_CUP_ROUND_GENERATION="Generate cup round"
COM_SPORTSMANAGER_GENERATE_GROUP_GAME="Generate group games"
COM_SPORTSMANAGER_Import_GROUP_GAME="Import group games"
COM_SPORTSMANAGER_Import_GROUP_GAME2="Group games: Import"
@@ -777,6 +795,7 @@ COM_SPORTSMANAGER_FEDERAL_STATES="State"
COM_SPORTSMANAGER_STATES="Countries"
COM_SPORTSMANAGER_YEAR="Year"
COM_SPORTSMANAGER_ADDITION="Addition"
COM_SPORTSMANAGER_LOCATION="Location"
COM_SPORTSMANAGER_STATE="Germany"
COM_SPORTSMANAGER_FEDERAL_="Federal "
COM_SPORTSMANAGER_INFO="Info"
@@ -993,3 +1012,4 @@ COM_SPORTSMANAGER_ARIA_LABEL_CLUB="Club"
COM_SPORTSMANAGER_NUM_REQUESTED_SHIFTS="Shifts"
COM_SPORTSMANAGER_NUM_REQUESTED_SHFITS_TOOLTIP="Game shifts caused by this team"
COM_SPORTSMANAGER_GAME_RESULT_DELAYS="Delay"
COM_SPORTSMANAGER_USE_EMAIL_REMINDERS="Use email reminders"
+28 -3
View File
@@ -137,6 +137,7 @@ return new class () implements InstallerScriptInterface
. "\n `tisch` tinytext DEFAULT NULL,"
. "\n `zeitpunkt` datetime DEFAULT NULL,"
. "\n `spieltag` smallint(6) DEFAULT NULL,"
. "\n `spieltag_titel` VARCHAR(32) NOT NULL DEFAULT '',"
. "\n `spiel_nr` tinyint(4) DEFAULT NULL,"
. "\n `heim_punkte` smallint(6) DEFAULT NULL,"
. "\n `gast_punkte` smallint(6) DEFAULT NULL,"
@@ -682,7 +683,8 @@ return new class () implements InstallerScriptInterface
. "\n `verein_id` int(11) DEFAULT NULL,"
. "\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 DEFAULT '',"
. "\n `teamname_kurz` VARCHAR(24) NOT NULL DEFAULT '',"
. "\n `tischtyp` varchar(200) DEFAULT NULL,"
. "\n `tischeigenschaften` varchar(200) DEFAULT NULL,"
. "\n `zusatzpunkte` float(6,2) DEFAULT NULL,"
@@ -903,6 +905,7 @@ return new class () implements InstallerScriptInterface
. "\n `erster_tag` date NOT NULL DEFAULT '0000-00-00',"
. "\n `letzter_tag` date DEFAULT NULL,"
. "\n `kategorie` tinyint(4) DEFAULT '1',"
. "\n `reminder_count` tinyint DEFAULT '0',"
. "\n PRIMARY KEY (`turnier_id`),"
. "\n KEY `saison_id` (`saison_id`),"
. "\n KEY `veranstalter_id` (`veranstalter_id`)"
@@ -1011,7 +1014,7 @@ return new class () implements InstallerScriptInterface
. "\n `kommentar` varchar(255) DEFAULT NULL,"
. "\n `vorgeschlagen` datetime DEFAULT NULL,"
. "\n PRIMARY KEY (`unbestaetigtes_ergebnis_id`),"
. "\n KEY `begegnung_id` (`begegnung_id`),"
. "\n UNIQUE KEY `begegnung_id` (`begegnung_id`),"
. "\n KEY `vorschlagendes_team_id` (`vorschlagendes_team_id`)"
. "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
$db->setQuery( $query );
@@ -1037,6 +1040,7 @@ return new class () implements InstallerScriptInterface
. "\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 `spieltag_titel_zeigen` INT(4) NOT NULL DEFAULT '0',"
. "\n `erster_tag` date NOT NULL DEFAULT '0000-00-00',"
. "\n `letzter_tag` date DEFAULT NULL,"
. "\n `elo_wertung` tinyint(4) DEFAULT NULL,"
@@ -1063,6 +1067,7 @@ return new class () implements InstallerScriptInterface
. "\n `url` varchar(150) DEFAULT NULL,"
. "\n `beschreibung` varchar(500) DEFAULT NULL,"
. "\n `ausgetreten` tinyint(1) DEFAULT '0',"
. "\n `verstecken` INT(4) NOT NULL DEFAULT '0',"
. "\n PRIMARY KEY (`verein_id`),"
. "\n KEY `veranstalter_id` (`veranstalter_id`)"
. "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
@@ -1113,7 +1118,7 @@ return new class () implements InstallerScriptInterface
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'datenbank_version', wert = '103';";
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'datenbank_version', wert = '108';";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
@@ -1133,6 +1138,26 @@ return new class () implements InstallerScriptInterface
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'anzahl_mitglieder_zeigen', wert = '0';";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'verband_anzeigen', wert = '1';";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'turnierbaum_zeigen', wert = '0';";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'spalte_mitglieder_zeigen', wert = '1';";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'enable_email_reminders', wert = '0';";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "INSERT INTO #__sportsmanager_verschieberegel (bezeichnung, initial_ohne_termin, keine_gegenvorschlaege, vorlaufzeit_tage, termine_minimal, termine_maximal, ablehnen)"
. "\n VALUES ('Beliebig', '0', '0', '0', '1', '3', '0');";
$db->setQuery($query);
+1 -1
View File
@@ -6,7 +6,7 @@
<authorEmail>it@dtfb.de</authorEmail>
<copyright>All rights reserved</copyright>
<license>GNU/GPL</license>
<version>2.0.0</version>
<version>DEV</version>
<description>Verwaltung von Spielern und Vereinen in Mannschafts- und Individualwettbewerben</description>
<namespace path="src">Dtfb\Component\com_sportsmanager</namespace>
<files folder="site">