Files
phpbb_football_tlw/includes/functions.php
Julian Arndt c9b4372b34 Merge remote-tracking branch 'football/master'
# Conflicts:
#	acp/matches_module.php
#	adm/style/acp_football_leagues.html
#	adm/style/acp_football_matches.html
#	block/all_bets.php
#	block/rank_matchday.php
#	block/ranks_total.php
#	config/services.yml
#	controller/main.php
#	event/main_listener.php
#	includes/constants.php
#	includes/functions.php
#	language/de/football.php
#	language/de/info_acp_leagues.php
#	language/de/info_acp_matches.php
#	styles/prosilver/template/all_bets.html
#	styles/prosilver/template/results.html
#	styles/prosilver/template/table.html
#	styles/prosilver/theme/football.css
2023-06-07 20:40:50 +02:00

2825 lines
88 KiB
PHP

<?php
/**
*
* @package phpBB Extension - Football Football
* @copyright (c) 2016 football (http://football.bplaced.net)
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
/**
* calculate extra Points (table FOOTB_EXTRA_BETS).
*/
function calculate_extra_points($season, $league, $matchday, $finally = false)
{
global $db, $config, $lang, $league_info;
$where_status = (!$finally) ? ' AND extra_status < 3 ' : '';
// get all extra bets to calculate
$sql = 'SELECT *
FROM ' . FOOTB_EXTRA . "
WHERE season = $season
AND league = $league
AND matchday_eval = $matchday
AND extra_status > 0
$where_status";
$result = $db->sql_query($sql);
$result_ary = array();
$extra_points_error = true;
while($row = $db->sql_fetchrow($result))
{
$extra_no = $row['extra_no'];
if ($row['result'] <> '')
{
switch($row['question_type'])
{
case '2':
case '4':
// multiple results
{
$bet_points = 'CASE bet ';
$result_ary = explode(';', $row['result']);
foreach($result_ary AS $result_value)
{
if ($result_value <> '')
{
$result_value = (is_numeric($result_value)) ? $result_value : "'" . $result_value . "'";
$bet_points .= ' WHEN ' . $result_value . ' THEN ' . $row['extra_points'] . ' ';
$extra_points_error = false;
}
}
$bet_points .= ' ELSE 0 END';
}
break;
case '5':
// difference to result
{
if (is_numeric($row['result']))
{
$bet_points = 'IF(' . $row['extra_points'] . '- ABS(bet - ' . $row['result'] . ') > 0, ' . $row['extra_points'] . '- ABS(bet - ' . $row['result'] . ')' . ', 0)';
$extra_points_error = false;
}
else
{
$extra_points_error = true;
}
}
break;
default:
// Case 1 and 3 and other
// correct result
{
$result_value = (is_numeric($row['result'])) ? $row['result'] : "'" . $row['result'] . "'";
$bet_points = 'CASE bet WHEN ' . $result_value . ' THEN ' . $row['extra_points'] . ' ELSE 0 END';
$extra_points_error = false;
}
break;
}
if (!$extra_points_error)
{
$sql = 'UPDATE ' . FOOTB_EXTRA_BETS . '
SET bet_points = ' . $bet_points . "
WHERE season = $season
AND league = $league
AND extra_no = $extra_no";
$db->sql_query($sql);
}
}
}
$db->sql_freeresult($result);
}
/**
* Save matchday-ranking in database (table FOOTB_RANKS).
*/
function save_ranking_matchday($season, $league, $matchday, $cash = false)
{
global $db, $config, $lang, $league_info;
$sql = 'SELECT * FROM ' . FOOTB_MATCHDAYS . " WHERE season = $season AND league = $league AND matchday = $matchday";
$result = $db->sql_query($sql);
if ( $row = $db->sql_fetchrow($result))
{
$matchday_status = $row['status'];
if ($row['delivery_date_2'] != '' OR ($league_info['bet_in_time'] AND $matchday_status <> 3))
// We set status to 2 to skip deleting the ranking
$matchday_status = 2;
$db->sql_freeresult($result);
if ($matchday_status < 2)
{
$sql = 'SELECT * FROM ' . FOOTB_MATCHES . " WHERE season = $season AND league = $league AND matchday = $matchday AND status IN (2,3)";
$result = $db->sql_query($sql);
if ( $row = $db->sql_fetchrow($result))
{
$matchday_status = 2;
}
$db->sql_freeresult($result);
}
if ($matchday_status == 0 OR $matchday_status == 1)
{
// No matches played, so we can delete the ranking
$sql = 'DELETE FROM ' . FOOTB_RANKS . " WHERE season = $season AND league = $league AND matchday = $matchday";
$db->sql_query($sql);
}
else
{
$matchday_wins = array();
$matchday_wins = matchday_wins($season, $league);
$sql = "
SELECT
1 AS rank,
0.00 AS win,
u.user_id,
u.username AS username,
SUM(IF(m.match_no > 0, 1, 0)) AS matches,
SUM(IF(b.goals_home = '' OR b.goals_guest = '', 1, 0)) AS nobet,
SUM(IF(b.goals_home <> '' AND b.goals_guest <> '',
IF((b.goals_home = m.goals_home) AND (b.goals_guest = m.goals_guest)
, 1
, 0
)
, 0
)
) AS direct_hit,
SUM(IF(b.goals_home <> '' AND b.goals_guest <> '',
IF((b.goals_home + 0 < b.goals_guest) <> (m.goals_home + 0 < m.goals_guest)
OR (b.goals_home = b.goals_guest) <> (m.goals_home = m.goals_guest)
OR (b.goals_home + 0 > b.goals_guest) <> (m.goals_home + 0 > m.goals_guest)
, 0
, 1
)
, 0
)
) AS tendency,
" . select_points('m',true) . '
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)
INNER JOIN ' . USERS_TABLE . " AS u ON (b.user_id = u.user_id)
WHERE m.season = $season AND m.league = $league AND m.matchday = $matchday AND m.status IN (2,3)
GROUP BY u.user_id
ORDER BY points DESC, nobet ASC, u.username ASC
";
$result = $db->sql_query($sql);
$ranking_ary = array();
while( $row = $db->sql_fetchrow($result))
{
$ranking_ary[$row['user_id']] = $row;
}
$db->sql_freeresult($result);
if ( sizeof($ranking_ary) > 0 )
{
$sql = '
SELECT
eb.user_id,
SUM(eb.bet_points) AS points
FROM ' . FOOTB_EXTRA . ' AS e
INNER JOIN ' . FOOTB_EXTRA_BETS . " AS eb ON (eb.season = e.season and eb.league = e.league and eb.extra_no = e.extra_no)
WHERE e.season = $season
AND e.league = $league
AND e.matchday = $matchday
AND e.matchday_eval = $matchday
AND e.extra_status > 1
GROUP BY eb.user_id";
$result = $db->sql_query($sql);
while( $row = $db->sql_fetchrow($result))
{
$ranking_ary[$row['user_id']]['points'] += $row['points'];
}
$db->sql_freeresult($result);
// sort the ranking by points
usort($ranking_ary, '_sort_points');
}
$last_points = -1;
$last_rank = 1;
$equal_rank = array();
$money = array();
$i = 0;
foreach( $ranking_ary AS $curr_user => $curr_rank)
{
if ($curr_rank['nobet'] == $curr_rank['matches'] and $league_info['points_last'] == 1)
{
if ($last_points <> -1)
{
$ranking_ary[$curr_user]['points'] = $last_points;
}
else
{
$ranking_ary[$curr_user]['points'] = 0;
$last_points = 0;
$equal_rank[$last_rank] = 0;
}
}
if ( $ranking_ary[$curr_user]['points'] != $last_points)
{
$ranking_ary[$curr_user]['rank'] = $i + 1;
$last_rank = $i + 1;
$equal_rank[$last_rank] = 1;
if ($last_rank < sizeof($matchday_wins))
{
$money[$last_rank] = $matchday_wins[$last_rank];
}
else
{
$money[$last_rank] = 0;
}
$last_points = $ranking_ary[$curr_user]['points'];
}
else
{
$ranking_ary[$curr_user]['rank'] = $last_rank;
$equal_rank[$last_rank] += 1;
if ($i + 1 < sizeof($matchday_wins))
{
$money[$last_rank] += $matchday_wins[$i + 1];
}
}
$i++;
}
$league2 = $league + 50;
foreach( $ranking_ary AS $curr_user => $curr_rank)
{
if ( round($money[$curr_rank['rank']] / $equal_rank[$curr_rank['rank']], 2) <> 0 )
{
$win = round($money[$curr_rank['rank']] / $equal_rank[$curr_rank['rank']], 2);
$ranking_ary[$curr_user]['win'] = $win;
}
else
{
$win = 0;
$ranking_ary[$curr_user]['win'] = 0;
}
$sql = 'REPLACE INTO ' . FOOTB_RANKS . "
VALUES ($season
, $league
, $matchday
, " . $curr_rank['user_id'] . "
, $matchday_status
, " . $curr_rank['rank'] . "
, " . $curr_rank['points'] . "
, $win
, 0
, " . $curr_rank['tendency'] . "
, " . $curr_rank['direct_hit'] . "
,0
,0
)";
$db->sql_query($sql);
if ($league < 51)
{
$curr_rank_points = $curr_rank['points'];
$curr_rank_user = $curr_rank['user_id'] + 2000;
$sql = 'UPDATE ' . FOOTB_MATCHES . "
SET goals_home = $curr_rank_points,
status = $matchday_status
WHERE season = $season AND league = $league2 AND matchday = $matchday AND team_id_home = $curr_rank_user";
$db->sql_query($sql);
$sql = 'UPDATE ' . FOOTB_MATCHES . "
SET goals_guest = $curr_rank_points,
status = $matchday_status
WHERE season = $season AND league = $league2 AND matchday = $matchday AND team_id_guest = $curr_rank_user";
$db->sql_query($sql);
$sql = 'UPDATE ' . FOOTB_MATCHDAYS . "
SET status = $matchday_status
WHERE season = $season AND league = $league2 AND matchday = $matchday";
$db->sql_query($sql);
}
}
if ( sizeof($ranking_ary) == 0 )
{
$sql = 'DELETE FROM ' . FOOTB_RANKS . "
WHERE season = $season
AND league = $league
AND matchday = $matchday";
$db->sql_query($sql);
if ($league < 51)
{
$sql = 'UPDATE ' . FOOTB_MATCHES . "
SET goals_home = '',
goals_guest = '',
status = $matchday_status
WHERE season = $season AND league = $league2 AND matchday = $matchday;";
$db->sql_query($sql);
}
}
else
{
// Calculate total ranking
$rank_total_ary = array();
$sql = 'SELECT
user_id ,
SUM(points) AS points,
SUM(win) AS wins_total
FROM ' . FOOTB_RANKS . "
WHERE season = $season
AND league = $league
AND matchday <= $matchday
GROUP by user_id
ORDER BY points DESC, user_id ASC";
$result = $db->sql_query($sql);
while( $row = $db->sql_fetchrow($result))
{
$rank_total_ary[$row['user_id']] = $row;
}
$db->sql_freeresult($result);
// add extra tipp points total ranking
$league_info = league_info($season, $league);
if ( sizeof($rank_total_ary) > 0 )
{
if ( $matchday == $league_info['matchdays'])
{
$win_user_most_hits = win_user_most_hits($season, $league, $matchday);
$win_user_most_hits_away = win_user_most_hits_away($season, $league, $matchday);
$season_wins = season_wins($season, $league, $matchday);
}
$sql = 'SELECT
eb.user_id,
SUM(eb.bet_points) AS points
FROM ' . FOOTB_EXTRA . ' AS e
INNER JOIN ' . FOOTB_EXTRA_BETS . " AS eb ON (eb.season = e.season and eb.league = e.league and eb.extra_no = e.extra_no)
WHERE e.season = $season
AND e.league = $league
AND e.matchday <> e.matchday_eval
AND e.matchday_eval <= $matchday
AND e.extra_status > 1
GROUP BY eb.user_id";
$result = $db->sql_query($sql);
while( $row = $db->sql_fetchrow($result))
{
$rank_total_ary[$row['user_id']]['points'] += $row['points'];
}
$db->sql_freeresult($result);
// sort the ranking by points
usort($rank_total_ary, '_sort_points');
}
$index = 0;
$last_rank = 0;
$last_points = -1;
foreach( $rank_total_ary AS $curr_user => $curr_rank)
{
$index++;
if ( $curr_rank['points'] == $last_points)
{
$rank_total = $last_rank;
}
else
{
$rank_total = $index;
$last_points = $curr_rank['points'];
$last_rank = $rank_total;
}
if ($matchday == $league_info['matchdays'])
{
// if someone didn't bet the hole Season
if (!isset($win_user_most_hits[$curr_rank['user_id']]['win']))
{
$win_user_most_hits[$curr_rank['user_id']]['win'] = 0;
}
if (!isset($win_user_most_hits_away[$curr_rank['user_id']]['win']))
{
$win_user_most_hits_away[$curr_rank['user_id']]['win'] = 0;
}
if (!isset($season_wins[$curr_rank['user_id']]['win']))
{
$season_wins[$curr_rank['user_id']]['win'] = 0;
}
$rank_total_ary[$curr_user]['wins_total'] = sprintf('%01.2f',$curr_rank['wins_total'] + $win_user_most_hits[$curr_rank['user_id']]['win'] + $win_user_most_hits_away[$curr_rank['user_id']]['win'] + $season_wins[$curr_rank['user_id']]['win']);
}
else
{
$rank_total_ary[$curr_user]['wins_total'] = sprintf('%01.2f',$curr_rank['wins_total']);
}
$curr_userid = $curr_rank['user_id'];
$points_total = $curr_rank['points'];
$win_total = $rank_total_ary[$curr_user]['wins_total'];
$sql = 'UPDATE ' . FOOTB_RANKS . "
SET rank_total = $rank_total,
points_total = $points_total,
win_total = $win_total
WHERE season = $season AND league = $league AND matchday = $matchday AND user_id = $curr_userid";
$db->sql_query($sql);
}
}
}
if ($config['football_bank'])
{
if ($matchday_status < 3)
{
//Delete points
if ($matchday == $league_info['matchdays'])
{
// On last matchday
rollback_points(POINTS_MOST_HITS, $season, $league, $matchday, $cash && ($config['football_ult_points'] == 1));
rollback_points(POINTS_MOST_HITS_AWAY, $season, $league, $matchday, $cash && ($config['football_ult_points'] == 1));
rollback_points(POINTS_SEASON, $season, $league, $matchday, $cash && ($config['football_ult_points'] == 1));
}
rollback_points(POINTS_MATCHDAY, $season, $league, $matchday, $cash && ($config['football_ult_points'] > 0));
}
else
{
//Set points on played matchday
if ($matchday == $league_info['matchdays'] AND $config['football_bank'])
{
// On last matchday
set_points_most_hits($season, $league, $matchday, $win_user_most_hits, $cash && ($config['football_ult_points'] == 1));
set_points_most_hits_away($season, $league, $matchday, $win_user_most_hits_away, $cash && ($config['football_ult_points'] == 1));
set_points_season($season, $league, $matchday, $season_wins, $cash && ($config['football_ult_points'] == 1));
}
set_points_matchday($season, $league, $matchday, $ranking_ary, $cash && ($config['football_ult_points'] > 0));
}
}
$sql = 'SELECT matchday FROM ' . FOOTB_RANKS . "
WHERE season = $season
AND league = $league
AND matchday > $matchday";
$result = $db->sql_query($sql);
if ( $next_matchday = (int) $db->sql_fetchfield('matchday'))
{
save_ranking_matchday($season, $league, $next_matchday, $cash);
}
$db->sql_freeresult($result);
}
}
function set_points_most_hits($season, $league, $matchday, $win_user_most_hits, $cash)
{
rollback_points(POINTS_MOST_HITS, $season, $league, $matchday, $cash);
set_footb_points(POINTS_MOST_HITS, $season, $league, $matchday, $win_user_most_hits, $cash);
}
function set_points_most_hits_away($season, $league, $matchday, $win_user_most_hits_away, $cash)
{
rollback_points(POINTS_MOST_HITS_AWAY, $season, $league, $matchday, $cash);
set_footb_points(POINTS_MOST_HITS_AWAY, $season, $league, $matchday, $win_user_most_hits_away, $cash);
}
function set_points_season($season, $league, $matchday, $season_wins, $cash)
{
rollback_points(POINTS_SEASON, $season, $league, $matchday, $cash);
set_footb_points(POINTS_SEASON, $season, $league, $matchday, $season_wins, $cash);
}
function set_points_matchday($season, $league, $matchday, $ranking_ary, $cash)
{
rollback_points(POINTS_MATCHDAY, $season, $league, $matchday, $cash);
set_footb_points(POINTS_MATCHDAY, $season, $league, $matchday, $ranking_ary, $cash);
}
function rollback_points($points_type, $season, $league, $matchday, $cash)
{
global $db, $functions_points;
if ($cash)
{
$where_matchday = ($matchday) ? " AND matchday = $matchday" : '';
$sql = 'SELECT *
FROM ' . FOOTB_POINTS . " AS p
WHERE season = $season
AND league = $league
$where_matchday
AND points_type = $points_type
AND cash = 1";
$result = $db->sql_query($sql);
while( $row = $db->sql_fetchrow($result))
{
$functions_points->substract_points($row['user_id'], $row['points']);
}
$db->sql_freeresult($result);
}
$sql = 'DELETE FROM ' . FOOTB_POINTS . " WHERE season = $season AND league = $league AND matchday = $matchday AND points_type = $points_type";
$db->sql_query($sql);
}
function set_footb_points($points_type, $season, $league, $matchday, $wins, $cash)
{
global $db, $user, $config, $functions_points;
switch($points_type)
{
case 1:
$points_comment = sprintf($user->lang['BET_POINTS']);
break;
case 2:
$points_comment = sprintf($user->lang['DEPOSIT']);
break;
case 3:
$points_comment = '';
break;
case 4:
$points_comment = '';
break;
case 5:
$points_comment = sprintf($user->lang['WIN_HITS']);
break;
case 6:
$points_comment = sprintf($user->lang['WIN_HITS02']);
break;
case 7:
$points_comment = sprintf($user->lang['PAYOUT_WIN']);
break;
}
foreach( $wins AS $curr_user => $curr_ary)
{
if ($config['football_ult_points'] == 2 AND $points_type == 3)
{
// points mode
if ($curr_ary['points'] > 0 AND $curr_ary['points'] <> NULL)
{
$userid = (!isset($curr_ary['user_id'])) ? $curr_user : $curr_ary['user_id'];
$points_comment = sprintf($user->lang['POINTS']);
$factor_points = round($config['football_ult_points_factor'] * $curr_ary['points'],2);
if ($cash)
{
$functions_points->add_points($userid, $factor_points);
}
$sql_ary = array(
'season' => (int) $season,
'league' => (int) $league,
'matchday' => (int) $matchday,
'points_type' => (int) $points_type,
'user_id' => (int) $userid,
'points' => $factor_points,
'points_comment'=> $points_comment,
'cash' => $cash,
);
$sql = 'INSERT INTO ' . FOOTB_POINTS . ' ' . $db->sql_build_array('INSERT', $sql_ary);
$db->sql_query($sql);
}
}
if ($config['football_ult_points'] <= 1 OR ($config['football_ult_points'] == 2 AND $points_type == 1))
{
if ($curr_ary['win'] > 0)
{
switch($points_type)
{
case 3:
$points_comment = sprintf($user->lang['WIN_MATCHDAY']) . ' ' . $curr_ary['rank'] . '.' . sprintf($user->lang['PLACE']);
break;
case 4:
$points_comment = sprintf($user->lang['WIN_SEASON']) . ' ' . $curr_ary['rank'] . '.' . sprintf($user->lang['PLACE']);
break;
}
$userid = (!isset($curr_ary['user_id'])) ? $curr_user : $curr_ary['user_id'];
if ($cash)
{
if ($points_type == 1 OR $points_type == 7)
{
// substract bets and payouts
$functions_points->substract_points($userid, round($curr_ary['win'],2));
}
else
{
$functions_points->add_points($userid, round($curr_ary['win'],2));
}
}
$sql_ary = array(
'season' => (int) $season,
'league' => (int) $league,
'matchday' => (int) $matchday,
'points_type' => (int) $points_type,
'user_id' => (int) $userid,
'points' => round($curr_ary['win'],2),
'points_comment'=> $points_comment,
'cash' => $cash,
);
$sql = 'INSERT INTO ' . FOOTB_POINTS . ' ' . $db->sql_build_array('INSERT', $sql_ary);
$db->sql_query($sql);
}
}
}
}
function _sort_points($value_a, $value_b)
{
if ($value_a['points'] > $value_b['points'])
{
return -1;
}
else
{
if ($value_a['points'] == $value_b['points'])
{
if (isset($value_a['nobet']))
{
if ($value_a['nobet'] < $value_b['nobet'])
{
return -1;
}
else
{
if ($value_a['nobet'] == $value_b['nobet'])
{
return 0;
}
else
{
return 1;
}
}
}
else
{
return 0;
}
}
else
{
return 1;
}
}
}
/**
* Return season-array
*/
function season_info($season)
{
global $db;
$sql = 'SELECT * FROM ' . FOOTB_SEASONS . " WHERE season = $season";
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result))
{
return $row;
}
else
{
return array();
}
$db->sql_freeresult($result);
}
/**
* Return league-array
*/
function league_info($season, $league)
{
global $db;
$sql = 'SELECT * FROM ' . FOOTB_LEAGUES . "
WHERE season = $season AND league = $league
";
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result))
{
return $row;
}
else
{
return array();
}
$db->sql_freeresult($result);
}
/**
* Return team-array
*/
function team_info($season, $league, $team_id)
{
global $db;
$sql = 'SELECT * FROM ' . FOOTB_TEAMS . "
WHERE season = $season AND league = $league AND team_id = $team_id
";
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result))
{
return $row;
}
else
{
return array();
}
$db->sql_freeresult($result);
}
/**
* Is user member of this league
*/
function user_is_member($userid, $season, $league)
{
global $db;
$sql = 'SELECT COUNT(*) AS counter
FROM ' . FOOTB_BETS . "
WHERE season = $season AND league = $league AND user_id = $userid";
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
if ($row['counter'] > 0)
{
return true;
}
else
{
return false;
}
$db->sql_freeresult($result);
}
/**
* Is user allowed to bet this matchday
*/
function user_is_allowed_to_bet($userid, $season, $league, $matchday)
{
global $db;
$sql = 'SELECT COUNT(*) AS counter
FROM ' . FOOTB_MATCHES . "
WHERE season = $season
AND league = $league + 50
AND matchday = $matchday
AND (team_id_home = $userid + 2000 OR team_id_guest = $userid + 2000)";
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
if ($row['counter'] > 0)
{
return true;
}
else
{
return false;
}
$db->sql_freeresult($result);
}
/**
* Count existing matches on matchday or league
*/
function count_existing_matches($season, $league, $matchday)
{
global $db;
$where_matchday = ($matchday) ? " AND matchday = $matchday" : '';
$sql = 'SELECT COUNT(*) AS counter
FROM ' . FOOTB_MATCHES . "
WHERE season = $season AND league = $league $where_matchday";
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result))
{
return $row['counter'];
$db->sql_freeresult($result);
}
else
{
return 0;
}
}
/**
* Determinate if join to league is allowed
*/
function join_allowed($season, $league)
{
global $db;
$league_info = league_info($season, $league);
if (! $league_info['join_by_user'])
{
return false;
}
else
{
if ($league_info['join_in_season'])
{
return true;
}
else
{
$sql = 'SELECT * FROM ' . FOOTB_MATCHDAYS . "
WHERE season = $season AND league = $league AND matchday = 1 AND status = 0
";
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result))
{
$db->sql_freeresult($result);
return true;
}
else
{
return false;
}
}
}
}
/**
* Calculate status or delivery of matchday
*/
function delivery($season, $league, $matchday)
{
global $db, $user;
$delivery = '';
$lang_dates = $user->lang['datetime'];
$sql = "SELECT *,
CONCAT(
CASE DATE_FORMAT(delivery_date,'%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(delivery_date,' %d.%m.%Y %H:%i')
) AS deliverytime
FROM " . FOOTB_MATCHDAYS . "
WHERE season = $season AND league = $league AND matchday = $matchday";
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result))
{
switch($row['status'])
{
case 0:
$delivery = '<strong style=\'color:green\'>' . sprintf($user->lang['STATUS_TEXT0']) . $row['deliverytime'] . '</strong>';
break;
case 1:
$delivery = '<strong>' . sprintf($user->lang['STATUS_TEXT1']) . '</strong>';
break;
case 2:
$delivery = '<strong>' . sprintf($user->lang['STATUS_TEXT2']) . '</strong>';
break;
case 3:
$delivery = '<strong>' . sprintf($user->lang['STATUS_TEXT3']) . '</strong>';
break;
}
$db->sql_freeresult($result);
}
return $delivery;
}
/**
* Calculate next delivery und return delivery string
*/
function next_delivery($season, $league)
{
global $db, $user;
$next_delivery = '';
$lang_dates = $user->lang['datetime'];
$sql = "SELECT
CONCAT(
CASE DATE_FORMAT(delivery_date,'%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(delivery_date,' %d.%m.%Y %H:%i')
) AS deliverytime,
matchday
FROM " . FOOTB_MATCHDAYS . "
WHERE season = $season AND league = $league AND status = 0
ORDER BY matchday ASC
";
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result))
{
$next_delivery = "<center><strong style='color:green'>". sprintf($user->lang['NEXT_DELIVERY_UNTIL']) . ' ' . $row['deliverytime'] . "</strong></center>";
$db->sql_freeresult($result);
}
return $next_delivery;
}
/**
* Calculate first delivery of matchday for bet in time
*/
function first_delivery($season, $league, $matchday)
{
global $db, $user;
$sql = "SELECT MIN(match_datetime) AS min_match_datetime
FROM " . FOOTB_MATCHES . "
WHERE season = $season AND league = $league AND matchday = $matchday AND status = 0
ORDER BY min_match_datetime ASC
";
$result = $db->sql_query($sql);
$first_delivery = '';
if ($row = $db->sql_fetchrow($result))
{
$first_delivery = $row['min_match_datetime'];
$db->sql_freeresult($result);
}
return $first_delivery;
}
/**
* Set matchday delivery to first open match
*/
function set_bet_in_time_delivery($season, $league)
{
global $db, $user, $config;
$sql = "SELECT *
FROM " . FOOTB_MATCHDAYS . "
WHERE season = $season AND league = $league AND status < 3
";
$result = $db->sql_query($sql);
$first_delivery = '';
while ($row = $db->sql_fetchrow($result))
{
$new_status = $row['status'];
// match-status maybe changed
$sql_ary = array(
'status' => 0,
'goals_home' => '',
'goals_guest' => '',
'goals_overtime_home' => '',
'goals_overtime_guest' => '',
);
$local_board_time = time() + ($config['football_time_shift'] * 3600);
$sql = 'UPDATE ' . FOOTB_MATCHES . '
SET ' . $db->sql_build_array('UPDATE', $sql_ary) . "
WHERE season = $season AND league = $league AND matchday =" . $row['matchday'] . " AND match_datetime > FROM_UNIXTIME('$local_board_time')";
$db->sql_query($sql);
if ($db->sql_affectedrows())
{
// an open match exist, so set status 0
$new_status = 0;
}
$first_delivery = first_delivery($season, $league, $row['matchday']);
if ( $first_delivery <> '')
{
// Matchday has open matches so set matchday status = 0 and first delivery
$sql_ary = array(
'status' => $new_status,
'delivery_date' => $first_delivery,
'delivery_date_2' => '',
'delivery_date_3' => '',
);
$sql = 'UPDATE ' . FOOTB_MATCHDAYS . '
SET ' . $db->sql_build_array('UPDATE', $sql_ary) . "
WHERE season = $season AND league = $league AND matchday =" . $row['matchday'];
$db->sql_query($sql);
}
}
$db->sql_freeresult($result);
}
/**
* return current season. The minimal seasons value with a open matchday (status = 0).
*/
function curr_season()
{
global $db, $lang, $user;
$user_spec = '';
if ($user->data['user_type']==0 OR $user->data['user_type']==3)
{
$curr_user = $user->data['user_id'];
$user_spec = 'AND b.user_id = ' . $curr_user;
}
$sql = 'SELECT DISTINCT s.season
FROM ' . FOOTB_SEASONS . ' AS s
INNER JOIN ' . FOOTB_LEAGUES . ' AS l ON (l.season = s.season)
INNER JOIN ' . FOOTB_MATCHDAYS . ' AS m ON (m.season = s.season AND m.league = l.league)
INNER JOIN ' . FOOTB_BETS . ' AS b ON (b.season = m.season AND b.league = m.league ' . $user_spec . ')
WHERE m.status IN (0,1,2)
ORDER BY s.season ASC';
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result))
{
$curr_season = $row['season'];
$db->sql_freeresult($result);
}
else
{
$sql = 'SELECT DISTINCT s.season FROM ' . FOOTB_SEASONS . ' AS s
INNER JOIN ' . FOOTB_LEAGUES . ' AS l ON (l.season = s.season)
INNER JOIN ' . FOOTB_MATCHDAYS . ' AS m ON (m.season = s.season AND m.league = l.league)
WHERE 1
ORDER BY s.season DESC';
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result))
{
$curr_season = $row['season'];
}
else
{
$sql = 'SELECT * FROM ' . FOOTB_SEASONS;
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result))
{
$curr_season = $row['season'];
}
else
{
$curr_season = 0;
}
}
$db->sql_freeresult($result);
}
return $curr_season;
}
/**
* return first (minmal) league of season
*/
function first_league($season, $complete = true)
{
global $db, $lang;
$join_matchday = '';
if ($complete)
{
$join_matchday = 'INNER JOIN ' . FOOTB_MATCHDAYS . ' AS m ON (m.season = l.season AND m.league = l.league) ';
}
$sql = 'SELECT l.*
FROM ' . FOOTB_LEAGUES . ' AS l ' .
$join_matchday . "
WHERE l.season = $season
ORDER BY l.league ASC";
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result))
{
$first_league = $row['league'];
}
else
{
$first_league = 0;
}
$db->sql_freeresult($result);
return $first_league;
}
/**
* return current (wait for results) league of season
*/
function current_league($season)
{
global $db, $lang, $user;
$user_spec = '';
if ($user->data['user_type']==0 OR $user->data['user_type']==3)
{
$curr_user = $user->data['user_id'];
$user_spec = 'AND b.user_id = ' . $curr_user;
}
$sql = 'SELECT DISTINCT m.league, m.match_datetime
FROM ' . FOOTB_MATCHES . ' AS m
INNER JOIN ' . FOOTB_BETS . ' AS b ON (b.season = m.season AND b.league = m.league ' . $user_spec . ")
WHERE m.season = $season
AND m.league < 51
AND m.status in (0,1,2)
ORDER BY m.match_datetime ASC, m.league ASC
LIMIT 1";
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result))
{
$current_league = $row['league'];
}
else
{
$current_league = first_league($season);
}
$db->sql_freeresult($result);
return $current_league;
}
/**
* return next free team-id
*/
function nextfree_teamid()
{
global $db, $lang;
$sql = 'SELECT Max(team_id) AS lastid FROM ' . FOOTB_TEAMS;
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result))
{
return ($row['lastid'] + 1);
}
else
{
return 0;
}
$db->sql_freeresult($result);
}
/**
* return current (in order to play) matchday of league
*/
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
";
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result))
{
$curr_matchday = $row['matchday'];
$db->sql_freeresult($result);
}
else
{
$sql = 'SELECT * FROM ' . FOOTB_MATCHDAYS . "
WHERE season = $season AND league = $league AND status = 3
ORDER BY matchday DESC
";
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result))
{
$curr_matchday = $row['matchday'];
}
else
{
$curr_matchday = 0;
}
$db->sql_freeresult($result);
}
return $curr_matchday;
}
/**
* Initialize user bets. Adds s user to a league.
*/
function join_league($season, $league, $user_id)
{
global $db, $lang;
$league_info = league_info($season, $league);
$matchdays = $league_info['matchdays'];
if ($league_info['league_type'] == LEAGUE_CHAMP)
{
$matches_on_matchdays = $league_info['matches_on_matchday'];
}
else
{
$matches_on_matchdays = 0;
}
$count_updates = 0;
$matches = $matches_on_matchdays;
$match_id = 1;
for($m_day = 1; $m_day <= $matchdays; $m_day++)
{
if ($matches_on_matchdays == 0)
{
$sql = 'SELECT matches from ' . FOOTB_MATCHDAYS . " WHERE season = $season AND league = $league AND matchday = $m_day";
$result = $db->sql_query($sql);
if( $row = $db->sql_fetchrow($result))
{
$matches = $row['matches'];
$db->sql_freeresult($result);
}
else
{
// Matchday doesnt exist
$matches = 0;
}
}
for($i = 1; $i<= $matches; $i++)
{
$sqlup = 'REPLACE INTO ' . FOOTB_BETS . " VALUES($season, $league, $match_id, $user_id, '', '', 0)";
$resultup = $db->sql_query($sqlup);
$match_id++;
$count_updates++;
}
}
return $count_updates;
}
// Close matchday
/**
* Close all open matches.
*/
function close_open_matchdays()
{
global $db, $lang, $config;
$local_board_time = time() + ($config['football_time_shift'] * 3600);
$sql = 'SELECT * FROM ' . FOOTB_MATCHDAYS . " WHERE status = 0 AND delivery_date < FROM_UNIXTIME('$local_board_time')";
$result = $db->sql_query($sql);
$toclose = $db->sql_fetchrowset($result);
$db->sql_freeresult($result);
foreach ($toclose as $close)
{
// Matchday to close
$season = $close['season'];
$league = $close['league'];
$matchday = $close['matchday'];
$league_info = league_info($season, $league);
if ($league_info['bet_in_time'] == 1)
{
$sql_ary = array(
'status' => 1,
);
$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('$local_board_time')";
$db->sql_query($sql);
// Check remaining open matches
$first_delivery = first_delivery($season, $league, $close['matchday']);
if ($first_delivery <> '')
{
// Matchday has open matches so set matchday status = 0 and first delivery
$sql_ary = array(
'status' => 0,
'delivery_date' => first_delivery($season, $league, $close['matchday']),
);
$sql = 'UPDATE ' . FOOTB_MATCHDAYS . '
SET ' . $db->sql_build_array('UPDATE', $sql_ary) . "
WHERE season = $season AND league = $league AND matchday = $matchday";
$db->sql_query($sql);
}
else
{
// Matchday has no open match so close the matchday with setting status = 1
$sql_ary = array(
'status' => 1,
);
$sql = 'UPDATE ' . FOOTB_MATCHDAYS . '
SET ' . $db->sql_build_array('UPDATE', $sql_ary) . "
WHERE season = $season AND league = $league AND matchday = $matchday";
$db->sql_query($sql);
}
}
else
{
if ($close['delivery_date_2'] != '')
{
// More open matches exists, so shift delivery and status lower Null
$sql_ary = array(
'delivery_date' => $close['delivery_date_2'],
'delivery_date_2' => $close['delivery_date_3'],
'delivery_date_3' => '',
);
$sql = 'UPDATE ' . FOOTB_MATCHDAYS . '
SET ' . $db->sql_build_array('UPDATE', $sql_ary) . "
WHERE season = $season AND league = $league AND matchday = $matchday";
$db->sql_query($sql);
$sql = 'UPDATE ' . FOOTB_MATCHES . "
SET status = status + 1
WHERE season = $season AND league = $league AND matchday = $matchday AND status <= 0";
$db->sql_query($sql);
}
else
{
// Close all matches of the matchday and matchday
$sql = 'UPDATE ' . FOOTB_MATCHDAYS . "
SET status = 1
WHERE season = $season AND league = $league AND matchday = $matchday";
$db->sql_query($sql);
$sql = 'UPDATE ' . FOOTB_MATCHES . "
SET status = status + 1
WHERE season = $season AND league = $league AND matchday = $matchday AND status <= 0";
$db->sql_query($sql);
}
}
// close extra bets
$sql = 'UPDATE ' . FOOTB_EXTRA . "
SET extra_status = extra_status + 1
WHERE season = $season AND league = $league AND matchday = $matchday AND extra_status <= 0";
$db->sql_query($sql);
}
}
/**
* return matchday wins in array.
*/
function matchday_wins($season, $league)
{
global $db, $lang;
$matchday_wins = array();
$sql = 'SELECT * FROM ' . FOOTB_LEAGUES . " WHERE season = $season AND league = $league";
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result))
{
$matchday_wins = explode(';',"0;" . $row['win_matchday']);
$db->sql_freeresult($result);
}
return $matchday_wins;
}
/**
* return season wins in array.
*/
function season_wins($season, $league, $matchday)
{
global $db, $lang;
$season_wins = array();
$season_user_wins = array();
$league_info = league_info($season, $league);
if (sizeof($league_info))
{
$season_wins = explode(';',"0;" . $league_info['win_season']);
$maxmatchday = $league_info['matchdays'];
}
else
{
$season_user_wins[0]['win'] = 0;
return $season_user_wins;
}
$sql = 'SELECT
1 AS rank,
user_id,
SUM(points) AS points
FROM ' . FOOTB_RANKS . "
WHERE season = $season
AND league = $league
AND matchday <= $matchday
AND status IN (2,3)
GROUP by user_id
ORDER BY points DESC, user_id ASC
";
$result = $db->sql_query($sql);
$ranking_ary = array();
while( $row = $db->sql_fetchrow($result))
{
$ranking_ary[$row['user_id']] = $row;
}
$db->sql_freeresult($result);
if ( sizeof($ranking_ary) > 0 )
{
$sql = 'SELECT
eb.user_id,
SUM(eb.bet_points) AS points
FROM ' . FOOTB_EXTRA . ' AS e
INNER JOIN ' . FOOTB_EXTRA_BETS . " AS eb ON (eb.season = e.season and eb.league = e.league and eb.extra_no = e.extra_no)
WHERE e.season = $season
AND e.league = $league
AND e.matchday <> e.matchday_eval
AND e.matchday_eval <= $matchday
AND e.extra_status > 1
GROUP BY eb.user_id";
$result = $db->sql_query($sql);
while( $row = $db->sql_fetchrow($result))
{
$ranking_ary[$row['user_id']]['points'] += $row['points'];
}
$db->sql_freeresult($result);
// sort the ranking by points
usort($ranking_ary, '_sort_points');
$last_points = -1;
$last_rank = 1;
$equal_rank = array();
$money = array();
$i = 0;
foreach( $ranking_ary AS $curr_user => $curr_rank)
{
if ( $curr_rank['points'] != $last_points)
{
$ranking_ary[$curr_user]['rank'] = $i + 1;
$last_rank = $i + 1;
$equal_rank[$last_rank] = 1;
$last_points = $curr_rank['points'];
if ($last_rank < sizeof($season_wins))
{
$money[$last_rank] = $season_wins[$last_rank];
}
else
{
$money[$last_rank] = 0;
}
}
else
{
$ranking_ary[$curr_user]['rank'] = $last_rank;
$equal_rank[$last_rank] += 1;
if ($i + 1 < sizeof($season_wins))
{
$money[$last_rank] += $season_wins[$i + 1];
}
}
$i++;
}
foreach( $ranking_ary AS $curr_rank)
{
if ( round($money[$curr_rank['rank']] / $equal_rank[$curr_rank['rank']], 2) <> 0 )
{
$season_user_wins[$curr_rank['user_id']]['win'] = round($money[$curr_rank['rank']] / $equal_rank[$curr_rank['rank']], 2);
}
else
{
$season_user_wins[$curr_rank['user_id']]['win'] = 0;
}
$season_user_wins[$curr_rank['user_id']]['rank'] = $curr_rank['rank'];
}
return $season_user_wins;
}
else
{
$season_user_wins[0]['win'] = 0;
return $season_user_wins;
}
}
/**
* return win most hits in array.
*/
function win_user_most_hits($season, $league, $matchday)
{
global $db, $lang;
$sql = 'SELECT * FROM ' . FOOTB_LEAGUES . " WHERE season = $season AND league = $league";
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result))
{
$win_most_hits = $row['win_result'];
$last_matchday = $row['matchdays'];
$db->sql_freeresult($result);
}
$sql = 'SELECT
b.user_id AS userid,
COUNT(*) AS hits
FROM ' . FOOTB_MATCHES . ' AS m
LEFT JOIN ' . FOOTB_BETS . " AS b ON (b.season = m.season AND b.league = m.league AND b.match_no = m.match_no)
WHERE m.season = $season AND m.league = $league AND m.matchday <= $matchday AND m.goals_home = b.goals_home AND
m.goals_guest = b.goals_guest AND m.status IN (2,3)
GROUP BY b.user_id
ORDER BY hits DESC
";
$result = $db->sql_query($sql);
$last_count_hits = -1;
$count_user = 0;
$userid_ary = array();
$hits = array();
$rank = array();
$equal_rank = array();
$win_pos_most_hits = array();
while( $row = $db->sql_fetchrow($result))
{
$userid_ary[$count_user] = $row['userid'];
$hits[$count_user] = $row['hits'];
if ($count_user == 0)
{
$rank[$count_user] = 1;
$equal_rank[$rank[$count_user]] = 1;
$win_pos_most_hits[$rank[$count_user]] = $win_most_hits;
}
else
{
if ( $row['hits'] != $last_count_hits)
{
$rank[$count_user] = $count_user + 1;
$equal_rank[$rank[$count_user]] = 1;
$win_pos_most_hits[$rank[$count_user]] = 0;
}
else
{
$rank[$count_user] = $rank[$count_user-1];
$equal_rank[$rank[$count_user]] += 1;
}
}
$last_count_hits = $row['hits'];
$count_user++;
}
$db->sql_freeresult($result);
$win_user_most_hits = array();
for($i = 0; $i < $count_user; $i++)
{
$win_user_most_hits[$userid_ary[$i]]['direct_hit'] = $hits[$i];
if ($matchday == $last_matchday)
{
if (round($win_pos_most_hits[$rank[$i]]/$equal_rank[$rank[$i]],2) <> 0)
{
$win_user_most_hits[$userid_ary[$i]]['win'] = round($win_pos_most_hits[$rank[$i]]/$equal_rank[$rank[$i]],2);
}
else
{
$win_user_most_hits[$userid_ary[$i]]['win'] = 0;
}
}
else
{
$win_user_most_hits[$userid_ary[$i]]['win'] = 0;
}
}
if ($count_user > 0)
{
return $win_user_most_hits;
}
else
{
$win_user_most_hits[0]['win'] = 0;
return $win_user_most_hits;
}
}
/**
* return win most hits away in array.
*/
function win_user_most_hits_away($season, $league, $matchday)
{
global $db, $lang;
$sql = 'SELECT * FROM ' . FOOTB_LEAGUES . " WHERE season = $season AND league = $league";
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result))
{
$win_most_hits_away = $row['win_result_02'];
$last_matchday = $row['matchdays'];
$db->sql_freeresult($result);
}
$sql = 'SELECT
b.user_id AS userid,
SUM(IF(m.goals_home <= m.goals_guest,1,0)) AS hits_away
FROM ' . FOOTB_MATCHES . ' AS m
LEFT JOIN ' . FOOTB_BETS . " AS b ON (b.season = m.season AND b.league = m.league AND b.match_no = m.match_no)
WHERE m.season = $season AND m.league = $league AND m.matchday <= $matchday AND m.goals_home = b.goals_home AND
m.goals_guest = b.goals_guest AND m.status IN (2,3)
GROUP BY b.user_id
ORDER BY hits_away DESC
";
$result = $db->sql_query($sql);
$last_hits_away = -1;
$count_user = 0;
$userid_ary = array();
$hits_away = array();
$rank = array();
$equal_rank = array();
$win_pos_most_hits_away = array();
while( $row = $db->sql_fetchrow($result))
{
$userid_ary[$count_user] = $row['userid'];
$hits_away[$count_user] = $row['hits_away'];
if ($count_user == 0)
{
$rank[$count_user] = 1;
$equal_rank[$rank[$count_user]] = 1;
$win_pos_most_hits_away[$rank[$count_user]] = $win_most_hits_away;
}
else
{
if ( $row['hits_away'] != $last_hits_away)
{
$rank[$count_user] = $count_user + 1;
$equal_rank[$rank[$count_user]] = 1;
$win_pos_most_hits_away[$rank[$count_user]] = 0;
}
else
{
$rank[$count_user] = $rank[$count_user-1];
$equal_rank[$rank[$count_user]] += 1;
}
}
$last_hits_away = $row['hits_away'];
$count_user++;
}
$db->sql_freeresult($result);
$win_user_most_hits_away = array();
for($i = 0; $i < $count_user; $i++)
{
$win_user_most_hits_away[$userid_ary[$i]]['direct_hit'] = $hits_away[$i];
if ($matchday == $last_matchday)
{
if (round($win_pos_most_hits_away[$rank[$i]]/$equal_rank[$rank[$i]],2) <> 0)
{
$win_user_most_hits_away[$userid_ary[$i]]['win'] = round($win_pos_most_hits_away[$rank[$i]]/$equal_rank[$rank[$i]],2);
}
else
{
$win_user_most_hits_away[$userid_ary[$i]]['win'] = 0;
}
}
else
{
$win_user_most_hits_away[$userid_ary[$i]]['win'] = 0;
}
}
if ($count_user > 0)
{
return $win_user_most_hits_away;
}
else
{
$win_user_most_hits_away[0]['win'] = 0;
return $win_user_most_hits_away;
}
}
/**
* return colorstyle to status.
*/
function color_style($status)
{
switch ($status)
{
case 2:
$colorstyle = 'color_provisionally';
break;
case 3:
$colorstyle = 'color_finally';
break;
case 4:
case 5:
case 6:
$colorstyle = 'color_not_rated';
break;
default:
$colorstyle = '';
break;
}
return $colorstyle;
}
/**
* color text on match status.
*/
function color_match($text, $status)
{
switch($status)
{
case 2:
$colormatch = "<strong style='color:red'>". $text. '</strong>';
break;
case 3:
$colormatch = "<strong style='color:green'>". $text. '</strong>';
break;
case 4:
case 5:
case 6:
$colormatch = "<strong style='color:purple'>". $text. '</strong>';
break;
default:
$colormatch = $text;
break;
}
return $colormatch;
}
/**
* color text on points status.
*/
function color_points($text, $status)
{
switch($status)
{
case 2:
$color_points = "<strong style='color:red'>". $text. '</strong>';
break;
case 3:
$color_points = "<strong style='color:green'>". $text. '</strong>';
break;
default:
$color_points = $text;
break;
}
return $color_points;
}
/**
* get table order on teams with equal points.
*/
function get_order_team_compare($team_ary, $season, $league, $group, $ranks, $matchday = 999, $first = true)
{
global $db;
$sql = "
SELECT
t.*,
SUM(IF(m.team_id_home = t.team_id,
IF(goals_home + 0 > goals_guest, 3, IF(goals_home = goals_guest, 1, 0)),
IF(goals_home + 0 < goals_guest, 3, IF(goals_home = goals_guest, 1, 0))
)
) + IFNULL((SELECT SUM(b.bonuspoints) FROM " . FOOTB_BONUS_DAY . " AS b WHERE b.team_id = t.team_id AND b.season = t.season AND b.league = t.league AND b.matchday <= $matchday),0)
+ IFNULL((SELECT SUM(c.points) FROM " . FOOTB_CORR . " AS c WHERE c.team_id = t.team_id AND c.season = t.season AND c.league = t.league AND c.matchday <= $matchday),0)
- IF(t.team_id = 20 AND t.season = 2011 AND $matchday > 7, 2, 0) AS points,
SUM(IF(m.team_id_home = t.team_id, goals_home - goals_guest, goals_guest - goals_home)) AS goals_diff,
SUM(IF(m.team_id_home = t.team_id, goals_home , goals_guest)) AS goals,
SUM(IF(m.team_id_home = t.team_id, goals_guest , goals_home)) AS goals_against,
IFNULL((SELECT SUM(b.bonuspoints) FROM " . FOOTB_BONUS_DAY . " AS b WHERE b.team_id = t.team_id AND b.season = t.season AND b.league = t.league AND b.matchday <= $matchday),0) AS bonus
FROM " . FOOTB_TEAMS . ' AS t
LEFT JOIN ' . FOOTB_MATCHES . " AS m ON (m.season = t.season AND m.league = t.league AND
(m.team_id_home = t.team_id OR m.team_id_guest = t.team_id) AND m.group_id = t.group_id)
WHERE t.season = $season
AND t.league = $league
AND m.matchday <= $matchday
AND m.status IN (2,3,5,6)
AND m.group_id = '$group'
AND (m.team_id_home='" . implode("' OR m.team_id_home='", $team_ary) . "')
AND (m.team_id_guest='" . implode("' OR m.team_id_guest='", $team_ary) . "')
GROUP BY t.team_id
ORDER BY t.group_id ASC, points DESC, goals_diff DESC, goals DESC, bonus DESC";
$result = $db->sql_query($sql);
$tmp = array();
$rank_ary = array();
$rank = 0;
$last_points = 0;
$last_goals_diff = 0;
$last_goals = 0;
while( $row = $db->sql_fetchrow($result))
{
if ($last_points <> $row['points'] OR $last_goals_diff <> $row['goals_diff'] OR $last_goals <> $row['goals'])
{
$rank++;
}
$rank_ary[$rank][]=$row['team_id'];
$last_points = $row['points'];
$last_goals_diff = $row['goals_diff'];
$last_goals = $row['goals'];
}
foreach($rank_ary as $rank => $teams)
{
if(count($teams) > 1)
{
if ($first)
{
// Compare teams with equal ranks
$teams = get_order_team_compare($teams, $season, $league, $group, $ranks, $matchday, false);
}
else
{
// Second compare is still equal, so look on total rank
$teams = array_intersect($ranks, $teams);
}
}
foreach($teams as $key => $team)
{
$tmp[] = $team;
}
}
return (sizeof($tmp) == 0) ? $team_ary: $tmp;
}
/**
* determine team items from formula.
*/
function get_team($season, $league, $matchnumber, $field, $formula)
{
global $db, $lang, $user;
$first_letter = substr($formula, 0, 1);
$para = substr($formula, 2, 7);
$para_ary = explode(";",$para);
switch($first_letter)
{
case '3':
// 3. Place Euro 2106
$groups = substr($para_ary[0], 0, 5);
$sql = '
SELECT
SUM(1) AS matches,
SUM(IF(m.status = 3, 1, 0)) AS played
FROM ' . FOOTB_MATCHES . " AS m
WHERE m.season = $season AND m.league = $league AND m.group_id <> ''
GROUP BY m.group_id
";
$result = $db->sql_query($sql);
if ( $row = $db->sql_fetchrow($result))
{
if ($row['matches'] == $row['played'])
{
$rank = 0;
// Get table-information
$sql = "SELECT
t.*,
SUM(1) AS matches,
SUM(IF((m.team_id_home = t.team_id), IF(goals_home + 0 > goals_guest, 1, 0), IF(goals_home + 0 < goals_guest, 1, 0))) AS win,
SUM(IF(goals_home = goals_guest, 1, 0)) AS draw,
SUM(IF((m.team_id_home = t.team_id), IF(goals_home + 0 < goals_guest, 1, 0), IF(goals_home + 0 > goals_guest, 1, 0))) AS lost,
SUM(IF(m.team_id_home = t.team_id,
IF(goals_home + 0 > goals_guest, 3, IF(goals_home = goals_guest, 1, 0)),
IF(goals_home + 0 < goals_guest, 3, IF(goals_home = goals_guest, 1, 0))
)
) AS points,
SUM(IF(m.team_id_home = t.team_id, goals_home - goals_guest , goals_guest - goals_home)) AS goals_diff,
SUM(IF(m.team_id_home = t.team_id, goals_home , goals_guest)) AS goals,
SUM(IF(m.team_id_home = t.team_id, goals_guest , goals_home)) AS goals_against
FROM " . FOOTB_TEAMS . ' AS t
LEFT JOIN ' . FOOTB_MATCHES . " AS m ON (m.season = t.season AND m.league = t.league
AND (m.team_id_home = t.team_id OR m.team_id_guest = t.team_id) AND m.group_id = t.group_id)
WHERE t.season = $season
AND t.league = $league
AND m.status IN (2,3,5,6)
GROUP BY t.team_id
ORDER BY t.group_id ASC, points DESC, goals_diff DESC, goals DESC, t.team_name ASC";
$result = $db->sql_query($sql);
$table_ary = array();
$points_ary = array();
$ranks_ary = array();
$third_team = array();
$third_group = array();
$points3 = array();
$diff3 = array();
$goals3 = array();
$rank = 0;
while( $row = $db->sql_fetchrow($result))
{
$rank++;
$table_ary[$row['team_id']] = $row;
$points_ary[$row['group_id']][$row['points']][]=$row['team_id'];
$ranks_ary[] = $row['team_id'];
}
foreach($points_ary as $group_id => $points)
{
$rank = 0;
//sort on points descending
krsort($points);
foreach($points as $point => $teams)
{
if(count($teams) > 1)
{
// Compare teams with equal points
$teams = get_order_team_compare($teams, $season, $league, $group_id, $ranks_ary);
}
foreach($teams as $key => $team)
{
$row = $table_ary[$team];
$rank++;
if ($rank == 3)
{
$points3[$team] = $row['points'];
$diff3[$team] = $row['goals_diff'];
$goals3[$team] = $row['goals'];
$third_team[$team]= $team;
$third_group[$team]= $row['group_id'];
}
}
}
}
// Sort 3. Place on points, diff, goals
array_multisort($points3, SORT_DESC, $diff3, SORT_DESC, $goals3, SORT_DESC, $third_team, $third_group);
$qualified_groups = array();
for($i = 0; $i < 4; $i++)
{
$qualified_groups[$i] = $third_group[$i];
$team_of[$third_group[$i]] = $third_team[$i];
}
asort($qualified_groups);
$qualified_groups_string = '';
foreach($qualified_groups as $key => $letter)
{
$qualified_groups_string .= $letter;
}
$modus = array('ABCD' => 'CDAB', 'ABCE' => 'CABE', 'ABCF' => 'CABF', 'ABDE' => 'DABE', 'ABDF' => 'DABF',
'ABEF' => 'EABF', 'ACDE' => 'CDAE', 'ACDF' => 'CDAF', 'ACEF' => 'CAFE', 'ADEF' => 'DAFE',
'BCDE' => 'CDBE', 'BCDF' => 'CDBF', 'BCEF' => 'ECBF', 'BDEF' => 'EDBF', 'CDEF' => 'CDFE');
$form_para = array('CDE', 'ACD', 'ABF', 'BEF');
$mode = $modus[$qualified_groups_string];
for($i = 0; $i < 4; $i++)
{
$team = $team_of[substr($mode, $i, 1)];
$sqlup = 'UPDATE ' . FOOTB_MATCHES . " SET team_id_guest = $team WHERE season = $season AND league = $league AND formula_guest = '3 $form_para[$i]'";
$resultup = $db->sql_query($sqlup);
$sqlup = 'UPDATE ' . FOOTB_TEAMS . ' SET matchday = (SELECT max(matchday) FROM ' . FOOTB_MATCHES . "
WHERE season = $season AND league = $league AND (team_id_home= $team OR team_id_guest = $team))
WHERE season = $season AND league = $league AND team_id = $team";
$resultup = $db->sql_query($sqlup);
if ($form_para[$i] == $groups)
{
$team_id = $team;
$row = $table_ary[$team];
$team_symbol = $row['team_symbol'];
$team_name = $row['team_name'];
$team_name_short = $row['team_name_short'];
}
}
return $team_symbol . '#' . $team_id . '#' . $team_name . '#' . $team_name_short;
}
else
{
return '#0#' . '3. ' . sprintf($user->lang['GROUP']) . ' ' . $groups . '#' . '3. ' . sprintf($user->lang['GROUP']) . ' ' . $groups;
}
}
else
{
return '#0#' . '3. ' . sprintf($user->lang['GROUP']) . ' ' . $groups . '#' . '3. ' . sprintf($user->lang['GROUP']) . ' ' . $groups;
}
break;
case 'D':
// Drawing
return '#0#' . sprintf($user->lang['DRAWING']) . '#' . sprintf($user->lang['DRAWING']);
break;
case 'G':
// GROUP
$group = substr($para_ary[0], 0, 1);
$place = substr($para_ary[0], 1, 1);
$sql = '
SELECT
SUM(1) AS matches,
SUM(IF(m.status = 3, 1, 0)) AS played
FROM ' . FOOTB_MATCHES . " AS m
WHERE m.season = $season AND m.league = $league AND m.group_id = '$group'
GROUP BY m.group_id
";
$result = $db->sql_query($sql);
if ( $row = $db->sql_fetchrow($result))
{
if ($row['matches'] == $row['played'])
{
$rank = 0;
$sql = '
SELECT
t.*,
SUM(IF(m.team_id_home = t.team_id,
IF(goals_home + 0 > goals_guest, 3, IF(goals_home = goals_guest, 1, 0)),
IF(goals_home + 0 < goals_guest, 3, IF(goals_home = goals_guest, 1, 0))
)
) AS points,
SUM(IF(m.team_id_home = t.team_id, goals_home - goals_guest, goals_guest - goals_home)) AS goals_diff,
SUM(IF(m.team_id_home = t.team_id, goals_home, goals_guest)) AS goals,
SUM(IF(m.team_id_home = t.team_id, goals_guest, goals_home)) AS goals_get
FROM ' . FOOTB_TEAMS . ' AS t
LEFT JOIN ' . FOOTB_MATCHES . " AS m ON (m.season = t.season AND m.league = t.league AND
(m.team_id_home = t.team_id OR m.team_id_guest = t.team_id) AND m.group_id = t.group_id)
WHERE t.season = $season AND t.league = $league AND m.group_id = '$group'
GROUP BY t.team_id
ORDER BY points DESC, goals_diff DESC, goals DESC
";
$result = $db->sql_query($sql);
$table_ary = array();
$points_ary = array();
$ranks_ary = array();
while( $row = $db->sql_fetchrow($result))
{
$table_ary[$row['team_id']] = $row;
$points_ary[$row['points']][]=$row['team_id'];
$ranks_ary[] = $row['team_id'];
}
$db->sql_freeresult($result);
//sort on points descending
krsort($points_ary);
foreach($points_ary as $point => $teams)
{
if(count($teams) > 1)
{
// Compare teams with equal points
$teams = get_order_team_compare($teams, $season, $league, $group, $ranks_ary);
}
foreach($teams as $key => $team)
{
$row = $table_ary[$team];
$rank++;
if ($rank == $place)
{
$sqlup = 'UPDATE ' . FOOTB_MATCHES . " SET $field = $team WHERE season = $season AND league = $league AND match_no = $matchnumber";
$resultup = $db->sql_query($sqlup);
$sqlup = 'UPDATE ' . FOOTB_TEAMS . ' SET matchday = (SELECT max(matchday) FROM ' . FOOTB_MATCHES . "
WHERE season = $season AND league = $league AND (team_id_home= $team OR team_id_guest = $team))
WHERE season = $season AND league = $league AND team_id = $team";
$resultup = $db->sql_query($sqlup);
return $row['team_symbol'] . '#' . $team . '#' . $row['team_name'] . '#' . $row['team_name_short'];
}
}
}
}
else
{
return '#0#' . $place . '. ' . sprintf($user->lang['GROUP']) . ' ' . $group . '#' . $place . '. ' . sprintf($user->lang['GROUP']) . ' ' . $group;
}
}
else
{
return '#0#' . $place . '. ' . sprintf($user->lang['GROUP']) . ' ' . $group . '#' . $place . '. ' . sprintf($user->lang['GROUP']) . ' ' . $group;
}
break;
case 'L':
// Looser
switch(sizeof($para_ary))
{
case 1:
$sql = 'SELECT
m.status,
m.team_id_home AS home_id,
m.team_id_guest AS guest_id,
t1.team_symbol AS home_symbol,
t2.team_symbol AS guest_symbol,
t1.team_name AS home_name,
t2.team_name AS guest_name,
t1.team_name_short AS home_sname,
t2.team_name_short AS guest_sname,
m.goals_overtime_home,
m.goals_overtime_guest,
m.goals_home,
m.goals_guest
FROM ' . FOOTB_MATCHES . ' AS m
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.match_no = $para_ary[0]";
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result))
{
if ((3 == $row['status']) OR (6 == $row['status']))
{
if ($row['goals_home'] > $row['goals_guest'] OR $row['goals_overtime_home'] > $row['goals_overtime_guest'])
{
$new_id = $row['guest_id'];
$sqlup = 'UPDATE ' . FOOTB_MATCHES . " SET $field = $new_id WHERE season = $season AND league = $league AND match_no = $matchnumber";
$resultup = $db->sql_query($sqlup);
return $row['guest_symbol'] . '#' . $row['guest_id'] . '#' . $row['guest_name'] . '#' . $row['guest_sname'];
}
if ($row['goals_home'] < $row['goals_guest'] OR $row['goals_overtime_home'] < $row['goals_overtime_guest'])
{
$new_id = $row['home_id'];
$sqlup = 'UPDATE ' . FOOTB_MATCHES . " SET $field = $new_id WHERE season = $season AND league = $league AND match_no = $matchnumber";
$resultup = $db->sql_query($sqlup);
return $row['home_symbol'] . '#' . $row['home_id'] . '#' . $row['home_name'] . '#' . $row['home_sname'];
}
}
else
{
return '#0#' . sprintf($user->lang['LOOSER_MATCH_NO']) . $para_ary[0] . '#' . sprintf($user->lang['LOOSER']) . ' ' . $para_ary[0];
}
}
break;
default:
return '#0#' . sprintf($user->lang['DRAWING']) . '#' . sprintf($user->lang['DRAWING']);
break;
}
break;
case 'W':
// Winner
switch(sizeof($para_ary))
{
case 1:
$sql = 'SELECT
m.status,
m.team_id_home AS home_id,
m.team_id_guest AS guest_id,
t1.team_symbol AS home_symbol,
t2.team_symbol AS guest_symbol,
t1.team_name AS home_name,
t2.team_name AS guest_name,
t1.team_name_short AS home_sname,
t2.team_name_short AS guest_sname,
m.goals_overtime_home,
m.goals_overtime_guest,
m.goals_home,
m.goals_guest
FROM ' . FOOTB_MATCHES . ' AS m
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.match_no = $para_ary[0]";
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result))
{
if ((3 == $row['status']) OR (6 == $row['status']))
{
if ($row['goals_home'] > $row['goals_guest'] OR $row['goals_overtime_home'] > $row['goals_overtime_guest'])
{
$new_id = $row['home_id'];
$sqlup = 'UPDATE ' . FOOTB_MATCHES . " SET $field = $new_id WHERE season = $season AND league = $league AND match_no = $matchnumber";
$resultup = $db->sql_query($sqlup);
return $row['home_symbol'] . '#' . $row['home_id'] . '#' . $row['home_name'] . '#' . $row['home_sname'];
}
if ($row['goals_home'] < $row['goals_guest'] OR $row['goals_overtime_home'] < $row['goals_overtime_guest'])
{
$new_id = $row['guest_id'];
$sqlup = 'UPDATE ' . FOOTB_MATCHES . " SET $field = $new_id WHERE season = $season AND league = $league AND match_no = $matchnumber";
$resultup = $db->sql_query($sqlup);
return $row['guest_symbol'] . '#' . $row['guest_id'] . '#' . $row['guest_name'] . '#' . $row['guest_sname'];
}
}
else
{
if ($row['home_sname'] != '' AND $row['guest_sname'] != '')
{
return '#0#' . $row['home_sname'] . ' / ' . $row['guest_sname'] . '#' . $row['home_sname'] . '+' . $row['guest_sname'];
}
else
{
return '#0#' . sprintf($user->lang['WINNER_MATCH_NO']) . $para_ary[0] . '#' . sprintf($user->lang['WINNER']) . ' ' . $para_ary[0];
}
}
}
break;
case 2:
$sql = 'SELECT
m.status,
m.team_id_home AS home_id,
m.team_id_guest AS guest_id,
t1.team_symbol AS home_symbol,
t2.team_symbol AS guest_symbol,
t1.team_name AS home_name,
t2.team_name AS guest_name,
t1.team_name_short AS home_sname,
t2.team_name_short AS guest_sname,
m.goals_overtime_home,
m.goals_overtime_guest,
m.goals_home,
m.goals_guest,
m.match_no
FROM ' . FOOTB_MATCHES . ' AS m
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.match_no = $para_ary[0] OR m.match_no = $para_ary[1])
ORDER BY m.match_no ASC";
$result = $db->sql_query($sql);
if ($firstleg = $db->sql_fetchrow($result))
{
if ($replay = $db->sql_fetchrow($result))
{
if (((3 == $firstleg['status']) OR (6 == $firstleg['status'])) AND ((3 == $replay['status']) OR (6 == $replay['status'])))
{
if ($firstleg['home_id'] == $replay['guest_id'] AND $firstleg['guest_id'] == $replay['home_id'])
{
if ($firstleg['goals_home'] + $replay['goals_guest'] > $firstleg['goals_guest'] + $replay['goals_home'] OR $replay['goals_overtime_guest'] > $replay['goals_overtime_home'] OR
($firstleg['goals_home'] + $replay['goals_guest'] == $firstleg['goals_guest'] + $replay['goals_home'] AND $replay['goals_guest'] > $firstleg['goals_guest']))
{
$new_id = $firstleg['home_id'];
$sqlup = 'UPDATE ' . FOOTB_MATCHES . " SET $field = $new_id WHERE season = $season AND league = $league AND match_no = $matchnumber";
$resultup = $db->sql_query($sqlup);
return $firstleg['home_symbol'] . '#' . $firstleg['home_id'] . '#' . $firstleg['home_name'] . '#' . $firstleg['home_sname'];
}
if ($firstleg['goals_home'] + $replay['goals_guest'] < $firstleg['goals_guest'] + $replay['goals_home'] OR $replay['goals_overtime_guest'] < $replay['goals_overtime_home'] OR
($firstleg['goals_home'] + $replay['goals_guest'] == $firstleg['goals_guest'] + $replay['goals_home'] AND $firstleg['goals_guest'] > $replay['goals_guest']))
{
$new_id = $firstleg['guest_id'];
$sqlup = 'UPDATE ' . FOOTB_MATCHES . " SET $field = $new_id WHERE season = $season AND league = $league AND match_no = $matchnumber";
$resultup = $db->sql_query($sqlup);
return $firstleg['guest_symbol'] . '#' . $firstleg['guest_id'] . '#' . $firstleg['guest_name'] . '#' . $firstleg['guest_sname'];
}
}
else if ($firstleg['home_id'] == $replay['home_id'] AND $firstleg['guest_id'] == $replay['guest_id'])
{
if ($firstleg['goals_home'] + $replay['goals_home'] <= $firstleg['goals_guest'] + $replay['goals_guest'] OR $replay['goals_overtime_home'] < $replay['goals_overtime_guest'])
{
$new_id = $firstleg['guest_id'];
$sqlup = 'UPDATE ' . FOOTB_MATCHES . " SET $field = $new_id WHERE season = $season AND league = $league AND match_no = $matchnumber";
$resultup = $db->sql_query($sqlup);
return $firstleg['guest_symbol'] . '#' . $firstleg['guest_id'] . '#' . $firstleg['guest_name'] . '#' . $firstleg['guest_sname'];
}
else
{
$new_id = $firstleg['home_id'];
$sqlup = 'UPDATE ' . FOOTB_MATCHES . " SET $field = $new_id WHERE season = $season AND league = $league AND match_no = $matchnumber";
$resultup = $db->sql_query($sqlup);
return $firstleg['home_symbol'] . '#' . $firstleg['home_id'] . '#' . $firstleg['home_name'] . '#' . $firstleg['home_sname'];
}
}
else
{
return '#0#' . sprintf($user->lang['MATCH_ERROR']) . '#' . sprintf($user->lang['FORMULA']) . '!';
}
}
else
{
if ($firstleg['home_sname'] != '' AND $firstleg['guest_sname'] != '')
{
return '#0#' . $firstleg['home_sname'] . ' / ' . $firstleg['guest_sname'] . '#' . $firstleg['home_sname'] . '+' . $firstleg['guest_sname'];
}
else
{
return '#0#' . sprintf($user->lang['WINNER_MATCH_NO']) . ' ' . $para_ary[0] . '+' . $para_ary[1] . '#S. ' . $para_ary[0] . '+' . $para_ary[1];
}
}
}
else
{
return '#0#' . sprintf($user->lang['SEC_LEG_ERROR']) . '#' . sprintf($user->lang['FORMULA']) . '!';
}
}
else
{
return '#0#' . sprintf($user->lang['FIRSTLEG_ERROR']) . '#' . sprintf($user->lang['FORMULA']) . '!';
}
break;
default:
return '#0#Los#Los';
break;
}
break;
default:
return '#0#' . sprintf($user->lang['DRAWING']) . '#' . sprintf($user->lang['DRAWING']);
break;
}
}
/**
* KO-matches: Set team to next round.
*/
function ko_next_round($season, $league, $matchday_from, $matchday_to, $matchday_new)
{
global $db, $user;
$sql = 'SELECT
t.team_id,
t.team_name,
SUM(1) AS matches,
SUM(IF(m.team_id_home = t.team_id,
IF(goals_overtime_home + goals_overtime_guest > 0,
goals_overtime_home,
goals_home
),
IF(goals_overtime_home + goals_overtime_guest > 0,
goals_overtime_guest,
goals_guest
)
)
) AS goals,
SUM(IF(m.team_id_home = t.team_id,
IF(goals_overtime_home + goals_overtime_guest > 0,
goals_overtime_guest,
goals_guest
),
IF(goals_overtime_home + goals_overtime_guest > 0,
goals_overtime_home,
goals_home
)
)
) AS goals_get,
SUM(IF(m.team_id_home = t.team_id,
0,
IF(goals_overtime_home + goals_overtime_guest > 0,
goals_overtime_guest,
goals_guest
)
)
) AS goals_away,
SUM(IF(m.team_id_home = t.team_id,
IF(goals_overtime_home + goals_overtime_guest > 0,
goals_overtime_guest,
goals_guest
),
0
)
) AS goals_away_opp
FROM ' . FOOTB_TEAMS . ' AS t
LEFT JOIN ' . FOOTB_MATCHES . " AS m ON (m.season = t.season AND m.league = t.league AND (m.team_id_home = t.team_id OR m.team_id_guest = t.team_id))
WHERE t.season = $season AND t.league = $league AND m.matchday >= $matchday_from AND m.matchday <= $matchday_to AND m.status IN (3,6)
GROUP BY t.team_id";
$result = $db->sql_query($sql);
$message = sprintf($user->lang['KO_NEXT']) . ': <br /><br />';
while ($row = $db->sql_fetchrow($result))
{
if (($matchday_to == $matchday_from AND $row['matches'] == 1) OR ($matchday_to != 0 AND $row['matches'] == 2))
{
if (($row['goals'] > $row['goals_get']) OR
(($row['goals'] == $row['goals_get']) AND ($row['goals_away'] > $row['goals_away_opp'])))
{
$team_id = $row['team_id'];
$sqlup = 'UPDATE ' . FOOTB_TEAMS . " SET matchday = $matchday_new WHERE season = $season AND league = $league AND team_id = $team_id";
$resultup = $db->sql_query($sqlup);
$message .= $row['team_name'] . '<br />';
}
}
}
$db->sql_freeresult($result);
$message .= '<br />';
return $message;
}
/**
* KO-matches: Set groupleaders next round.
*/
function ko_group_next_round($season, $league, $matchday_from, $matchday_to, $matchday_new, $rank, $move_rank, $move_league, $move_matchday)
{
global $db, $user;
$sql = '
SELECT
t.*,
SUM(1) AS matches
FROM ' . FOOTB_TEAMS . ' AS t
LEFT JOIN ' . FOOTB_MATCHES . " AS m ON (m.season = t.season AND m.league = t.league AND (m.team_id_home = t.team_id OR m.team_id_guest = t.team_id) AND m.group_id = t.group_id)
WHERE t.season = $season AND t.league = $league AND m.matchday >= $matchday_from AND m.matchday <= $matchday_to AND m.status NOT IN (3,6)
GROUP BY t.team_id
";
$result = $db->sql_query($sql);
$rowset = $db->sql_fetchrowset($result);
$db->sql_freeresult($result);
if (sizeof($rowset) > 0)
{
$message = sprintf($user->lang['NO_KO_NEXT']);
$messag_moved = '';
}
else
{
$sql = '
SELECT
t.*,
SUM(1) AS matches,
SUM(IF((m.team_id_home = t.team_id), IF(goals_home + 0 > goals_guest, 1, 0), IF(goals_home + 0 < goals_guest, 1, 0))) AS win,
SUM(IF(goals_home = goals_guest, 1, 0)) AS draw,
SUM(IF((m.team_id_home = t.team_id), IF(goals_home + 0 < goals_guest, 1, 0), IF(goals_home + 0 > goals_guest, 1, 0))) AS lose,
SUM(IF(m.team_id_home = t.team_id,
IF(goals_home + 0 > goals_guest,
3,
IF(goals_home = goals_guest,
1,
0
)
),
IF(goals_home + 0 < goals_guest,
3,
IF(goals_home = goals_guest,
1,
0
)
)
)
) AS points,
SUM(IF(m.team_id_home = t.team_id, goals_home - goals_guest, goals_guest - goals_home)) AS goal_diff,
SUM(IF(m.team_id_home = t.team_id, goals_home, goals_guest)) AS goals,
SUM(IF(m.team_id_home = t.team_id, goals_guest, goals_home)) AS goals_get
FROM ' . FOOTB_TEAMS . ' AS t
LEFT JOIN ' . FOOTB_MATCHES . " AS m ON (m.season = t.season AND m.league = t.league AND (m.team_id_home = t.team_id OR m.team_id_guest = t.team_id) AND m.group_id = t.group_id)
WHERE t.season = $season AND t.league = $league AND m.matchday >= $matchday_from AND m.matchday <= $matchday_to AND m.status IN (3,6)
GROUP BY t.team_id
ORDER BY t.group_id ASC, points DESC, goal_diff DESC, goals DESC
";
$result = $db->sql_query($sql);
$table_ary = array();
$points_ary = array();
$ranks_ary = array();
while( $row = $db->sql_fetchrow($result))
{
$table_ary[$row['team_id']] = $row;
$points_ary[$row['group_id']][$row['points']][]=$row['team_id'];
$ranks_ary[] = $row['team_id'];
}
$message = sprintf($user->lang['KO_NEXT_CHECK']) . ': <br /><br />';
$message .= sprintf($user->lang['KO_NEXT']) . ': <br /><br />';
$messag_moved = '<br /><br />' . sprintf($user->lang['KO_MOVED']) . ': <br />';
$group_id = 'XX';
foreach($points_ary as $group_id => $points)
{
$place = 1;
foreach($points as $point => $teams)
{
if(count($teams) > 1)
{
// Compare teams with equal points
$teams = get_order_team_compare($teams, $season, $league, $group_id, $ranks_ary);
}
foreach($teams as $key => $team_id)
{
$row = $table_ary[$team_id];
if ($place <= $rank)
{
$sqlup = 'UPDATE ' . FOOTB_TEAMS . " SET matchday = $matchday_new WHERE season = $season AND league = $league AND team_id = $team_id";
$resultup = $db->sql_query($sqlup);
$message .= $row['team_name'] . '<br />';
}
if ($move_rank > 0 AND $move_league > 0 AND $place == $move_rank)
{
$team_name = $row['team_name'];
$short_name = $row['team_name_short'];
$team_sign = $row['team_symbol'];
$sqlinsert = 'INSERT INTO ' . FOOTB_TEAMS . " VALUES($season, $move_league, $team_id, '$team_name', '$short_name', '$team_sign', '', $move_matchday)";
$resultinsert = $db->sql_query($sqlinsert);
$messag_moved .= $row['team_name'] . '<br />';
}
$place++;
}
}
}
}
$db->sql_freeresult($result);
$message .= '<br /><br />';
return $message. $messag_moved;
}
/**
* return SQL statement part to calculate points depending to mode.
*/
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;
}
function bonuspoints($season, $league, $matchday)
{
global $db, $config, $lang, $league_info, $phpbb_root_path, $phpEx;
if ($league < 40)
{
$league2 = $league + 50;
$sql = 'DELETE FROM ' . FOOTB_BONUS_DAY . " WHERE season = '$season' AND league = '$league2' AND matchday = '$matchday'";
$result = $db->sql_query($sql);
$sql = 'REPLACE INTO ' . FOOTB_BONUS_DAY . ' (season, league, matchday, team_id, rank)
SELECT season, (league + 50), matchday, (user_id + 2000), rank FROM ' . FOOTB_RANKS . " WHERE season = '$season' AND league = '$league' and matchday = '$matchday'";
$result = $db->sql_query($sql);
$sql = 'SELECT team_id_home FROM ' . FOOTB_MATCHES . " WHERE season = '$season' AND league = '$league2' AND matchday = '$matchday'";
$result = $db->sql_query($sql);
$id = array();
while( $row = $db->sql_fetchrow($result))
{
array_push ( $id, $row['team_id_home']);
}
$i = 0;
while($id[$i])
{
$tmp = $id[$i];
$sql = 'UPDATE ' . FOOTB_BONUS_DAY . " SET home = '1' WHERE season = '$season' AND league = '$league2' AND matchday = '$matchday' AND team_id = '$tmp'";
$result = $db->sql_query($sql);
$i++;
}
$sql = 'SELECT rank FROM ' . FOOTB_BONUS_DAY . " WHERE season = '$season' AND league = '$league2' AND matchday = '$matchday'" ;
$result = $db->sql_query($sql);
$ranks = array();
while( $row = $db->sql_fetchrow($result))
{
array_push ( $ranks, $row['rank']);
}
$anzahl = array_count_values ($ranks);
If(isset($anzahl[1]))
{
$z1 = $anzahl[1];
}
Else
{
$z1 = "0";
}
If(isset($anzahl[2]))
{
$z2 = $anzahl[2];
}
Else
{
$z2 = "0";
}
If(isset($anzahl[3]))
{
$z3 = $anzahl[3];
}
Else
{
$z3 = "0";
}
If ($z1 > 2)
{
$b1 = 6 / $z1;
}
Elseif ($z1 == 2)
{
$b1 = 2.5;
}
Else
{
$b1 = 3;
}
If ($z2 > 1)
{
$b2 = 3 / $z2;
}
Elseif ($z2 == 1)
{
$b2 = 2;
}
Else
{
$b2 = 0;
}
If ($z3 > 0)
{
$b3 = 1 / $z3;
}
Else
{
$b3 = 0;
}
$sql =
'UPDATE ' . FOOTB_BONUS_DAY . "
SET bonuspoints = '$b1'
WHERE season = '$season' AND league = '$league2' and matchday = '$matchday' AND rank = '1'";
$result = $db->sql_query($sql);
$sql =
'UPDATE ' . FOOTB_BONUS_DAY . "
SET bonuspoints = '$b2'
WHERE season = '$season' AND league = '$league2' and matchday = '$matchday' AND rank = '2'";
$result = $db->sql_query($sql);
$sql =
'UPDATE ' . FOOTB_BONUS_DAY . "
SET bonuspoints = '$b3'
WHERE season = '$season' AND league = '$league2' and matchday = '$matchday' AND rank = '3'";
$result = $db->sql_query($sql);
$sql =
'UPDATE ' . FOOTB_BONUS_DAY . " SET `team_id` = `team_id`+2000 WHERE `team_id`<2000";
$result = $db->sql_query($sql);
$sql = 'DELETE FROM ' . FOOTB_BONUS_DAY . " WHERE season = '$season' AND league = '$league2' AND matchday = '$matchday' AND bonuspoints = '0'";
$result = $db->sql_query($sql);
}
}
function corr($season, $league, $matchday)
{
global $db, $config, $lang, $league_info, $phpbb_root_path, $phpEx;
if ($league < 40)
{
$league2 = $league + 50;
$sql = 'DELETE FROM ' . FOOTB_CORR . " WHERE season = '$season' AND league = '$league2' AND matchday = '$matchday'";
$result = $db->sql_query($sql);
$sql = 'SELECT status FROM ' . FOOTB_MATCHDAYS . " WHERE season = '$season' AND league = '$league' AND matchday = '$matchday'";
$result = $db->sql_query($sql);
while($row = $db->sql_fetchrow($result))
{
if ($row['status'] > 0)
{
$sql = 'SELECT match_no FROM ' . FOOTB_MATCHES . " WHERE season = '$season' AND league = '$league2' AND matchday = '$matchday'";
$result = $db->sql_query($sql);
$game = array();
while( $row = $db->sql_fetchrow($result))
{
array_push ($game,$row['match_no']);
}
foreach($game as $nr)
{
$sql = 'SELECT team_id_home, team_id_guest, goals_home, goals_guest FROM ' . FOOTB_MATCHES . " WHERE season = '$season' AND league = '$league2' AND match_no = '$nr'";
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
if ($row['goals_home'] == 0 and $row['goals_guest'] == 0)
{
$sql = 'SELECT b.goals_home, b.goals_guest FROM ' . FOOTB_BETS . ' AS b LEFT JOIN ' . FOOTB_MATCHES . " AS m ON (m.season = b.season AND m.league = b.league AND m.match_no = b.match_no) WHERE m.season = $season AND m.league = $league AND m.matchday = $matchday AND b.user_id = $row[team_id_home] - 2000";
$result = $db->sql_query($sql);
$home_empty = true;
while($row_home = $db->sql_fetchrow($result))
{
if (!empty($row_home['goals_home']) or !empty($row_home['goals_guest']))
{
$home_empty = false;
}
}
$sql = 'SELECT b.goals_home, b.goals_guest FROM ' . FOOTB_BETS . ' AS b LEFT JOIN ' . FOOTB_MATCHES . " AS m ON (m.season = b.season AND m.league = b.league AND m.match_no = b.match_no) WHERE m.season = $season AND m.league = $league AND m.matchday = $matchday AND b.user_id = $row[team_id_guest] - 2000";
$result = $db->sql_query($sql);
$guest_empty = true;
while($row_guest = $db->sql_fetchrow($result))
{
if (!empty($row_guest['goals_home']) or !empty($row_guest['goals_guest']))
{
$guest_empty = false;
}
}
if ($home_empty == true)
{
$sql = 'REPLACE INTO ' . FOOTB_CORR . "(season, league, matchday, team_id, win, lost, draw, points, home) VALUES ($season, $league2, $matchday, $row[team_id_home], 0, 1, -1, -1, 0)";
$result = $db->sql_query($sql);
}
if ($guest_empty == true)
{
$sql = 'REPLACE INTO ' . FOOTB_CORR . "(season, league, matchday, team_id, win, lost, draw, points, home) VALUES ($season, $league2, $matchday, $row[team_id_guest], 0, 1, -1, -1, 1)";
$result = $db->sql_query($sql);
}
}
}
}
}
}
}
function chart($season, $league, $matchday)
{
global $db, $config, $lang, $league_info, $phpbb_root_path, $phpEx;
$league2 = $league + 50;
$sql = 'DELETE
FROM ' . FOOTB_MY_CHART . "
WHERE season = $season
AND league = $league
AND matchday = $matchday";
$result = $db->sql_query($sql);
$sql = 'REPLACE INTO ' . FOOTB_MY_CHART . '
SELECT * FROM ' . FOOTB_RANKS . "
WHERE season = $season
AND league = $league
AND matchday = $matchday";
$result = $db->sql_query($sql);
$sql = "SELECT
t.*,
SUM(IF(m.team_id_home = t.team_id,
IF(goals_home + 0 > goals_guest, 3, IF(goals_home = goals_guest, 1, 0)),
IF(goals_home + 0 < goals_guest, 3, IF(goals_home = goals_guest, 1, 0))
)
) + IFNULL((SELECT SUM(b.bonuspoints) FROM " . FOOTB_BONUS_DAY . " AS b WHERE b.team_id = t.team_id AND b.season = t.season AND b.league = t.league AND b.matchday <= $matchday),0)
+ IFNULL((SELECT SUM(c.points) FROM " . FOOTB_CORR . " AS c WHERE c.team_id = t.team_id AND c.season = t.season AND c.league = t.league AND c.matchday <= $matchday),0)AS points,
SUM(IF(m.team_id_home = t.team_id, goals_home - goals_guest , goals_guest - goals_home)) AS goals_diff,
SUM(IF(m.team_id_home = t.team_id, goals_home , goals_guest)) AS goals
FROM " . FOOTB_TEAMS . ' AS t
LEFT JOIN ' . FOOTB_MATCHES . " AS m ON (m.season = t.season AND m.league = t.league
AND (m.team_id_home = t.team_id OR m.team_id_guest = t.team_id) AND m.group_id = t.group_id)
WHERE t.season = $season
AND t.league = $league2
AND m.matchday <= $matchday
AND m.status IN (2, 3,5,6)
GROUP BY t.team_id
ORDER BY t.group_id ASC, points DESC, goals_diff DESC, goals DESC, t.team_name ASC";
$result = $db->sql_query($sql);
$i = 1;
while( $row = $db->sql_fetchrow($result))
{
$user_i = $row['team_id'] - 2000;
$sql2 = 'UPDATE ' . FOOTB_MY_CHART . "
SET rank_total = $i
WHERE season = $season
AND league = $league
AND matchday = $matchday
AND user_id = $user_i";
$result2 = $db->sql_query($sql2);
$i++;
}
}