responseView('XenForo_ViewPublic_Base', 'yfl_rivals_index', $viewParams);
}
public function actionH2h()
{
$visitor = XenForo_Visitor::getInstance();
YFL_Rivals_Helpers_EA::checkLogin($visitor);
$viewParams = array(
"mode" => "find"
);
if(isset($_POST['team1']) && isset($_POST['team2']))
{
// get the grouped stats for these teams
$team1 = $this->_getTeamModel()->getByName($_POST['team1']);
$team2 = $this->_getTeamModel()->getByName($_POST['team2']);
if($team1 && $team2)
{
$matches = $this->_getRivalsModel()->getH2HMatches($team1['id'], $team2['id']);
if(count($matches))
{
$stats = $this->_getRivalsModel()->getH2HStats($matches['matches']);
$match = $matches['match'];
$teamStats = array(
"home" => array(),
"away" => array()
);
$totalStats = array(
"home" => array(),
"away" => array()
);
if(count($stats))
{
foreach($stats as $stat)
{
$key = 'home';
if($stat['club_id'] == $match['away_team_ea_id']) $key = 'away';
// convert the position
$stat['pos'] = YFL_Rivals_Helpers_EA::getPosition($stat['pos']);
/*$player = $this->_getContractModel()->getByEAId($stat['player_ea_id']);
if($player)
{
$stat['player'] = $player['username'];
}
else
{
$stat['player'] = 'Unknown';
}*/
$teamStats[$key][] = $stat;
foreach($stat as $k => $v)
{
if(in_array($k, YFL_Rivals_Helpers_EA::getValidStats())){
$k = YFL_Rivals_Helpers_EA::getReplace($k);
if( ! array_key_exists($k, $totalStats[$key])) $totalStats[$key][$k] = 0;
$totalStats[$key][$k] += $v;
}
}
}
$viewParams = array(
"match" => $match,
"results" => $matches['results'],
"stats" => $teamStats,
"statsjson" => json_encode($totalStats),
"mode" => "view",
"matchCount" => count($matches['matches'])
);
}
else
{
$viewParams = array(
"mode" => "failed"
);
}
}
}
}
return $this->responseView('XenForo_ViewPublic_Base', 'yfl_rivals_h2h', $viewParams);
}
public function actionStats()
{
$visitor = XenForo_Visitor::getInstance();
YFL_Rivals_Helpers_EA::checkLogin($visitor);
$validFilters = array(
"positions" => array("goalkeeper", "defender", "midfielder", "attacker", "any", "all"),
"filters" => array("played" => "Played","assists" =>"Assists","cleansheetsany" => "Cleansheets" ,"cleansheetsdef" => "Cleansheets","cleansheetsgk"=> "Cleansheets" ,"goals" => "Goals","goalsconceded" => "Goals Against","mom" => "MOTM","passattempts" => "Pass Attempts","passesmade" => "Pass Completed","rating" => "Rating ","redcards" => "Red Cards","saves"=> "Saves" ,"shots"=> "Shots" ,"tackleattempts" => "Tackle Attmpets","tacklesmade"=> "Tackle Completed" ,"yellowcards" => "Yellow Card","assists_per_game" => "Assists PG","goals_per_game" => "Goals PG","conceded_per_game" => "Conceeded PG","passattempts_per_game" => "Pass Attempts PG" ,"passesmade_per_game" => "Pass Completed PG" ,"saves_per_game" => "Saves PG" ,"shots_per_game" => "Shots PG","tackleattempts_per_game" => "Tackle Attempts PG","tacklesmade_per_game"=> "Tackle Completed PG")
);
if(!empty($_GET['adrian'])) {
var_dump(YFL_Rivals_Helpers_EA::getPositionID(ucfirst($_GET['pos'])));
var_dump( YFL_Rivals_Helpers_EA::getConsole(@$_COOKIE['console']));
var_dump($_COOKIE); exit;
}
if(isset($_GET['pos']) && in_array($_GET['pos'], $validFilters['positions']))
{
$page = 1;
$orderBy = 'rating';
$order = 'DESC';
if(isset($_GET['page']) && intval($_GET['page']) > 0) $page = intval($_GET['page']);
switch($_GET['pos'])
{
case 'goalkeeper':
$fields = array("played", "cleansheetsgk", "goalsconceded", "mom", "saves", "saves_per_game", "rating");
$orderBy = 'saves';
break;
case 'defender':
$fields = array("played", "cleansheetsdef", "goalsconceded", "mom", "tackleattempts_per_game", "tacklesmade_per_game", "tacklesmade", "assists", "rating");
$orderBy = 'cleansheetsdef';
break;
case 'midfielder':
$fields = array("played", "tacklesmade", "passesmade", "mom", "tacklesmade_per_game", "passesmade_per_game", "assists", "goals", "rating");
$orderBy = 'assists';
break;
case 'attacker':
$fields = array("played", "shots", "mom", "shots_per_game", "goals_per_game", "assists", "goals", "rating");
$orderBy = 'goals';
break;
case 'any':
$fields = array("played", "cleansheetsany", "goalsconceded", "mom", "passattempts_per_game", "passesmade_per_game", "assists", "goals", "rating");
$orderBy = 'goals';
break;
/*case 'all':
$fields = array("played", "goalsconceded", "mom", "saves", "tacklesmade", "passesmade", "assists", "shots", "goals", "rating");
$orderBy = 'played';
break;*/
}
if(isset($_GET['orderby']) && in_array($_GET['orderby'], $fields)) $orderBy = $_GET['orderby'];
if(isset($_GET['order']) && in_array($_GET['order'], array('ASC', 'DESC'))) $order = $_GET['order'];
$pos = YFL_Rivals_Helpers_EA::getPositionID(ucfirst($_GET['pos']));
$records = $this->_getRivalsModel()->getOverallStats($pos, 25, $page, $orderBy.' '.$order);
$stats = array();
$cleanFields = array();
foreach($records['records'] as $record)
{
$stats[$record['player_ea_id']] = array();
$stats[$record['player_ea_id']]['user'] = $record;
$team = $this->_getTeamModel()->getByEAId($record['club_id']);
$stats[$record['player_ea_id']]['ea_user'] = array(
"persona_name" => $record['persona_name'],
"badge" => $team['badge'],
"name" => $team['name']
);
$tmp = array();
foreach($record as $key => $val)
{
if(in_array($key, $fields))
{
if(is_float($val) || strpos(".", $val)!==-1) $val = round($val, 2);
$tmp[$key] = $val;
}
}
$cleanFields = array();
foreach($fields as $field)
{
$cleanFields[] = $validFilters['filters'][$field];
$stats[$record['player_ea_id']][$field] = $tmp[$field];
}
}
$end = ($records['page'] * $records['limit']);
if($end > $records['total']) $end = $records['total'];
$viewParams = array(
"position" => ucfirst($_GET['pos']),
"orderby" => $orderBy,
"order" => $order,
"fields" => $cleanFields,
"values" => $fields,
"stats" => $stats,
"page" => $records['page'],
"start" => (($records['page'] - 1) * $records['limit']) + 1,
"end" => $end,
"total" => $records['total']
);
return $this->responseView('XenForo_ViewPublic_Base', 'yfl_rivals_stat_view', $viewParams);
}
$viewParams = array();
return $this->responseView('XenForo_ViewPublic_Base', 'yfl_rivals_stats', $viewParams);
}
public function actionStandings()
{
$visitor = XenForo_Visitor::getInstance();
YFL_Rivals_Helpers_EA::checkLogin($visitor);
$viewParams = array(
"standings" => $this->_getRivalsModel()->getRivalTable()
);
return $this->responseView('XenForo_ViewPublic_Base', 'yfl_rivals_standings', $viewParams);
}
public function actionResults()
{
$visitor = XenForo_Visitor::getInstance();
YFL_Rivals_Helpers_EA::checkLogin($visitor);
$viewParams = array(
"results" => $this->_getRivalsModel()->getRecentMatches()
);
return $this->responseView('XenForo_ViewPublic_Base', 'yfl_rivals_results', $viewParams);
}
public function actionPlayerCron($clubId = -1)
{
set_time_limit(3600);
$db = XenForo_Application::get('db');
if( ! $clubId > 0)
{
$query = "SELECT * FROM xf_yfl_team ORDER BY last_rivals_update LIMIT 30";
}
else
{
$query = sprintf("SELECT * FROM xf_yfl_team WHERE ea_id = %d", intval($clubId));
}
$teams = $db->fetchAll($query);
$EA = new YFL_Rivals_API_EA;
$EA->setMode('forced');
$statsFields = array('assists', 'cleansheetsany', 'cleansheetsdef', 'cleansheetsgk', 'goals', 'goalsconceded', 'mom', 'passattempts', 'passesmade', 'pos', 'rating', 'redcards', 'saves', 'shots', 'tackleattempts', 'tacklesmade');
// foreach team, call the API for members and process the players
foreach($teams as $team)
{
$console = 'PS4';
if($team['platform_id']==1) $console = 'XBOX';
$EA->setConsole($console);
$members = $EA->getMembers($team['ea_id']);
$this->_getContractModel()->parseEAMembers($team, $members, $console);
$query = sprintf("UPDATE xf_yfl_team SET last_player_update = NOW() WHERE id = %d", $team['id']);
$db->query($query);
}
// cache
XenForo_Model::create('XenForo_Model_UserField')->rebuildUserFieldCache();
if($clubId==-1)
{
echo 'complete';
exit;
}
}
static public function cron()
{
set_time_limit(3600);
$db = XenForo_Application::get('db');
$db->query("UPDATE `xf_yfl_team` SET active = 'N' WHERE ea_id NOT IN (SELECT home FROM xf_yfl_match_cache WHERE date > DATE_SUB(NOW(), INTERVAL 30 DAY)) AND ea_id NOT IN (SELECT away FROM xf_yfl_match_cache WHERE date > DATE_SUB(NOW(), INTERVAL 30 DAY)) AND active = 'Y'");
$query = "SELECT * FROM xf_yfl_team WHERE active = 'Y' ORDER BY last_rivals_update LIMIT 30";
$query = "SELECT * FROM xf_yfl_team";
$teams = $db->fetchAll($query);
$EA = new YFL_Rivals_API_EA;
$EA->setMode('forced');
$statsFields = array('assists', 'cleansheetsany', 'cleansheetsdef', 'cleansheetsgk', 'goals', 'goalsconceded', 'mom', 'passattempts', 'passesmade', 'pos', 'rating', 'redcards', 'saves', 'shots', 'tackleattempts', 'tacklesmade');
// foreach team, call the API for recent matches
foreach($teams as $team)
{
if($team['ea_id']!=0)
{
$console = 'PS4';
if($team['platform_id']==1) $console = 'XBOX';
$EA->setConsole($console);
/*
$query = "SELECT * FROM xf_yfl_match_cache WHERE home = ".$team['ea_id']." OR away = ".$team['ea_id'];
$res = $db->fetchAll($query);
$matches = array();
foreach($res as $r)
{
$matches[$r['match_id']] = json_decode($r['data'], true);
}
*/
$matches = $EA->getMatches($team['ea_id']);
// foreach match,
foreach($matches as $matchID => $match)
{
// cache this match for later procesing overall stats
$x = 1;
foreach($match['clubs'] as $clubID => $data)
{
if($x==1)
{
$homeTeam = $clubID;
}
else
{
$awayTeam = $clubID;
}
$x++;
}
$query = sprintf("INSERT INTO xf_yfl_match_cache (match_id, platform_id, home, away, data) VALUES (%d, %d, %d, %d, %s) ON DUPLICATE KEY UPDATE match_id = match_id", $db->quote($matchID), $db->quote($team['platform_id']), $db->quote($homeTeam), $db->quote($awayTeam), $db->quote(json_encode($match)));
$db->query($query);
// check this match_id does not exist
$query = sprintf("SELECT match_id FROM xf_yfl_rival_matches WHERE match_id = %d", $matchID);
$check = $db->fetchRow($query);
if( ! $check)
{
$opposition = 0;
$homeTeam = 0;
$awayTeam = 0;
// get the involved club ids, check the other exists
$x = 1;
foreach($match['clubs'] as $clubID => $data)
{
if($clubID != $team['ea_id']) $opposition = $clubID;
if($x==1)
{
$homeTeam = $clubID;
}
else
{
$awayTeam = $clubID;
}
$x++;
}
$query = sprintf("SELECT id, rivals_elo FROM xf_yfl_team WHERE ea_id = %d AND platform_id = %d", $opposition, $team['platform_id']);
$away = $db->fetchRow($query);
if($away)
{
// if exists, store the match and result
$query = sprintf("INSERT INTO xf_yfl_rival_matches (match_id, home_team, home_score, away_team, away_score, played) VALUES (%d, %d, %d, %d, %d, %s)", $matchID, $homeTeam, $match['clubs'][$homeTeam]['goals'], $awayTeam, $match['clubs'][$awayTeam]['goals'], $db->quote(date("Y-m-d H:i:s", $match['timestamp'])));
$result = $db->query($query);
// work out who won and get the ELO
$homeELO = $team['rivals_elo'];
$awayELO = $away['rivals_elo'];
if($match['clubs'][$homeTeam]['goals'] > $match['clubs'][$awayTeam]['goals'])
{
$h = 1;
$a = 0;
}
else if ($match['clubs'][$homeTeam]['goals'] > $match['clubs'][$awayTeam]['goals'])
{
$a = 1;
$h = 0;
}
else
{
$a = 0.5;
$h = 0.5;
}
$ELO = new YFL_Rivals_Helpers_ELO($homeELO,$awayELO,$h,$a);
$ratings = $ELO->getNewRatings();
// update the ELO
$query = sprintf("UPDATE xf_yfl_team SET rivals_elo = %d WHERE id = %d", $ratings['a'], $team['id']);
$db->query($query);
$query = sprintf("UPDATE xf_yfl_team SET rivals_elo = %d WHERE id = %d", $ratings['b'], $away['id']);
$db->query($query);
// store the players stats as well
foreach($match['players'] as $clubID => $player)
{
foreach($player as $playerID => $stats)
{
// get the required fields out
$myStats = array();
foreach($statsFields as $value)
{
$myStats[$value] = $stats[$value];
}
$persona = $stats['playername'];
$keys = array_keys($myStats);
$vals = array_values($myStats);
$query = sprintf("INSERT INTO xf_yfl_rival_stats (persona_name, match_id, player_ea_id, club_id, %s) VALUES (%s, %d, %d, %d, %s)", implode(",", $keys), $db->quote($persona), $matchID, $playerID, $clubID, implode(",", $vals));
$db->query($query);
}
}
}
}
}
}
// set last update
$query = sprintf("UPDATE xf_yfl_team SET last_rivals_update = NOW() WHERE id = %d", $team['id']);
$db->query($query);
}
echo 'complete';
exit;
}
public function actionFixelo()
{
$db = XenForo_Application::get('db');
$query = "UPDATE xf_yfl_team SET rivals_elo = 2000";
$db->query($query);
$query = "SELECT T1.id as home_id, T1.rivals_elo as home_elo, home_score, away_score, T2.id as away_id, T2.rivals_elo as away_elo FROM xf_yfl_rival_matches m INNER JOIN xf_yfl_team T1 ON m.home_team = T1.ea_id INNER JOIN xf_yfl_team T2 ON m.away_team = T2.ea_id ORDER BY played ASC";
$results = $db->fetchAll($query);
$x = 0;
foreach($results as $result)
{
$content = '';
// work out who won and get the ELO
$hteam = $this->_getTeamModel()->getById($result['home_id']);
$ateam = $this->_getTeamModel()->getById($result['away_id']);
# var_dump($ateam);
$homeELO = $hteam['rivals_elo'];
$awayELO = $ateam['rivals_elo'];
$content .= 'Home: '.$hteam['name'].' - '.$homeELO.' Away: '.$ateam['name'].' - '.$awayELO.' ';
if($result['home_score'] > $result['away_score'])
{
$h = 1;
$a = 0;
$content .= ' - Home win - ';
}
else if ($result['home_score'] < $result['away_score'])
{
$a = 1;
$h = 0;
$content .= ' - Away win - ';
}
else
{
$a = 0.5;
$h = 0.5;
$content .= ' - Draw - ';
}
$ELO = new YFL_Rivals_Helpers_ELO($homeELO,$awayELO,$h,$a);
$ratings = $ELO->getNewRatings();
$content .= 'Home: '.$ratings['a'].' Away: '.$ratings['b'].' ';
// update the ELO
$query = sprintf("UPDATE xf_yfl_team SET rivals_elo = %d WHERE id = %d", $ratings['a'], $result['home_id']);
#echo $query;
$db->query($query);
$query = sprintf("UPDATE xf_yfl_team SET rivals_elo = %d WHERE id = %d", $ratings['b'], $result['away_id']);
#echo '
'.$query.'
'.'
';
$db->query($query);
#echo $x.'
';
echo $content.'
';
$x++;
}
echo 'complete';
exit;
}
public function actionLink()
{
$visitor = XenForo_Visitor::getInstance();
YFL_Rivals_Helpers_EA::checkLogin($visitor);
$viewParams = array(
"mode" => 'link'
);
if($visitor->isManager()){
header("Location: rivals/");
exit;
}
if($visitor->getUserId()>0)
{
$EA = new YFL_Rivals_API_EA;
// check if the console cookie is set
if(isset($_COOKIE['console']))
{
$EA->setConsole($_COOKIE['console']);
}
if (!$visitor->isLinked()){
if(isset($_POST['player']) && strlen($_POST['player'])>3)
{
// check this player doesn't exist already
$pid = YFL_Rivals_Helpers_EA::getConsole(@$_COOKIE['console']);
$player = $this->_getPlayerModel()->getByName($_POST['player'], $pid);
if( ! $player)
{
// search the match stats for this gamertag to get the ea id
$eaId = 0;
$id = $this->_getPlayerModel()->getEAIdFromCache($_POST['player'], $pid);
if($id)
{
// if found, add to query. if not dont worry, they will get linked when they play
$eaId = $id['player_ea_id'];
}
// create the player record for this platform
$db = XenForo_Application::get('db');
$query = sprintf("INSERT INTO xf_yfl_player (platform_id, ea_id, user_id, name) VALUES (%d, %d, %d, %s)", $pid, $eaId, $visitor->getUserId(), $db->quote($_POST['player']));
$db->query($query);
$viewParams = array(
"mode" => 'playerlinked',
"console" => @$_COOKIE['console']
);
}
else
{
// this is already registered
$viewParams = array(
"error" => 'This player is already registered.',
"mode" => 'playerlink',
"console" => @$_COOKIE['console']
);
}
}
else
{
$viewParams = array(
"error" => '',
"mode" => 'playerlink',
"console" => @$_COOKIE['console']
);
}
return $this->responseView('XenForo_ViewPublic_Base', 'yfl_rivals_link', $viewParams);
}
if(isset($_POST['team']) || isset($_GET['confirm'])){
// query API for the team and get the members
if(isset($_GET['confirm']))
{
$team = $EA->findTeam($_GET['team']);
}
else
{
$team = $EA->findTeam($_POST['team']);
}
if(count($team > 1) && !isset($_GET['confirm'])){
// its returned multiple clubs, add a list
$viewParams['found'] = $team;
$viewParams['count'] = count($team);
$viewParams['term'] = htmlspecialchars($_POST['team']);
$viewParams['mode'] = 'found';
}
else
{
foreach($team as $id => $t){
if(isset($_GET['confirm']))
{
if($id==$_GET['confirm'])
{
$team = $t;
}
}
else
{
$team = $t;
}
}
if(count($team)){
// check if this team already exists here
$check = $this->_getTeamModel()->getByEAId($team['clubId']);
if( ! $check)
{
// output the details for them to confirm
$viewParams['team'] = $team;
$viewParams['stats'] = $EA->getStats($team['clubId']);
$viewParams['members'] = $EA->getMembers($team['clubId']);
$viewParams['mode'] = 'confirm';
}
} else {
// not found
}
}
}
if(isset($_POST['confirm'])){
// remove any existing contracts for this player
$team = $EA->findTeam($_POST['confirm']);
if( ! $team) exit;
foreach($team as $id => $t){
//if (isset($_POST['confirmId']) AND $id == $_POST['confirmId'])
{
$team = $t;
}
}
$this->_getContractModel()->removeUserContract($visitor->getUserId());
// check for the clubs badge on EA api
$image = '';
$src = $EA->getBadge(isset($team['clubId']) ? $team['clubId'] : 0);
if(file_exists($src)){
$img = copy($src, '/var/www/yfl/htdocs/styles/badges/'.$team['clubId'].'.png');
if($img)
{
// if it exists cache the image and update the team
$image = 'styles/badges/'.$team['clubId'].'.png';
}
}
if($image=='')
{
// if it doesnt exist then give them a random one
$num = rand(1, 10);
$image = 'styles/default/seasons/teams/'.$num.'.png';
}
// create the team
$db = XenForo_Application::get('db');
$query = sprintf("
INSERT INTO `xf_yfl_team`
(`ea_id`, `platform_id`, `name`, `owner`, `player_created`, `image`, `badge`, `active`)
VALUES (%d, %d, %s, %d, 'Y', 'styles/default/seasons/teams/generic.jpg', %s, 'Y');",
$db->quote(isset($team['clubId'])? $team['clubId'] : 0),
YFL_Rivals_Helpers_EA::getConsole(@$_COOKIE['console']),
$db->quote(isset($team['name']) ? $team['name'] : ''),
$visitor->getUserId(),
$db->quote($image)
);
$db->query($query);
// assign the player to the new team as manager
$team = $this->_getTeamModel()->getByName(isset($team['name']) ? $team['name'] : '');
// $query = sprintf("INSERT INTO `xf_yfl_contract` (`team_id`, `user_id`, `level`, `position`, `status`, `start_date`, `end_date`) VALUES (%d, %d, 'Manager', 'SUB', 'Accepted', NOW(), '2100-01-01 00:00:00');", $team['id'], $visitor->getUserId());
// $db->query($query);
// process the member list and assign registered users to the team
# TODO
//$this->actionPlayerCron($team['clubId']);
}
}
# var_dump($viewParams);
return $this->responseView('XenForo_ViewPublic_Base', 'yfl_rivals_link', $viewParams);
}
public static function getSessionActivityDetailsForList(array $activities)
{
return array(
'Browsing Rivals',
'Rivals',
'rivals/',
false
);
}
/* Model Includes */
protected function _getRivalsModel()
{
return $this->getModelFromCache( 'YFL_Rivals_Model_Rivals' );
}
protected function _getTeamModel()
{
return $this->getModelFromCache( 'YFL_Seasons_Model_Team' );
}
protected function _getUserModel()
{
return $this->getModelFromCache( 'YFL_Seasons_Model_User' );
}
protected function _getContractModel()
{
return $this->getModelFromCache( 'YFL_Seasons_Model_Contract' );
}
protected function _getCompetitionModel()
{
return $this->getModelFromCache( 'YFL_Seasons_Model_Competition' );
}
protected function _getPlayerModel()
{
return $this->getModelFromCache( 'YFL_Seasons_Model_Player' );
}
}