Merge pull request #60 from Deutscher-Tischfussballbund/birthdate_validation

Birthdate validation
This commit is contained in:
MarvinF
2025-04-21 18:05:07 +02:00
committed by GitHub
11 changed files with 1105 additions and 1259 deletions
+1
View File
@@ -16,6 +16,7 @@ services:
JOOMLA_ADMIN_EMAIL: joomla@example.com JOOMLA_ADMIN_EMAIL: joomla@example.com
volumes: volumes:
- './data/joomla_data:/var/www/html' - './data/joomla_data:/var/www/html'
- './docker/php.ini:/usr/local/etc/php/php.ini'
networks: networks:
- joomla_network - joomla_network
+71 -133
View File
@@ -9,15 +9,15 @@
; PHP attempts to find and load this configuration from a number of locations. ; PHP attempts to find and load this configuration from a number of locations.
; The following is a summary of its search order: ; The following is a summary of its search order:
; 1. SAPI module specific location. ; 1. SAPI module specific location.
; 2. The PHPRC environment variable. (As of PHP 5.2.0) ; 2. The PHPRC environment variable.
; 3. A number of predefined registry keys on Windows (As of PHP 5.2.0) ; 3. A number of predefined registry keys on Windows
; 4. Current working directory (except CLI) ; 4. Current working directory (except CLI)
; 5. The web server's directory (for SAPI modules), or directory of PHP ; 5. The web server's directory (for SAPI modules), or directory of PHP
; (otherwise in Windows) ; (otherwise in Windows)
; 6. The directory from the --with-config-file-path compile time option, or the ; 6. The directory from the --with-config-file-path compile time option, or the
; Windows directory (usually C:\windows) ; Windows directory (usually C:\windows)
; See the PHP docs for more specific information. ; See the PHP docs for more specific information.
; http://php.net/configuration.file ; https://php.net/configuration.file
; The syntax of the file is extremely simple. Whitespace and lines ; The syntax of the file is extremely simple. Whitespace and lines
; beginning with a semicolon are silently ignored (as you probably guessed). ; beginning with a semicolon are silently ignored (as you probably guessed).
@@ -31,7 +31,7 @@
; special sections cannot be overridden by user-defined INI files or ; special sections cannot be overridden by user-defined INI files or
; at runtime. Currently, [PATH=] and [HOST=] sections only work under ; at runtime. Currently, [PATH=] and [HOST=] sections only work under
; CGI/FastCGI. ; CGI/FastCGI.
; http://php.net/ini.sections ; https://php.net/ini.sections
; Directives are specified using the following syntax: ; Directives are specified using the following syntax:
; directive = value ; directive = value
@@ -75,7 +75,7 @@
; php.ini-production contains settings which hold security, performance and ; php.ini-production contains settings which hold security, performance and
; best practices at its core. But please be aware, these settings may break ; best practices at its core. But please be aware, these settings may break
; compatibility with older or less security conscience applications. We ; compatibility with older or less security-conscious applications. We
; recommending using the production ini in production and testing environments. ; recommending using the production ini in production and testing environments.
; php.ini-development is very similar to its production variant, except it is ; php.ini-development is very similar to its production variant, except it is
@@ -756,7 +756,7 @@ user_dir =
; Directory in which the loadable extensions (modules) reside. ; Directory in which the loadable extensions (modules) reside.
; http://php.net/extension-dir ; http://php.net/extension-dir
extension_dir = /opt/bitnami/php/lib/php/extensions ;extension_dir = /usr/local/lib/php/extensions
; On windows: ; On windows:
;extension_dir = "ext" ;extension_dir = "ext"
@@ -839,7 +839,7 @@ file_uploads = On
; Temporary directory for HTTP uploaded files (will use system default if not ; Temporary directory for HTTP uploaded files (will use system default if not
; specified). ; specified).
; http://php.net/upload-tmp-dir ; http://php.net/upload-tmp-dir
upload_tmp_dir = /opt/bitnami/php/tmp upload_tmp_dir = /tmp
; Maximum allowed size for uploaded files. ; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize ; http://php.net/upload-max-filesize
@@ -1318,7 +1318,7 @@ session.save_handler = files
; ;
; The path can be defined as: ; The path can be defined as:
; ;
session.save_path = /opt/bitnami/php/var/run/session session.save_path = /tmp/session
; ;
; where N is an integer. Instead of storing all the session files in ; where N is an integer. Instead of storing all the session files in
; /path, what this will do is use subdirectories N-levels deep, and ; /path, what this will do is use subdirectories N-levels deep, and
@@ -1334,12 +1334,10 @@ session.save_path = /opt/bitnami/php/var/run/session
; The file storage module creates files using mode 600 by default. ; The file storage module creates files using mode 600 by default.
; You can change that by using ; You can change that by using
; ;
session.save_path = /opt/bitnami/php/var/run/session
; ;
; where MODE is the octal representation of the mode. Note that this ; where MODE is the octal representation of the mode. Note that this
; does not overwrite the process's umask. ; does not overwrite the process's umask.
; http://php.net/session.save-path ; http://php.net/session.save-path
session.save_path = /opt/bitnami/php/var/run/session
; Whether to use strict session mode. ; Whether to use strict session mode.
; Strict session mode does not accept an uninitialized session ID, and ; Strict session mode does not accept an uninitialized session ID, and
@@ -1539,18 +1537,18 @@ session.sid_bits_per_character = 5
; Default Value: "1%" ; Default Value: "1%"
; Development Value: "1%" ; Development Value: "1%"
; Production Value: "1%" ; Production Value: "1%"
; http://php.net/session.upload-progress.freq ; https://php.net/session.upload-progress.freq
;session.upload_progress.freq = "1%" ;session.upload_progress.freq = "1%"
; The minimum delay between updates, in seconds ; The minimum delay between updates, in seconds
; Default Value: 1 ; Default Value: 1
; Development Value: 1 ; Development Value: 1
; Production Value: 1 ; Production Value: 1
; http://php.net/session.upload-progress.min-freq ; https://php.net/session.upload-progress.min-freq
;session.upload_progress.min_freq = "1" ;session.upload_progress.min_freq = "1"
; Only write session data when session data is changed. Enabled by default. ; Only write session data when session data is changed. Enabled by default.
; http://php.net/session.lazy-write ; https://php.net/session.lazy-write
;session.lazy_write = On ;session.lazy_write = On
[Assertion] [Assertion]
@@ -1558,67 +1556,47 @@ session.sid_bits_per_character = 5
; -1: Do not compile at all ; -1: Do not compile at all
; 0: Jump over assertion at run-time ; 0: Jump over assertion at run-time
; 1: Execute assertions ; 1: Execute assertions
; Changing from or to a negative value is only possible in php.ini! (For turning assertions on and off at run-time, see assert.active, when zend.assertions = 1) ; Changing from or to a negative value is only possible in php.ini!
; (For turning assertions on and off at run-time, toggle zend.assertions between the values 1 and 0)
; Default Value: 1 ; Default Value: 1
; Development Value: 1 ; Development Value: 1
; Production Value: -1 ; Production Value: -1
; http://php.net/zend.assertions ; https://php.net/zend.assertions
zend.assertions = -1 zend.assertions = -1
; Assert(expr); active by default.
; http://php.net/assert.active
;assert.active = On
; Throw an AssertionError on failed assertions
; http://php.net/assert.exception
;assert.exception = On
; Issue a PHP warning for each failed assertion. (Overridden by assert.exception if active)
; http://php.net/assert.warning
;assert.warning = On
; Don't bail out by default.
; http://php.net/assert.bail
;assert.bail = Off
; User-function to be called if an assertion fails.
; http://php.net/assert.callback
;assert.callback = 0
; Eval the expression with current error_reporting(). Set to true if you want
; error_reporting(0) around the eval().
; http://php.net/assert.quiet-eval
;assert.quiet_eval = 0
[COM] [COM]
; path to a file containing GUIDs, IIDs or filenames of files with TypeLibs ; path to a file containing GUIDs, IIDs or filenames of files with TypeLibs
; http://php.net/com.typelib-file ; https://php.net/com.typelib-file
;com.typelib_file = ;com.typelib_file =
; allow Distributed-COM calls ; allow Distributed-COM calls
; http://php.net/com.allow-dcom ; https://php.net/com.allow-dcom
;com.allow_dcom = true ;com.allow_dcom = true
; autoregister constants of a component's typlib on com_load() ; autoregister constants of a component's typelib on com_load()
; http://php.net/com.autoregister-typelib ; https://php.net/com.autoregister-typelib
;com.autoregister_typelib = true ;com.autoregister_typelib = true
; register constants casesensitive ; register constants casesensitive
; http://php.net/com.autoregister-casesensitive ; https://php.net/com.autoregister-casesensitive
;com.autoregister_casesensitive = false ;com.autoregister_casesensitive = false
; show warnings on duplicate constant registrations ; show warnings on duplicate constant registrations
; http://php.net/com.autoregister-verbose ; https://php.net/com.autoregister-verbose
;com.autoregister_verbose = true ;com.autoregister_verbose = true
; The default character set code-page to use when passing strings to and from COM objects. ; The default character set code-page to use when passing strings to and from COM objects.
; Default: system ANSI code page ; Default: system ANSI code page
;com.code_page= ;com.code_page=
; The version of the .NET framework to use. The value of the setting are the first three parts
; of the framework's version number, separated by dots, and prefixed with "v", e.g. "v4.0.30319".
;com.dotnet_version=
[mbstring] [mbstring]
; language for internal character representation. ; language for internal character representation.
; This affects mb_send_mail() and mbstring.detect_order. ; This affects mb_send_mail() and mbstring.detect_order.
; http://php.net/mbstring.language ; https://php.net/mbstring.language
;mbstring.language = Japanese ;mbstring.language = Japanese
; Use of this INI entry is deprecated, use global internal_encoding instead. ; Use of this INI entry is deprecated, use global internal_encoding instead.
@@ -1633,7 +1611,7 @@ zend.assertions = -1
; mbstring.encoding_translation = On is needed to use this setting. ; mbstring.encoding_translation = On is needed to use this setting.
; If empty, default_charset or input_encoding or mbstring.input is used. ; If empty, default_charset or input_encoding or mbstring.input is used.
; The precedence is: default_charset < input_encoding < mbstring.http_input ; The precedence is: default_charset < input_encoding < mbstring.http_input
; http://php.net/mbstring.http-input ; https://php.net/mbstring.http-input
;mbstring.http_input = ;mbstring.http_input =
; Use of this INI entry is deprecated, use global output_encoding instead. ; Use of this INI entry is deprecated, use global output_encoding instead.
@@ -1643,7 +1621,7 @@ zend.assertions = -1
; The precedence is: default_charset < output_encoding < mbstring.http_output ; The precedence is: default_charset < output_encoding < mbstring.http_output
; To use an output encoding conversion, mbstring's output handler must be set ; To use an output encoding conversion, mbstring's output handler must be set
; otherwise output encoding conversion cannot be performed. ; otherwise output encoding conversion cannot be performed.
; http://php.net/mbstring.http-output ; https://php.net/mbstring.http-output
;mbstring.http_output = ;mbstring.http_output =
; enable automatic encoding translation according to ; enable automatic encoding translation according to
@@ -1651,54 +1629,40 @@ zend.assertions = -1
; converted to internal encoding by setting this to On. ; converted to internal encoding by setting this to On.
; Note: Do _not_ use automatic encoding translation for ; Note: Do _not_ use automatic encoding translation for
; portable libs/applications. ; portable libs/applications.
; http://php.net/mbstring.encoding-translation ; https://php.net/mbstring.encoding-translation
;mbstring.encoding_translation = Off ;mbstring.encoding_translation = Off
; automatic encoding detection order. ; automatic encoding detection order.
; "auto" detect order is changed according to mbstring.language ; "auto" detect order is changed according to mbstring.language
; http://php.net/mbstring.detect-order ; https://php.net/mbstring.detect-order
;mbstring.detect_order = auto ;mbstring.detect_order = auto
; substitute_character used when character cannot be converted ; substitute_character used when character cannot be converted
; one from another ; one from another
; http://php.net/mbstring.substitute-character ; https://php.net/mbstring.substitute-character
;mbstring.substitute_character = none ;mbstring.substitute_character = none
; overload(replace) single byte functions by mbstring functions. ; Enable strict encoding detection.
; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(), ;mbstring.strict_detection = Off
; etc. Possible values are 0,1,2,4 or combination of them.
; For example, 7 for overload everything.
; 0: No overload
; 1: Overload mail() function
; 2: Overload str*() functions
; 4: Overload ereg*() functions
; http://php.net/mbstring.func-overload
;mbstring.func_overload = 0
; enable strict encoding detection.
; Default: Off
;mbstring.strict_detection = On
; This directive specifies the regex pattern of content types for which mb_output_handler() ; This directive specifies the regex pattern of content types for which mb_output_handler()
; is activated. ; is activated.
; Default: mbstring.http_output_conv_mimetype=^(text/|application/xhtml\+xml) ; Default: mbstring.http_output_conv_mimetypes=^(text/|application/xhtml\+xml)
;mbstring.http_output_conv_mimetype= ;mbstring.http_output_conv_mimetypes=
; This directive specifies maximum stack depth for mbstring regular expressions. It is similar ; This directive specifies maximum stack depth for mbstring regular expressions. It is similar
; to the pcre.recursion_limit for PCRE. ; to the pcre.recursion_limit for PCRE.
; Default: 100000
;mbstring.regex_stack_limit=100000 ;mbstring.regex_stack_limit=100000
; This directive specifies maximum retry count for mbstring regular expressions. It is similar ; This directive specifies maximum retry count for mbstring regular expressions. It is similar
; to the pcre.backtrack_limit for PCRE. ; to the pcre.backtrack_limit for PCRE.
; Default: 1000000
;mbstring.regex_retry_limit=1000000 ;mbstring.regex_retry_limit=1000000
[gd] [gd]
; Tell the jpeg decode to ignore warnings and try to create ; Tell the jpeg decode to ignore warnings and try to create
; a gd image. The warning will then be displayed as notices ; a gd image. The warning will then be displayed as notices
; disabled by default ; disabled by default
; http://php.net/gd.jpeg-ignore-warning ; https://php.net/gd.jpeg-ignore-warning
;gd.jpeg_ignore_warning = 1 ;gd.jpeg_ignore_warning = 1
[exif] [exif]
@@ -1706,48 +1670,48 @@ zend.assertions = -1
; With mbstring support this will automatically be converted into the encoding ; With mbstring support this will automatically be converted into the encoding
; given by corresponding encode setting. When empty mbstring.internal_encoding ; given by corresponding encode setting. When empty mbstring.internal_encoding
; is used. For the decode settings you can distinguish between motorola and ; is used. For the decode settings you can distinguish between motorola and
; intel byte order. A decode setting cannot be empty. ; intel byte order. A decode setting must not be empty.
; http://php.net/exif.encode-unicode ; https://php.net/exif.encode-unicode
;exif.encode_unicode = ISO-8859-15 ;exif.encode_unicode = ISO-8859-15
; http://php.net/exif.decode-unicode-motorola ; https://php.net/exif.decode-unicode-motorola
;exif.decode_unicode_motorola = UCS-2BE ;exif.decode_unicode_motorola = UCS-2BE
; http://php.net/exif.decode-unicode-intel ; https://php.net/exif.decode-unicode-intel
;exif.decode_unicode_intel = UCS-2LE ;exif.decode_unicode_intel = UCS-2LE
; http://php.net/exif.encode-jis ; https://php.net/exif.encode-jis
;exif.encode_jis = ;exif.encode_jis =
; http://php.net/exif.decode-jis-motorola ; https://php.net/exif.decode-jis-motorola
;exif.decode_jis_motorola = JIS ;exif.decode_jis_motorola = JIS
; http://php.net/exif.decode-jis-intel ; https://php.net/exif.decode-jis-intel
;exif.decode_jis_intel = JIS ;exif.decode_jis_intel = JIS
[Tidy] [Tidy]
; The path to a default tidy configuration file to use when using tidy ; The path to a default tidy configuration file to use when using tidy
; http://php.net/tidy.default-config ; https://php.net/tidy.default-config
;tidy.default_config = /usr/local/lib/php/default.tcfg ;tidy.default_config = /usr/local/lib/php/default.tcfg
; Should tidy clean and repair output automatically? ; Should tidy clean and repair output automatically?
; WARNING: Do not use this option if you are generating non-html content ; WARNING: Do not use this option if you are generating non-html content
; such as dynamic images ; such as dynamic images
; http://php.net/tidy.clean-output ; https://php.net/tidy.clean-output
tidy.clean_output = Off tidy.clean_output = Off
[soap] [soap]
; Enables or disables WSDL caching feature. ; Enables or disables WSDL caching feature.
; http://php.net/soap.wsdl-cache-enabled ; https://php.net/soap.wsdl-cache-enabled
soap.wsdl_cache_enabled=1 soap.wsdl_cache_enabled=1
; Sets the directory name where SOAP extension will put cache files. ; Sets the directory name where SOAP extension will put cache files.
; http://php.net/soap.wsdl-cache-dir ; https://php.net/soap.wsdl-cache-dir
soap.wsdl_cache_dir="/tmp" soap.wsdl_cache_dir="/tmp"
; (time to live) Sets the number of second while cached file will be used ; (time to live) Sets the number of second while cached file will be used
; instead of original one. ; instead of original one.
; http://php.net/soap.wsdl-cache-ttl ; https://php.net/soap.wsdl-cache-ttl
soap.wsdl_cache_ttl=86400 soap.wsdl_cache_ttl=86400
; Sets the size of the cache limit. (Max. number of WSDL files to cache) ; Sets the size of the cache limit. (Max. number of WSDL files to cache)
@@ -1806,6 +1770,11 @@ opcache.revalidate_freq = 60
; size of the optimized code. ; size of the optimized code.
;opcache.save_comments=1 ;opcache.save_comments=1
; If enabled, compilation warnings (including notices and deprecations) will
; be recorded and replayed each time a file is included. Otherwise, compilation
; warnings will only be emitted when the file is first cached.
;opcache.record_warnings=0
; Allow file existence override (file_exists, etc.) performance feature. ; Allow file existence override (file_exists, etc.) performance feature.
;opcache.enable_file_override=0 ;opcache.enable_file_override=0
@@ -1827,10 +1796,6 @@ opcache.revalidate_freq = 60
; are cached. ; are cached.
;opcache.max_file_size=0 ;opcache.max_file_size=0
; Check the cache checksum each N requests.
; The default value of "0" means that the checks are disabled.
;opcache.consistency_checks=0
; How long to wait (in seconds) for a scheduled restart to begin if the cache ; How long to wait (in seconds) for a scheduled restart to begin if the cache
; is not being accessed. ; is not being accessed.
;opcache.force_restart_timeout=180 ;opcache.force_restart_timeout=180
@@ -1868,7 +1833,16 @@ opcache.revalidate_freq = 60
; Enables and sets the second level cache directory. ; Enables and sets the second level cache directory.
; It should improve performance when SHM memory is full, at server restart or ; It should improve performance when SHM memory is full, at server restart or
; SHM reset. The default "" disables file based caching. ; SHM reset. The default "" disables file based caching.
opcache.file_cache = /opt/bitnami/php/var/run/opcache_file opcache.file_cache = /tmp/opcache_file
; Enables or disables read-only mode for the second level cache directory.
; It should improve performance for read-only containers,
; when the cache is pre-warmed and packaged alongside the application.
; Best used with `opcache.validate_timestamps=0`, `opcache.enable_file_override=1`
; and `opcache.file_cache_consistency_checks=0`.
; Note: A cache generated with a different build of PHP, a different file path,
; or different settings (including which extensions are loaded), may be ignored.
;opcache.file_cache_read_only=0
; Enables or disables opcode caching in shared memory. ; Enables or disables opcode caching in shared memory.
;opcache.file_cache_only=0 ;opcache.file_cache_only=0
@@ -1882,8 +1856,13 @@ opcache.file_cache = /opt/bitnami/php/var/run/opcache_file
;opcache.file_cache_fallback=1 ;opcache.file_cache_fallback=1
; Enables or disables copying of PHP code (text segment) into HUGE PAGES. ; Enables or disables copying of PHP code (text segment) into HUGE PAGES.
; This should improve performance, but requires appropriate OS configuration. ; Under certain circumstances (if only a single global PHP process is
;opcache.huge_code_pages=1 ; started from which all others fork), this can increase performance
; by a tiny amount because TLB misses are reduced. On the other hand, this
; delays PHP startup, increases memory usage and degrades performance
; under memory pressure - use with care.
; Requires appropriate OS configuration.
;opcache.huge_code_pages=0
; Validate cached file permissions. ; Validate cached file permissions.
;opcache.validate_permission=0 ;opcache.validate_permission=0
@@ -1897,12 +1876,12 @@ opcache.file_cache = /opt/bitnami/php/var/run/opcache_file
; Specifies a PHP script that is going to be compiled and executed at server ; Specifies a PHP script that is going to be compiled and executed at server
; start-up. ; start-up.
; http://php.net/opcache.preload ; https://php.net/opcache.preload
;opcache.preload= ;opcache.preload=
; Preloading code as root is not allowed for security reasons. This directive ; Preloading code as root is not allowed for security reasons. This directive
; facilitates to let the preloading to be run as another user. ; facilitates to let the preloading to be run as another user.
; http://php.net/opcache.preload_user ; https://php.net/opcache.preload_user
;opcache.preload_user= ;opcache.preload_user=
; Prevents caching files that are less than this number of seconds old. It ; Prevents caching files that are less than this number of seconds old. It
@@ -1945,44 +1924,3 @@ opcache.file_cache = /opt/bitnami/php/var/run/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 = opcache
opcache.fast_shutdown = 1
;extension = pdo_dblib
;extension = apcu
;extension = mcrypt
;extension = imagick
;extension = memcached
;extension = maxminddb
;extension = mongodb
;[XDebug]
zend_extension = xdebug
xdebug.mode = debug
;xdebug.client_host = 127.0.0.1
;xdebug.client_port = 9000
;xdebug.output_dir = /tmp
;xdebug.remote_handler = dbgp
;xdebug.remote_port=9000
;xdebug.remote_host=10.254.254.254
;xdebug.remote_autostart=1
;xdebug.remote_enable=1
;xdebug.default_enable=0
;xdebug.remote_host=host.docker.internal
;xdebug.remote_port=9000
;xdebug.remote_connect_back=0
;xdebug.profiler_enable=0
;xdebug.remote_log="/tmp/xdebug.log"
xdebug.mode=debug
xdebug.client_port=9000
xdebug.client_host=host.docker.internal
xdebug.remote_handler=dbgp
;xdebug.remote_host=host.docker.internal
;xdebug.remote_port=9000
xdebug.start_with_request=yes
xdebug.discover_client_host=0
xdebug.idekey=PHPSTORM
xdebug.show_error_trace = 1
xdebug.max_nesting_level=250
xdebug.var_display_max_depth=10
;xdebug.log=/tmp/xdebug.log
@@ -12,7 +12,6 @@ jimport('joomla.application.component.view');
/** /**
* SportsManager View * SportsManager View
*/ */
class SportsManagerViewSportsManager extends JViewLegacy class SportsManagerViewSportsManager extends JViewLegacy
{ {
/** /**
@@ -24,23 +23,9 @@ class SportsManagerViewSportsManager extends JViewLegacy
JToolbarHelper::title(JText::_('COM_SPORTSMANAGER')); JToolbarHelper::title(JText::_('COM_SPORTSMANAGER'));
?> ?>
<h2><?php echo JText::_('COM_SPORTSMANAGER'); ?> Copyright &copy; 2006 &#8211; 2014 Sven Nickel</h2> <h3><?php echo JText::_('COM_SPORTSMANAGER'); ?> &#8211; Created by Sven Nickel | Maintained by DTFB</h3>
<?php <?php
/*
// Get data from the model
$items = $this->get('Items');
$pagination = $this->get('Pagination');
// Check for errors.
if (count($errors = $this->get('Errors')))
{
JError::raiseError(500, implode('<br />', $errors));
return false;
}
// Assign data to the view
$this->items = $items;
$this->pagination = $pagination;
*/
// Display the template // Display the template
parent::display($tpl); parent::display($tpl);
File diff suppressed because it is too large Load Diff
@@ -5172,7 +5172,6 @@ function updateDatabase()
} }
} }
if ($datenbank_version < 102) { if ($datenbank_version < 102) {
$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";
$db->setQuery($query); $db->setQuery($query);
@@ -5195,6 +5194,22 @@ function updateDatabase()
} }
} }
if ($datenbank_version < 103) {
$query = "ALTER TABLE #__sportsmanager_spieler DROP geburtsdatum";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$query = "UPDATE #__sportsmanager_einstellungen"
. "\n SET wert = '103'"
. "\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";
@@ -5,7 +5,7 @@
// kein direkter Zugriff // kein direkter Zugriff
defined('_JEXEC') or die('Restricted access'); defined('_JEXEC') or die('Restricted access');
define("SPORTS_MANAGER_VERSION", "2.0.0"); const SPORTS_MANAGER_VERSION = "2.0.0";
//ini_set('display_errors', '1'); //ini_set('display_errors', '1');
@@ -28,25 +28,24 @@ function laufzeitAusgeben($zwischenstand = NULL) {
$laufzeit_delta_zwischenstand = $laufzeit_aktuell - $laufzeit_zwischenstand; $laufzeit_delta_zwischenstand = $laufzeit_aktuell - $laufzeit_zwischenstand;
$laufzeit_delta_zwischenstand = $laufzeit_aktuell - (empty($zwischenstand) ? $laufzeit_beginn : $laufzeit_zwischenstand); $laufzeit_delta_zwischenstand = $laufzeit_aktuell - (empty($zwischenstand) ? $laufzeit_beginn : $laufzeit_zwischenstand);
$laufzeit_zwischenstand = $laufzeit_aktuell; $laufzeit_zwischenstand = $laufzeit_aktuell;
echo("" . (!empty($zwischenstand) ? htmlentities_utf8($zwischenstand) : "Seitenaufbau in") . ": " . sprintf('%f', $laufzeit_delta) . " Sekunden" . (empty($zwischenstand) ? "" : (sprintf(' (+%f)', $laufzeit_delta_zwischenstand))) . ".<br />"); echo(!empty($zwischenstand) ? htmlentities_utf8($zwischenstand) : "Seitenaufbau in" . ": " . sprintf('%f', $laufzeit_delta) . " Sekunden" . (empty($zwischenstand) ? "" : (sprintf(' (+%f)', $laufzeit_delta_zwischenstand))) . ".<br />");
} }
laufzeitInit(); laufzeitInit();
require_once (JPATH_COMPONENT . DIRECTORY_SEPARATOR . 'tools.php'); require_once (JPATH_ROOT . DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR . 'com_sportsmanager' . DIRECTORY_SEPARATOR . 'tools.php');
setMinMemoryLimit('64M'); setMinMemoryLimit('64M');
require_once (JPATH_COMPONENT . DIRECTORY_SEPARATOR . 'api.php'); require_once (JPATH_ROOT . DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR . 'com_sportsmanager' . DIRECTORY_SEPARATOR . 'api.php');
require_once (JPATH_COMPONENT . DIRECTORY_SEPARATOR . 'admin.php');
require_once (JPATH_COMPONENT . DIRECTORY_SEPARATOR . 'controller.php');
require_once (JPATH_COMPONENT . DIRECTORY_SEPARATOR . 'database.php');
require_once (JPATH_COMPONENT . DIRECTORY_SEPARATOR . 'mathparser.php');
require_once (JPATH_COMPONENT . DIRECTORY_SEPARATOR . 'views/sportsmanager/view.html.php');
require_once (JPATH_COMPONENT . DIRECTORY_SEPARATOR . 'views/sportsmanager/view.json.php');
require_once (JPATH_COMPONENT . DIRECTORY_SEPARATOR . 'views/sportsmanager/view_admin.php');
require_once (JPATH_COMPONENT . DIRECTORY_SEPARATOR . 'views/sportsmanager/view_ticker.php');
require_once (JPATH_ROOT . DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR . 'com_sportsmanager' . DIRECTORY_SEPARATOR . 'admin.php');
require_once (JPATH_ROOT . DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR . 'com_sportsmanager' . DIRECTORY_SEPARATOR . 'controller.php');
require_once (JPATH_ROOT . DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR . 'com_sportsmanager' . DIRECTORY_SEPARATOR . 'database.php');
require_once (JPATH_ROOT . DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR . 'com_sportsmanager' . DIRECTORY_SEPARATOR . 'mathparser.php');
require_once (JPATH_ROOT . DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR . 'com_sportsmanager' . DIRECTORY_SEPARATOR . 'views/sportsmanager/view.html.php');
require_once (JPATH_ROOT . DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR . 'com_sportsmanager' . DIRECTORY_SEPARATOR . 'views/sportsmanager/view.json.php');
require_once (JPATH_ROOT . DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR . 'com_sportsmanager' . DIRECTORY_SEPARATOR . 'views/sportsmanager/view_admin.php');
require_once (JPATH_ROOT . DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR . 'com_sportsmanager' . DIRECTORY_SEPARATOR . 'views/sportsmanager/view_ticker.php');
jimport('joomla.filesystem.file'); jimport('joomla.filesystem.file');
@@ -79,7 +78,7 @@ if ($task == "spielerbild") {
terminDokument(); terminDokument();
} else if ($task == "spieler_details") { } else if ($task == "spieler_details") {
spielerDetails(); spielerDetails();
} else if (substr($task, 0, 6) == "admin_") { } else if (str_starts_with($task, "admin_")) {
switch ($task) { switch ($task) {
case 'admin_einstellungen': case 'admin_einstellungen':
adminEinstellungen(); adminEinstellungen();
@@ -1067,7 +1066,6 @@ function redirectSportsManagerURL($weitereParameter = NULL, $nachricht = '') {
} }
$app->redirect(SportsManagerURL($weitereParameter), 200); $app->redirect(SportsManagerURL($weitereParameter), 200);
exit; exit;
return;
} }
function redirectCurrentURL() { function redirectCurrentURL() {
@@ -1109,7 +1107,7 @@ function berechnungen() {
. "\n WHERE " . (empty($session_id) ? ("session_id < SUBTIME(NOW(), '00:10:00')") : ("session_id = '" . $session_id . "'")) . "\n WHERE " . (empty($session_id) ? ("session_id < SUBTIME(NOW(), '00:10:00')") : ("session_id = '" . $session_id . "'"))
. "\n ), 1, 0)"; . "\n ), 1, 0)";
$db->setQuery($query); $db->setQuery($query);
if (!$result = $db->execute()) { if (!$db->execute()) {
die($db->stderr(true)); die($db->stderr(true));
} }
$berechnungen = $db->loadResult(); $berechnungen = $db->loadResult();
@@ -1155,7 +1153,7 @@ function benutzerModerator() {
. "\n FROM #__sportsmanager_moderator" . "\n FROM #__sportsmanager_moderator"
. "\n WHERE moderator_user_id = $user_id"; . "\n WHERE moderator_user_id = $user_id";
$db->setQuery($query); $db->setQuery($query);
if (!$result = $db->execute()) { if (!$db->execute()) {
die($db->stderr(true)); die($db->stderr(true));
} }
$gefunden = $db->loadResult(); $gefunden = $db->loadResult();
@@ -4040,62 +4038,6 @@ function teamSpielplanXML() {
die(); die();
} }
function bildKopierenAngepasst($quelle, $ziel, $ziel_breite, $ziel_hoehe, $zuschneiden) {
$len = strlen($ziel);
if ($len < 4 || $ziel[$len - 4] != ".")
return false;
$ext = strtolower(substr($ziel, $len - 3));
if ($ext != "jpg" && $ext != "png")
return false;
$quelle_image = $ext == "png" ? imagecreatefrompng($quelle) : imagecreatefromjpeg($quelle);
if ($quelle_image === false)
return false;
$quelle_breite = imagesx($quelle_image);
$quelle_hoehe = imagesy($quelle_image);
if ($quelle_breite == $ziel_breite && $quelle_hoehe == $ziel_hoehe)
return JFile::copy($quelle, $ziel);
$ziel_image = imagecreatetruecolor($ziel_breite, $ziel_hoehe);
$hintergrund = $ext == "png" ? imagecolorallocatealpha($ziel_image, 0, 0, 0, 127) : imagecolorallocate($ziel_image, 64, 64, 64);
imagefill($ziel_image, 0, 0, $hintergrund);
$quelle_proportionen = $quelle_breite / $quelle_hoehe;
$ziel_proportionen = $ziel_breite / $ziel_hoehe;
if ($zuschneiden) {
if ($ziel_proportionen >= $quelle_proportionen) {
$quelle_teilhoehe = round($quelle_breite / $ziel_proportionen);
if (!imagecopyresampled($ziel_image, $quelle_image, 0, 0, 0, round(($quelle_hoehe - $quelle_teilhoehe) / 2), $ziel_breite, $ziel_hoehe, $quelle_breite, $quelle_teilhoehe))
return false;
} else {
$quelle_teilbreite = round($quelle_hoehe * $ziel_proportionen);
if (!imagecopyresampled($ziel_image, $quelle_image, 0, 0, round(($quelle_breite - $quelle_teilbreite) / 2), 0, $ziel_breite, $ziel_hoehe, $quelle_teilbreite, $quelle_hoehe))
return false;
}
} else {
if ($ziel_proportionen >= $quelle_proportionen) {
$ziel_teilbreite = round($ziel_hoehe * $quelle_proportionen);
if (!imagecopyresampled($ziel_image, $quelle_image, round(($ziel_breite - $ziel_teilbreite) / 2), 0, 0, 0, $ziel_teilbreite, $ziel_hoehe, $quelle_breite, $quelle_hoehe))
return false;
} else {
$ziel_teilhoehe = round($ziel_breite / $quelle_proportionen);
if (!imagecopyresampled($ziel_image, $quelle_image, 0, round(($ziel_hoehe - $ziel_teilhoehe) / 2), 0, 0, $ziel_breite, $ziel_teilhoehe, $quelle_breite, $quelle_hoehe))
return false;
}
}
ob_start();
if ($ext == "png") {
imagesavealpha($ziel_image, true);
if (!imagepng($ziel_image))
return false;
} else {
if (!imagejpeg($ziel_image))
return false;
}
$output = ob_get_contents();
ob_end_clean();
JFile::write($ziel, $output);
return true;
}
function bildAnpassen($typ, $id = 0) { function bildAnpassen($typ, $id = 0) {
global $sportsmanager_joomla_path; global $sportsmanager_joomla_path;
$jinput = JFactory::getApplication()->input; $jinput = JFactory::getApplication()->input;
@@ -2654,9 +2654,9 @@ global $params;
echo "<br /><small>" . htmlentities_utf8($row->spielernr) . "</small>"; echo "<br /><small>" . htmlentities_utf8($row->spielernr) . "</small>";
echo "</td></tr>"; echo "</td></tr>";
if ($team_moderator) { if ($team_moderator) {
if (!empty($row->geburtsdatum)) { if (!empty($row->geburtsjahr)) {
echo "<tr><td align=\"center\">"; echo "<tr><td align=\"center\">";
echo "<small>" . htmlentities_utf8(FormatiertesDatum($row->geburtsdatum, false)) . "</small>"; echo "<small>" . htmlentities_utf8($row->geburtsjahr) . "</small>";
echo "</td></tr>"; echo "</td></tr>";
} }
if (!empty($row->strasse) || if (!empty($row->strasse) ||
@@ -3603,9 +3603,9 @@ global $params;
echo "<br /><small>" . htmlentities_utf8($row->spielernr) . "</small>"; echo "<br /><small>" . htmlentities_utf8($row->spielernr) . "</small>";
echo "</td></tr>"; echo "</td></tr>";
if ($vereins_moderator) { if ($vereins_moderator) {
if (!empty($row->geburtsdatum)) { if (!empty($row->geburtsjahr)) {
echo "<tr><td align=\"center\">"; echo "<tr><td align=\"center\">";
echo "<small>" . htmlentities_utf8(FormatiertesDatum($row->geburtsdatum, false)) . "</small>"; echo "<small>" . htmlentities_utf8($row->geburtsjahr) . "</small>";
echo "</td></tr>"; echo "</td></tr>";
} }
if (!empty($row->strasse) || if (!empty($row->strasse) ||
@@ -6,7 +6,7 @@
// kein direkter Zugriff // kein direkter Zugriff
defined('_JEXEC') or die('Restricted access'); defined('_JEXEC') or die('Restricted access');
require_once(JPATH_COMPONENT . DIRECTORY_SEPARATOR . 'views/sportsmanager/view_tools.php'); require_once(JPATH_ROOT . DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR . 'com_sportsmanager' . DIRECTORY_SEPARATOR . 'views/sportsmanager/view_tools.php');
class HTML_sportsmanager_admin class HTML_sportsmanager_admin
{ {
@@ -1194,21 +1194,21 @@ class HTML_sportsmanager_admin
: <?php echo($row != null ? JText::_('COM_SPORTSMANAGER_CHANGING') : JText::_('COM_SPORTSMANAGER_ADD')); ?></div> : <?php echo($row != null ? JText::_('COM_SPORTSMANAGER_CHANGING') : JText::_('COM_SPORTSMANAGER_ADD')); ?></div>
<form action="<?php echo SportsManagerURL($row != null ? ('#id' . $row->spieler_id) : ''); ?>" method="post" <form action="<?php echo SportsManagerURL($row != null ? ('#id' . $row->spieler_id) : ''); ?>" method="post"
name="adminForm" id="adminForm" enctype="multipart/form-data"> name="adminForm" id="adminForm" enctype="multipart/form-data" onsubmit="return validate()">
<div class="uk-overflow-auto"><table class="uk-table" width="100%"> <div class="uk-overflow-auto"><table class="uk-table" width="100%">
<tr> <tr>
<td nowrap width="60%" valign="top"> <td nowrap width="60%" valign="top">
<div class="uk-overflow-auto"><table class="uk-table" width="100%"> <div class="uk-overflow-auto"><table class="uk-table" width="100%">
<tr> <tr>
<td nowrap width="20%" align="right"> <td nowrap width="20%" align="right">
<?php echo JText::_('COM_SPORTSMANAGER_LAST_NAME') ?>: <?php echo JText::_('COM_SPORTSMANAGER_LAST_NAME') ?>*:
</td> </td>
<td nowrap> <td nowrap>
<?php <?php
if (!$beschraenkter_zugriff) if (!$beschraenkter_zugriff)
{ {
?> ?>
<input class="inputbox" type="text" name="nachname" size="50" maxlength="30" <input class="inputbox" type="text" name="nachname" size="50" maxlength="30" required
value="<?php if ($row != null) if ($row->nachname != null) echo htmlentities_utf8($row->nachname); ?>"/> value="<?php if ($row != null) if ($row->nachname != null) echo htmlentities_utf8($row->nachname); ?>"/>
<?php <?php
} }
@@ -1220,14 +1220,14 @@ class HTML_sportsmanager_admin
</tr> </tr>
<tr> <tr>
<td nowrap width="20%" align="right"> <td nowrap width="20%" align="right">
<?php echo JText::_('COM_SPORTSMANAGER_FIRST_NAME') ?>: <?php echo JText::_('COM_SPORTSMANAGER_FIRST_NAME') ?>*:
</td> </td>
<td nowrap> <td nowrap>
<?php <?php
if (!$beschraenkter_zugriff) if (!$beschraenkter_zugriff)
{ {
?> ?>
<input class="inputbox" type="text" name="vorname" size="50" maxlength="30" <input class="inputbox" type="text" name="vorname" size="50" maxlength="30" required
value="<?php if ($row != null) echo htmlentities_utf8($row->vorname); ?>"/> value="<?php if ($row != null) echo htmlentities_utf8($row->vorname); ?>"/>
<?php <?php
} }
@@ -1277,57 +1277,33 @@ class HTML_sportsmanager_admin
</td> </td>
</tr> </tr>
<tr> <tr>
<td nowrap width="20%" align="right"> <td nowrap width="20%" align="right" id="birthDateLabel">
<?php echo JText::_('COM_SPORTSMANAGER_BIRTHDATE') ?>: <?php echo JText::_('COM_SPORTSMANAGER_BIRTHYEAR') . '*' ?>:
</td> </td>
<td nowrap> <td nowrap>
<?php <?php
if (!$beschraenkter_zugriff) if (!$beschraenkter_zugriff)
{ {
?> ?>
<select class="uk-select uk-form-width-medium" name="datum_tag" size="1"> <select id="birthYear" class="uk-select uk-form-width-medium" name="datum_jahr" size="1" required>
<?php <?php
$datum = "0000-00-00"; $date_year = '0000';
if ($row != null) if ($row != null)
{ {
if ($row->geburtsdatum != null) if ($row->geburtsjahr != null)
$datum = $row->geburtsdatum; $date_year = sprintf("%04d", $row->geburtsjahr);
else if ($row->geburtsjahr != null)
$datum = sprintf("%04d-00-00", $row->geburtsjahr);
} }
$datum_tag = substr($datum, 8, 2); echo "<option selected disabled value=''></option>";
echo "<option value=\"0\"></option>";
for ($i = 1; $i <= 31; $i++)
{
echo "<option value=\"" . $i . "\" " . ($datum_tag == $i ? "selected" : "") . ">" . $i . "</option>";
}
?>
</select>
<select class="uk-select uk-form-width-medium" name="datum_monat" size="1">
<?php
$datum_monat = substr($datum, 5, 2);
echo "<option value=\"0\"></option>";
$monate = array(JText::_('COM_SPORTSMANAGER_JANUARY'), JText::_('COM_SPORTSMANAGER_FEBRUARY'), JText::_('COM_SPORTSMANAGER_MARCH'), JText::_('COM_SPORTSMANAGER_APRIL'), JText::_('COM_SPORTSMANAGER_MAY'), JText::_('COM_SPORTSMANAGER_JUNE'), JText::_('COM_SPORTSMANAGER_JULY'), JText::_('COM_SPORTSMANAGER_AUGUST'), JText::_('COM_SPORTSMANAGER_SEPTEMBER'), JText::_('COM_SPORTSMANAGER_OCTOBER'), JText::_('COM_SPORTSMANAGER_NOVEMBER'), JText::_('COM_SPORTSMANAGER_DECEMBER'));
for ($i = 1; $i <= 12; $i++)
{
echo "<option value=\"" . $i . "\" " . ($datum_monat == $i ? "selected" : "") . ">" . htmlentities_utf8($monate[$i - 1]) . "</option>";
}
?>
</select>
<select class="uk-select uk-form-width-medium" name="datum_jahr" size="1">
<?php
$datum_jahr = substr($datum, 0, 4);
echo "<option value=\"0\"></option>";
for ($i = Date("Y"); $i >= 1930; $i--) for ($i = Date("Y"); $i >= 1930; $i--)
{ {
echo "<option value=\"" . $i . "\" " . ($datum_jahr == $i ? "selected" : "") . ">" . $i . "</option>"; echo "<option value=\"" . $i . "\" " . ($date_year == $i ? "selected" : "") . ">" . $i . "</option>";
} }
?> ?>
</select> </select>
<?php <?php
} }
else if ($row != null && $row->geburtsdatum != null) else if ($row != null && $row->geburtsjahr != null)
echo htmlentities_utf8(FormatiertesDatum($row->geburtsdatum, false, true)); echo htmlentities_utf8(sprintf("%04d", $row->geburtsjahr));
?> ?>
</td> </td>
</tr> </tr>
@@ -362,7 +362,7 @@ COM_SPORTSMANAGER_IDENTICAL_NAME="Identical name"
COM_SPORTSMANAGER_IDENTICAL_NAME_BIRTHYEAR="Identical name and birth year" COM_SPORTSMANAGER_IDENTICAL_NAME_BIRTHYEAR="Identical name and birth year"
COM_SPORTSMANAGER_NO_PLAYERS="No player number" COM_SPORTSMANAGER_NO_PLAYERS="No player number"
COM_SPORTSMANAGER_LAST_FIRST_NAME="Last name, first name" COM_SPORTSMANAGER_LAST_FIRST_NAME="Last name, first name"
COM_SPORTSMANAGER_BIRTHYEAR="birthyear" COM_SPORTSMANAGER_BIRTHYEAR="Birthyear"
COM_SPORTSMANAGER_NAT="Nat. #" COM_SPORTSMANAGER_NAT="Nat. #"
COM_SPORTSMANAGER_INT="Intern. #" COM_SPORTSMANAGER_INT="Intern. #"
COM_SPORTSMANAGER_REMOVE_MESSAGE="Do you really want to remove the player?" COM_SPORTSMANAGER_REMOVE_MESSAGE="Do you really want to remove the player?"
@@ -921,3 +921,4 @@ 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_LIZENZ="License"
-1
View File
@@ -575,7 +575,6 @@ class com_sportsmanagerInstallerScript
. "\n `nachname` varchar(30) DEFAULT NULL," . "\n `nachname` varchar(30) DEFAULT NULL,"
. "\n `vorname` varchar(30) NOT NULL DEFAULT ''," . "\n `vorname` varchar(30) NOT NULL DEFAULT '',"
. "\n `geschlecht` char(1) DEFAULT NULL," . "\n `geschlecht` char(1) DEFAULT NULL,"
. "\n `geburtsdatum` date DEFAULT NULL,"
. "\n `geburtsjahr` smallint(5) unsigned DEFAULT NULL," . "\n `geburtsjahr` smallint(5) unsigned DEFAULT NULL,"
. "\n `strasse` varchar(30) DEFAULT NULL," . "\n `strasse` varchar(30) DEFAULT NULL,"
. "\n `plz` varchar(6) DEFAULT NULL," . "\n `plz` varchar(6) DEFAULT NULL,"