Wenn du die Einstellung "Tippabgabe bis zum jeweiligen Spielbeginn" einstellst und beim verlegten Spiel noch kein Ergebnis eingetragen ist, kannst du das Spiel im Spielplan in die Zukunft verlegen und später, wenn der Nachholtermin feststeht auf diesen legen. Dadurch wird der Status des Spiels (und des Spieltags) automatisch auf 0 gesetzt, sodass das Spiel weiterhin getippt werden kann.
Damit man nicht immer bei diesem Spietag landet ist folgende Änderung, die ich auch permanent einbaue, erforderlich:
/football/includes/functions.php
Code: Alles auswählen
function curr_matchday($season, $league)
{
global $db, $lang;
$sql = 'SELECT * FROM ' . FOOTB_MATCHDAYS . "
WHERE season = $season AND league = $league AND status < 3
ORDER BY status DESC, matchday ASC
";
durch
Code: Alles auswählen
function curr_matchday($season, $league)
{
global $db, $lang;
$sql = 'SELECT * FROM ' . FOOTB_MATCHDAYS . "
WHERE season = $season AND league = $league AND status < 3
ORDER BY status DESC, delivery_date ASC
";
ersetzen.
Dadurch springt das Programm nicht zum kleinsten nicht abgeschlossenen Spieltag, sondern zu dem Spieltag der noch nicht abgeschlossen ist und zuerst getippt wurde (oder wird). Wenn das Nachholspiel an der Reihe ist, wird dieser Spieltag somit automatisch wieder angezeigt.
Wenn du die Einstellung "Tippabgabe bis zum jeweiligen Spielbeginn" nicht gewählt hast, solltest du dich Fragen, ob du das Spiel überhaupt zum Tippen erneut freigeben möchtest. Denn eigentlich willst du ja nicht, dass die Tipper auf die Tipps und Punkte der anderen Tipper reagieren können. Wenn du dies aber trotzdem möchtest, musst du den Spieltermin entsprechend verlegen und anschließend den Abgabetermin des Spieltags ebenfalls neu festlegen.
Wenn folgende Änderung in /includes/acp/acp_footb_matchdays.php vorgenommen wird (auch dies nehme ich in die nächste Version auf), dann sollte eine Spielverlegung auch hier kein Problem sein:
Code: Alles auswählen
if ($delivery_timestamp > $local_board_time AND $matchday_row['status'] == 1)
{
// delivery is set to future
$matchday_row['status'] = 0;
$sql_ary = array(
'status' => 0,
);
// set all matches after delivery on status 0
$sql = 'UPDATE ' . FOOTB_MATCHES . '
SET ' . $db->sql_build_array('UPDATE', $sql_ary) . "
WHERE season = $season
AND league = $league
AND matchday = $matchday
AND status > 0
AND match_datetime >= FROM_UNIXTIME('$delivery_timestamp')";
$db->sql_query($sql);
}
durch
Code: Alles auswählen
if ($delivery_timestamp > $local_board_time AND ($matchday_row['status'] == 1 OR $matchday_row['status'] == 2))
{
$sql_ary = array(
'status' => 0,
);
// set all matches after delivery on status 0
$sql = 'UPDATE ' . FOOTB_MATCHES . '
SET ' . $db->sql_build_array('UPDATE', $sql_ary) . "
WHERE season = $season
AND league = $league
AND matchday = $matchday
AND status IN (1, 2)
AND match_datetime >= FROM_UNIXTIME('$delivery_timestamp')";
$db->sql_query($sql);
// check on open matches
$sql = "SELECT
match_no
FROM " . FOOTB_MATCHES . "
WHERE season = $season
AND league = $league
AND matchday = $matchday
AND status = 0";
$result = $db->sql_query($sql);
if ($rows_open = $db->sql_fetchrow($result))
{
// reopen matchday
$matchday_row['status'] = 0;
}
}
ersetzen.
Wenn man ein Spiel aus der Wertung nimmt, so wird dieses Spiel bei der Punktevergabe nicht mehr berücksichtigt und der Spieltag kann komplett abgeschlossen werden. Das Ergebnis welches später beim Spieltag nachgetragen wird hat keine Auswirkungen auf die Punkte und Ranglisten, nur auf die Tabelle. Diese Funktionalität habe ich eingebaut damit man nicht immer auf die Nachholspiele warten muss und diese die Wertung nachträglich beeinflussen können. Sie ist also nicht als Lösung für die oben genannte Fragestellung geeignet.
Edit: Den Fehler korrigiert: AND status IN (1, 2) hatte ich leider an die falsche Stelle (beim zweiten AND status) kopiert.
Sorry Femu das dein folgender Beitrag jetzt nicht mehr passt.