Off Topic Modus On:
Der Autor ist auch nur ein Mensch. Manchmal ändern sich halt die Lebensumstände und dann verschieben sich eben die Prioritäten.
Ich bin dankbar, dass es so ein hervorragendes
MOD als gute Basis für weitere Entwicklungen gibt.
Off Topic Modus Off:
Es gibt ja im Adminbereich die Einstellmöglichkeit Football->Liegen-Verwalten->Punkte-Modus
Ich muss als Erstes rausfinden, wo diese Einstellung überall wirksam wird.
Abgelegt wird der gewählte Wert in Tabelle: footb_leagues Spalte:points_mode
Wo werden die Auswahlmöglichkeiten im Drop-Down Menü und der Erklärungstext für die verschiedenen Modi festgelegt?
In der Datei includes/acp/acp_football_league.php wird hier hardcodiert festgelegt wieviele Optionen im Drop-Down Menü erscheinen:
Code: Alles auswählen
for($i = 1; $i <= 6; $i++)
{
$selected = ($i == $league_info['points_mode']) ? ' selected="selected"' : '';
$mode_options .= '<option value="' . $i . '"' . $selected . '>' . $i . '</option>';
}
In der Datei language/de/mods/info_acp_leagues wird der erklärende Text abgelegt.
Code: Alles auswählen
'LEAGUE_POINTS_MODE_EXPLAIN' => '1 = Volltrefferpunkte und bei richtiger Tendenz je abweichendem Tor ein Punkt weniger aber mind. Tendenzpunkte. Bei Unentschieden nur einfacher Abzug bei abweichendem Tor. <br /> 2 = wie 1 jedoch bei Unentschieden voller Abzug je Torabweichung. <br /> 3 = Volltreffer- oder Tendenzpunkte. <br /> 4 = Volltreffer-, Differenz- oder Tendenzpunkte. <br /> 5 = wie 4 aber bei Remis keine Diffenzpunkte. <br /> 6 = Volltreffer- oder Tendenzpunkte; Differenzpunkte bei Unentschieden-Tendenz. ',
Wenn ich in includes/acp/acp_football_league.php den Laufindex der Schleife auf 7 erhöhe, kriege ich im Admin-Center bei der Ligaeinstellung eine 7. Punkte Modus Option angezeigt.
Wenn ich diese 7. Option bei der Erstellung einer neue Liga als Punkte-Modus wähle, erscheint die 7 auch in der entsprechenden Tabelle/Spalte in der Datenbank.
Jetzt muss ich nur noch rausfinden,
an welcher Stelle diese Information für die Punkteauswertung genutzt wird.
Wenn ich nach der Eintragung einer Liga in Tipp-Modus 7 einen Spielplan erstelle und die Spielansetzung einpflege, erhalte ich beim Wechsel in die Tipprunde die folgende Fehlermeldung
Code: Alles auswählen
Allgemeiner Fehler
SQL ERROR [ mysql4 ]
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM yv8l169yx_footb_matches AS m INNER JOIN yv8l169yx_footb_bets AS b ON (b.s' at line 32 [1064]
SQL
SELECT m.league, m.match_no, m.matchday, m.status, m.group_id, m.formula_home, m.formula_guest, t1.team_symbol AS home_symbol, t2.team_symbol AS guest_symbol, t1.team_id AS home_id, t2.team_id AS guest_id, t1.team_name AS home_name, t2.team_name AS guest_name, b.goals_home AS bet_home, b.goals_guest AS bet_guest, m.goals_home, m.goals_guest, CONCAT( CASE DATE_FORMAT(m.match_datetime,'%w') WHEN 0 THEN 'So' WHEN 1 THEN 'Mo' WHEN 2 THEN 'Di' WHEN 3 THEN 'Mi' WHEN 4 THEN 'Do' WHEN 5 THEN 'Fr' WHEN 6 THEN 'Sa' ELSE 'Error' END, DATE_FORMAT(m.match_datetime,' %d.%m. %H:%i') ) AS match_time, FROM yv8l169yx_footb_matches AS m INNER JOIN yv8l169yx_footb_bets AS b ON (b.season = m.season AND b.league = m.league AND b.match_no = m.match_no AND b.user_id = 2) LEFT JOIN yv8l169yx_footb_teams AS t1 ON (t1.season = m.season AND t1.league = m.league AND t1.team_id = m.team_id_home) LEFT JOIN yv8l169yx_footb_teams AS t2 ON (t2.season = m.season AND t2.league = m.league AND t2.team_id = m.team_id_guest) WHERE m.season = 2015 AND m.league = 2 AND m.matchday = 1 GROUP BY m.match_no ORDER BY m.match_datetime ASC, m.match_no ASC
BACKTRACE
FILE: (not given by php)
LINE: (not given by php)
CALL: msg_handler()
FILE: [ROOT]/includes/db/dbal.php
LINE: 754
CALL: trigger_error()
FILE: [ROOT]/includes/db/mysql.php
LINE: 193
CALL: dbal->sql_error()
FILE: [ROOT]/football/block/bet.php
LINE: 119
CALL: dbal_mysql->sql_query()
FILE: [ROOT]/football.php
LINE: 921
CALL: include('[ROOT]/football/block/bet.php')
Wenn ich den Tipp-Modus 7 wieder auf einen Wert 1-6 setze, verschwindet die Fehlermeldung. Demnach vermute ich, dass die Funktionen football.php und bet.php den hinterlegten Tipp-Modus verwenden!
Die Funktion bet.php stürzt wahrscheinlich wegen der Funktion select_points() ab, die im entsprechenden SQL-Aufruf in der Funktion bet.php verwendet wird.
Code: Alles auswählen
// Calculate matches and bets of matchday
$sql = "SELECT
m.league,
m.match_no,
m.matchday,
m.status,
m.group_id,
m.formula_home,
m.formula_guest,
t1.team_symbol AS home_symbol,
t2.team_symbol AS guest_symbol,
t1.team_id AS home_id,
t2.team_id AS guest_id,
t1.team_name AS home_name,
t2.team_name AS guest_name,
b.goals_home AS bet_home,
b.goals_guest AS bet_guest,
m.goals_home,
m.goals_guest,
CONCAT(
CASE DATE_FORMAT(m.match_datetime,'%w')
WHEN 0 THEN '" . $lang_dates['Sun'] . "'
WHEN 1 THEN '" . $lang_dates['Mon'] . "'
WHEN 2 THEN '" . $lang_dates['Tue'] . "'
WHEN 3 THEN '" . $lang_dates['Wed'] . "'
WHEN 4 THEN '" . $lang_dates['Thu'] . "'
WHEN 5 THEN '" . $lang_dates['Fri'] . "'
WHEN 6 THEN '" . $lang_dates['Sat'] . "'
ELSE 'Error' END,
DATE_FORMAT(m.match_datetime,' %d.%m. %H:%i')
) AS match_time,
. select_points() .
FROM ' . FOOTB_MATCHES . ' AS m
INNER JOIN ' . FOOTB_BETS . " AS b ON (b.season = m.season AND b.league = m.league AND b.match_no = m.match_no AND b.user_id = $userid)
LEFT JOIN " . FOOTB_TEAMS . ' AS t1 ON (t1.season = m.season AND t1.league = m.league AND t1.team_id = m.team_id_home)
LEFT JOIN ' . FOOTB_TEAMS . " AS t2 ON (t2.season = m.season AND t2.league = m.league AND t2.team_id = m.team_id_guest)
WHERE m.season = $season
AND m.league = $league
AND m.matchday = $matchday
GROUP BY m.match_no
ORDER BY m.match_datetime ASC, m.match_no ASC";
$result = $db->sql_query($sql);
Die Funktion select_points befindet sich in der Datei football/functions.php.
Code: Alles auswählen
function select_points($creator = 'm', $sum = false)
{
global $league_info;
$points_result = $league_info['points_result'];
$points_tendency = $league_info['points_tendency'];
$points_diff = $league_info['points_diff'];
switch ($league_info['points_mode'])
{
// hit = points_result
// right tendency (not draw) = points_result - difference between bet und result but minimal points_tendency
// right tendency (draw) = points_result - difference between bet goals home und result goals home
case 1:
$select_part = ($sum ? "SUM(IF(b.goals_home <> '' AND b.goals_guest <> ''," : 'IF(((m.status = 2) OR (m.status = 3)),') .
"IF(b.goals_home <> '' AND b.goals_guest <> '',
IF((b.goals_home + 0 < b.goals_guest) <> ($creator.goals_home + 0 < $creator.goals_guest)
OR (b.goals_home = b.goals_guest) <> ($creator.goals_home = $creator.goals_guest)
OR (b.goals_home + 0 > b.goals_guest) <> ($creator.goals_home + 0 > $creator.goals_guest),
" .($sum ? '0' : "''") . ",
IF((b.goals_home = $creator.goals_home) AND (b.goals_guest = $creator.goals_guest),
$points_result,
IF((b.goals_home = b.goals_guest),
$points_result - ABS(b.goals_home - $creator.goals_home),
IF((($points_result - ABS(b.goals_home - $creator.goals_home) - ABS(b.goals_guest - $creator.goals_guest)) < $points_tendency),
$points_tendency,
$points_result - ABS(b.goals_home - $creator.goals_home) - ABS(b.goals_guest - $creator.goals_guest)
)
)
)
),
" .($sum ? '0' : "''") . '
),
' .($sum ? '0' : "''") . "
) " .($sum ? ')' : '') . 'AS points';
break;
// hit = points_result,
// right tendency = points_result - difference between bet und result but minimal points_tendency
case 2:
$select_part = ($sum ? "SUM(IF(b.goals_home <> '' AND b.goals_guest <> ''," : 'IF(((m.status = 2) OR (m.status = 3)),') .
"IF(b.goals_home <> '' AND b.goals_guest <> '',
IF((b.goals_home + 0 < b.goals_guest) <> ($creator.goals_home + 0 < $creator.goals_guest)
OR (b.goals_home = b.goals_guest) <> ($creator.goals_home = $creator.goals_guest)
OR (b.goals_home + 0 > b.goals_guest) <> ($creator.goals_home + 0 > $creator.goals_guest),
" .($sum ? '0' : "''") . ",
IF((b.goals_home = $creator.goals_home) AND (b.goals_guest = $creator.goals_guest),
$points_result,
IF((b.goals_home = b.goals_guest),
$points_result - ABS(b.goals_home - $creator.goals_home) - ABS(b.goals_guest - $creator.goals_guest),
IF((($points_result - ABS(b.goals_home - $creator.goals_home) - ABS(b.goals_guest - $creator.goals_guest)) < $points_tendency),
$points_tendency,
$points_result - ABS(b.goals_home - $creator.goals_home) - ABS(b.goals_guest - $creator.goals_guest)
)
)
)
),
" .($sum ? '0' : "''") . '
),
' .($sum ? '0' : "''") . "
) " .($sum ? ')' : '') . 'AS points';
break;
// hit = points_result,
// right tendency = points_tendency
case 3:
$select_part = ($sum ? "SUM(IF(b.goals_home <> '' AND b.goals_guest <> ''," : 'IF(((m.status = 2) OR (m.status = 3)),') .
"IF(b.goals_home <> '' AND b.goals_guest <> '',
IF((b.goals_home + 0 < b.goals_guest) <> ($creator.goals_home + 0 < $creator.goals_guest)
OR (b.goals_home = b.goals_guest) <> ($creator.goals_home = $creator.goals_guest)
OR (b.goals_home + 0 > b.goals_guest) <> ($creator.goals_home + 0 > $creator.goals_guest),
" .($sum ? '0' : "''") . ",
IF((b.goals_home = $creator.goals_home) AND (b.goals_guest = $creator.goals_guest),
$points_result,
$points_tendency
)
),
" .($sum ? '0' : "''") . '
),
' .($sum ? '0' : "''") . "
) " .($sum ? ')' : '') . 'AS points';
break;
// hit = points_result,
// right goal-difference = points_diff,
// right tendency = points_tendency
case 4:
$select_part = ($sum ? "SUM(IF(b.goals_home <> '' AND b.goals_guest <> ''," : 'IF(((m.status = 2) OR (m.status = 3)),') .
"IF(b.goals_home <> '' AND b.goals_guest <> '',
IF((b.goals_home + 0 < b.goals_guest) <> ($creator.goals_home + 0 < $creator.goals_guest)
OR (b.goals_home = b.goals_guest) <> ($creator.goals_home = $creator.goals_guest)
OR (b.goals_home + 0 > b.goals_guest) <> ($creator.goals_home + 0 > $creator.goals_guest),
" .($sum ? '0' : "''") . ",
IF((b.goals_home = $creator.goals_home) AND (b.goals_guest = $creator.goals_guest),
$points_result,
IF((b.goals_home - b.goals_guest = $creator.goals_home - $creator.goals_guest),
$points_diff,
$points_tendency
)
)
),
" .($sum ? '0' : "''") . '
),
' .($sum ? '0' : "''") . "
) " .($sum ? ')' : '') . 'AS points';
break;
// hit = points_result,
// right goal-difference (not draw) = points_diff,
// right tendency = points_tendency
case 5:
$select_part = ($sum ? "SUM(IF(b.goals_home <> '' AND b.goals_guest <> ''," : 'IF(((m.status = 2) OR (m.status = 3)),') .
"IF(b.goals_home <> '' AND b.goals_guest <> '',
IF((b.goals_home + 0 < b.goals_guest) <> ($creator.goals_home + 0 < $creator.goals_guest)
OR (b.goals_home = b.goals_guest) <> ($creator.goals_home = $creator.goals_guest)
OR (b.goals_home + 0 > b.goals_guest) <> ($creator.goals_home + 0 > $creator.goals_guest),
" .($sum ? '0' : "''") . ",
IF((b.goals_home = $creator.goals_home) AND (b.goals_guest = $creator.goals_guest),
$points_result,
IF(((b.goals_home - b.goals_guest = $creator.goals_home - $creator.goals_guest)
AND ($creator.goals_home <> $creator.goals_guest)) ,
$points_diff,
$points_tendency
)
)
),
" .($sum ? '0' : "''") . '
),
' .($sum ? '0' : "''") . "
) " .($sum ? ')' : '') . 'AS points';
break;
// hit = points_result,
// right tendency draw = points_diff,
// right tendency (not draw) = points_tendency
case 6:
$select_part = ($sum ? "SUM(IF(b.goals_home <> '' AND b.goals_guest <> ''," : 'IF(((m.status = 2) OR (m.status = 3)),') .
"IF(b.goals_home <> '' AND b.goals_guest <> '',
IF((b.goals_home + 0 < b.goals_guest) <> ($creator.goals_home + 0 < $creator.goals_guest)
OR (b.goals_home = b.goals_guest) <> ($creator.goals_home = $creator.goals_guest)
OR (b.goals_home + 0 > b.goals_guest) <> ($creator.goals_home + 0 > $creator.goals_guest),
" .($sum ? '0' : "''") . ",
IF((b.goals_home = $creator.goals_home) AND (b.goals_guest = $creator.goals_guest),
$points_result,
IF(((b.goals_home = b.goals_guest) AND ($creator.goals_home = $creator.goals_guest) ) ,
$points_diff,
$points_tendency
)
)
),
" .($sum ? '0' : "''") . '
),
' .($sum ? '0' : "''") . "
) " .($sum ? ')' : '') . 'AS points';
break;
}
return $select_part;
}
Hier muss ein weiterer case-Zweig für den 7. Modus eingebracht werden. Jetzt muss ich nur die Syntax nachvollziehen.
Ich habe als Basis für die weitere Entwicklung einfach den Algorithmus für den ersten Punktemodus kopiert und ihn als 7. case Fall in die Funktion eingefügt.
Dadurch verschwindet obige SQL-Fehlermeldung, die ensteht wenn man für eine Liga den 7. Basketball-Tippmodus im Admin-Center eintellt und dann in die Tipprunde wechselt.