Verschiebereln erweitert. Kategoriefilter optimiert.

This commit is contained in:
Jürgen Meyer
2025-12-25 13:20:54 +01:00
parent 275693ecb3
commit db80f584cd
7 changed files with 490 additions and 387 deletions
@@ -4601,6 +4601,9 @@ function adminEditVerschiebenModus(): void
$termine_minimal = $jInput->get('termine_minimal', 1, 'INT'); $termine_minimal = $jInput->get('termine_minimal', 1, 'INT');
$termine_maximal = $jInput->get('termine_maximal', 3, 'INT'); $termine_maximal = $jInput->get('termine_maximal', 3, 'INT');
$ablehnen = $jInput->get('ablehnen', 0, 'INT'); $ablehnen = $jInput->get('ablehnen', 0, 'INT');
$begruendung_erforderlich = $jInput->get('begruendung_erforderlich', 0, 'INT');
$vereine_berechtigt = $jInput->get('vereine_berechtigt', 0, 'INT');
$verband_berechtigt = $jInput->get('verband_berechtigt', 0, 'INT');
if ($termine_minimal > 0 && $termine_maximal > 0 && $termine_minimal > $termine_maximal) { if ($termine_minimal > 0 && $termine_maximal > 0 && $termine_minimal > $termine_maximal) {
$t = $termine_minimal; $t = $termine_minimal;
@@ -4609,7 +4612,11 @@ function adminEditVerschiebenModus(): void
} }
if ($id == 0) if ($id == 0)
$query = "INSERT INTO #__sportsmanager_verschieberegel (bezeichnung, initial_ohne_termin, keine_gegenvorschlaege, vorlaufzeit_tage, termine_minimal, termine_maximal, ablehnen) VALUES ('$bezeichnung', '$initial_ohne_termin', '$keine_gegenvorschlaege', '$vorlaufzeit_tage', '$termine_minimal', '$termine_maximal', '$ablehnen');"; $query = "INSERT INTO #__sportsmanager_verschieberegel"
. "\n (bezeichnung, initial_ohne_termin, keine_gegenvorschlaege, vorlaufzeit_tage, termine_minimal,"
. "\n termine_maximal, ablehnen, begruendung_erforderlich, vereine_berechtigt, verband_berechtigt)"
. "\n VALUES ('$bezeichnung', '$initial_ohne_termin', '$keine_gegenvorschlaege', '$vorlaufzeit_tage', '$termine_minimal',"
. "\n '$termine_maximal', '$ablehnen', '$begruendung_erforderlich', '$vereine_berechtigt', '$verband_berechtigt');";
else { else {
$query = "UPDATE #__sportsmanager_verschieberegel" $query = "UPDATE #__sportsmanager_verschieberegel"
. "\n SET bezeichnung = '$bezeichnung'," . "\n SET bezeichnung = '$bezeichnung',"
@@ -4618,7 +4625,10 @@ function adminEditVerschiebenModus(): void
. "\n vorlaufzeit_tage = '$vorlaufzeit_tage'," . "\n vorlaufzeit_tage = '$vorlaufzeit_tage',"
. "\n termine_minimal = '$termine_minimal'," . "\n termine_minimal = '$termine_minimal',"
. "\n termine_maximal = '$termine_maximal'," . "\n termine_maximal = '$termine_maximal',"
. "\n ablehnen = '$ablehnen'" . "\n ablehnen = '$ablehnen',"
. "\n begruendung_erforderlich = '$begruendung_erforderlich',"
. "\n vereine_berechtigt = '$vereine_berechtigt',"
. "\n verband_berechtigt = '$verband_berechtigt'"
. "\n WHERE verschieberegel_id = $id"; . "\n WHERE verschieberegel_id = $id";
} }
$db->setQuery($query); $db->setQuery($query);
@@ -5516,6 +5516,27 @@ function updateDatabase(): void
} }
} }
if ($datenbank_version < 115) {
// Erweiterung Tabelle #__sportsmanager_verschieberegel
$query = "ALTER TABLE `#__sportsmanager_verschieberegel`"
."\n ADD COLUMN IF NOT EXISTS `begruendung_erforderlich` INT(1) NOT NULL DEFAULT 0 AFTER `ablehnen`,"
."\n ADD COLUMN IF NOT EXISTS `vereine_berechtigt` INT(1) NOT NULL DEFAULT 1 AFTER `begruendung_erforderlich`,"
."\n ADD COLUMN IF NOT EXISTS `verband_berechtigt` INT(1) NOT NULL DEFAULT 0 AFTER `vereine_berechtigt`;";
$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 ($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";
@@ -185,17 +185,45 @@ 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'));
$filter = ""; $result = [];
foreach ($kategorien as $s) {
$kategorie = intval(trim($s)); foreach ($kategorien as $item) {
if ($kategorie == 0) $item = trim($item);
continue; if ($item === '') continue;
if (!empty($filter))
$filter .= ", "; // Prüfen, ob es ein Bereich ist
$filter .= $kategorie; if (strpos($item, '-') !== false) {
$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
} }
return empty($filter) ? "" : (" " . $prefix . " (" . $filter . ") " . $suffix); } else {
$num = intval($item);
if ($num > 0) {
$result[$num] = true;
}
}
}
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
@@ -5122,11 +5122,7 @@ function begegnungVerlegen($veranstaltung, $begegnung, $heim_team, $gast_team, $
<form action="<?php echo SportsManagerURL(); ?>" method="post" name="adminForm" id="adminForm"> <form action="<?php echo SportsManagerURL(); ?>" method="post" name="adminForm" id="adminForm">
<div class="uk-overflow-auto"> <div class="uk-overflow-auto">
<table class="uk-table" style="width: 100%"> <table style="width: 100%">
<tr>
<td nowrap style="width: 60%; vertical-align: top">
<div class="uk-overflow-auto">
<table class="uk-table" style="width: 100%">
<tr> <tr>
<td nowrap style="width: 20%; text-align: right"> <td nowrap style="width: 20%; text-align: right">
<?php echo Text::_('COM_SPORTSMANAGER_ORIGINALY_SCHEDULED'); ?>: <?php echo Text::_('COM_SPORTSMANAGER_ORIGINALY_SCHEDULED'); ?>:
@@ -5218,7 +5214,7 @@ function begegnungVerlegen($veranstaltung, $begegnung, $heim_team, $gast_team, $
</script> </script>
<select <select
aria-label="<?php echo Text::_('COM_SPORTSMANAGER_ARIA_LABEL_PROPOSAL_DAY') . ' ' . $termin ?>" aria-label="<?php echo Text::_('COM_SPORTSMANAGER_ARIA_LABEL_PROPOSAL_DAY') . ' ' . $termin ?>"
class="uk-select uk-form-width-medium" class="uk-select uk-form-width-small"
name="datum_tag_<?php echo $termin; ?>" size="1" name="datum_tag_<?php echo $termin; ?>" size="1"
onChange="termin_changed_<?php echo $termin; ?>();"> onChange="termin_changed_<?php echo $termin; ?>();">
<?php <?php
@@ -5234,7 +5230,7 @@ function begegnungVerlegen($veranstaltung, $begegnung, $heim_team, $gast_team, $
</select> </select>
<select <select
aria-label="<?php echo Text::_('COM_SPORTSMANAGER_ARIA_LABEL_PROPOSAL_MONTH') . ' ' . $termin ?>" aria-label="<?php echo Text::_('COM_SPORTSMANAGER_ARIA_LABEL_PROPOSAL_MONTH') . ' ' . $termin ?>"
class="uk-select uk-form-width-medium" class="uk-select uk-form-width-small"
name="datum_monat_<?php echo $termin; ?>" size="1" name="datum_monat_<?php echo $termin; ?>" size="1"
onChange="termin_changed_<?php echo $termin; ?>();"> onChange="termin_changed_<?php echo $termin; ?>();">
<?php <?php
@@ -5248,7 +5244,7 @@ function begegnungVerlegen($veranstaltung, $begegnung, $heim_team, $gast_team, $
</select> </select>
<select <select
aria-label="<?php echo Text::_('COM_SPORTSMANAGER_ARIA_LABEL_PROPOSAL_YEAR') . ' ' . $termin ?>" aria-label="<?php echo Text::_('COM_SPORTSMANAGER_ARIA_LABEL_PROPOSAL_YEAR') . ' ' . $termin ?>"
class="uk-select uk-form-width-medium" class="uk-select uk-form-width-small"
name="datum_jahr_<?php echo $termin; ?>" size="1" name="datum_jahr_<?php echo $termin; ?>" size="1"
onChange="termin_changed_<?php echo $termin; ?>();"> onChange="termin_changed_<?php echo $termin; ?>();">
<?php <?php
@@ -5261,7 +5257,7 @@ function begegnungVerlegen($veranstaltung, $begegnung, $heim_team, $gast_team, $
</select> </select>
<select <select
aria-label="<?php echo Text::_('COM_SPORTSMANAGER_ARIA_LABEL_PROPOSAL_HOUR') . ' ' . $termin ?>" aria-label="<?php echo Text::_('COM_SPORTSMANAGER_ARIA_LABEL_PROPOSAL_HOUR') . ' ' . $termin ?>"
class="uk-select uk-form-width-medium" class="uk-select uk-form-width-small"
name="uhrzeit_stunden_<?php echo $termin; ?>" size="1" name="uhrzeit_stunden_<?php echo $termin; ?>" size="1"
onChange="termin_changed_<?php echo $termin; ?>();"> onChange="termin_changed_<?php echo $termin; ?>();">
<?php <?php
@@ -5276,7 +5272,7 @@ function begegnungVerlegen($veranstaltung, $begegnung, $heim_team, $gast_team, $
</select> </select>
<select <select
aria-label="<?php echo Text::_('COM_SPORTSMANAGER_ARIA_LABEL_PROPOSAL_MINUTE') . ' ' . $termin ?>" aria-label="<?php echo Text::_('COM_SPORTSMANAGER_ARIA_LABEL_PROPOSAL_MINUTE') . ' ' . $termin ?>"
class="uk-select uk-form-width-medium" class="uk-select uk-form-width-small"
name="uhrzeit_minuten_<?php echo $termin; ?>" size="1" name="uhrzeit_minuten_<?php echo $termin; ?>" size="1"
onChange="termin_changed_<?php echo $termin; ?>();"> onChange="termin_changed_<?php echo $termin; ?>();">
<?php <?php
@@ -5367,10 +5363,6 @@ function begegnungVerlegen($veranstaltung, $begegnung, $heim_team, $gast_team, $
?> ?>
</table> </table>
</div> </div>
</td>
</tr>
</table>
</div>
<?php <?php
if ($berechtigt_anfordern) { if ($berechtigt_anfordern) {
@@ -4978,11 +4978,7 @@ class HTML_sportsmanager_admin
<form action="<?php echo SportsManagerURL(); ?>" method="post" name="adminForm" id="adminForm"> <form action="<?php echo SportsManagerURL(); ?>" method="post" name="adminForm" id="adminForm">
<div class="uk-overflow-auto"> <div class="uk-overflow-auto">
<table class="uk-table" style="width: 100%"> <table style="width: 100%">
<tr>
<td nowrap style="width: 60%; vertical-align: top">
<div class="uk-overflow-auto">
<table class="uk-table" style="width: 100%">
<tr> <tr>
<td nowrap style="width: 20%; text-align: right"> <td nowrap style="width: 20%; text-align: right">
<label <label
@@ -5103,12 +5099,62 @@ class HTML_sportsmanager_admin
</td> </td>
</tr> </tr>
<tr> <tr>
<td nowrap colspan="2">&nbsp; <td nowrap style="width: 20%; text-align: right">
<label
for="reason_required"><?php echo Text::_('COM_SPORTSMANAGER_REASON_REQUIRED'); ?>
:</label>
</td>
<td nowrap>
<select class="uk-select uk-form-width-medium" name="begruendung_erforderlich"
id="reason_required" size="1">
<?php
$typ = array(Text::_('COM_SPORTSMANAGER_NO'), Text::_('COM_SPORTSMANAGER_YES'));
for ($i = 0; $i <= 1; $i++) {
echo "<option value=\"" . $i . "\"" . ($row != null ? ($row->begruendung_erforderlich == $i ? " selected" : "") : "") . ">" . htmlentities_utf8($typ[$i]) . "</option>";
}
?>
</select>
</td> </td>
</tr> </tr>
</table> <tr>
</div> <td nowrap style="width: 20%; text-align: right">
<label
for="club_entitlement"><?php echo Text::_('COM_SPORTSMANAGER_CLUB_ENTITLEMENT'); ?>
:</label>
</td>
<td nowrap>
<select class="uk-select uk-form-width-medium" name="vereine_berechtigt"
id="club_entitlement" size="1">
<?php
$typ = array(Text::_('COM_SPORTSMANAGER_NO'), Text::_('COM_SPORTSMANAGER_YES'));
for ($i = 0; $i <= 1; $i++) {
echo "<option value=\"" . $i . "\"" . ($row != null ? ($row->vereine_berechtigt == $i ? " selected" : "") : "") . ">" . htmlentities_utf8($typ[$i]) . "</option>";
}
?>
</select>
</td>
</tr>
<tr>
<td nowrap style="width: 20%; text-align: right">
<label
for="association_entitlement"><?php echo Text::_('COM_SPORTSMANAGER_ASSOCIATION_ENTITLEMENT'); ?>
:</label>
</td>
<td nowrap>
<select class="uk-select uk-form-width-medium" name="verband_berechtigt"
id="association_entitlement" size="1">
<?php
$typ = array(Text::_('COM_SPORTSMANAGER_NO'), Text::_('COM_SPORTSMANAGER_YES'));
for ($i = 0; $i <= 1; $i++) {
echo "<option value=\"" . $i . "\"" . ($row != null ? ($row->verband_berechtigt == $i ? " selected" : "") : "") . ">" . htmlentities_utf8($typ[$i]) . "</option>";
}
?>
</select>
</td>
</tr>
<tr>
<td nowrap colspan="2">&nbsp;
</td> </td>
</tr> </tr>
</table> </table>
@@ -886,6 +886,9 @@ 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"
@@ -886,6 +886,9 @@ 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"