Compare commits

..

2 Commits

Author SHA1 Message Date
Tim e0d0f0f1c1 Removed nowrap comments 2025-06-30 14:55:04 +00:00
google-labs-jules[bot] 7d1fae417d I've made some improvements to the mobile usability of the Sportsmanager views.
I implemented responsive design features using the UIkit CSS framework to enhance your experience on mobile devices.

Here are the key changes in `src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php`:
- I made images responsive by removing fixed dimensions and applying UIkit classes like `uk-responsive-width` or `uk-preserve-width`.
- I improved table responsiveness by removing `nowrap` attributes to allow text wrapping and applying `uk-visible@<breakpoint>` classes to hide less critical columns on smaller screens.
- I utilized `uk-table-responsive` for UIkit's default responsive table behavior on some tables.
- I ensured player card layouts in `mannschaftDetails` and `vereinDetails` use UIkit's grid system.
- I removed various fixed pixel widths from table cells to allow for more fluid layouts.

I identified the `individualwettbewerb` pyramid layout as an area that may require further CSS fine-tuning or PHP refactoring for optimal responsiveness. I've noted specific CSS media query suggestions for future implementation by a developer with visual testing capabilities.
2025-06-03 08:05:16 +00:00
37 changed files with 14007 additions and 24044 deletions
-25
View File
@@ -1,25 +0,0 @@
name-template: "Release $COMPLETE"
tag-template: "v$COMPLETE"
draft: false
exclude:
pulls: true
exclude-labels:
- changelog-ignore
categories:
- title: "Features"
labels: ["feature", "enhancement"]
- title: "Fixes"
labels: ["bug"]
- title: "Maintenance"
labels: ["chore", "refactor"]
change-template: "- $TITLE [#$NUMBER]"
template: |
# Release $RESOLVED_VERSION
## Changes
$CHANGES
-23
View File
@@ -1,23 +0,0 @@
name-template: "Release $COMPLETE"
tag-template: "v$COMPLETE"
draft: false
exclude:
pulls: true
exclude-labels:
- changelog-ignore
categories:
- title: "Features"
labels: ["feature", "enhancement"]
- title: "Fixes"
labels: ["bug"]
- title: "Maintenance"
labels: ["chore", "refactor"]
change-template: "- $TITLE [#$NUMBER]"
template: |
## Changes
$CHANGES
-25
View File
@@ -1,25 +0,0 @@
name: Auto-label PRs
on:
pull_request:
types: [opened, reopened, synchronize, edited]
jobs:
label-changelog-ignore:
runs-on: ubuntu-latest
steps:
- name: Label PRs
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const base = context.payload.pull_request.base.ref;
const head = context.payload.pull_request.head.ref;
if ((base === 'sportsmanager2-prod' && head === 'sportsmanager2-stage') || (base === 'sportsmanager2-stage' && head === 'sportsmanager2-dev')) {
await github.rest.issues.addLabels({
...context.repo,
issue_number: context.payload.pull_request.number,
labels: ['changelog-ignore']
});
}
-100
View File
@@ -1,100 +0,0 @@
# This workflow will run release using node and then publish a package to GitHub Packages when a release is created
# For more information see: https://docs.github.com/en/actions/publishing-packages/publishing-nodejs-packages
name: Sportsmanager Release
on:
push:
tags:
- 'v[0-9]+.[0-9]+.[0-9]+' # run only on version tags like v1.0.0
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ref: sportsmanager2-prod
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install npm dependencies
run: npm ci
- 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
echo "defined('_JEXEC') or die;" >> src/structure/components/com_sportsmanager/util/version.php
echo "return [" >> src/structure/components/com_sportsmanager/util/version.php
echo " 'version' => '${{ env.VERSION }}'," >> src/structure/components/com_sportsmanager/util/version.php
echo " 'date' => '$(date +%F)'," >> src/structure/components/com_sportsmanager/util/version.php
echo "];" >> src/structure/components/com_sportsmanager/util/version.php
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
uses: release-drafter/release-drafter@v6
with:
config-name: release-drafter_extension.yml
version: ${{ github.ref_name }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Save release notes to file
run: |
echo "${{ steps.release_notes_extension.outputs.body }}" > RELEASE_NOTES.md
- name: Run build script
run: npm run release
- name: Generate release notes
id: release_notes_github
uses: release-drafter/release-drafter@v6
with:
config-name: release-drafter_github.yml
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Save release notes to file
run: |
echo "${{ steps.release_notes_github.outputs.body }}" > RELEASE_NOTES.md
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
tag_name: "${{ github.ref_name }}"
name: "Release ${{ github.ref_name }}"
files: package/packages/com_sportsmanager.zip
body_path: "RELEASE_NOTES.md"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Delete draft release via API # workaround: remove leftover draft by release-drafter
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
REPO: ${{ github.repository }}
run: |
drafts=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \
https://api.github.com/repos/$REPO/releases | jq '.[] | select(.draft == true)')
if [ -n "$drafts" ]; then
id=$(echo "$drafts" | jq -r '.id')
curl -s -X DELETE -H "Authorization: token $GITHUB_TOKEN" \
https://api.github.com/repos/$REPO/releases/$id
echo "Deleted draft release with ID: $id"
else
echo "No draft releases found"
fi
-39
View File
@@ -1,39 +0,0 @@
# This workflow will run release using node and then publish a package to GitHub Packages when a release is created
# For more information see: https://docs.github.com/en/actions/publishing-packages/publishing-nodejs-packages
name: Snapshot Release
on:
push:
tags:
- 'v[0-9]+.[0-9]+.[0-9]+-snapshot' # run only on version tags like v1.0.0-snapshot
# - 'v*' # Run only on version tags like v1.0.0
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ref: sportsmanager2-stage
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install npm dependencies
run: npm ci
- name: Run build script
run: npm run release
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
prerelease: true
name: "Snapshot ${{ github.ref_name }}"
files: package/packages/com_sportsmanager.zip
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+7 -72
View File
@@ -1,25 +1,16 @@
# SportsManager # SportsManager
## DEV/STAGE environments ## Deploy status
| LV | HOSTER | DOMAIN | BRANCH | ### DEV environment
| ------ | -------- | ------------------------------------------------------------ | -------------------- | [![buddy pipeline](https://buddy.kicktemp.com/kicktemp/com-sportsmanager/pipelines/pipeline/173/badge.svg?token=de39e4e4c47351d592b59a5d1e26a41cf5196861f67d4499bbab990600468001 "buddy pipeline")](https://buddy.kicktemp.com/kicktemp/com-sportsmanager/pipelines/pipeline/173) [Preview: sportsmanager.s10.kicktemp.dev](https://sportsmanager.s10.kicktemp.dev)
| DTFB | Kicktemp | [stage.dtfb.de](https://stage.dtfb.de) | dev |
| TFVHH | Kicktemp | [stage.kickern-hamburg.de](https://stage.kickern-hamburg.de) | dev |
| STFVH | DTFB | [stage.stfv.de](https://stage.stfv.de/) | sportsmanager2-stage |
| MTFV | DTFB | [stage.mtfv.de](https://stage.mtfv.de/) | ? |
| TFVSH | DTFB | [relaunch.tfvsh.de](https://relaunch.tfvsh.de) | ? |
[![buddy pipeline](https://buddy.kicktemp.com/kicktemp/com-sportsmanager/pipelines/pipeline/204/badge.svg?token=de39e4e4c47351d592b59a5d1e26a41cf5196861f67d4499bbab990600468001 "buddy pipeline")](https://buddy.kicktemp.com/kicktemp/com-sportsmanager/pipelines/pipeline/204) [Preview: stage.kickern-hamburg.de](https://stage.kickern-hamburg.de)
## PROD environments ### PROD environment
[![buddy pipeline](https://buddy.kicktemp.com/kicktemp/com-sportsmanager/pipelines/pipeline/218/badge.svg?token=de39e4e4c47351d592b59a5d1e26a41cf5196861f67d4499bbab990600468001 "buddy pipeline")](https://buddy.kicktemp.com/kicktemp/com-sportsmanager/pipelines/pipeline/218) [Preview: dtfb.de](https://dtfb.de)
| LV | HOSTER | DOMAIN | BRANCH | [![buddy pipeline](https://buddy.kicktemp.com/kicktemp/com-sportsmanager/pipelines/pipeline/219/badge.svg?token=de39e4e4c47351d592b59a5d1e26a41cf5196861f67d4499bbab990600468001 "buddy pipeline")](https://buddy.kicktemp.com/kicktemp/com-sportsmanager/pipelines/pipeline/219) [Preview: kickern-hamburg.de](https://kickern-hamburg.de)
| ------ | -------- | ------------------------------------------------ | ------------------- |
| DTFB | Kicktemp | [dtfb.de](https://dtfb.de) | production |
| TFVHH | Kicktemp | [kickern-hamburg.de](https://kickern-hamburg.de) | production |
| MTFV | DTFB | [mtfv.de](https://mtfv.de/) | sportsmanager2-prod |
| TFVSH | DTFB | [tfvsh.de](https://tfvsh.de/) | sportsmanager2-prod |
| STFVH | DTFB | [stfv.de](https://stfv.de/) | sportsmanager2-prod |
## Test setup ## Test setup
@@ -49,59 +40,3 @@ joomla specific database prefixes like #__
To set it up, insert into the configuration popup which follows after you enable the framework support: To set it up, insert into the configuration popup which follows after you enable the framework support:
Joomla install path: `./data/joomla_data` Joomla install path: `./data/joomla_data`
JConfig: `./data/joomla_data/configuration.php` JConfig: `./data/joomla_data/configuration.php`
> This works only with mounted volumes. However, mounted volumes will slow down the joomla instance significantly.
> The current setup does not use mounted volumes.
> An alternative would be to download joomla and use that installation
### Debugging (with Docker/Intellij)
1. Start Docker Container (see above)
2. Create a terminal for that container
```shell
docker exec -it <container_name> bash
```
3. install xdebug within the container since joomla does not come with xdebug preinstalled
```shell
pecl install xdebug
```
4. restart the container
5. In Intellij Go to [File | Settings | Languages & Frameworks | PHP | Servers](jetbrains://idea/settings?name=Languages+%26+Frameworks--PHP--Servers) and setup your server
| | |
|----------|-----------|
| name | anything |
| host | localhost |
| port | 8080 |
| debugger | xdebug |
use the path mapping and map the repo structure to the container content
| File/Directory | path on server |
|------------------------------------------------------------------|----------------------------------------|
| \<path>/com_sportsmanager/src/structure/administrator/components | /var/www/html/administrator/components |
| \<path>/com_sportsmanager/src/structure/components | /var/www/html/components |
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
-2
View File
@@ -1,2 +0,0 @@
This is no official release!
The Release and the release notes will be generated by github actions
-1
View File
@@ -30,7 +30,6 @@ services:
MYSQL_USER: joomla MYSQL_USER: joomla
MYSQL_PASSWORD: examplepass MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1' MYSQL_RANDOM_ROOT_PASSWORD: '1'
TZ: Europe/Berlin
volumes: volumes:
- joomla_database:/var/lib/mysql - joomla_database:/var/lib/mysql
networks: networks:
-9
View File
@@ -1924,12 +1924,3 @@ opcache.file_cache = /tmp/opcache_file
; List of headers files to preload, wildcard patterns allowed. ; List of headers files to preload, wildcard patterns allowed.
;ffi.preload= ;ffi.preload=
zend_extension=xdebug.so
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=host.docker.internal
xdebug.client_port=9003
xdebug.log=/tmp/xdebug.log
xdebug.discover_client_host=false
xdebug.log_level=7
+1 -5
View File
@@ -43,7 +43,7 @@ export const config = {
watch: ['src/structure/**/*.{php,html,xml,ini,less,json,js,css}'], watch: ['src/structure/**/*.{php,html,xml,ini,less,json,js,css}'],
}, },
copyrelease: { copyrelease: {
src: ['RELEASE_NOTES.md','src/structure/**/**', 'src/structure/**/.*', '!src/structure/**/*.{php,html,xml,ini,less,json,js,css}', '!src/structure/**/.*.{php,html,xml,ini,less,json,js,css}'], src: ['src/structure/**/**', 'src/structure/**/.*', '!src/structure/**/*.{php,html,xml,ini,less,json,js,css}', '!src/structure/**/.*.{php,html,xml,ini,less,json,js,css}'],
replacesrc: ['src/structure/**/**.{php,html,xml,ini,less,json,js,css}', 'src/structure/**/.*.{php,html,xml,ini,less,json,js,css}'], replacesrc: ['src/structure/**/**.{php,html,xml,ini,less,json,js,css}', 'src/structure/**/.*.{php,html,xml,ini,less,json,js,css}'],
dest: 'releasefiles/' dest: 'releasefiles/'
}, },
@@ -90,10 +90,6 @@ export const config = {
{ {
src: './releasefiles/plugins/system/kickyootheme/**/**', src: './releasefiles/plugins/system/kickyootheme/**/**',
dest: 'sourcefiles/plg_system_kickyootheme' dest: 'sourcefiles/plg_system_kickyootheme'
},
{
src: './releasefiles/RELEASE_NOTES.md',
dest: 'sourcefiles/com_sportsmanager/admin/'
} }
], ],
package: [ package: [
+2917 -4541
View File
File diff suppressed because it is too large Load Diff
+3 -2
View File
@@ -1,7 +1,7 @@
{ {
"name": "sportsmanager", "name": "sportsmanager",
"description": "", "description": "",
"version": "2.0.0", "version": "0.0.1",
"scripts": { "scripts": {
"boilerplate": "cross-env NODE_ENV=development gulp boilerplate", "boilerplate": "cross-env NODE_ENV=development gulp boilerplate",
"build": "cross-env NODE_ENV=production gulp build", "build": "cross-env NODE_ENV=production gulp build",
@@ -16,7 +16,7 @@
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://github.com/Deutscher-Tischfussballbund/com_sportsmanager.git" "url": "git+https://github.com/nielsnuebel/com_sportsmanager.git"
}, },
"keywords": [], "keywords": [],
"author": { "author": {
@@ -122,6 +122,7 @@
"browser-sync": "^2.26.12", "browser-sync": "^2.26.12",
"core-js": "^3.6.5", "core-js": "^3.6.5",
"cross-env": "^7.0.2", "cross-env": "^7.0.2",
"fs": "0.0.1-security",
"gulp": "^4.0.2", "gulp": "^4.0.2",
"gulp-changed": "^4.0.2", "gulp-changed": "^4.0.2",
"gulp-clean": "^0.4.0", "gulp-clean": "^0.4.0",
@@ -24,15 +24,6 @@ class HtmlView extends BaseHtmlView
?> ?>
<h3><?php echo Text::_('COM_SPORTSMANAGER'); ?> &#8211; Created by Sven Nickel | Maintained by DTFB</h3> <h3><?php echo Text::_('COM_SPORTSMANAGER'); ?> &#8211; Created by Sven Nickel | Maintained by DTFB</h3>
<?php <?php
$notesPath = JPATH_COMPONENT_ADMINISTRATOR . '/RELEASE_NOTES.md';
if (file_exists($notesPath)) {
$notes = file_get_contents($notesPath);
echo '<div style="padding:1em;"><h3>Release Notes</h3><pre>' .
htmlspecialchars($notes) . '</pre></div>';
}
// Display the template // Display the template
parent::display($tpl); parent::display($tpl);
} }
@@ -21,15 +21,12 @@ COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_TEAMS_JOINT="Mannschaften in gem
COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_CLUBS="Vereine" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_CLUBS="Vereine"
COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_VENUES="Spielorte" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_VENUES="Spielorte"
COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_APPOINTMENTS="Termine" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_APPOINTMENTS="Termine"
COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_MATCH_RESCHEDULING="Spielverlegungen"
COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_ASSOCIATION_BODIES="Verbandsorgane"
COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_HALL_OF_FAME="Hall Of Fame"
COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_TITLE="Titel" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_TITLE="Titel"
COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_TITLE_DESC="Titel, der im Fenster oben angezeigt wird" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_TITLE_DESC="Titel, der im Fenster oben angezeigt wird"
COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_DESCRIPTION="Beschreibung" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_DESCRIPTION="Beschreibung"
COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_DESCRIPTION_DESC="Beschreibung, die unterhalb des Titels angezeigt wird (WICHTIG: Werden HTML-Tags verwendet, müssen auch Umlaute in HTML-Code angeben werden)" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_DESCRIPTION_DESC="Beschreibung, die unterhalb des Titels angezeigt wird (WICHTIG: Werden HTML-Tags verwendet, müssen auch Umlaute in HTML-Code angeben werden)"
COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_CATEGORIES="Kategorien" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_CATEGORIES="Kategorien"
COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_CATEGORIES_DESC="Eine optionale Auswahl von Kategorienummern durch Kommata oder Spiegelstrich getrennt" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_CATEGORIES_DESC="Eine optionale Auswahl an durch Kommata getrennte Kategorienummern"
COM_SPORTSMANAGER_LAYOUT_ELO_RANKING_TITLE="Layout: Elo-Rangliste" COM_SPORTSMANAGER_LAYOUT_ELO_RANKING_TITLE="Layout: Elo-Rangliste"
COM_SPORTSMANAGER_LAYOUT_ELO_RANKING_DESC="Auflistung der Spieler sortiert nach Elo-Wertung" COM_SPORTSMANAGER_LAYOUT_ELO_RANKING_DESC="Auflistung der Spieler sortiert nach Elo-Wertung"
COM_SPORTSMANAGER_LAYOUT_ELO_RANKING_OPTION_ELO_RANKING="Elo-Rangliste" COM_SPORTSMANAGER_LAYOUT_ELO_RANKING_OPTION_ELO_RANKING="Elo-Rangliste"
@@ -21,15 +21,12 @@ COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_TEAMS_JOINT="Teams in joint list
COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_CLUBS="Clubs" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_CLUBS="Clubs"
COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_VENUES="Venues" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_VENUES="Venues"
COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_APPOINTMENTS="Appointments" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_APPOINTMENTS="Appointments"
COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_MATCH_RESCHEDULING="Match reschedulings"
COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_ASSOCIATION_BODIES="Association bodies"
COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_HALL_OF_FAME="Hall of fame"
COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_TITLE="Title" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_TITLE="Title"
COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_TITLE_DESC="Title which will be shows on top" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_TITLE_DESC="Title which will be shows on top"
COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_DESCRIPTION="Description" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_DESCRIPTION="Description"
COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_DESCRIPTION_DESC="Description that will be shows below the titel (IMPORTANT: if html tags are used, special characters must be maskeraded)" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_DESCRIPTION_DESC="Description that will be shows below the titel (IMPORTANT: if html tags are used, special characters must be maskeraded)"
COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_CATEGORIES="Categories" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_CATEGORIES="Categories"
COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_CATEGORIES_DESC="An optional selection of category numbers seperated by commas or bullet point" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_CATEGORIES_DESC="An optional selection of category numbers seperated by commas"
COM_SPORTSMANAGER_LAYOUT_ELO_RANKING_TITLE="Layout: elo ranking" COM_SPORTSMANAGER_LAYOUT_ELO_RANKING_TITLE="Layout: elo ranking"
COM_SPORTSMANAGER_LAYOUT_ELO_RANKING_DESC="Listing of players sorted by elo rating" COM_SPORTSMANAGER_LAYOUT_ELO_RANKING_DESC="Listing of players sorted by elo rating"
COM_SPORTSMANAGER_LAYOUT_ELO_RANKING_OPTION_ELO_RANKING="Elo ranking" COM_SPORTSMANAGER_LAYOUT_ELO_RANKING_OPTION_ELO_RANKING="Elo ranking"
File diff suppressed because it is too large Load Diff
@@ -4,8 +4,10 @@
*/ */
use JetBrains\PhpStorm\NoReturn; use JetBrains\PhpStorm\NoReturn;
use Joomla\CMS\Application\AdministratorApplication;
use Joomla\CMS\Application\SiteApplication; use Joomla\CMS\Application\SiteApplication;
use Joomla\CMS\Factory; use Joomla\CMS\Factory;
use Joomla\CMS\User\UserFactory;
use Joomla\CMS\User\UserFactoryInterface; use Joomla\CMS\User\UserFactoryInterface;
use Joomla\Registry\Registry; use Joomla\Registry\Registry;
@@ -41,7 +43,8 @@ function notifyChange($data): void
try { try {
$db = getDatabase(); $db = getDatabase();
$query = "SELECT wert from #__sportsmanager_einstellungen WHERE name='api_push_key'"; $query = "SELECT wert from #__sportsmanager_einstellungen WHERE name='api_push_key'";
$push_key = loadResult($db, $query); $db->setQuery($query);
$push_key = $db->loadResult();
$push_server = !empty($push_key) && isset(_payload($push_key)->aud) ? _payload($push_key)->aud : ''; $push_server = !empty($push_key) && isset(_payload($push_key)->aud) ? _payload($push_key)->aud : '';
if ($push_server != '' && $push_key != '') { if ($push_server != '' && $push_key != '') {
$url = $push_server . (str_ends_with($push_server, '/') ? '' : '/') . 'v1/notifications/send'; $url = $push_server . (str_ends_with($push_server, '/') ? '' : '/') . 'v1/notifications/send';
@@ -134,8 +137,11 @@ function begegnungVerlegenNotify($begegnung, $users, $vorschlagendes_team_id, $h
$expires->modify('+16 hours'); $expires->modify('+16 hours');
$db = getDatabase(); $db = getDatabase();
$query = "SELECT berechtigt_team_id from #__sportsmanager_berechtigt_fuer_team where berechtigt_user_id = $user_id"; $query = "SELECT berechtigt_team_id from #__sportsmanager_berechtigt_fuer_team where berechtigt_user_id = $user_id";
$team_id = loadObjectList($db, $query); $db->setQuery($query);
if (!$db->execute()) {
abortWithError($db->stderr(true));
}
$team_id = $db->loadObjectList();
JSON_sportsmanager::JSON([ JSON_sportsmanager::JSON([
'token' => jwt_token([ 'token' => jwt_token([
'sub' => $user_id, 'sub' => $user_id,
@@ -174,7 +180,8 @@ function begegnungVerlegenNotify($begegnung, $users, $vorschlagendes_team_id, $h
$db = getDatabase(); $db = getDatabase();
$query = $db->getQuery(true); $query = $db->getQuery(true);
$query->select('id')->from('#__users')->where('username = "' . $username . '"')->setLimit(1); $query->select('id')->from('#__users')->where('username = "' . $username . '"')->setLimit(1);
$user_id = loadResult($db, $query); $db->setQuery($query);
$user_id = $db->loadResult();
$user = $container->get(UserFactoryInterface::class)->loadUserById($user_id); $user = $container->get(UserFactoryInterface::class)->loadUserById($user_id);
//TODO: pw verification modernising: use php native methods, however this also needs new pw hashing. maybe force a pw reset on all accounts //TODO: pw verification modernising: use php native methods, however this also needs new pw hashing. maybe force a pw reset on all accounts
@@ -7,8 +7,6 @@ use Joomla\Database\DatabaseInterface;
use Joomla\Database\Mysql\MysqlDriver; use Joomla\Database\Mysql\MysqlDriver;
use Joomla\Database\Mysqli\MysqliDriver; use Joomla\Database\Mysqli\MysqliDriver;
require_once JPATH_SITE . '/components/com_sportsmanager/database/util.php';
function initDatabase(): void function initDatabase(): void
{ {
global $sportsmanager_database_local; global $sportsmanager_database_local;
@@ -24,7 +22,11 @@ function initDatabase(): void
$sportsmanager_database_local = Factory::getContainer()->get(DatabaseInterface::class); $sportsmanager_database_local = Factory::getContainer()->get(DatabaseInterface::class);
$query = "SELECT * FROM #__sportsmanager_einstellungen"; $query = "SELECT * FROM #__sportsmanager_einstellungen";
$rows = loadObjectList($sportsmanager_database_local, $query); $sportsmanager_database_local->setQuery($query);
if (!$sportsmanager_database_local->execute()) {
die($sportsmanager_database_local->stderr(true));
}
$rows = $sportsmanager_database_local->loadObjectList();
$database_driver = "mysql"; $database_driver = "mysql";
$database_host = ""; $database_host = "";
@@ -73,13 +75,14 @@ function initDatabase(): void
if ($sportsmanager_database_external === NULL) { if ($sportsmanager_database_external === NULL) {
echo "<strong>" . Text::_('COM_SPORTSMANAGER_CONNECTION_EXTERNAL_DB_FAILURE') . "</strong><br><br>"; echo "<strong>" . Text::_('COM_SPORTSMANAGER_CONNECTION_EXTERNAL_DB_FAILURE') . "</strong><br><br>";
} else { } else {
$query = "SELECT wert FROM #__sportsmanager_einstellungen WHERE name = 'datenbank_version'";
$sportsmanager_database_external->setQuery($query);
try { try {
if (!$sportsmanager_database_external->execute()) { if (!$sportsmanager_database_external->execute()) {
echo "<strong>" . Text::_('COM_SPORTSMANAGER_EXTERNAL_DB_NO_SM_TABLES') . "</strong><br><br>"; echo "<strong>" . Text::_('COM_SPORTSMANAGER_EXTERNAL_DB_NO_SM_TABLES') . "</strong><br><br>";
$sportsmanager_database_external = NULL; $sportsmanager_database_external = NULL;
} else { } else {
$query = "SELECT wert FROM #__sportsmanager_einstellungen WHERE name = 'datenbank_version'"; $db_version = $sportsmanager_database_external->loadResult();
$db_version = loadResult($sportsmanager_database_external, $query);
if ($db_version < 38) { if ($db_version < 38) {
echo "<strong>" . Text::_('COM_SPORTSMANAGER_EXTERNAL_DB_NO_SM_VERSION') . "</strong><br><br>"; echo "<strong>" . Text::_('COM_SPORTSMANAGER_EXTERNAL_DB_NO_SM_VERSION') . "</strong><br><br>";
$sportsmanager_database_external = NULL; $sportsmanager_database_external = NULL;
@@ -20,15 +20,27 @@ function updateDatabase(): void
$termin_aktionen_email_setzen = false; $termin_aktionen_email_setzen = false;
$query = "SHOW TABLE STATUS WHERE name = '" . $db->getPrefix() . "tsleague_basis' || name = '" . $db->getPrefix() . "tsleague_einstellungen'"; $query = "SHOW TABLE STATUS WHERE name = '" . $db->getPrefix() . "tsleague_basis' || name = '" . $db->getPrefix() . "tsleague_einstellungen'";
$rows = loadObjectList($db, $query); $db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$rows = $db->loadObjectList();
if (count($rows) > 0) { if (count($rows) > 0) {
$query = "SHOW TABLE STATUS WHERE name = '" . $db->getPrefix() . "tsleague_basis'"; $query = "SHOW TABLE STATUS WHERE name = '" . $db->getPrefix() . "tsleague_basis'";
$rows = loadObjectList($db, $query); $db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$rows = $db->loadObjectList();
if (count($rows) > 0) { if (count($rows) > 0) {
$query = "SELECT * FROM #__tsleague_basis"; $query = "SELECT * FROM #__tsleague_basis";
$rows = loadObjectList($db, $query); $db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$rows = $db->loadObjectList();
if (count($rows) == 0) if (count($rows) == 0)
die(Text::_('COM_SPORTSMANAGER_EXTERNAL_DB_INCONSISTENCY')); die(Text::_('COM_SPORTSMANAGER_EXTERNAL_DB_INCONSISTENCY'));
@@ -325,7 +337,11 @@ function updateDatabase(): void
if ($datenbank_version < 9) { if ($datenbank_version < 9) {
$query = "SELECT spieler_id, geschlecht" $query = "SELECT spieler_id, geschlecht"
. "\n FROM #__tsleague_spieler"; . "\n FROM #__tsleague_spieler";
$spieler = loadObjectList($db, $query); $db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$spieler = $db->loadObjectList();
$query = "ALTER TABLE #__tsleague_spieler CHANGE geschlecht geschlecht char(1)"; $query = "ALTER TABLE #__tsleague_spieler CHANGE geschlecht geschlecht char(1)";
$db->setQuery($query); $db->setQuery($query);
@@ -839,7 +855,11 @@ function updateDatabase(): void
} }
$query = "SELECT * FROM #__tsleague_einstellungen WHERE name = 'datenbank_version'"; $query = "SELECT * FROM #__tsleague_einstellungen WHERE name = 'datenbank_version'";
$rows = loadObjectList($db, $query); $db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$rows = $db->loadObjectList();
if (count($rows) == 0) if (count($rows) == 0)
die(Text::_('COM_SPORTSMANAGER_EXTERNAL_DB_INCONSISTENCY')); die(Text::_('COM_SPORTSMANAGER_EXTERNAL_DB_INCONSISTENCY'));
@@ -1708,7 +1728,11 @@ function updateDatabase(): void
} }
$query = "SELECT * FROM #__sportsmanager_einstellungen WHERE name = 'datenbank_version'"; $query = "SELECT * FROM #__sportsmanager_einstellungen WHERE name = 'datenbank_version'";
$rows = loadObjectList($db, $query); $db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$rows = $db->loadObjectList();
if (count($rows) == 0) if (count($rows) == 0)
die(Text::_('COM_SPORTSMANAGER_EXTERNAL_DB_INCONSISTENCY')); die(Text::_('COM_SPORTSMANAGER_EXTERNAL_DB_INCONSISTENCY'));
@@ -2150,7 +2174,11 @@ function updateDatabase(): void
. "\n SELECT YEAR(erster_tag) AS jahr FROM #__sportsmanager_bestenliste WHERE NOT ISNULL(erster_tag)" . "\n SELECT YEAR(erster_tag) AS jahr FROM #__sportsmanager_bestenliste WHERE NOT ISNULL(erster_tag)"
. "\n GROUP BY jahr" . "\n GROUP BY jahr"
. "\n ORDER BY jahr"; . "\n ORDER BY jahr";
$jahre = loadObjectList($db, $query); $db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$jahre = $db->loadObjectList();
if (count($jahre) > 0) { if (count($jahre) > 0) {
foreach ($jahre as $jahr) { foreach ($jahre as $jahr) {
@@ -2171,7 +2199,11 @@ function updateDatabase(): void
} }
$query = "SELECT * FROM #__sportsmanager_saison ORDER BY saisonbezeichnung DESC LIMIT 1"; $query = "SELECT * FROM #__sportsmanager_saison ORDER BY saisonbezeichnung DESC LIMIT 1";
$saisons = loadObjectList($db, $query); $db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$saisons = $db->loadObjectList();
$aktuelle_saison_id = $saisons[0]->saison_id; $aktuelle_saison_id = $saisons[0]->saison_id;
// Saisons den Veranstaltungen zuordnen // Saisons den Veranstaltungen zuordnen
@@ -2612,7 +2644,11 @@ function updateDatabase(): void
. "\n INNER JOIN #__sportsmanager_veranstaltung USING (veranstaltung_id)" . "\n INNER JOIN #__sportsmanager_veranstaltung USING (veranstaltung_id)"
. "\n LEFT JOIN #__sportsmanager_saison USING (saison_id)" . "\n LEFT JOIN #__sportsmanager_saison USING (saison_id)"
. "\n ORDER BY heimspielort_name, heimspielort_anschrift"; . "\n ORDER BY heimspielort_name, heimspielort_anschrift";
$teams = loadObjectList($db, $query); $db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$teams = $db->loadObjectList();
$heimspielort_name = ""; $heimspielort_name = "";
$heimspielort_strasse = ""; $heimspielort_strasse = "";
@@ -2984,7 +3020,11 @@ function updateDatabase(): void
$query = "SELECT * FROM #__sportsmanager_turniervoranmeldung" $query = "SELECT * FROM #__sportsmanager_turniervoranmeldung"
. "\n ORDER BY turnierdisziplin_id"; . "\n ORDER BY turnierdisziplin_id";
$rows = loadObjectList($db, $query); $db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$rows = $db->loadObjectList();
foreach ($rows as $row) { foreach ($rows as $row) {
$query = "INSERT INTO #__sportsmanager_turniermeldung (turnierdisziplin_id, rundenstufe, platz)" $query = "INSERT INTO #__sportsmanager_turniermeldung (turnierdisziplin_id, rundenstufe, platz)"
@@ -3175,7 +3215,11 @@ function updateDatabase(): void
if ($datenbank_version < 40) { if ($datenbank_version < 40) {
$query = "SELECT * FROM #__sportsmanager_kategorie ORDER BY typ, nummer, kategorie_id DESC"; $query = "SELECT * FROM #__sportsmanager_kategorie ORDER BY typ, nummer, kategorie_id DESC";
$rows = loadObjectList($db, $query); $db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$rows = $db->loadObjectList();
$typ = -1; $typ = -1;
$nummer = -1; $nummer = -1;
@@ -4009,7 +4053,11 @@ function updateDatabase(): void
} }
$query = "SELECT * FROM #__sportsmanager_moderator"; $query = "SELECT * FROM #__sportsmanager_moderator";
$rows = loadObjectList($db, $query); $db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$rows = $db->loadObjectList();
foreach ($rows as $row) { foreach ($rows as $row) {
$moderator_id = $row->moderator_id; $moderator_id = $row->moderator_id;
@@ -5166,7 +5214,8 @@ function updateDatabase(): void
->from('INFORMATION_SCHEMA.COLUMNS') ->from('INFORMATION_SCHEMA.COLUMNS')
->where('TABLE_NAME = ' . $db->quote($db->replacePrefix('#__sportsmanager_rangliste'))) ->where('TABLE_NAME = ' . $db->quote($db->replacePrefix('#__sportsmanager_rangliste')))
->where('COLUMN_NAME = ' . $db->quote('lizenzen')); ->where('COLUMN_NAME = ' . $db->quote('lizenzen'));
$exists = (bool)loadResult($db, $query); $db->setQuery($query);
$exists = (bool)$db->loadResult();
if (!$exists) { if (!$exists) {
$query = "ALTER TABLE #__sportsmanager_rangliste ADD lizenzen varchar(30) DEFAULT NULL AFTER streichergebnisse"; $query = "ALTER TABLE #__sportsmanager_rangliste ADD lizenzen varchar(30) DEFAULT NULL AFTER streichergebnisse";
@@ -5181,7 +5230,8 @@ function updateDatabase(): void
->from('INFORMATION_SCHEMA.COLUMNS') ->from('INFORMATION_SCHEMA.COLUMNS')
->where('TABLE_NAME = ' . $db->quote($db->replacePrefix('#__sportsmanager_spieler'))) ->where('TABLE_NAME = ' . $db->quote($db->replacePrefix('#__sportsmanager_spieler')))
->where('COLUMN_NAME = ' . $db->quote('lizenz')); ->where('COLUMN_NAME = ' . $db->quote('lizenz'));
$exists = (bool)loadResult($db, $query); $db->setQuery($query);
$exists = (bool)$db->loadResult();
if (!$exists) { if (!$exists) {
$query = "ALTER TABLE #__sportsmanager_spieler ADD lizenz varchar(30) DEFAULT NULL AFTER lizenznr"; $query = "ALTER TABLE #__sportsmanager_spieler ADD lizenz varchar(30) DEFAULT NULL AFTER lizenznr";
@@ -5216,502 +5266,14 @@ function updateDatabase(): void
} }
} }
if ($datenbank_version < 104) {
$query = "ALTER TABLE #__sportsmanager_veranstaltung ADD direktervergleich INT(4) NOT NULL DEFAULT '0' AFTER tabellenwertung;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$query = "ALTER TABLE #__sportsmanager_team ADD setzliste_nr INT(4) NULL DEFAULT NULL AFTER veranstaltung_id;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$query = "ALTER TABLE #__sportsmanager_begegnung ADD spiel_nr INT(4) NULL DEFAULT NULL AFTER spieltag;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$query = "UPDATE #__sportsmanager_einstellungen"
. "\n SET wert = '104'"
. "\n WHERE name = 'datenbank_version'";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
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 ($datenbank_version < 111) {
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'verbands_kuerzel', wert = 'tbe.';";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "UPDATE #__sportsmanager_einstellungen"
. "\n SET wert = '111'"
. "\n WHERE name = 'datenbank_version'";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
if ($datenbank_version < 112) {
// Korrektur Startuhrzeit in sportsmanager_turnierdisziplin bei eintägigen Veranstaltungen
$query = "UPDATE #__sportsmanager_turnierdisziplin td"
. "\n JOIN #__sportsmanager_turnier t ON td.turnier_id = t.turnier_id"
. "\n SET td.beginn = CONCAT(t.erster_tag, ' ', TIME(td.beginn))"
. "\n WHERE t.erster_tag = t.letzter_tag;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$query = "UPDATE #__sportsmanager_einstellungen"
. "\n SET wert = '112'"
. "\n WHERE name = 'datenbank_version'";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
if ($datenbank_version < 113) {
// Korrektur Startuhrzeit in sportsmanager_turnierdisziplin bei eintägigen Veranstaltungen
$query = "UPDATE #__sportsmanager_turnierdisziplin td"
. "\n JOIN #__sportsmanager_turnier t ON td.turnier_id = t.turnier_id"
. "\n SET td.beginn = CONCAT(t.erster_tag, ' ', TIME(td.beginn))"
. "\n WHERE t.erster_tag = t.letzter_tag;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$query = "UPDATE #__sportsmanager_einstellungen"
. "\n SET wert = '113'"
. "\n WHERE name = 'datenbank_version'";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
if ($datenbank_version < 114) {
$query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_regelwerke` ("
. "\n `regelwerke_id` int(11) NOT NULL AUTO_INCREMENT,"
. "\n `regelwerk` varchar(32) NOT NULL,"
. "\n PRIMARY KEY (`regelwerke_id`),"
. "\n UNIQUE KEY `regelwerk` (`regelwerk`)"
. "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_verstoesse` ("
. "\n `verstoesse_id` int(11) NOT NULL AUTO_INCREMENT,"
. "\n `regelwerke_id` int(11) NOT NULL DEFAULT 0,"
. "\n `paragraph_spo` varchar(32) NOT NULL DEFAULT '',"
. "\n `paragraph_go` varchar(32) NOT NULL DEFAULT '',"
. "\n `verstoss` varchar(64) NOT NULL DEFAULT '',"
. "\n `haupttext` text NOT NULL,"
. "\n `zusatztext` text NOT NULL,"
. "\n `gebuehr` smallint(3) NOT NULL DEFAULT 0,"
. "\n `zusatzgebuehr` smallint(2) NOT NULL DEFAULT 0,"
. "\n `zur_auswahl` tinyint(1) NOT NULL DEFAULT 1,"
. "\n PRIMARY KEY (`verstoesse_id`)"
. "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_ordnungsstrafen` ("
. "\n `ordnungsstrafen_id` int(11) NOT NULL AUTO_INCREMENT,"
. "\n `verstoesse_id` int(11) NOT NULL DEFAULT 0,"
. "\n `begegnung_id` int(11) NOT NULL DEFAULT 0,"
. "\n `team_id` int(11) NOT NULL DEFAULT 0,"
. "\n `aussteller_id` int(11) NOT NULL DEFAULT 0,"
. "\n `ausstelldatum` datetime NOT NULL DEFAULT current_timestamp(),"
. "\n `versender_id` int(11) DEFAULT NULL,"
. "\n `versendedatum` datetime DEFAULT NULL,"
. "\n `rechnungssteller_id` int(11) DEFAULT NULL,"
. "\n `rechnungsdatum` datetime DEFAULT NULL,"
. "\n `multiplikator` tinyint(1) NOT NULL DEFAULT 1,"
. "\n `weitere_angaben` text NOT NULL,"
. "\n PRIMARY KEY (`ordnungsstrafen_id`)"
. "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_email_vorlagen` ("
. "\n `email_vorlagen_id` int(11) NOT NULL AUTO_INCREMENT,"
. "\n `vorlage` varchar(64) NOT NULL,"
. "\n `betreff` varchar(256) NOT NULL DEFAULT '',"
. "\n `von` varchar(64) NOT NULL DEFAULT '',"
. "\n `an` varchar(256) NOT NULL DEFAULT '',"
. "\n `cc` varchar(256) NOT NULL DEFAULT '',"
. "\n `bcc` varchar(256) NOT NULL DEFAULT '',"
. "\n `email_text` text NOT NULL,"
. "\n PRIMARY KEY (`email_vorlagen_id`),"
. "\n UNIQUE KEY `vorlage` (`vorlage`)"
. "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'ordnungsstrafen_verwenden', wert = '0';";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "INSERT IGNORE INTO `#__sportsmanager_email_vorlagen` (`email_vorlagen_id`, `vorlage`) VALUES (NULL, 'Ordnungsstrafe');";
$db->setQuery($query);
if (!$db->execute()) { die($db->stderr(true)); }
$columns = $db->getTableColumns('#__sportsmanager_veranstaltung');
if (!array_key_exists('regelwerke_id', $columns)) {
$query = "ALTER TABLE `#__sportsmanager_veranstaltung` ADD COLUMN `regelwerke_id` INT(11) NOT NULL DEFAULT '0' AFTER `bezeichnung`;";
$db->setQuery($query);
if (!$db->execute()) { die($db->stderr(true)); }
}
$query = "UPDATE #__sportsmanager_einstellungen"
. "\n SET wert = '114'"
. "\n WHERE name = 'datenbank_version'";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
if ($datenbank_version < 115) {
// Erweiterung Tabelle #__sportsmanager_verschieberegel
$columns = $db->getTableColumns('#__sportsmanager_verschieberegel');
if (!array_key_exists('begruendung_erforderlich', $columns)
|| !array_key_exists('vereine_berechtigt', $columns)
|| !array_key_exists('verband_berechtigt', $columns)) {
$query = "ALTER TABLE `#__sportsmanager_verschieberegel`"
. "\n ADD COLUMN `begruendung_erforderlich` INT(1) NOT NULL DEFAULT 0 AFTER `ablehnen`,"
. "\n ADD COLUMN `vereine_berechtigt` INT(1) NOT NULL DEFAULT 1 AFTER `begruendung_erforderlich`,"
. "\n ADD COLUMN `verband_berechtigt` INT(1) NOT NULL DEFAULT 0 AFTER `vereine_berechtigt`;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
$query = "INSERT IGNORE INTO `#__sportsmanager_email_vorlagen` (`email_vorlagen_id`, `vorlage`) VALUES (NULL, 'Spielverlegung');";
$db->setQuery($query);
if (!$db->execute()) { die($db->stderr(true)); }
$query = "UPDATE #__sportsmanager_einstellungen"
. "\n SET wert = '115'"
. "\n WHERE name = 'datenbank_version'";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
if ($datenbank_version < 116) {
$columns = $db->getTableColumns('#__sportsmanager_spielort');
if (!array_key_exists('telefon', $columns)
|| !array_key_exists('email', $columns)
|| !array_key_exists('ruhetage', $columns)) {
$query = "ALTER TABLE `#__sportsmanager_spielort`"
. "\n ADD `telefon` VARCHAR(64) NULL DEFAULT NULL AFTER `url`,"
. "\n ADD `email` VARCHAR(64) NULL DEFAULT NULL AFTER `telefon`,"
. "\n ADD `ruhetage` VARCHAR(64) NULL DEFAULT NULL AFTER `email`;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
$columns = $db->getTableColumns('#__sportsmanager_team');
if (!array_key_exists('trainingstage', $columns)){
$query = "ALTER TABLE `#__sportsmanager_team`"
. "\n ADD `trainingstage` VARCHAR(64) NULL DEFAULT NULL AFTER `heimspielort_id`;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
$query = "UPDATE #__sportsmanager_einstellungen"
. "\n SET wert = '116'"
. "\n WHERE name = 'datenbank_version'";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
if ($datenbank_version < 117) {
$query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_team_strafen` ("
. "\n `team_strafen_id` int(11) NOT NULL AUTO_INCREMENT,"
. "\n `zeitpunkt` datetime NOT NULL,"
. "\n `moderator_user_id` int(11) DEFAULT NULL,"
. "\n `team_id` int(11) NOT NULL DEFAULT '0',"
. "\n `strafe` float(6,2) NOT NULL DEFAULT '0',"
. "\n `beschreibung` text NOT NULL,"
. "\n PRIMARY KEY (`team_strafen_id`)"
. "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$columns = $db->getTableColumns('#__sportsmanager_veranstaltung');
if (!array_key_exists('explizite_strafen', $columns)) {
$query = "ALTER TABLE #__sportsmanager_veranstaltung"
. "\n ADD explizite_strafen tinyint(4) DEFAULT '0' AFTER elo_wertung";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
$query = "UPDATE #__sportsmanager_einstellungen SET wert = '117' WHERE name = 'datenbank_version'";
$db->setQuery($query);
if (!$db->execute()) { die($db->stderr(true)); }
}
if ($datenbank_version < 118) {
$query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_verbandsorgane` ("
. "\n `verbandsorgane_id` int(11) NOT NULL AUTO_INCREMENT,"
. "\n `veranstalter_id` int(11) DEFAULT NULL,"
. "\n `verbandsorgan` varchar(32) DEFAULT NULL,"
. "\n `kategorie` int(4) DEFAULT NULL,"
. "\n `reihenfolge` int(4) DEFAULT NULL,"
. "\n `email` varchar(64) DEFAULT NULL,"
. "\n `beschreibung` text NOT NULL,"
. "\n PRIMARY KEY (`verbandsorgane_id`),"
. "\n KEY (`veranstalter_id`)"
. "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_mitglied_von_verbandsorgan` ("
. "\n `mitglied_von_verbandsorgan_id` int(11) NOT NULL AUTO_INCREMENT,"
. "\n `verbandsorgane_id` int(11) DEFAULT NULL,"
. "\n `funktion` varchar(32) DEFAULT NULL,"
. "\n `zusatzinfo` varchar(64) DEFAULT NULL,"
. "\n `spieler_id` int(11) DEFAULT NULL,"
. "\n `nachname` varchar(32) DEFAULT NULL,"
. "\n `vorname` varchar(32) DEFAULT NULL,"
. "\n `email` varchar(64) DEFAULT NULL,"
. "\n `telefon` varchar(32) DEFAULT NULL,"
. "\n `mobil` varchar(32) DEFAULT NULL,"
. "\n `reihenfolge` int(11) DEFAULT NULL,"
. "\n PRIMARY KEY (`mitglied_von_verbandsorgan_id`),"
. "\n KEY (`verbandsorgane_id`),"
. "\n KEY (`spieler_id`)"
. "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$query = "UPDATE #__sportsmanager_einstellungen"
. "\n SET wert = '118'"
. "\n WHERE name = 'datenbank_version'";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
if ($datenbank_version < 119) {
$query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_halloffame` ("
. "\n `halloffame_id` int(11) NOT NULL AUTO_INCREMENT,"
. "\n `veranstalter_id` int(11) DEFAULT NULL,"
. "\n `halloffame` varchar(64) DEFAULT NULL,"
. "\n `kategorie` int(4) DEFAULT NULL,"
. "\n `spielform` int(11) DEFAULT NULL,"
. "\n `reihenfolge` int(4) DEFAULT NULL,"
. "\n PRIMARY KEY (`halloffame_id`),"
. "\n KEY `veranstalter_id` (`veranstalter_id`)"
. "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_mitglied_von_halloffame` ("
. "\n `mitglied_halloffame_id` int(11) NOT NULL AUTO_INCREMENT,"
. "\n `halloffame_id` int(11) NOT NULL,"
. "\n `jahr` int(4) DEFAULT NULL,"
. "\n `platz` int(11) DEFAULT NULL,"
. "\n `verein_id` int(11) DEFAULT NULL,"
. "\n `teamname` varchar(64) DEFAULT NULL,"
. "\n `spieler1_id` int(11) DEFAULT NULL,"
. "\n `spieler1` varchar(64) DEFAULT NULL,"
. "\n `spieler2_id` int(11) DEFAULT NULL,"
. "\n `spieler2` varchar(64) DEFAULT NULL,"
. "\n PRIMARY KEY (`mitglied_halloffame_id`),"
. "\n UNIQUE KEY `halloffame_jahr_platz` (`halloffame_id`,`jahr`,`platz`),"
. "\n KEY `halloffame_id` (`halloffame_id`),"
. "\n KEY `verein_id` (`verein_id`),"
. "\n KEY `spieler1_id` (`spieler1_id`),"
. "\n KEY `spieler2_id` (`spieler2_id`)"
. "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$query = "UPDATE #__sportsmanager_einstellungen"
. "\n SET wert = '119'"
. "\n WHERE name = 'datenbank_version'";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
if ($termin_aktionen_email_setzen) { if ($termin_aktionen_email_setzen) {
$query = "SELECT aktion_user_id, termin_aktion_id" $query = "SELECT aktion_user_id, termin_aktion_id"
. "\n FROM #__sportsmanager_termin_aktion"; . "\n FROM #__sportsmanager_termin_aktion";
$rows = loadObjectList($db, $query); $db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$rows = $db->loadObjectList();
foreach ($rows as $row) { foreach ($rows as $row) {
$container = Factory::getContainer(); $container = Factory::getContainer();
@@ -1,47 +0,0 @@
<?php
use Joomla\CMS\Log\Log;
/**
* @param $db
* @param $query
* @return mixed
* @since 2.0.5
*/
function loadObjectList($db, $query): mixed
{
try {
$db->setQuery($query);
$objList = $db->loadObjectList();
} catch (RuntimeException $e) {
Log::add("Database error: " . $e->getMessage(), Log::ERROR, "com_sportsmanager");
if(isJson()) {
abortWithError($e->getMessage());
} else {
throw $e;
}
}
return $objList;
}
/**
* @param $db
* @param $query
* @return mixed
* @since 2.0.5
*/
function loadResult($db, $query): mixed
{
try {
$db->setQuery($query);
$result = $db->loadResult();
} catch (RuntimeException $e) {
Log::add("Database error: " . $e->getMessage(), Log::ERROR, "com_sportsmanager");
if(isJson()) {
abortWithError($e->getMessage());
} else {
throw $e;
}
}
return $result;
}
@@ -2323,10 +2323,6 @@ function mp_mult_($p1, $p2): float|int
*/ */
function mp_div_($p1, $p2): float|int function mp_div_($p1, $p2): float|int
{ {
if ($p2 == 0) {
Log::add("Division by zero detected in mp_div_: divisor was 0. Returning 0 as fallback.", Log::WARNING, "com_sportsmanager");
return 0;
}
return $p1 / $p2; return $p1 / $p2;
} }
File diff suppressed because it is too large Load Diff
@@ -1,4 +1,4 @@
<?php <?php
namespace Dtfb\Component\com_sportsmanager\Site\Controller; namespace Dtfb\Component\com_sportsmanager\Site\Controller;
/* /*
* Sports Manager (C) 2006-2020, Sven Nickel * Sports Manager (C) 2006-2020, Sven Nickel
@@ -10,6 +10,7 @@ use Joomla\CMS\Factory;
use Joomla\CMS\Log\Log; use Joomla\CMS\Log\Log;
use Joomla\CMS\Router\Route; use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri; use Joomla\CMS\Uri\Uri;
use Joomla\CMS\User\User;
use Joomla\CMS\Version; use Joomla\CMS\Version;
defined('_JEXEC') or die('Restricted access'); defined('_JEXEC') or die('Restricted access');
@@ -185,51 +186,23 @@ function individualwettbewerbFilter($prefix): string
function kategorieFilter($prefix, $suffix = ""): string function kategorieFilter($prefix, $suffix = ""): string
{ {
global $params; global $params;
$kategorien = explode(",", $params->get('kategorien')); $kategorien = explode(",", $params->get('kategorien'));
$result = []; $filter = "";
foreach ($kategorien as $s) {
foreach ($kategorien as $item) { $kategorie = intval(trim($s));
$item = trim($item); if ($kategorie == 0)
if ($item === '') continue; continue;
if (!empty($filter))
// Prüfen, ob es ein Bereich ist $filter .= ", ";
if (strpos($item, '-') !== false) { $filter .= $kategorie;
$rangeParts = explode('-', $item);
// genau 2 Teile für einen gültigen Bereich
if (count($rangeParts) !== 2) continue;
$start = intval(trim($rangeParts[0]));
$end = intval(trim($rangeParts[1]));
if ($start <= 0 || $end <= 0 || $start > $end) continue;
for ($i = $start; $i <= $end; $i++) {
$result[$i] = true; // Duplikate vermeiden
}
} else {
$num = intval($item);
if ($num > 0) {
$result[$num] = true;
}
}
} }
return empty($filter) ? "" : (" " . $prefix . " (" . $filter . ") " . $suffix);
if (empty($result)) {
return "";
}
$filter = array_keys($result);
sort($filter, SORT_NUMERIC);
return " $prefix (" . implode(", ", $filter) . ") $suffix";
} }
function turnierFilter($prefix): string function turnierFilter($prefix): string
{ {
$user_id = isExternalDatabase() ? 0 : Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id; $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()) >= -21) "; return " " . $prefix . " (SELECT berechtigt_turnier_id FROM #__sportsmanager_berechtigt_fuer_turnier WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -14) ";
} }
function vereinFilter($prefix): string function vereinFilter($prefix): string
@@ -247,7 +220,7 @@ function veranstalterFilter($prefix): string
function veranstaltungFilter($prefix): string function veranstaltungFilter($prefix): string
{ {
$user_id = isExternalDatabase() ? 0 : Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id; $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()) >= -21) "; 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) ";
} }
// Berechnet Datum zum Montag der ersten Kalenderwoche eines Jahres // Berechnet Datum zum Montag der ersten Kalenderwoche eines Jahres
@@ -1,125 +0,0 @@
<?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;
}
@@ -7,8 +7,6 @@ use Joomla\CMS\Uri\Uri;
use Joomla\Filesystem\File; use Joomla\Filesystem\File;
use Joomla\Filesystem\Folder; use Joomla\Filesystem\Folder;
require_once JPATH_SITE . '/components/com_sportsmanager/database/util.php';
const SPORTSMANAGER_JOOMLA_PATH = JPATH_ROOT; const SPORTSMANAGER_JOOMLA_PATH = JPATH_ROOT;
define("SPORTSMANAGER_JOOMLA_URL", Uri::base()); define("SPORTSMANAGER_JOOMLA_URL", Uri::base());
@@ -243,7 +241,11 @@ function playerImage($playerId, $gender, $width = 180, $height = 240): ?string
. "\n FROM #__sportsmanager_spieler" . "\n FROM #__sportsmanager_spieler"
. "\n WHERE NOT ISNULL(aktueller_verein_id) AND NOT bild_ausblenden" . (!empty($spielernr) ? " AND spielernr = '$spielernr'" : " AND lizenznr = '$lizenznr'") . "\n WHERE NOT ISNULL(aktueller_verein_id) AND NOT bild_ausblenden" . (!empty($spielernr) ? " AND spielernr = '$spielernr'" : " AND lizenznr = '$lizenznr'")
. "\n ORDER BY spieler_id DESC"; . "\n ORDER BY spieler_id DESC";
$rows = loadObjectList($db, $query); $db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$rows = $db->loadObjectList();
if (count($rows) < 1) { if (count($rows) < 1) {
ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind
header('HTTP/1.1 404 Not Found'); header('HTTP/1.1 404 Not Found');
@@ -356,7 +358,7 @@ function bildURL($typ, $id, $fixed_width = 0, $fixed_height = 0, $max_width = 0,
#crop=250,250,left #crop=250,250,left
#crop=250,250,right #crop=250,250,right
*/ */
function yoothemeBild($typ, $id, $alternativ, $zusatz = ""): ?string function yoothemeBild($typ, $id, $alternativ, $resize = '', $zusatz = ""): ?string
{ {
$typ_exploded = explode("/", $typ); $typ_exploded = explode("/", $typ);
$typ = $typ_exploded[0]; $typ = $typ_exploded[0];
@@ -380,9 +382,9 @@ function yoothemeBild($typ, $id, $alternativ, $zusatz = ""): ?string
else else
return null; return null;
$bildpfad = SPORTSMANAGER_JOOMLA_URL . "images/sportsmanager/" . $typ . "/" . $typ_prefix . $id . "." . $ext; $bildpfad = "/images/sportsmanager/" . $typ . "/" . $typ_prefix . $id . "." . $ext;
return '<img class="el-image" data-src="' . $bildpfad . '" ' . $zusatz . ' uk-img />'; return '<img class="el-image" data-src="' . $bildpfad . $resize . '" ' . $zusatz . ' uk-img />';
} }
function bildHTML($typ, $id, $fixed_width = 0, $fixed_height = 0, $max_width = 0, $max_height = 0, $zusatz = "", $alternativ = ""): ?string function bildHTML($typ, $id, $fixed_width = 0, $fixed_height = 0, $max_width = 0, $max_height = 0, $zusatz = "", $alternativ = ""): ?string
@@ -1,6 +0,0 @@
<?php // do not change this file, this is automatically updated while building releases, see .github/workflows/build_release.yml
defined('_JEXEC') or die;
return [
'version' => 'DEV',
'date' => '2025-08-05',
];
@@ -24,9 +24,6 @@
<option value="vereine"><![CDATA[COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_CLUBS]]></option> <option value="vereine"><![CDATA[COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_CLUBS]]></option>
<option value="spielorte"><![CDATA[COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_VENUES]]></option> <option value="spielorte"><![CDATA[COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_VENUES]]></option>
<option value="termine"><![CDATA[COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_APPOINTMENTS]]></option> <option value="termine"><![CDATA[COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_APPOINTMENTS]]></option>
<option value="spielverlegungen"><![CDATA[COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_MATCH_RESCHEDULING]]></option>
<option value="verbandsorgane"><![CDATA[COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_ASSOCIATION_BODIES]]></option>
<option value="hall_of_fame"><![CDATA[COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_HALL_OF_FAME]]></option>
</field> </field>
<field name="titel" <field name="titel"
type="text" type="text"
File diff suppressed because it is too large Load Diff
@@ -197,7 +197,6 @@ 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 #[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 = []; $letzte_einzel = [];
$spieler->bild = playerImage($spieler->spieler_id, $spieler->geschlecht); $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--) { 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
@@ -40,11 +40,8 @@ class HTML_sportsmanager_ticker
continue; continue;
else else
$status = 'upcoming'; $status = 'upcoming';
if ($begegnung->spieltag_titel) $spieltag = Rundenbezeichnung($begegnung->spieltag, $begegnung->unterteilung == 0, false, true);
$spieltag = $begegnung->spieltag_titel; $gewinner = $begegnung->heim_spielpunkte > $begegnung->gast_spielpunkte ? 1 : ($begegnung->heim_spielpunkte < $begegnung->gast_spielpunkte ? 2 : 0);
else
$spieltag = Rundenbezeichnung($begegnung->spieltag, $begegnung->unterteilung == 0, false, true);
$gewinner = $begegnung->heim_spielpunkte > $begegnung->gast_spielpunkte ? 1 : ($begegnung->heim_spielpunkte < $begegnung->gast_spielpunkte ? 2 : 0);
$heim_name = $begegnung->heim_name; $heim_name = $begegnung->heim_name;
$gast_name = $begegnung->gast_name; $gast_name = $begegnung->gast_name;
$heim_spielpunkte = $begegnung->heim_spielpunkte; $heim_spielpunkte = $begegnung->heim_spielpunkte;
@@ -294,6 +291,8 @@ class HTML_sportsmanager_ticker
type="text/css"/> type="text/css"/>
<script src="<?php echo Route::_(Uri::root(TRUE) . '/components/com_sportsmanager/js/jquery.min.js'); ?>" <script src="<?php echo Route::_(Uri::root(TRUE) . '/components/com_sportsmanager/js/jquery.min.js'); ?>"
type="text/javascript"></script> type="text/javascript"></script>
<script type="text/javascript"
src="<?php echo Route::_(Uri::root(TRUE) . '/components/com_sportsmanager/js/css3.js'); ?>"></script>
<script> <script>
let globalresize = 0; let globalresize = 0;
@@ -40,7 +40,7 @@ function addOnLoad($function): void
<?php <?php
} }
function SportsManagerURL($weitereParameter = "", $ssl = 0): ?string function SportsManagerURL($weitereParameter = null, $ssl = 0): ?string
{ {
$urlPath = handleFilter($weitereParameter); $urlPath = handleFilter($weitereParameter);
$joomlaBaseUrl = Uri::getInstance()->toString([ $joomlaBaseUrl = Uri::getInstance()->toString([
@@ -1,4 +1,4 @@
; Sports Manager (C) 2006-2020, Sven Nickel (Test) ; Sports Manager (C) 2006-2020, Sven Nickel (Test)
COM_SPORTSMANAGER="Sports Manager" COM_SPORTSMANAGER="Sports Manager"
COM_SPORTSMANAGER_PLAYERS="Spieler" COM_SPORTSMANAGER_PLAYERS="Spieler"
COM_SPORTSMANAGER_CLUBS="Vereine" COM_SPORTSMANAGER_CLUBS="Vereine"
@@ -21,7 +21,6 @@ COM_SPORTSMANAGER_LOCATIONS="Spielorte"
COM_SPORTSMANAGER_SEASONS="Saisons" COM_SPORTSMANAGER_SEASONS="Saisons"
COM_SPORTSMANAGER_TEAM_PLANS="Mannschaftsspielpl&auml;ne" COM_SPORTSMANAGER_TEAM_PLANS="Mannschaftsspielpl&auml;ne"
COM_SPORTSMANAGER_TEAM_NAME="Mannschaftsname" COM_SPORTSMANAGER_TEAM_NAME="Mannschaftsname"
COM_SPORTSMANAGER_TEAM_NAME_SHORT="Mannschaftsname kurz (max 24)"
COM_SPORTSMANAGER_TEAM_NAME2="Vereinsname" COM_SPORTSMANAGER_TEAM_NAME2="Vereinsname"
COM_SPORTSMANAGER_TEAM_SEAT="Vereinssitz" COM_SPORTSMANAGER_TEAM_SEAT="Vereinssitz"
COM_SPORTSMANAGER_POSTPONE_RULES="Verschieberegeln" COM_SPORTSMANAGER_POSTPONE_RULES="Verschieberegeln"
@@ -39,8 +38,6 @@ COM_SPORTSMANAGER_ORGANISATION="Organisation"
COM_SPORTSMANAGER_TEAM_MEMBERS="Mannschaftsmitglieder" COM_SPORTSMANAGER_TEAM_MEMBERS="Mannschaftsmitglieder"
COM_SPORTSMANAGER_TEAM_MEMBERS2=Vereinsmitglieder COM_SPORTSMANAGER_TEAM_MEMBERS2=Vereinsmitglieder
COM_SPORTSMANAGER_MEMBERS="Mitglieder" COM_SPORTSMANAGER_MEMBERS="Mitglieder"
COM_SPORTSMANAGER_MEMBER="Mitglied"
COM_SPORTSMANAGER_ACTIVE_MEMBERS="Aktive Mitglieder"
COM_SPORTSMANAGER_TEAMS="Mannschaften" COM_SPORTSMANAGER_TEAMS="Mannschaften"
COM_SPORTSMANAGER_CURRENT_TEAMS="Aktuelle Mannschaften" COM_SPORTSMANAGER_CURRENT_TEAMS="Aktuelle Mannschaften"
COM_SPORTSMANAGER_PREVIOUS_TEAMS="Fr&uuml;here Mannschaften" COM_SPORTSMANAGER_PREVIOUS_TEAMS="Fr&uuml;here Mannschaften"
@@ -132,13 +129,10 @@ COM_SPORTSMANAGER_QUARTER_FINAL_SHORTCUT="1/4"
COM_SPORTSMANAGER_ROUND_OF_16="Achtelfinale" COM_SPORTSMANAGER_ROUND_OF_16="Achtelfinale"
COM_SPORTSMANAGER_ROUND_OF_16_SHORTCUT="1/8" COM_SPORTSMANAGER_ROUND_OF_16_SHORTCUT="1/8"
COM_SPORTSMANAGER_ROUND_OF_32="Sechzehntelfinale" 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_32_SHORTCUT="1/16"
COM_SPORTSMANAGER_ROUND_OF_64="Zweiunddreißigstelfinale" 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_64_SHORTCUT="1/32"
COM_SPORTSMANAGER_ROUND_OF_128="Vierundsechzigstelfinale" 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_ROUND_OF_128_SHORTCUT="1/64"
COM_SPORTSMANAGER_DAY_0_SHORTCUT="So." COM_SPORTSMANAGER_DAY_0_SHORTCUT="So."
COM_SPORTSMANAGER_DAY_1_SHORTCUT="Mo." COM_SPORTSMANAGER_DAY_1_SHORTCUT="Mo."
@@ -265,7 +259,6 @@ COM_SPORTSMANAGER_IN="in"
COM_SPORTSMANAGER_NATIONAL="Nationale" COM_SPORTSMANAGER_NATIONAL="Nationale"
COM_SPORTSMANAGER_INTERNATIONAL="Internationale" COM_SPORTSMANAGER_INTERNATIONAL="Internationale"
COM_SPORTSMANAGER_PLAYER_NUMBER_SHORT="Spielernr." COM_SPORTSMANAGER_PLAYER_NUMBER_SHORT="Spielernr."
COM_SPORTSMANAGER_ASSOCIATION_SHORT_NAME="Verbands-Kürzel"
COM_SPORTSMANAGER_BASIC_PLAYER_NUMBER_SHORT="Basis-Spielernr." COM_SPORTSMANAGER_BASIC_PLAYER_NUMBER_SHORT="Basis-Spielernr."
COM_SPORTSMANAGER_MESSAGES="Meldungen" COM_SPORTSMANAGER_MESSAGES="Meldungen"
COM_SPORTSMANAGER_TOURNAMENT_PLACEMENT="Turnierplatzierungen" COM_SPORTSMANAGER_TOURNAMENT_PLACEMENT="Turnierplatzierungen"
@@ -317,11 +310,6 @@ COM_SPORTSMANAGER_FOR_OTHER_CONTACT="F&uuml;r andere Ansprechpartner"
COM_SPORTSMANAGER_DATES_REGISTERED_USERS="Termine beantragten durch angemeldete Benutzer" COM_SPORTSMANAGER_DATES_REGISTERED_USERS="Termine beantragten durch angemeldete Benutzer"
COM_SPORTSMANAGER_VIEW_ELO_RATING="Elo-Wertung anzeigen" COM_SPORTSMANAGER_VIEW_ELO_RATING="Elo-Wertung anzeigen"
COM_SPORTSMANAGER_VIEW_SPORTSMANAGER_LIZENZ="Lizenz 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_USE_DISCIPLINARY_FINE="Ordnungsstrafen verwenden"
COM_SPORTSMANAGER_PLAYER_DETAILS="Spielerdetails" COM_SPORTSMANAGER_PLAYER_DETAILS="Spielerdetails"
COM_SPORTSMANAGER_PLAYER_LIST_DETAILS="Spielerliste/-details" COM_SPORTSMANAGER_PLAYER_LIST_DETAILS="Spielerliste/-details"
COM_SPORTSMANAGER_PLAYER_EDIT="Spielerdaten durch Organisations-/Vereinsansprechpartner bearbeiten" COM_SPORTSMANAGER_PLAYER_EDIT="Spielerdaten durch Organisations-/Vereinsansprechpartner bearbeiten"
@@ -364,7 +352,6 @@ COM_SPORTSMANAGER_STATISTIK="Statistik"
COM_SPORTSMANAGER_PLAYERS_ACTIVE="Spieler aktiv" COM_SPORTSMANAGER_PLAYERS_ACTIVE="Spieler aktiv"
COM_SPORTSMANAGER_RESTRICTED_PLAYERS="Spieler eingeschr&auml;nkt" COM_SPORTSMANAGER_RESTRICTED_PLAYERS="Spieler eingeschr&auml;nkt"
COM_SPORTSMANAGER_PLAYER_PASSIV="Spieler passiv" COM_SPORTSMANAGER_PLAYER_PASSIV="Spieler passiv"
COM_SPORTSMANAGER_PLAYER_UNATTACHED="Spieler vereinslos"
COM_SPORTSMANAGER_MEN_ACTIVE="Herren aktiv" COM_SPORTSMANAGER_MEN_ACTIVE="Herren aktiv"
COM_SPORTSMANAGER_WOMEN_ACTIVE="Damen aktiv" COM_SPORTSMANAGER_WOMEN_ACTIVE="Damen aktiv"
COM_SPORTSMANAGER_JUNIOR_ACTIVE="Junioren aktiv" COM_SPORTSMANAGER_JUNIOR_ACTIVE="Junioren aktiv"
@@ -392,7 +379,6 @@ COM_SPORTSMANAGER_MEMBER_STATUS="Mitgliedsstatus"
COM_SPORTSMANAGER_ACTIVE="Aktiv" COM_SPORTSMANAGER_ACTIVE="Aktiv"
COM_SPORTSMANAGER_RESTRICTED="Eingeschränkt" COM_SPORTSMANAGER_RESTRICTED="Eingeschränkt"
COM_SPORTSMANAGER_BEATEN="Ausgetreten" COM_SPORTSMANAGER_BEATEN="Ausgetreten"
COM_SPORTSMANAGER_HIDE="Verstecken"
COM_SPORTSMANAGER_PASSIVE="Passiv" COM_SPORTSMANAGER_PASSIVE="Passiv"
COM_SPORTSMANAGER_BEATEN_CLUB="Verein ausgetreten" COM_SPORTSMANAGER_BEATEN_CLUB="Verein ausgetreten"
COM_SPORTSMANAGER_SINGLE_SEED="Elo-Startwert Einzel" COM_SPORTSMANAGER_SINGLE_SEED="Elo-Startwert Einzel"
@@ -415,11 +401,10 @@ COM_SPORTSMANAGER_EXPORT="Exportieren"
COM_SPORTSMANAGER_INTERNATIONAL_PLAYERS="Spieler (international)" COM_SPORTSMANAGER_INTERNATIONAL_PLAYERS="Spieler (international)"
COM_SPORTSMANAGER_COUNTRY_CODE="Landeskennung" COM_SPORTSMANAGER_COUNTRY_CODE="Landeskennung"
COM_SPORTSMANAGER_IMPORT="Importieren" COM_SPORTSMANAGER_IMPORT="Importieren"
COM_SPORTSMANAGER_IMPORT_MESSAGE="Im Import sind ausschlie&szlig;lich Spielerdaten zum Verein %s enthalten. Soll ausschlie&szlig;lich der Spielerbestand des einen Vereins aktualisiert werden, muss der zugeh&ouml;rige Verein unten ausgew&auml;hlt werden. Beinhaltet der Import den gesamten Spielerbestand einer Organisation, muss die zugeh&ouml;rige Organisation gew&auml;hlt werden.<br />Bei schon vorhandener Lizenznummer wird die Lizenznummer und das Geburtsjahr nicht &uuml;berschrieben!" COM_SPORTSMANAGER_IMPORT_MESSAGE="Im Import sind ausschlie&szlig;lich Spielerdaten zum Verein %s enthalten. Soll ausschlie&szlig;lich der Spielerbestand des einen Vereins aktualisiert werden, muss der zugeh&ouml;rige Verein unten ausgew&auml;hlt werden. Beinhaltet der Import den gesamten Spielerbestand einer Organisation, muss die zugeh&ouml;rige Organisation gew&auml;hlt werden."
COM_SPORTSMANAGER_CHECK="Pr&uuml;fen" COM_SPORTSMANAGER_CHECK="Pr&uuml;fen"
COM_SPORTSMANAGER_IMPORT_CONFLICTS_MESSAGE="Im Import sind Fehler oder Konflikte enthalten, die im Vorfeld manuell beseitigt werden müssen." COM_SPORTSMANAGER_IMPORT_CONFLICTS_MESSAGE="Im Import sind Konflikte enthalten, die im Vorfeld manuell beseitigt werden müssen."
COM_SPORTSMANAGER_IMPORT_DUPLICATE_MESSAGE="Versuch, Spielernr. auf eine bereits für einen anderen Spieler vergebene Spielernr. zu ändern" COM_SPORTSMANAGER_IMPORT_DUPLICATE_MESSAGE="Versuch, Spielernr. auf eine bereits für einen anderen Spieler vergebene Spielernr. zu ändern"
COM_SPORTSMANAGER_IMPORT_WRONG_FORMAT_PLAYERNUMBER="Eine oder mehrere Spielernummer enthalten ein ung&uuml;ltiges Format"
COM_SPORTSMANAGER_NAME2="Name" COM_SPORTSMANAGER_NAME2="Name"
COM_SPORTSMANAGER_DATA_IMPORT_ABORT_MESSAGE="Der Import wird abgebrochen, da Konflikte bei den zu importierenden Spielerdaten bestehen. Bitte kontaktiere einen Moderator und sende dabei die Importdatei mit!" COM_SPORTSMANAGER_DATA_IMPORT_ABORT_MESSAGE="Der Import wird abgebrochen, da Konflikte bei den zu importierenden Spielerdaten bestehen. Bitte kontaktiere einen Moderator und sende dabei die Importdatei mit!"
COM_SPORTSMANAGER_DATA_IMPORT_NO_CONFLICTS="Es bestehen keine Konflikte bei den zu importierenden Spielerdaten." COM_SPORTSMANAGER_DATA_IMPORT_NO_CONFLICTS="Es bestehen keine Konflikte bei den zu importierenden Spielerdaten."
@@ -516,6 +501,7 @@ COM_SPORTSMANAGER_ADD_POINTS_TABLE="Punktetabelle hinzuf&uuml;gen"
COM_SPORTSMANAGER_ADD_FUNCTION="Funktion hinzuf&uuml;gen" COM_SPORTSMANAGER_ADD_FUNCTION="Funktion hinzuf&uuml;gen"
COM_SPORTSMANAGER_PARTICIPANT="Teilnehmer" COM_SPORTSMANAGER_PARTICIPANT="Teilnehmer"
COM_SPORTSMANAGER_FUNCTION="Funktion" COM_SPORTSMANAGER_FUNCTION="Funktion"
COM_SPORTSMANAGER_MULTIPLIER="Multiplikator"
COM_SPORTSMANAGER_MAXIMUM="maximal" COM_SPORTSMANAGER_MAXIMUM="maximal"
COM_SPORTSMANAGER_CONTRACTION="K&uuml;rzel" COM_SPORTSMANAGER_CONTRACTION="K&uuml;rzel"
COM_SPORTSMANAGER_ELIGIBLE_ORGANIZERS="Berechtigte f&uuml;r Veranstalter" COM_SPORTSMANAGER_ELIGIBLE_ORGANIZERS="Berechtigte f&uuml;r Veranstalter"
@@ -549,7 +535,6 @@ COM_SPORTSMANAGER_FULL_RATING="Volle Wertung"
COM_SPORTSMANAGER_NO_RATING="Keine Wertung" COM_SPORTSMANAGER_NO_RATING="Keine Wertung"
COM_SPORTSMANAGER_TEAM_COMPETITIONS="Mannschaftswettbewerbe" COM_SPORTSMANAGER_TEAM_COMPETITIONS="Mannschaftswettbewerbe"
COM_SPORTSMANAGER_TABLE_SUMMARY="Tabellenwertung" COM_SPORTSMANAGER_TABLE_SUMMARY="Tabellenwertung"
COM_SPORTSMANAGER_HEAD_TO_HEAD_RECORD="Direkter Vergleich"
COM_SPORTSMANAGER_POINTS_WON_LOST_DIFFERENCE="Spielpunkte gewonnen, Spielpunkte verloren, Punktedifferenz" COM_SPORTSMANAGER_POINTS_WON_LOST_DIFFERENCE="Spielpunkte gewonnen, Spielpunkte verloren, Punktedifferenz"
COM_SPORTSMANAGER_PERFORMANCE_INDEX="Leistungsindex (SP+ * SP+ * 100) / (SP+ + SP-), Spielpunkte gewonnen, ..." COM_SPORTSMANAGER_PERFORMANCE_INDEX="Leistungsindex (SP+ * SP+ * 100) / (SP+ + SP-), Spielpunkte gewonnen, ..."
COM_SPORTSMANAGER_PERFORMANCE_INDEX2="Leistungsindex (S * P+ * 10) / (P+ + P-), Spielpunkte gewonnen, ..." COM_SPORTSMANAGER_PERFORMANCE_INDEX2="Leistungsindex (S * P+ * 10) / (P+ + P-), Spielpunkte gewonnen, ..."
@@ -576,7 +561,7 @@ COM_SPORTSMANAGER_PRIVATE_PLAYER_DATA="Private Spielerdaten in Vereins- und Mann
COM_SPORTSMANAGER_ASSOCIATIONS_MEMBERSHIPS_MANAGE="Vereine und Mitgliedschaften verwalten" COM_SPORTSMANAGER_ASSOCIATIONS_MEMBERSHIPS_MANAGE="Vereine und Mitgliedschaften verwalten"
COM_SPORTSMANAGER_MANAGE_CLASSIFICATIONS="Einstufungen verwalten" COM_SPORTSMANAGER_MANAGE_CLASSIFICATIONS="Einstufungen verwalten"
COM_SPORTSMANAGER_MANAGE_TEAM_PLANS="Mannschaftsspielpläne verwalten" COM_SPORTSMANAGER_MANAGE_TEAM_PLANS="Mannschaftsspielpläne verwalten"
COM_SPORTSMANAGER_MANAGE_RULES_POSTPONEMENT="Spielverlegungen/Verschieberegeln verwalten" COM_SPORTSMANAGER_MANAGE_RULES_POSTPONEMENT="Verschieberegeln verwalten"
COM_SPORTSMANAGER_MANAGE_VENUES="Spielorte verwalten" COM_SPORTSMANAGER_MANAGE_VENUES="Spielorte verwalten"
COM_SPORTSMANAGER_MANAGE_TEAM_COMPETITIONS="Mannschaftswettbewerbe verwalten" COM_SPORTSMANAGER_MANAGE_TEAM_COMPETITIONS="Mannschaftswettbewerbe verwalten"
COM_SPORTSMANAGER_MANAGE_PLAYER_STATISTICS="Spielerstastistiken verwalten" COM_SPORTSMANAGER_MANAGE_PLAYER_STATISTICS="Spielerstastistiken verwalten"
@@ -618,10 +603,7 @@ COM_SPORTSMANAGER_ONLY_DETAILED_RATING_POINT_DIFFERENCE="Nur Detailwertung nach
COM_SPORTSMANAGER_ONLY_DETAILED_POINTS_AFTER_POINTSRATE="Nur Detailwertung nach Punktequote" 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_KO_SIMPLE_FULL="K.O. (einfach oder vollstaendige Ausspielung aller Plaetze)"
COM_SPORTSMANAGER_MANUAL_PRO_TEAMS="Manuell (pro Mannschaft)" 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_SUBDIVISION="Unterteilung"
COM_SPORTSMANAGER_SHOW_MATCHDAY_TITLE="Titel von Spieltag zeigen"
COM_SPORTSMANAGER_ELO_RATING="ELO-Wertung" COM_SPORTSMANAGER_ELO_RATING="ELO-Wertung"
COM_SPORTSMANAGER_ELIGIBLE_FOR_EVENT="Berechtigte f&uuml;r Veranstaltung" COM_SPORTSMANAGER_ELIGIBLE_FOR_EVENT="Berechtigte f&uuml;r Veranstaltung"
COM_SPORTSMANAGER_TITLE_LOGO="Titel-Logo" COM_SPORTSMANAGER_TITLE_LOGO="Titel-Logo"
@@ -649,9 +631,6 @@ COM_SPORTSMANAGER_GAMEDAY="Spieltag"
COM_SPORTSMANAGER_GAMEDAYS="Spieltage" COM_SPORTSMANAGER_GAMEDAYS="Spieltage"
COM_SPORTSMANAGER_ROUND="Runde" COM_SPORTSMANAGER_ROUND="Runde"
COM_SPORTSMANAGER_ROUNDS="Runden" 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_MONTH="Monat"
COM_SPORTSMANAGER_MONTHS="Monate" COM_SPORTSMANAGER_MONTHS="Monate"
COM_SPORTSMANAGER_PLAYER_FROM_TEAM="Spieler von Mannschaft" COM_SPORTSMANAGER_PLAYER_FROM_TEAM="Spieler von Mannschaft"
@@ -667,9 +646,7 @@ COM_SPORTSMANAGER_SO_FAR="bisher"
COM_SPORTSMANAGER_PLACEMENT_AREA="Platzierungsbereich" COM_SPORTSMANAGER_PLACEMENT_AREA="Platzierungsbereich"
COM_SPORTSMANAGER_IMAGE_WITHIN_TEAM="Bild innerhalb Mannschaft" COM_SPORTSMANAGER_IMAGE_WITHIN_TEAM="Bild innerhalb Mannschaft"
COM_SPORTSMANAGER_ADD_MEETING="Begegnung hinzuf&uuml;gen" COM_SPORTSMANAGER_ADD_MEETING="Begegnung hinzuf&uuml;gen"
COM_SPORTSMANAGER_GAMEDAY_GENERATION="Spieltag erzeugen"
COM_SPORTSMANAGER_ROUND_GENERATION="Runde erzeugen" COM_SPORTSMANAGER_ROUND_GENERATION="Runde erzeugen"
COM_SPORTSMANAGER_CUP_ROUND_GENERATION="Pokalrunde auslosen"
COM_SPORTSMANAGER_GENERATE_GROUP_GAME="Gruppenspiele erzeugen" COM_SPORTSMANAGER_GENERATE_GROUP_GAME="Gruppenspiele erzeugen"
COM_SPORTSMANAGER_IMPORT_GROUP_GAME="Gruppenspiele importieren" COM_SPORTSMANAGER_IMPORT_GROUP_GAME="Gruppenspiele importieren"
COM_SPORTSMANAGER_IMPORT_GROUP_GAME2="Gruppenspiele: Importieren" COM_SPORTSMANAGER_IMPORT_GROUP_GAME2="Gruppenspiele: Importieren"
@@ -797,7 +774,6 @@ COM_SPORTSMANAGER_FEDERAL_STATES="Bundesl&auml;nder"
COM_SPORTSMANAGER_STATES="L&auml;nder" COM_SPORTSMANAGER_STATES="L&auml;nder"
COM_SPORTSMANAGER_YEAR="Jahr" COM_SPORTSMANAGER_YEAR="Jahr"
COM_SPORTSMANAGER_ADDITION="Zusatz" COM_SPORTSMANAGER_ADDITION="Zusatz"
COM_SPORTSMANAGER_LOCATION="Ort"
COM_SPORTSMANAGER_STATE="Land" COM_SPORTSMANAGER_STATE="Land"
COM_SPORTSMANAGER_FEDERAL_="Bundes-" COM_SPORTSMANAGER_FEDERAL_="Bundes-"
COM_SPORTSMANAGER_INFO="Info" COM_SPORTSMANAGER_INFO="Info"
@@ -811,6 +787,7 @@ COM_SPORTSMANAGER_APPLIED_FOR="Beantragt"
COM_SPORTSMANAGER_DECLINED="Abgelehnt" COM_SPORTSMANAGER_DECLINED="Abgelehnt"
COM_SPORTSMANAGER_DATE_DETAILS="Termin: Details" COM_SPORTSMANAGER_DATE_DETAILS="Termin: Details"
COM_SPORTSMANAGER_ADDITIONS="Zus&auml;tze" COM_SPORTSMANAGER_ADDITIONS="Zus&auml;tze"
COM_SPORTSMANAGER_ADDITIONAL_INFORMATION="Weitere Informationen"
COM_SPORTSMANAGER_PUBLIC_EMAIL="E-Mail &ouml;ffentlich" COM_SPORTSMANAGER_PUBLIC_EMAIL="E-Mail &ouml;ffentlich"
COM_SPORTSMANAGER_EMAIL_WITH_CHANGES="E-Mail bei &Auml;nderungen" COM_SPORTSMANAGER_EMAIL_WITH_CHANGES="E-Mail bei &Auml;nderungen"
COM_SPORTSMANAGER_ACTION_TYPE="Aktionstyp" COM_SPORTSMANAGER_ACTION_TYPE="Aktionstyp"
@@ -886,9 +863,6 @@ COM_SPORTSMANAGER_INITIAL_APPOINTMENT_SUGGESTIONS="Initiale Terminvorschl&auml;g
COM_SPORTSMANAGER_REQUESTING_TEAM="Beantragende Mannschaft" COM_SPORTSMANAGER_REQUESTING_TEAM="Beantragende Mannschaft"
COM_SPORTSMANAGER_OPPONENT_TEAM="Gegnerische Mannschaft" COM_SPORTSMANAGER_OPPONENT_TEAM="Gegnerische Mannschaft"
COM_SPORTSMANAGER_AGAINST_PROPOSALS_ALLOWED="Gegensvorschl&auml;ge zul&auml;ssig" COM_SPORTSMANAGER_AGAINST_PROPOSALS_ALLOWED="Gegensvorschl&auml;ge zul&auml;ssig"
COM_SPORTSMANAGER_REASON_REQUIRED="Begr&uuml;ndung erforderlich"
COM_SPORTSMANAGER_CLUB_ENTITLEMENT="Berechtigung Vereine"
COM_SPORTSMANAGER_ASSOCIATION_ENTITLEMENT="Berechtigung Verband"
COM_SPORTSMANAGER_LEAD_TIME="Vorlaufzeit" COM_SPORTSMANAGER_LEAD_TIME="Vorlaufzeit"
COM_SPORTSMANAGER_APPOINTMENT_PROPOSALS_MINIMAL="Terminvorschl&auml;ge minimal" COM_SPORTSMANAGER_APPOINTMENT_PROPOSALS_MINIMAL="Terminvorschl&auml;ge minimal"
COM_SPORTSMANAGER_APPOINTMENT_PROPOSALS_MAXIMUM="Terminvorschl&auml;ge maximal" COM_SPORTSMANAGER_APPOINTMENT_PROPOSALS_MAXIMUM="Terminvorschl&auml;ge maximal"
@@ -898,11 +872,6 @@ COM_SPORTSMANAGER_OPTIONAL_BUT_SAME_IN_DOUBLES="Optional, aber im Doppel keiner
COM_SPORTSMANAGER_REQUIRED="Erforderlich" COM_SPORTSMANAGER_REQUIRED="Erforderlich"
COM_SPORTSMANAGER_RESULT_ONLY="Nur Ergebnis" COM_SPORTSMANAGER_RESULT_ONLY="Nur Ergebnis"
COM_SPORTSMANAGER_GAME_NUMBER="Spiel %d" COM_SPORTSMANAGER_GAME_NUMBER="Spiel %d"
COM_SPORTSMANAGER_LABEL_GAME_NUMBER="Spiel Nr"
COM_SPORTSMANAGER_LABEL_GAME_TITLE="Spieltag Titel"
COM_SPORTSMANAGER_EXPLICIT_PENALTIES="Explizite Strafen"
COM_SPORTSMANAGER_EXPLICIT_PENALTIES_EMAIL_SUBJECT="%s: Strafpunkte erhalten"
COM_SPORTSMANAGER_EXPLICIT_PENALTIES_EMAIL_BODY="%s wurden %f Strafpunkte zugeteilt mit der Begründung: %s"
COM_SPORTSMANAGER_EMAIL_SHIFT_GAME_APPOINTMENT_SUBJECT="%s vs %s: Spieltermin verlegen" COM_SPORTSMANAGER_EMAIL_SHIFT_GAME_APPOINTMENT_SUBJECT="%s vs %s: Spieltermin verlegen"
COM_SPORTSMANAGER_EMAIL_SHIFT_GAME_APPOINTMENT_BODY="Zur Begegnung %s gegen %s am %s in %s wird von %s der Spieltermin verschoben.\n\nAlternative Termine:\n\n" COM_SPORTSMANAGER_EMAIL_SHIFT_GAME_APPOINTMENT_BODY="Zur Begegnung %s gegen %s am %s in %s wird von %s der Spieltermin verschoben.\n\nAlternative Termine:\n\n"
COM_SPORTSMANAGER_EMAIL_SHIFT_GAME_APPOINTMENT_REQUESTED_BODY="Zur Begegnung %s gegen %s am %s in %s wird von %s der Spieltermin verschoben.\n\nBitte alternative Termine vorschlagen unter %s" COM_SPORTSMANAGER_EMAIL_SHIFT_GAME_APPOINTMENT_REQUESTED_BODY="Zur Begegnung %s gegen %s am %s in %s wird von %s der Spieltermin verschoben.\n\nBitte alternative Termine vorschlagen unter %s"
@@ -1020,82 +989,3 @@ COM_SPORTSMANAGER_ARIA_LABEL_RANKING_EVALUATION="Ranking Wertung"
COM_SPORTSMANAGER_ARIA_LABEL_LASTNAME="Nachname" COM_SPORTSMANAGER_ARIA_LABEL_LASTNAME="Nachname"
COM_SPORTSMANAGER_ARIA_LABEL_FIRSTNAME="Vorname" COM_SPORTSMANAGER_ARIA_LABEL_FIRSTNAME="Vorname"
COM_SPORTSMANAGER_ARIA_LABEL_CLUB="Verein" 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"
COM_SPORTSMANAGER_RULEBOOKS="Regelwerke"
COM_SPORTSMANAGER_RULEBOOK="Regelwerk"
COM_SPORTSMANAGER_RULE_SHORT="SPO"
COM_SPORTSMANAGER_FEE_SHORT="GO"
COM_SPORTSMANAGER_RULE_LONG="Paragraph SPO"
COM_SPORTSMANAGER_FEE_LONG="Paragraph GO"
COM_SPORTSMANAGER_SELECT="Auswahl"
COM_SPORTSMANAGER_NO_SELECT="keine Auswahl"
COM_SPORTSMANAGER_REALLY_REMOVE_RULEBOOK="Willst Du dieses Regelwerk wirklich entfernen?"
COM_SPORTSMANAGER_ADD_RULEBOOK="Regelwerk hinzuf&uuml;gen"
COM_SPORTSMANAGER_DISCIPLINARY_FINES="Ordnungsstrafen"
COM_SPORTSMANAGER_DISCIPLINARY_FINE="Ordnungsstrafe"
COM_SPORTSMANAGER_ISSUE_DISCIPLINARY_FINES="Ordnungsstrafe ausstellen"
COM_SPORTSMANAGER_EDIT_DISCIPLINARY_FINE="Ordnungsstrafe bearbeiten"
COM_SPORTSMANAGER_SEND_DISCIPLINARY_FINE="Ordnungsstrafe versenden"
COM_SPORTSMANAGER_REALLY_REMOVE_DISCIPLINARY_FINES="Willst Du diese Ordnungsstrafe wirklich entfernen?"
COM_SPORTSMANAGER_VIOLATIONS="Verst&ouml;&szlig;e"
COM_SPORTSMANAGER_VIOLATION="Versto&szlig;"
COM_SPORTSMANAGER_ADD_VIOLATION="Versto&szlig; hinzuf&uuml;gen"
COM_SPORTSMANAGER_REALLY_REMOVE_VIOLATION="Willst Du diesen Versto&szlig; wirklich entfernen?"
COM_SPORTSMANAGER_VIOLATION_TEXT="Text"
COM_SPORTSMANAGER_VIOLATION_ADD_TEXT="Zusatztext"
COM_SPORTSMANAGER_FEE="Geb&uuml;hr"
COM_SPORTSMANAGER_ADD_FEE="Zusatzgeb&uuml;hr"
COM_SPORTSMANAGER_SELECTABLE="Ausw&auml;hlbar"
COM_SPORTSMANAGER_TEMPLATE="Vorlage"
COM_SPORTSMANAGER_EMAIL_SUBJECT="Betreff"
COM_SPORTSMANAGER_EMAIL_MESSAGE="Nachricht"
COM_SPORTSMANAGER_EMAIL_TO="An"
COM_SPORTSMANAGER_EMAIL_SEND="E-Mail senden"
COM_SPORTSMANAGER_EMAIL_TEXT_TEMPLATE="Textvorlage"
COM_SPORTSMANAGER_ISSUER="Aussteller"
COM_SPORTSMANAGER_ISSUE_DATE="Ausstelldatum"
COM_SPORTSMANAGER_SENDER="Sender"
COM_SPORTSMANAGER_BILL_ISSUER="Rechnung erstellt"
COM_SPORTSMANAGER_MULTIPLIER="Multiplikator"
COM_SPORTSMANAGER_ADDITIONAL_INFORMATION="Weitere Angaben"
COM_SPORTSMANAGER_EMAIL_WAS_SEND="Die E-Mail wurde erfolgreich versendet"
COM_SPORTSMANAGER_EMAIL_WAS_NOT_SEND="Die E-Mail wurde nicht versendet"
COM_SPORTSMANAGER_OLD_DATE="Alter Termin"
COM_SPORTSMANAGER_NEW_DATE="Neuer Termin"
COM_SPORTSMANAGER_REASON_GAME_APPOINTMENT="Verlegungsgrund"
COM_SPORTSMANAGER_MATCH_RESCHEDULINGS="Spielverlegungen"
COM_SPORTSMANAGER_MATCH_RESCHEDULING="Spielverlegung"
COM_SPORTSMANAGER_MATCH_SWAPPING_HELP="Bei Heimrechttausch gleichen Termin eintragen"
COM_SPORTSMANAGER_NOT_VALID_TIME="Ung&uuml;ltige Uhrzeit"
COM_SPORTSMANAGER_REALLY_MATCH_RESCHEDULING="Willst Du diesen Spielverlegung wirklich entfernen?"
COM_SPORTSMANAGER_REST_DAYS="Ruhetage"
COM_SPORTSMANAGER_TRAINING_DAYS="Trainingstage"
COM_SPORTSMANAGER_NOT_ACTUALIZED_DATA="Nicht aktualisierte Daten"
COM_SPORTSMANAGER_ASSOCIATION_BODIES="Verbandsorgane"
COM_SPORTSMANAGER_ASSOCIATION_BODY="Verbandsorgan"
COM_SPORTSMANAGER_ADD_ASSOCIATION_BODY="Verbandsorgan hinzuf&uuml;gen"
COM_SPORTSMANAGER_REALLY_REMOVE_ASSOCIATION_BODY="Willst Du dieses Verbandsorgan wirklich entfernen?"
COM_SPORTSMANAGER_INVALID_ASSOCIATION_BODY_NAME="Ung&uuml;ltiger Name f&uuml;r Verbandsorgan!"
COM_SPORTSMANAGER_NAME_NOT_COMPLETE="Der Name ist nicht komplett ausgef&uuml;llt"
COM_SPORTSMANAGER_ADDITIONAL_INFO="Zusatzinfo"
COM_SPORTSMANAGER_USE_HTML="Hier sollte HTML-formatierter Text verwendet werden"
COM_SPORTSMANAGER_REALLY_REMOVE_ASSOCIATION_BODY_MEMBER="M&ouml;chtest du dieses Mitglied des Verbandsorgans wirklich entfernen?"
COM_SPORTSMANAGER_HELP_EDIT_ASSOCIATION_BODY_MEMBER="Wird ein Name aus der Spielerliste ausgew&auml;hlt, werden Nachname und Vorname &uuml;bernommen.<br>Telefon, Mobil, E-Mail werden aus der Spielerliste &uuml;bernommen, wenn sie hier nicht ausgef&uuml;llt sind."
COM_SPORTSMANAGER_HALL_OF_FAME="Hall of Fame"
COM_SPORTSMANAGER_ADD_HALL_OF_FAME="Hall of Fame hinzuf&uuml;gen"
COM_SPORTSMANAGER_INVALID_HALL_OF_FAME_NAME="Invalider Name f&uuml;r Hall of Fame"
COM_SPORTSMANAGER_REALLY_REMOVE_HALL_OF_FAME="Willst Du wirklich diese Hall of Fame mit allen Mitgliedern l&ouml;schen?"
COM_SPORTSMANAGER_MATCH_TYPE="Spielform"
COM_SPORTSMANAGER_REALLY_REMOVE_HALL_OF_FAME_YEAR="Willst Du wirklich dieses Hall of Fame Jahr l&ouml;schen?"
COM_SPORTSMANAGER_YEARS="Jahre"
COM_SPORTSMANAGER_ADD_HALL_OF_FAME_YEAR="Hall of Fame Jahr hinzuf&uuml;gen"
COM_SPORTSMANAGER_NO_ENTRY="kein Eintrag"
COM_SPORTSMANAGER_REALLY_SWAP_MATCH="Willst Du wirklich das Heimrecht tauschen?"
COM_SPORTSMANAGER_SWAP_MATCH="Heimrechttausch"
COM_SPORTSMANAGER_REALLY_DELETE_MATCH_REPORT="Der Spielbericht wird zusammen mit allen historischen Eintr&auml;gen gel&ouml;scht. Willst du den Spielbericht wirklich l&ouml;schen?"
COM_SPORTSMANAGER_MATCH_REPORT_DELETED="Spielbericht gel&ouml;scht"
COM_SPORTSMANAGER_MATCH_REPORT_WAS_DELETED="Der Spielbericht wurde erfolgreich gel&ouml;scht!"
COM_SPORTSMANAGER_MATCH_REPORT_CORRECTED="Spielberichtskorrektur"
@@ -1,4 +1,4 @@
; Sports Manager (C) 2006-2020, Sven Nickel ; Sports Manager (C) 2006-2020, Sven Nickel
COM_SPORTSMANAGER="Sports Manager" COM_SPORTSMANAGER="Sports Manager"
COM_SPORTSMANAGER_PLAYERS="Players" COM_SPORTSMANAGER_PLAYERS="Players"
COM_SPORTSMANAGER_CLUBS="Clubs" COM_SPORTSMANAGER_CLUBS="Clubs"
@@ -21,7 +21,6 @@ COM_SPORTSMANAGER_LOCATIONS="Locations"
COM_SPORTSMANAGER_SEASONS="Seasons" COM_SPORTSMANAGER_SEASONS="Seasons"
COM_SPORTSMANAGER_TEAM_PLANS="Team plans" COM_SPORTSMANAGER_TEAM_PLANS="Team plans"
COM_SPORTSMANAGER_TEAM_NAME="Team name" 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_NAME2="Club name"
COM_SPORTSMANAGER_TEAM_SEAT="Club location" COM_SPORTSMANAGER_TEAM_SEAT="Club location"
COM_SPORTSMANAGER_POSTPONE_RULES="Postpone rules" COM_SPORTSMANAGER_POSTPONE_RULES="Postpone rules"
@@ -39,8 +38,6 @@ COM_SPORTSMANAGER_ORGANISATION="Organisation"
COM_SPORTSMANAGER_TEAM_MEMBERS="Team members" COM_SPORTSMANAGER_TEAM_MEMBERS="Team members"
COM_SPORTSMANAGER_TEAM_MEMBERS2="Club members" COM_SPORTSMANAGER_TEAM_MEMBERS2="Club members"
COM_SPORTSMANAGER_MEMBERS="Members" COM_SPORTSMANAGER_MEMBERS="Members"
COM_SPORTSMANAGER_MEMBER="Member"
COM_SPORTSMANAGER_ACTIVE_MEMBERS="Active members"
COM_SPORTSMANAGER_TEAMS="Teams" COM_SPORTSMANAGER_TEAMS="Teams"
COM_SPORTSMANAGER_CURRENT_TEAMS="Current teams" COM_SPORTSMANAGER_CURRENT_TEAMS="Current teams"
COM_SPORTSMANAGER_PREVIOUS_TEAMS="Previous teams" COM_SPORTSMANAGER_PREVIOUS_TEAMS="Previous teams"
@@ -131,14 +128,11 @@ COM_SPORTSMANAGER_QUARTER_FINAL="Quarter final"
COM_SPORTSMANAGER_QUARTER_FINAL_SHORTCUT="1/4" COM_SPORTSMANAGER_QUARTER_FINAL_SHORTCUT="1/4"
COM_SPORTSMANAGER_ROUND_OF_16="Round of sixteen" COM_SPORTSMANAGER_ROUND_OF_16="Round of sixteen"
COM_SPORTSMANAGER_ROUND_OF_16_SHORTCUT="1/8" COM_SPORTSMANAGER_ROUND_OF_16_SHORTCUT="1/8"
COM_SPORTSMANAGER_ROUND_OF_32="Round of thirty-two" COM_SPORTSMANAGER_ROUND_OF_32="Round of thiry-two"
COM_SPORTSMANAGER_ROUND_OF_32_ALT="Round of thirty-two"
COM_SPORTSMANAGER_ROUND_OF_32_SHORTCUT="1/16" COM_SPORTSMANAGER_ROUND_OF_32_SHORTCUT="1/16"
COM_SPORTSMANAGER_ROUND_OF_64="Round of sixty-four" 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_64_SHORTCUT="1/32"
COM_SPORTSMANAGER_ROUND_OF_128="Round of 128" 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_ROUND_OF_128_SHORTCUT="1/64"
COM_SPORTSMANAGER_DAY_0_SHORTCUT="Su." COM_SPORTSMANAGER_DAY_0_SHORTCUT="Su."
COM_SPORTSMANAGER_DAY_1_SHORTCUT="Mo." COM_SPORTSMANAGER_DAY_1_SHORTCUT="Mo."
@@ -265,7 +259,6 @@ COM_SPORTSMANAGER_IN="in"
COM_SPORTSMANAGER_NATIONAL="National" COM_SPORTSMANAGER_NATIONAL="National"
COM_SPORTSMANAGER_INTERNATIONAL="International" COM_SPORTSMANAGER_INTERNATIONAL="International"
COM_SPORTSMANAGER_PLAYER_NUMBER_SHORT="Player number" COM_SPORTSMANAGER_PLAYER_NUMBER_SHORT="Player number"
COM_SPORTSMANAGER_ASSOCIATION_SHORT_NAME="Association short name"
COM_SPORTSMANAGER_BASIC_PLAYER_NUMBER_SHORT="Player number base" COM_SPORTSMANAGER_BASIC_PLAYER_NUMBER_SHORT="Player number base"
COM_SPORTSMANAGER_MESSAGES="Registrations" COM_SPORTSMANAGER_MESSAGES="Registrations"
COM_SPORTSMANAGER_TOURNAMENT_PLACEMENT="Tournament placements" COM_SPORTSMANAGER_TOURNAMENT_PLACEMENT="Tournament placements"
@@ -317,11 +310,6 @@ COM_SPORTSMANAGER_FOR_OTHER_CONTACT="For other contact"
COM_SPORTSMANAGER_DATES_REGISTERED_USERS="Apply dates by registered users" COM_SPORTSMANAGER_DATES_REGISTERED_USERS="Apply dates by registered users"
COM_SPORTSMANAGER_VIEW_ELO_RATING="View Elo rating" COM_SPORTSMANAGER_VIEW_ELO_RATING="View Elo rating"
COM_SPORTSMANAGER_VIEW_SPORTSMANAGER_LIZENZ="Show License" 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_USE_DISCIPLINARY_FINE="Use disciplinary fine"
COM_SPORTSMANAGER_PLAYER_DETAILS="Player details" COM_SPORTSMANAGER_PLAYER_DETAILS="Player details"
COM_SPORTSMANAGER_PLAYER_LIST_DETAILS="Player list details" COM_SPORTSMANAGER_PLAYER_LIST_DETAILS="Player list details"
COM_SPORTSMANAGER_PLAYER_EDIT="Edit player data by organisation/club contacts" COM_SPORTSMANAGER_PLAYER_EDIT="Edit player data by organisation/club contacts"
@@ -362,9 +350,8 @@ COM_SPORTSMANAGER_PLAYERS_EXPORT_SPORT_SOFTWARE="Export players (Sport Software)
COM_SPORTSMANAGER_CLEANUP_INACTIVE_PLAYERS="Cleanup inactive players" COM_SPORTSMANAGER_CLEANUP_INACTIVE_PLAYERS="Cleanup inactive players"
COM_SPORTSMANAGER_STATISTIK="Statistics" COM_SPORTSMANAGER_STATISTIK="Statistics"
COM_SPORTSMANAGER_PLAYERS_ACTIVE="Players active" COM_SPORTSMANAGER_PLAYERS_ACTIVE="Players active"
COM_SPORTSMANAGER_RESTRICTED_PLAYERS="Players restricted" COM_SPORTSMANAGER_RESTRICTED_PLAYERS="Players restrited"
COM_SPORTSMANAGER_PLAYER_PASSIV="Players passive" COM_SPORTSMANAGER_PLAYER_PASSIV="Players passive"
COM_SPORTSMANAGER_PLAYER_UNATTACHED="Players unattached"
COM_SPORTSMANAGER_MEN_ACTIVE="Male active" COM_SPORTSMANAGER_MEN_ACTIVE="Male active"
COM_SPORTSMANAGER_WOMEN_ACTIVE="Female active" COM_SPORTSMANAGER_WOMEN_ACTIVE="Female active"
COM_SPORTSMANAGER_JUNIOR_ACTIVE="Juniors active" COM_SPORTSMANAGER_JUNIOR_ACTIVE="Juniors active"
@@ -392,7 +379,6 @@ COM_SPORTSMANAGER_MEMBER_STATUS="Member status"
COM_SPORTSMANAGER_ACTIVE="Active" COM_SPORTSMANAGER_ACTIVE="Active"
COM_SPORTSMANAGER_RESTRICTED="Restricted" COM_SPORTSMANAGER_RESTRICTED="Restricted"
COM_SPORTSMANAGER_BEATEN="Excreted" COM_SPORTSMANAGER_BEATEN="Excreted"
COM_SPORTSMANAGER_HIDE="Hide"
COM_SPORTSMANAGER_PASSIVE="Passive" COM_SPORTSMANAGER_PASSIVE="Passive"
COM_SPORTSMANAGER_BEATEN_CLUB="Club excreted" COM_SPORTSMANAGER_BEATEN_CLUB="Club excreted"
COM_SPORTSMANAGER_SINGLE_SEED="Elo starting value singles" COM_SPORTSMANAGER_SINGLE_SEED="Elo starting value singles"
@@ -415,11 +401,10 @@ COM_SPORTSMANAGER_EXPORT="Export"
COM_SPORTSMANAGER_INTERNATIONAL_PLAYERS="Players (international)" COM_SPORTSMANAGER_INTERNATIONAL_PLAYERS="Players (international)"
COM_SPORTSMANAGER_COUNTRY_CODE="Country code" COM_SPORTSMANAGER_COUNTRY_CODE="Country code"
COM_SPORTSMANAGER_IMPORT="Import" COM_SPORTSMANAGER_IMPORT="Import"
COM_SPORTSMANAGER_IMPORT_MESSAGE="In the import there are only player information about club %s present. Shall only the members of that one club be updated, the associated club has to be selected down here. If the import contains all members of the organisation then the organisation must be selected.<br />If a license number already exists, the license number and the year of birth will not be overwritten." COM_SPORTSMANAGER_IMPORT_MESSAGE="In the import there are only player information about club %s present. Shall only the members of that one club be updated, the associated club has to be selected down here. If the import contains all members of the organisation then the organisation must be selected."
COM_SPORTSMANAGER_CHECK="Check" COM_SPORTSMANAGER_CHECK="Check"
COM_SPORTSMANAGER_IMPORT_CONFLICTS_MESSAGE="There are faults or conflicts in the import which have to be fixed manually first." COM_SPORTSMANAGER_IMPORT_CONFLICTS_MESSAGE="There are conflicts in the import which have to be fixed manually first."
COM_SPORTSMANAGER_IMPORT_DUPLICATE_MESSAGE="Attempt to change player number into one that is already assigned to another player." COM_SPORTSMANAGER_IMPORT_DUPLICATE_MESSAGE="Attempt to change player number into one that is already assigned to another player."
COM_SPORTSMANAGER_IMPORT_WRONG_FORMAT_PLAYERNUMBER="One or more player numbers contain an invalid format"
COM_SPORTSMANAGER_NAME2="Name" COM_SPORTSMANAGER_NAME2="Name"
COM_SPORTSMANAGER_DATA_IMPORT_ABORT_MESSAGE="The import has been aborted because there are conflicts in the containing player information. Please contact a moderator and attach the import!" COM_SPORTSMANAGER_DATA_IMPORT_ABORT_MESSAGE="The import has been aborted because there are conflicts in the containing player information. Please contact a moderator and attach the import!"
COM_SPORTSMANAGER_DATA_IMPORT_NO_CONFLICTS="There are conflicts in the containing player information." COM_SPORTSMANAGER_DATA_IMPORT_NO_CONFLICTS="There are conflicts in the containing player information."
@@ -516,6 +501,7 @@ COM_SPORTSMANAGER_ADD_POINTS_TABLE="Add points table"
COM_SPORTSMANAGER_ADD_FUNCTION="Add function" COM_SPORTSMANAGER_ADD_FUNCTION="Add function"
COM_SPORTSMANAGER_PARTICIPANT="Participants" COM_SPORTSMANAGER_PARTICIPANT="Participants"
COM_SPORTSMANAGER_FUNCTION="Function" COM_SPORTSMANAGER_FUNCTION="Function"
COM_SPORTSMANAGER_MULTIPLIER="Multiplier"
COM_SPORTSMANAGER_MAXIMUM="maximum" COM_SPORTSMANAGER_MAXIMUM="maximum"
COM_SPORTSMANAGER_CONTRACTION="Contraction" COM_SPORTSMANAGER_CONTRACTION="Contraction"
COM_SPORTSMANAGER_ELIGIBLE_ORGANIZERS="Eligible for organisation" COM_SPORTSMANAGER_ELIGIBLE_ORGANIZERS="Eligible for organisation"
@@ -549,7 +535,6 @@ COM_SPORTSMANAGER_FULL_RATING="Full rating"
COM_SPORTSMANAGER_NO_RATING="No rating" COM_SPORTSMANAGER_NO_RATING="No rating"
COM_SPORTSMANAGER_TEAM_COMPETITIONS="Team competitions" COM_SPORTSMANAGER_TEAM_COMPETITIONS="Team competitions"
COM_SPORTSMANAGER_TABLE_SUMMARY="Table rating" COM_SPORTSMANAGER_TABLE_SUMMARY="Table rating"
COM_SPORTSMANAGER_HEAD_TO_HEAD_RECORD="Head-to-head record"
COM_SPORTSMANAGER_POINTS_WON_LOST_DIFFERENCE="Game points won, game points lost, point difference" COM_SPORTSMANAGER_POINTS_WON_LOST_DIFFERENCE="Game points won, game points lost, point difference"
COM_SPORTSMANAGER_PERFORMANCE_INDEX="Performance index (GP+ * GP+ * 100) / (GP+ + GP-), game points won, ..." COM_SPORTSMANAGER_PERFORMANCE_INDEX="Performance index (GP+ * GP+ * 100) / (GP+ + GP-), game points won, ..."
COM_SPORTSMANAGER_PERFORMANCE_INDEX2="Performance index (games * P+ * 10) / (P+ + P-), game points won, ..." COM_SPORTSMANAGER_PERFORMANCE_INDEX2="Performance index (games * P+ * 10) / (P+ + P-), game points won, ..."
@@ -576,7 +561,7 @@ COM_SPORTSMANAGER_PRIVATE_PLAYER_DATA="View privat player information in club an
COM_SPORTSMANAGER_ASSOCIATIONS_MEMBERSHIPS_MANAGE="Manage clubs and memberships" COM_SPORTSMANAGER_ASSOCIATIONS_MEMBERSHIPS_MANAGE="Manage clubs and memberships"
COM_SPORTSMANAGER_MANAGE_CLASSIFICATIONS="Manage classifications" COM_SPORTSMANAGER_MANAGE_CLASSIFICATIONS="Manage classifications"
COM_SPORTSMANAGER_MANAGE_TEAM_PLANS="Manage team plans" COM_SPORTSMANAGER_MANAGE_TEAM_PLANS="Manage team plans"
COM_SPORTSMANAGER_MANAGE_RULES_POSTPONEMENT="Manage match rescheduling/postpone rules" COM_SPORTSMANAGER_MANAGE_RULES_POSTPONEMENT="Manage postpone rules"
COM_SPORTSMANAGER_MANAGE_VENUES="Manage venues" COM_SPORTSMANAGER_MANAGE_VENUES="Manage venues"
COM_SPORTSMANAGER_MANAGE_TEAM_COMPETITIONS="Manage team competitions" COM_SPORTSMANAGER_MANAGE_TEAM_COMPETITIONS="Manage team competitions"
COM_SPORTSMANAGER_MANAGE_PLAYER_STATISTICS="Manage player statitics" COM_SPORTSMANAGER_MANAGE_PLAYER_STATISTICS="Manage player statitics"
@@ -618,10 +603,7 @@ 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_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_KO_SIMPLE_FULL="K.O. (singles or full playout of all places)"
COM_SPORTSMANAGER_MANUAL_PRO_TEAMS="Manual (per team)" 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_SUBDIVISION="Subdivision"
COM_SPORTSMANAGER_SHOW_MATCHDAY_TITLE="Show title matchday"
COM_SPORTSMANAGER_ELO_RATING="Elo rating" COM_SPORTSMANAGER_ELO_RATING="Elo rating"
COM_SPORTSMANAGER_ELIGIBLE_FOR_EVENT="Eligibles for competition" COM_SPORTSMANAGER_ELIGIBLE_FOR_EVENT="Eligibles for competition"
COM_SPORTSMANAGER_TITLE_LOGO="Title logo" COM_SPORTSMANAGER_TITLE_LOGO="Title logo"
@@ -649,9 +631,6 @@ COM_SPORTSMANAGER_GAMEDAY="Gameday"
COM_SPORTSMANAGER_GAMEDAYS="Gamedays" COM_SPORTSMANAGER_GAMEDAYS="Gamedays"
COM_SPORTSMANAGER_ROUND="Round" COM_SPORTSMANAGER_ROUND="Round"
COM_SPORTSMANAGER_ROUNDS="Rounds" 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_MONTH="Month"
COM_SPORTSMANAGER_MONTHS="Months" COM_SPORTSMANAGER_MONTHS="Months"
COM_SPORTSMANAGER_PLAYER_FROM_TEAM="Player of team" COM_SPORTSMANAGER_PLAYER_FROM_TEAM="Player of team"
@@ -667,9 +646,7 @@ COM_SPORTSMANAGER_SO_FAR="so far"
COM_SPORTSMANAGER_PLACEMENT_AREA="Placement area" COM_SPORTSMANAGER_PLACEMENT_AREA="Placement area"
COM_SPORTSMANAGER_IMAGE_WITHIN_TEAM="Image within team" COM_SPORTSMANAGER_IMAGE_WITHIN_TEAM="Image within team"
COM_SPORTSMANAGER_ADD_MEETING="Add match" COM_SPORTSMANAGER_ADD_MEETING="Add match"
COM_SPORTSMANAGER_GAMEDAY_GENERATION="Generate gameday"
COM_SPORTSMANAGER_ROUND_GENERATION="Generate round" COM_SPORTSMANAGER_ROUND_GENERATION="Generate round"
COM_SPORTSMANAGER_CUP_ROUND_GENERATION="Generate cup round"
COM_SPORTSMANAGER_GENERATE_GROUP_GAME="Generate group games" COM_SPORTSMANAGER_GENERATE_GROUP_GAME="Generate group games"
COM_SPORTSMANAGER_Import_GROUP_GAME="Import group games" COM_SPORTSMANAGER_Import_GROUP_GAME="Import group games"
COM_SPORTSMANAGER_Import_GROUP_GAME2="Group games: Import" COM_SPORTSMANAGER_Import_GROUP_GAME2="Group games: Import"
@@ -797,7 +774,6 @@ COM_SPORTSMANAGER_FEDERAL_STATES="State"
COM_SPORTSMANAGER_STATES="Countries" COM_SPORTSMANAGER_STATES="Countries"
COM_SPORTSMANAGER_YEAR="Year" COM_SPORTSMANAGER_YEAR="Year"
COM_SPORTSMANAGER_ADDITION="Addition" COM_SPORTSMANAGER_ADDITION="Addition"
COM_SPORTSMANAGER_LOCATION="Location"
COM_SPORTSMANAGER_STATE="Germany" COM_SPORTSMANAGER_STATE="Germany"
COM_SPORTSMANAGER_FEDERAL_="Federal " COM_SPORTSMANAGER_FEDERAL_="Federal "
COM_SPORTSMANAGER_INFO="Info" COM_SPORTSMANAGER_INFO="Info"
@@ -811,6 +787,7 @@ COM_SPORTSMANAGER_APPLIED_FOR="Applied"
COM_SPORTSMANAGER_DECLINED="Declined" COM_SPORTSMANAGER_DECLINED="Declined"
COM_SPORTSMANAGER_DATE_DETAILS="Event: Details" COM_SPORTSMANAGER_DATE_DETAILS="Event: Details"
COM_SPORTSMANAGER_ADDITIONS="Additions" COM_SPORTSMANAGER_ADDITIONS="Additions"
COM_SPORTSMANAGER_ADDITIONAL_INFORMATION="Additional information"
COM_SPORTSMANAGER_PUBLIC_EMAIL="E-mail public" COM_SPORTSMANAGER_PUBLIC_EMAIL="E-mail public"
COM_SPORTSMANAGER_EMAIL_WITH_CHANGES="E-mail for changes" COM_SPORTSMANAGER_EMAIL_WITH_CHANGES="E-mail for changes"
COM_SPORTSMANAGER_ACTION_TYPE="Action type" COM_SPORTSMANAGER_ACTION_TYPE="Action type"
@@ -886,9 +863,6 @@ COM_SPORTSMANAGER_INITIAL_APPOINTMENT_SUGGESTIONS="Initial appointment suggestio
COM_SPORTSMANAGER_REQUESTING_TEAM="Requesting team" COM_SPORTSMANAGER_REQUESTING_TEAM="Requesting team"
COM_SPORTSMANAGER_OPPONENT_TEAM="Opponent team" COM_SPORTSMANAGER_OPPONENT_TEAM="Opponent team"
COM_SPORTSMANAGER_AGAINST_PROPOSALS_ALLOWED="Against proposals allowed" COM_SPORTSMANAGER_AGAINST_PROPOSALS_ALLOWED="Against proposals allowed"
COM_SPORTSMANAGER_REASON_REQUIRED="Reason required"
COM_SPORTSMANAGER_CLUB_ENTITLEMENT="Club entitlement"
COM_SPORTSMANAGER_ASSOCIATION_ENTITLEMENT="Association_entitlement"
COM_SPORTSMANAGER_LEAD_TIME="Lead time" COM_SPORTSMANAGER_LEAD_TIME="Lead time"
COM_SPORTSMANAGER_APPOINTMENT_PROPOSALS_MINIMAL="Appointment proposals minimal" COM_SPORTSMANAGER_APPOINTMENT_PROPOSALS_MINIMAL="Appointment proposals minimal"
COM_SPORTSMANAGER_APPOINTMENT_PROPOSALS_MAXIMUM="Appointment proposals maximum" COM_SPORTSMANAGER_APPOINTMENT_PROPOSALS_MAXIMUM="Appointment proposals maximum"
@@ -898,11 +872,6 @@ COM_SPORTSMANAGER_OPTIONAL_BUT_SAME_IN_DOUBLES="Optional but both or none in dou
COM_SPORTSMANAGER_REQUIRED="Required" COM_SPORTSMANAGER_REQUIRED="Required"
COM_SPORTSMANAGER_RESULT_ONLY="Result only" COM_SPORTSMANAGER_RESULT_ONLY="Result only"
COM_SPORTSMANAGER_GAME_NUMBER="Game %d" COM_SPORTSMANAGER_GAME_NUMBER="Game %d"
COM_SPORTSMANAGER_LABEL_GAME_NUMBER="Game nr"
COM_SPORTSMANAGER_LABEL_GAME_TITLE="Gameday title"
COM_SPORTSMANAGER_EXPLICIT_PENALTIES="Explicit Penalties"
COM_SPORTSMANAGER_EXPLICIT_PENALTIES_EMAIL_SUBJECT="%s: received penalty"
COM_SPORTSMANAGER_EXPLICIT_PENALTIES_EMAIL_BODY="%s received a penalty of %f points based on the following justification: %s"
COM_SPORTSMANAGER_EMAIL_SHIFT_GAME_APPOINTMENT_SUBJECT="%s vs %s: Shift game appointment" COM_SPORTSMANAGER_EMAIL_SHIFT_GAME_APPOINTMENT_SUBJECT="%s vs %s: Shift game appointment"
COM_SPORTSMANAGER_EMAIL_SHIFT_GAME_APPOINTMENT_BODY="For match %s versus %s on %s in %s the game appointment is shifted by %s.\n\nAlternative appointments:\n\n" COM_SPORTSMANAGER_EMAIL_SHIFT_GAME_APPOINTMENT_BODY="For match %s versus %s on %s in %s the game appointment is shifted by %s.\n\nAlternative appointments:\n\n"
COM_SPORTSMANAGER_EMAIL_SHIFT_GAME_APPOINTMENT_REQUESTED_BODY="For match %s on %s in %s the game appointment is shifted by %s.\n\nPlease propose alternative appointments under %s" COM_SPORTSMANAGER_EMAIL_SHIFT_GAME_APPOINTMENT_REQUESTED_BODY="For match %s on %s in %s the game appointment is shifted by %s.\n\nPlease propose alternative appointments under %s"
@@ -955,10 +924,8 @@ COM_SPORTSMANAGER_NON_SMOKING_PROTECTION_MARK_NO=" (Kein Nichtraucherschutz)"
COM_SPORTSMANAGER_POINTS_TABLE="Points table" COM_SPORTSMANAGER_POINTS_TABLE="Points table"
COM_SPORTSMANAGER_EVALUATION="Auswertung" COM_SPORTSMANAGER_EVALUATION="Auswertung"
COM_SPORTSMANAGER_FUNCTION_DESCRIPTION="Variables: n = number of participants, p = place, m = multiplier of rating and in doubles possibly additionally reduced rating<br />Functions: +, -, *, /, round(x), pow(x), if(a > b, x, y), min(x, y), max(x, y), log(x), ln(x), logn(b, x)<br />VerteilungR(r, p, n, m) := max(round((((m * r - 1) * (-log(p / n) * (1 - (p / n)))) / (-log(1 / n) * (1 - (1 / n)))) + 1), 1)<br />Verteilung(r, p, n, m) := max(round(m * round((((r - 1) * (-log(p / n) * (1 - (p / n)))) / (-log(1 / n) * (1 - (1 / n)))) + 1)), 1)<br /><br />The functions VerteilungR() and Verteilung() distribute points for place 1 (r) descending to the individual places (p) of the number of participants (n).<br />VerteilungR() applies the multiplier (m) to the points for 1st place and then distributes down to 1 point for the last place.<br />Verteilung() applies the multiplier (m) to the points after the calculation, i.e. the last place receives 1 * m points." COM_SPORTSMANAGER_FUNCTION_DESCRIPTION="Variables: n = number of participants, p = place, m = multiplier of rating and in doubles possibly additionally reduced rating<br />Functions: +, -, *, /, round(x), pow(x), if(a > b, x, y), min(x, y), max(x, y), log(x), ln(x), logn(b, x)<br />VerteilungR(r, p, n, m) := max(round((((m * r - 1) * (-log(p / n) * (1 - (p / n)))) / (-log(1 / n) * (1 - (1 / n)))) + 1), 1)<br />Verteilung(r, p, n, m) := max(round(m * round((((r - 1) * (-log(p / n) * (1 - (p / n)))) / (-log(1 / n) * (1 - (1 / n)))) + 1)), 1)<br /><br />The functions VerteilungR() and Verteilung() distribute points for place 1 (r) descending to the individual places (p) of the number of participants (n).<br />VerteilungR() applies the multiplier (m) to the points for 1st place and then distributes down to 1 point for the last place.<br />Verteilung() applies the multiplier (m) to the points after the calculation, i.e. the last place receives 1 * m points."
COM_SPORTSMANAGER_RANK="Rank"
; Edit Player
COM_SPORTSMANAGER_LIZENZ="License" COM_SPORTSMANAGER_LIZENZ="License"
COM_SPORTSMANAGER_ARIA_LABEL_MATCHDAY_SELECT="Choose a match day" COM_SPORTSMANAGER_ARIA_LABEL_MATCHDAY_SELECT="Choose a match day"
COM_SPORTSMANAGER_ARIA_LABEL_PROPOSAL_DAY="Choose the day of the match proposal" COM_SPORTSMANAGER_ARIA_LABEL_PROPOSAL_DAY="Choose the day of the match proposal"
COM_SPORTSMANAGER_ARIA_LABEL_PROPOSAL_MONTH="Choose the month of the match proposal" COM_SPORTSMANAGER_ARIA_LABEL_PROPOSAL_MONTH="Choose the month of the match proposal"
@@ -1020,82 +987,3 @@ COM_SPORTSMANAGER_ARIA_LABEL_RANKING_EVALUATION="Ranking evaluation"
COM_SPORTSMANAGER_ARIA_LABEL_LASTNAME="Lastname" COM_SPORTSMANAGER_ARIA_LABEL_LASTNAME="Lastname"
COM_SPORTSMANAGER_ARIA_LABEL_FIRSTNAME="Firstname" COM_SPORTSMANAGER_ARIA_LABEL_FIRSTNAME="Firstname"
COM_SPORTSMANAGER_ARIA_LABEL_CLUB="Club" 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"
COM_SPORTSMANAGER_RULEBOOKS="Rulebooks"
COM_SPORTSMANAGER_RULEBOOK="Rulebook"
COM_SPORTSMANAGER_RULE_SHORT="Rule"
COM_SPORTSMANAGER_FEE_SHORT="Section fees"
COM_SPORTSMANAGER_RULE_LONG="Section rules"
COM_SPORTSMANAGER_FEE_LONG="Fee"
COM_SPORTSMANAGER_SELECT="Select"
COM_SPORTSMANAGER_NO_SELECT="No selection"
COM_SPORTSMANAGER_REALLY_REMOVE_RULEBOOK="Do you really want to remove this rulebook?"
COM_SPORTSMANAGER_ADD_RULEBOOK="Add rulebook"
COM_SPORTSMANAGER_DISCIPLINARY_FINES="Disciplinary fines"
COM_SPORTSMANAGER_ISSUE_DISCIPLINARY_FINES="Issue disciplinary fines"
COM_SPORTSMANAGER_ISSUE_DISCIPLINARY_FINE="Issue disciplinary fine"
COM_SPORTSMANAGER_EDIT_DISCIPLINARY_FINE="Edit issue disciplinary fine"
COM_SPORTSMANAGER_SEND_DISCIPLINARY_FINE="Send issue disciplinary fine"
COM_SPORTSMANAGER_REALLY_REMOVE_DISCIPLINARY_FINES="Do you really want to remove this Issue disciplinary fine?"
COM_SPORTSMANAGER_VIOLATIONS="Violations"
COM_SPORTSMANAGER_VIOLATION="Violation"
COM_SPORTSMANAGER_ADD_VIOLATION="Add violation"
COM_SPORTSMANAGER_REALLY_REMOVE_VIOLATION="Do you really want to remove this violation?"
COM_SPORTSMANAGER_VIOLATION_TEXT="Text"
COM_SPORTSMANAGER_VIOLATION_ADD_TEXT="Additional text"
COM_SPORTSMANAGER_FEE="Fee"
COM_SPORTSMANAGER_ADD_FEE="Additional Fee"
COM_SPORTSMANAGER_SELECTABLE="Selectable"
COM_SPORTSMANAGER_TEMPLATE="Template"
COM_SPORTSMANAGER_EMAIL_SUBJECT="Subject"
COM_SPORTSMANAGER_EMAIL_MESSAGE="Message"
COM_SPORTSMANAGER_EMAIL_TO="to"
COM_SPORTSMANAGER_EMAIL_SEND="Send E-Mail"
COM_SPORTSMANAGER_EMAIL_TEXT_TEMPLATE="Text template"
COM_SPORTSMANAGER_ISSUER="Issuer"
COM_SPORTSMANAGER_SENDER="Sender"
COM_SPORTSMANAGER_ISSUE_DATE="Issue date"
COM_SPORTSMANAGER_BILL_ISSUER="Bill issuer"
COM_SPORTSMANAGER_MULTIPLIER="Multiplier"
COM_SPORTSMANAGER_ADDITIONAL_INFORMATION="Additional information"
COM_SPORTSMANAGER_EMAIL_WAS_SEND="E-Mail was succesfully sent"
COM_SPORTSMANAGER_EMAIL_WAS_NOT_SEND="E-Mail was not sent"
COM_SPORTSMANAGER_OLD_DATE="Old Date"
COM_SPORTSMANAGER_NEW_DATE="New Date"
COM_SPORTSMANAGER_REASON_GAME_APPOINTMENT="Appointment reason"
COM_SPORTSMANAGER_MATCH_RESCHEDULINGS="Match reschedulings"
COM_SPORTSMANAGER_MATCH_RESCHEDULING="Match rescheduling"
COM_SPORTSMANAGER_MATCH_SWAPPING_HELP="If home advantage is swapped, enter the same date"
COM_SPORTSMANAGER_NOT_VALID_TIME="Not valid time"
COM_SPORTSMANAGER_REALLY_MATCH_RESCHEDULING="Do you really want to remove this match rescheduling?"
COM_SPORTSMANAGER_REST_DAYS="Rest days"
COM_SPORTSMANAGER_TRAINING_DAYS="Training days"
COM_SPORTSMANAGER_NOT_ACTUALIZED_DATA="Data not updated"
COM_SPORTSMANAGER_ASSOCIATION_BODIES="Association bodies"
COM_SPORTSMANAGER_ASSOCIATION_BODY="Association body"
COM_SPORTSMANAGER_ADD_ASSOCIATION_BODY="Add association body"
COM_SPORTSMANAGER_REALLY_REMOVE_ASSOCIATION_BODY="Do you really want to remove this association body?"
COM_SPORTSMANAGER_INVALID_ASSOCIATION_BODY_NAME="Invalid association body name"
COM_SPORTSMANAGER_NAME_NOT_COMPLETE="The name is not completely filled in"
COM_SPORTSMANAGER_ADDITIONAL_INFO="Additional information"
COM_SPORTSMANAGER_USE_HTML="HTML-formatted text should be used here."
COM_SPORTSMANAGER_REALLY_REMOVE_ASSOCIATION_BODY_MEMBER="Do you really want to remove this association body member?"
COM_SPORTSMANAGER_HELP_EDIT_ASSOCIATION_BODY_MEMBER="Selecting a name from the player list will fill in the first and last name.<br>Phone, mobile, and email are filled from the player list if left blank here."
COM_SPORTSMANAGER_HALL_OF_FAME="Hall of Fame"
COM_SPORTSMANAGER_ADD_HALL_OF_FAME="Add Hall of Fame"
COM_SPORTSMANAGER_INVALID_HALL_OF_FAME_NAME="Invalid Hall of Fame name"
COM_SPORTSMANAGER_REALLY_REMOVE_HALL_OF_FAME="Are you sure you want to delete this Hall of Fame including all its members?"
COM_SPORTSMANAGER_MATCH_TYPE="Game Type"
COM_SPORTSMANAGER_REALLY_REMOVE_HALL_OF_FAME_YEAR="Are you sure you want to delete this Hall of Fame year?"
COM_SPORTSMANAGER_YEARS="Years"
COM_SPORTSMANAGER_ADD_HALL_OF_FAME_YEAR="Add Hall of Fame Year"
COM_SPORTSMANAGER_NO_ENTRY="no entry"
COM_SPORTSMANAGER_REALLY_SWAP_MATCH="Do you really want to swap the home advantage?"
COM_SPORTSMANAGER_SWAP_MATCH="Swap home advantage"
COM_SPORTSMANAGER_REALLY_DELETE_MATCH_REPORT="The match report and all its history will be deleted. Are you sure you want to delete the match report?"
COM_SPORTSMANAGER_MATCH_REPORT_DELETED="Match report deleted"
COM_SPORTSMANAGER_MATCH_REPORT_WAS_DELETED="The match report has been successfully deleted!"
COM_SPORTSMANAGER_MATCH_REPORT_CORRECTED="Match report corrected"
+14 -244
View File
@@ -137,8 +137,6 @@ return new class () implements InstallerScriptInterface
. "\n `tisch` tinytext DEFAULT NULL," . "\n `tisch` tinytext DEFAULT NULL,"
. "\n `zeitpunkt` datetime DEFAULT NULL," . "\n `zeitpunkt` datetime DEFAULT NULL,"
. "\n `spieltag` smallint(6) DEFAULT NULL," . "\n `spieltag` smallint(6) DEFAULT NULL,"
. "\n `spieltag_titel` VARCHAR(32) NOT NULL DEFAULT '',"
. "\n `spiel_nr` tinyint(4) DEFAULT NULL,"
. "\n `heim_punkte` smallint(6) DEFAULT NULL," . "\n `heim_punkte` smallint(6) DEFAULT NULL,"
. "\n `gast_punkte` smallint(6) DEFAULT NULL," . "\n `gast_punkte` smallint(6) DEFAULT NULL,"
. "\n `heim_spielpunkte` smallint(6) DEFAULT NULL," . "\n `heim_spielpunkte` smallint(6) DEFAULT NULL,"
@@ -670,9 +668,6 @@ return new class () implements InstallerScriptInterface
. "\n `ortsname` varchar(30) DEFAULT NULL," . "\n `ortsname` varchar(30) DEFAULT NULL,"
. "\n `ortsteil` varchar(30) DEFAULT NULL," . "\n `ortsteil` varchar(30) DEFAULT NULL,"
. "\n `url` varchar(150) DEFAULT NULL," . "\n `url` varchar(150) DEFAULT NULL,"
. "\n `telefon` varchar(64) DEFAULT NULL,"
. "\n `email` varchar(64) DEFAULT NULL,"
. "\n `ruhetage` varchar(64) DEFAULT NULL,"
. "\n `beschreibung` varchar(500) DEFAULT NULL," . "\n `beschreibung` varchar(500) DEFAULT NULL,"
. "\n `status` tinyint(1) NOT NULL DEFAULT '0'," . "\n `status` tinyint(1) NOT NULL DEFAULT '0',"
. "\n PRIMARY KEY (`spielort_id`)" . "\n PRIMARY KEY (`spielort_id`)"
@@ -685,9 +680,7 @@ return new class () implements InstallerScriptInterface
. "\n `teamgruppe_id` int(11) DEFAULT NULL," . "\n `teamgruppe_id` int(11) DEFAULT NULL,"
. "\n `verein_id` int(11) DEFAULT NULL," . "\n `verein_id` int(11) DEFAULT NULL,"
. "\n `veranstaltung_id` int(11) NOT NULL DEFAULT '0'," . "\n `veranstaltung_id` int(11) NOT NULL DEFAULT '0',"
. "\n `setzliste_nr` tinyint(4) DEFAULT NULL," . "\n `teamname` varchar(50) NOT NULL,"
. "\n `teamname` varchar(50) NOT NULL DEFAULT '',"
. "\n `teamname_kurz` VARCHAR(24) NOT NULL DEFAULT '',"
. "\n `tischtyp` varchar(200) DEFAULT NULL," . "\n `tischtyp` varchar(200) DEFAULT NULL,"
. "\n `tischeigenschaften` varchar(200) DEFAULT NULL," . "\n `tischeigenschaften` varchar(200) DEFAULT NULL,"
. "\n `zusatzpunkte` float(6,2) DEFAULT NULL," . "\n `zusatzpunkte` float(6,2) DEFAULT NULL,"
@@ -695,7 +688,6 @@ return new class () implements InstallerScriptInterface
. "\n `heimspiel_wochentag` tinyint(4) DEFAULT NULL," . "\n `heimspiel_wochentag` tinyint(4) DEFAULT NULL,"
. "\n `heimspiel_uhrzeit` smallint(6) DEFAULT NULL," . "\n `heimspiel_uhrzeit` smallint(6) DEFAULT NULL,"
. "\n `heimspielort_id` int(11) DEFAULT NULL," . "\n `heimspielort_id` int(11) DEFAULT NULL,"
. "\n `trainingstage` varchar(64) DEFAULT NULL,"
. "\n `nichtraucherschutz` tinyint(4) DEFAULT '0'," . "\n `nichtraucherschutz` tinyint(4) DEFAULT '0',"
. "\n `platz` smallint(6) DEFAULT NULL," . "\n `platz` smallint(6) DEFAULT NULL,"
. "\n `gesamtpunkte` float(6,2) DEFAULT NULL," . "\n `gesamtpunkte` float(6,2) DEFAULT NULL,"
@@ -722,18 +714,6 @@ return new class () implements InstallerScriptInterface
$db->setQuery( $query ); $db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); } if (!$db->execute()) { die($db->stderr(true)); }
$query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_team_strafen` ("
. "\n `team_strafen_id` int(11) NOT NULL AUTO_INCREMENT,"
. "\n `zeitpunkt` datetime NOT NULL,"
. "\n `moderator_user_id` int(11) DEFAULT NULL,"
. "\n `team_id` int(11) NOT NULL DEFAULT '0',"
. "\n `strafe` float(6,2) NOT NULL DEFAULT '0',"
. "\n `beschreibung` text NOT NULL,"
. "\n PRIMARY KEY (`team_strafen_id`)"
. "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_teamansprechpartner` (" $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_teamansprechpartner` ("
. "\n `kontaktperson_id` int(11) NOT NULL AUTO_INCREMENT," . "\n `kontaktperson_id` int(11) NOT NULL AUTO_INCREMENT,"
. "\n `team_id` int(11) NOT NULL DEFAULT '0'," . "\n `team_id` int(11) NOT NULL DEFAULT '0',"
@@ -921,7 +901,6 @@ return new class () implements InstallerScriptInterface
. "\n `erster_tag` date NOT NULL DEFAULT '0000-00-00'," . "\n `erster_tag` date NOT NULL DEFAULT '0000-00-00',"
. "\n `letzter_tag` date DEFAULT NULL," . "\n `letzter_tag` date DEFAULT NULL,"
. "\n `kategorie` tinyint(4) DEFAULT '1'," . "\n `kategorie` tinyint(4) DEFAULT '1',"
. "\n `reminder_count` tinyint DEFAULT '0',"
. "\n PRIMARY KEY (`turnier_id`)," . "\n PRIMARY KEY (`turnier_id`),"
. "\n KEY `saison_id` (`saison_id`)," . "\n KEY `saison_id` (`saison_id`),"
. "\n KEY `veranstalter_id` (`veranstalter_id`)" . "\n KEY `veranstalter_id` (`veranstalter_id`)"
@@ -1022,7 +1001,7 @@ return new class () implements InstallerScriptInterface
$db->setQuery( $query ); $db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); } if (!$db->execute()) { die($db->stderr(true)); }
$query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_unbestaetigtes_ergebnis` (" $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_unbestaetigtes_ergebnis` ("
. "\n `unbestaetigtes_ergebnis_id` int(11) NOT NULL AUTO_INCREMENT," . "\n `unbestaetigtes_ergebnis_id` int(11) NOT NULL AUTO_INCREMENT,"
. "\n `begegnung_id` int(11) NOT NULL DEFAULT '0'," . "\n `begegnung_id` int(11) NOT NULL DEFAULT '0',"
. "\n `vorschlagendes_team_id` int(11) NOT NULL DEFAULT '0'," . "\n `vorschlagendes_team_id` int(11) NOT NULL DEFAULT '0',"
@@ -1030,7 +1009,7 @@ return new class () implements InstallerScriptInterface
. "\n `kommentar` varchar(255) DEFAULT NULL," . "\n `kommentar` varchar(255) DEFAULT NULL,"
. "\n `vorgeschlagen` datetime DEFAULT NULL," . "\n `vorgeschlagen` datetime DEFAULT NULL,"
. "\n PRIMARY KEY (`unbestaetigtes_ergebnis_id`)," . "\n PRIMARY KEY (`unbestaetigtes_ergebnis_id`),"
. "\n UNIQUE KEY `begegnung_id` (`begegnung_id`)," . "\n KEY `begegnung_id` (`begegnung_id`),"
. "\n KEY `vorschlagendes_team_id` (`vorschlagendes_team_id`)" . "\n KEY `vorschlagendes_team_id` (`vorschlagendes_team_id`)"
. "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
$db->setQuery( $query ); $db->setQuery( $query );
@@ -1051,19 +1030,15 @@ return new class () implements InstallerScriptInterface
. "\n `saison_id` int(11) NOT NULL DEFAULT '0'," . "\n `saison_id` int(11) NOT NULL DEFAULT '0',"
. "\n `veranstalter_id` int(11) NOT NULL DEFAULT '0'," . "\n `veranstalter_id` int(11) NOT NULL DEFAULT '0',"
. "\n `bezeichnung` varchar(50) DEFAULT NULL," . "\n `bezeichnung` varchar(50) DEFAULT NULL,"
. "\n `regelwerke_id` INT(11) NOT NULL DEFAULT '0',"
. "\n `modus_id` int(11) NOT NULL DEFAULT '0'," . "\n `modus_id` int(11) NOT NULL DEFAULT '0',"
. "\n `verschieberegel_id` int(11) NOT NULL DEFAULT '0'," . "\n `verschieberegel_id` int(11) NOT NULL DEFAULT '0',"
. "\n `tabellenwertung` tinyint(4) NOT NULL DEFAULT '0'," . "\n `tabellenwertung` tinyint(4) NOT NULL DEFAULT '0',"
. "\n `direktervergleich` tinyint(4) NOT NULL DEFAULT '0',"
. "\n `unterteilung` tinyint(4) NOT NULL DEFAULT '0'," . "\n `unterteilung` tinyint(4) NOT NULL DEFAULT '0',"
. "\n `spieltag_titel_zeigen` INT(4) NOT NULL DEFAULT '0',"
. "\n `erster_tag` date NOT NULL DEFAULT '0000-00-00'," . "\n `erster_tag` date NOT NULL DEFAULT '0000-00-00',"
. "\n `letzter_tag` date DEFAULT NULL," . "\n `letzter_tag` date DEFAULT NULL,"
. "\n `elo_wertung` tinyint(4) DEFAULT NULL," . "\n `elo_wertung` tinyint(4) DEFAULT NULL,"
. "\n `explizite_strafen` tinyint(4) DEFAULT '0'," . "\n `logo_url` TINYTEXT NOT NULL,"
. "\n `logo_url` TINYTEXT NOT NULL," . "\n `ticker_logo_url` TINYTEXT NOT NULL,"
. "\n `ticker_logo_url` TINYTEXT NOT NULL,"
. "\n `status` tinyint(4) NOT NULL DEFAULT '0'," . "\n `status` tinyint(4) NOT NULL DEFAULT '0',"
. "\n `reihenfolge` tinyint(4) DEFAULT '1'," . "\n `reihenfolge` tinyint(4) DEFAULT '1',"
. "\n `kategorie` tinyint(4) DEFAULT '1'," . "\n `kategorie` tinyint(4) DEFAULT '1',"
@@ -1085,7 +1060,6 @@ return new class () implements InstallerScriptInterface
. "\n `url` varchar(150) DEFAULT NULL," . "\n `url` varchar(150) DEFAULT NULL,"
. "\n `beschreibung` varchar(500) DEFAULT NULL," . "\n `beschreibung` varchar(500) DEFAULT NULL,"
. "\n `ausgetreten` tinyint(1) DEFAULT '0'," . "\n `ausgetreten` tinyint(1) DEFAULT '0',"
. "\n `verstecken` INT(4) NOT NULL DEFAULT '0',"
. "\n PRIMARY KEY (`verein_id`)," . "\n PRIMARY KEY (`verein_id`),"
. "\n KEY `veranstalter_id` (`veranstalter_id`)" . "\n KEY `veranstalter_id` (`veranstalter_id`)"
. "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
@@ -1114,19 +1088,16 @@ return new class () implements InstallerScriptInterface
if (!$db->execute()) { die($db->stderr(true)); } if (!$db->execute()) { die($db->stderr(true)); }
$query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_verschieberegel` (" $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_verschieberegel` ("
. "\n `verschieberegel_id` int(11) NOT NULL AUTO_INCREMENT," . "\n `verschieberegel_id` int(11) NOT NULL AUTO_INCREMENT,"
. "\n `bezeichnung` varchar(50) NOT NULL DEFAULT ''," . "\n `bezeichnung` varchar(50) NOT NULL DEFAULT '',"
. "\n `initial_ohne_termin` tinyint(1) NOT NULL DEFAULT '0'," . "\n `initial_ohne_termin` tinyint(1) NOT NULL DEFAULT '0',"
. "\n `keine_gegenvorschlaege` tinyint(1) NOT NULL DEFAULT '0'," . "\n `keine_gegenvorschlaege` tinyint(1) NOT NULL DEFAULT '0',"
. "\n `vorlaufzeit_tage` tinyint(4) NOT NULL DEFAULT '0'," . "\n `vorlaufzeit_tage` tinyint(4) NOT NULL DEFAULT '0',"
. "\n `termine_minimal` tinyint(4) NOT NULL DEFAULT '0'," . "\n `termine_minimal` tinyint(4) NOT NULL DEFAULT '0',"
. "\n `termine_maximal` tinyint(4) NOT NULL DEFAULT '0'," . "\n `termine_maximal` tinyint(4) NOT NULL DEFAULT '0',"
. "\n `ablehnen` tinyint(1) NOT NULL DEFAULT '0'," . "\n `ablehnen` tinyint(1) NOT NULL DEFAULT '0',"
. "\n `begruendung_erforderlich` int(1) NOT NULL DEFAULT 0," . "\n PRIMARY KEY (`verschieberegel_id`)"
. "\n `vereine_berechtigt` int(1) NOT NULL DEFAULT 1," . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
. "\n `verband_berechtigt` int(1) NOT NULL DEFAULT 0,"
. "\n PRIMARY KEY (`verschieberegel_id`)"
. "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
$db->setQuery( $query ); $db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); } if (!$db->execute()) { die($db->stderr(true)); }
@@ -1139,140 +1110,7 @@ return new class () implements InstallerScriptInterface
$db->setQuery( $query ); $db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); } if (!$db->execute()) { die($db->stderr(true)); }
$query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_regelwerke` (" $query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'datenbank_version', wert = '102';";
. "\n `regelwerke_id` int(11) NOT NULL AUTO_INCREMENT,"
. "\n `regelwerk` varchar(32) NOT NULL,"
. "\n PRIMARY KEY (`regelwerke_id`),"
. "\n UNIQUE KEY `regelwerk` (`regelwerk`)"
. "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_verstoesse` ("
. "\n `verstoesse_id` int(11) NOT NULL AUTO_INCREMENT,"
. "\n `regelwerke_id` int(11) NOT NULL DEFAULT 0,"
. "\n `paragraph_spo` varchar(32) NOT NULL DEFAULT '',"
. "\n `paragraph_go` varchar(32) NOT NULL DEFAULT '',"
. "\n `verstoss` varchar(64) NOT NULL DEFAULT '',"
. "\n `haupttext` text NOT NULL,"
. "\n `zusatztext` text NOT NULL,"
. "\n `gebuehr` smallint(3) NOT NULL DEFAULT 0,"
. "\n `zusatzgebuehr` smallint(2) NOT NULL DEFAULT 0,"
. "\n `zur_auswahl` tinyint(1) NOT NULL DEFAULT 1,"
. "\n PRIMARY KEY (`verstoesse_id`)"
. "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_ordnungsstrafen` ("
. "\n `ordnungsstrafen_id` int(11) NOT NULL AUTO_INCREMENT,"
. "\n `verstoesse_id` int(11) NOT NULL DEFAULT 0,"
. "\n `begegnung_id` int(11) NOT NULL DEFAULT 0,"
. "\n `team_id` int(11) NOT NULL DEFAULT 0,"
. "\n `aussteller_id` int(11) NOT NULL DEFAULT 0,"
. "\n `ausstelldatum` datetime NOT NULL DEFAULT current_timestamp(),"
. "\n `versender_id` int(11) DEFAULT NULL,"
. "\n `versendedatum` datetime DEFAULT NULL,"
. "\n `rechnungssteller_id` int(11) DEFAULT NULL,"
. "\n `rechnungsdatum` datetime DEFAULT NULL,"
. "\n `multiplikator` tinyint(1) NOT NULL DEFAULT 1,"
. "\n `weitere_angaben` text NOT NULL,"
. "\n PRIMARY KEY (`ordnungsstrafen_id`)"
. "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_email_vorlagen` ("
. "\n `email_vorlagen_id` int(11) NOT NULL AUTO_INCREMENT,"
. "\n `vorlage` varchar(64) NOT NULL,"
. "\n `betreff` varchar(256) NOT NULL DEFAULT '',"
. "\n `von` varchar(64) NOT NULL DEFAULT '',"
. "\n `an` varchar(256) NOT NULL DEFAULT '',"
. "\n `cc` varchar(256) NOT NULL DEFAULT '',"
. "\n `bcc` varchar(256) NOT NULL DEFAULT '',"
. "\n `email_text` text NOT NULL,"
. "\n PRIMARY KEY (`email_vorlagen_id`),"
. "\n UNIQUE KEY `vorlage` (`vorlage`)"
. "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_verbandsorgane` ("
. "\n `verbandsorgane_id` int(11) NOT NULL AUTO_INCREMENT,"
. "\n `veranstalter_id` int(11) DEFAULT NULL,"
. "\n `verbandsorgan` varchar(32) DEFAULT NULL,"
. "\n `kategorie` int(4) DEFAULT NULL,"
. "\n `reihenfolge` int(4) DEFAULT NULL,"
. "\n `email` varchar(64) DEFAULT NULL,"
. "\n `beschreibung` text NOT NULL,"
. "\n PRIMARY KEY (`verbandsorgane_id`),"
. "\n KEY (`veranstalter_id`)"
. "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_mitglied_von_verbandsorgan` ("
. "\n `mitglied_von_verbandsorgan_id` int(11) NOT NULL AUTO_INCREMENT,"
. "\n `verbandsorgane_id` int(11) DEFAULT NULL,"
. "\n `funktion` varchar(32) DEFAULT NULL,"
. "\n `zusatzinfo` varchar(64) DEFAULT NULL,"
. "\n `spieler_id` int(11) DEFAULT NULL,"
. "\n `nachname` varchar(32) DEFAULT NULL,"
. "\n `vorname` varchar(32) DEFAULT NULL,"
. "\n `email` varchar(64) DEFAULT NULL,"
. "\n `telefon` varchar(32) DEFAULT NULL,"
. "\n `mobil` varchar(32) DEFAULT NULL,"
. "\n `reihenfolge` int(11) DEFAULT NULL,"
. "\n PRIMARY KEY (`mitglied_von_verbandsorgan_id`),"
. "\n KEY (`verbandsorgane_id`),"
. "\n KEY (`spieler_id`)"
. "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_halloffame` ("
. "\n `halloffame_id` int(11) NOT NULL AUTO_INCREMENT,"
. "\n `veranstalter_id` int(11) DEFAULT NULL,"
. "\n `halloffame` varchar(64) DEFAULT NULL,"
. "\n `kategorie` int(4) DEFAULT NULL,"
. "\n `spielform` int(11) DEFAULT NULL,"
. "\n `reihenfolge` int(4) DEFAULT NULL,"
. "\n PRIMARY KEY (`halloffame_id`),"
. "\n KEY `veranstalter_id` (`veranstalter_id`)"
. "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_mitglied_von_halloffame` ("
. "\n `mitglied_halloffame_id` int(11) NOT NULL AUTO_INCREMENT,"
. "\n `halloffame_id` int(11) NOT NULL,"
. "\n `jahr` int(4) DEFAULT NULL,"
. "\n `platz` int(11) DEFAULT NULL,"
. "\n `verein_id` int(11) DEFAULT NULL,"
. "\n `teamname` varchar(64) DEFAULT NULL,"
. "\n `spieler1_id` int(11) DEFAULT NULL,"
. "\n `spieler1` varchar(64) DEFAULT NULL,"
. "\n `spieler2_id` int(11) DEFAULT NULL,"
. "\n `spieler2` varchar(64) DEFAULT NULL,"
. "\n PRIMARY KEY (`mitglied_halloffame_id`),"
. "\n UNIQUE KEY `halloffame_jahr_platz` (`halloffame_id`,`jahr`,`platz`),"
. "\n KEY `halloffame_id` (`halloffame_id`),"
. "\n KEY `verein_id` (`verein_id`),"
. "\n KEY `spieler1_id` (`spieler1_id`),"
. "\n KEY `spieler2_id` (`spieler2_id`)"
. "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'verbands_kuerzel', wert = 'tbe.';";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'datenbank_version', wert = '119';";
$db->setQuery( $query ); $db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); } if (!$db->execute()) { die($db->stderr(true)); }
@@ -1280,11 +1118,11 @@ return new class () implements InstallerScriptInterface
$db->setQuery( $query ); $db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); } if (!$db->execute()) { die($db->stderr(true)); }
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'spielerliste_elo', wert = '0';"; $query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'spielerliste_elo', wert = '0';";
$db->setQuery( $query ); $db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); } if (!$db->execute()) { die($db->stderr(true)); }
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'ansprechpartner_ausblenden', wert = '0';"; $query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'ansprechpartner_ausblenden', wert = '0';";
$db->setQuery( $query ); $db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); } if (!$db->execute()) { die($db->stderr(true)); }
@@ -1292,43 +1130,11 @@ return new class () implements InstallerScriptInterface
$db->setQuery( $query ); $db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); } 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 = 'ordnungsstrafen_verwenden', 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)" $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');"; . "\n VALUES ('Beliebig', '0', '0', '0', '1', '3', '0');";
$db->setQuery($query); $db->setQuery($query);
if (!$db->execute()) { die($db->stderr(true)); } if (!$db->execute()) { die($db->stderr(true)); }
$query = "INSERT IGNORE INTO `#__sportsmanager_email_vorlagen` (`email_vorlagen_id`, `vorlage`) VALUES (NULL, 'Ordnungsstrafe');";
$db->setQuery($query);
if (!$db->execute()) { die($db->stderr(true)); }
$query = "INSERT IGNORE INTO `#__sportsmanager_email_vorlagen` (`email_vorlagen_id`, `vorlage`) VALUES (NULL, 'Spielverlegung');";
$db->setQuery($query);
if (!$db->execute()) { die($db->stderr(true)); }
$query = "INSERT #__sportsmanager_rangliste_system" $query = "INSERT #__sportsmanager_rangliste_system"
. "\n SET systembezeichnung = 'Klostermann/Wahle (1 Punkt für letzten Platz)'," . "\n SET systembezeichnung = 'Klostermann/Wahle (1 Punkt für letzten Platz)',"
. "\n status = '1'," . "\n status = '1',"
@@ -1761,10 +1567,6 @@ return new class () implements InstallerScriptInterface
$db->setQuery( $query ); $db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); } if (!$db->execute()) { die($db->stderr(true)); }
$query = "DROP TABLE IF EXISTS `#__sportsmanager_team_strafen`;";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "DROP TABLE IF EXISTS `#__sportsmanager_turnier`;"; $query = "DROP TABLE IF EXISTS `#__sportsmanager_turnier`;";
$db->setQuery( $query ); $db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); } if (!$db->execute()) { die($db->stderr(true)); }
@@ -1820,37 +1622,5 @@ return new class () implements InstallerScriptInterface
$query = "DROP TABLE IF EXISTS `#__sportsmanager_verteiler`;"; $query = "DROP TABLE IF EXISTS `#__sportsmanager_verteiler`;";
$db->setQuery( $query ); $db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); } if (!$db->execute()) { die($db->stderr(true)); }
$query = "DROP TABLE IF EXISTS `#__sportsmanager_regelwerke`;";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "DROP TABLE IF EXISTS `#__sportsmanager_verstoesse`;";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "DROP TABLE IF EXISTS `#__sportsmanager_ordnungsstrafen`;";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "DROP TABLE IF EXISTS `#__sportsmanager_email_vorlagen`;";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "DROP TABLE IF EXISTS `#__sportsmanager_verbandsorgane`;";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "DROP TABLE IF EXISTS `#__sportsmanager_mitglied_von_verbandsorgan`;";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "DROP TABLE IF EXISTS `#__sportsmanager_halloffame`;";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
$query = "DROP TABLE IF EXISTS `#__sportsmanager_mitglied_von_halloffame`;";
$db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); }
} }
}; };
+1 -2
View File
@@ -6,7 +6,7 @@
<authorEmail>it@dtfb.de</authorEmail> <authorEmail>it@dtfb.de</authorEmail>
<copyright>All rights reserved</copyright> <copyright>All rights reserved</copyright>
<license>GNU/GPL</license> <license>GNU/GPL</license>
<version>DEV</version> <version>2.0.0</version>
<description>Verwaltung von Spielern und Vereinen in Mannschafts- und Individualwettbewerben</description> <description>Verwaltung von Spielern und Vereinen in Mannschafts- und Individualwettbewerben</description>
<namespace path="src">Dtfb\Component\com_sportsmanager</namespace> <namespace path="src">Dtfb\Component\com_sportsmanager</namespace>
<files folder="site"> <files folder="site">
@@ -37,7 +37,6 @@
<files folder="admin"> <files folder="admin">
<filename>access.xml</filename> <filename>access.xml</filename>
<filename>index.html</filename> <filename>index.html</filename>
<filename>RELEASE_NOTES.md</filename>
<folder>services</folder> <folder>services</folder>
<folder>src</folder> <folder>src</folder>
<folder>tmpl</folder> <folder>tmpl</folder>