<?php

/**
 * StatBuilder.php
 *
 * @version 1
 * @copyright 2008 by Chlorel for XNova
 */

define('INSIDE'  , true);
define('INSTALL' , false);
define('IN_ADMIN', true);

$xnova_root_path = './../';
include($xnova_root_path . 'extension.inc');
include($xnova_root_path . 'common.' . $phpEx);

include($xnova_root_path . 'admin/statfunctions.' . $phpEx);


	if ($user['authlevel'] >= 1) {
		includeLang('admin');

		$mtime        = microtime();
		$mtime        = explode(" ", $mtime);
		$mtime        = $mtime[1] + $mtime[0];
		$starttime    = $mtime;
		
		$StatDate   = time();
		
		$Members = array();
		
			$sql = <<<EOF
							SELECT	u.*, 
									s.build_rank, 
									s.defs_rank, 
									s.fleet_rank, 
									s.tech_rank, 
									s.total_rank 
							FROM {{table}}users AS u 
							LEFT JOIN {{table}}statpoints AS s ON u.id = s.id_owner AND s.stat_type = '1' 
							WHERE u.id = s.id_owner 
							ORDER BY u.id;
EOF;

			$Users = doquery( $sql, '');
			
			$nb = 0;
			
			while ($TheUser = mysql_fetch_assoc ($Users))
			{
				$Members['id'][$nb] 			= $TheUser['id'];
				$Members['ally_id'][$nb] 		= $TheUser['ally_id'];
				
				$Members['old_build_rank'][$nb] 	= $TheUser['build_rank'];
				$Members['old_defs_rank'][$nb]		= $TheUser['defs_rank'];
				$Members['old_fleet_rank'][$nb] 	= $TheUser['fleet_rank'];
				$Members['old_tech_rank'][$nb]		= $TheUser['tech_rank'];
				$Members['old_total_rank'][$nb] 	= $TheUser['total_rank'];
				
				// Total des unitées consommée pour la recherche
				$Points         	= GetTechnoPoints ( $TheUser );
				$Members['tech_count'][$nb]	= $Points['TechCount'];
				$Members['tech_point'][$nb]	= ($Points['TechPoint'] / $game_config['stat_settings']);
				
				$nb++;
				
			}

		doquery ("DELETE FROM {{table}} WHERE `stat_type` = '1';", 'statpoints');
		
		
		
		$sql = <<<EOF
						SELECT 		p.*   
						FROM   		{{table}}planets AS p
						LEFT JOIN	{{table}}users AS u ON u.id = p.id_owner 
						WHERE		u.id = p.id_owner
						ORDER BY	p.id_owner
EOF;
		$Planets = doquery(	$sql , '');
		
		// $IdUser doit être égal à 1 car la première valeur de $ThePlanet['id'] sera 1
		// L'id de l'administrateur
		$IdUser = 1;
		
		$nb = 0;
		
		while ($ThePlanet = mysql_fetch_assoc ($Planets))
		{
			if ($ThePlanet['id_owner'] != $IdUser)
			{				
				// Si on arrive c'est qu'on vient d'arriver sur une planète d'un
				// autre joueur
				
				// On récupère les points totaux du précédent joueur				
				$Members['total_points'][$nb]	= $Members['tech_point'][$nb] + $Members['build_points'][$nb] + $Members['defs_points'][$nb] + $Members['fleets_points'][$nb];				
				$Members['total_counts'][$nb]	= $Members['tech_count'][$nb] + $Members['build_counts'][$nb] + $Members['defs_counts'][$nb] + $Members['fleets_counts'][$nb];
				
				// On récupère l'id du nouveau joueur
				$IdUser = $ThePlanet['id_owner'];

				$nb++;
				
				// Initialisation
				$Members['build_counts'][$nb]	= 0;
				$Members['build_points'][$nb]	= 0;
				
				$Members['defs_counts'][$nb]	= 0;
				$Members['defs_points'][$nb]	= 0;
		
				$Members['fleets_counts'][$nb]	= 0;
				$Members['fleets_points'][$nb]	= 0;
			}
			
			// Calcul des points apportés par les bâtiments
			$Points							 = GetBuildPoints ( $ThePlanet );
			$Members['build_counts'][$nb]	+= $Points['BuildCount'];
			$Members['build_points'][$nb]	+= ($Points['BuildPoint'] / $game_config['stat_settings']);			
			$PlanetPoints					= ($Points['BuildPoint'] / $game_config['stat_settings']);
			
			// Calcul des points apportés par les défenses
			$Points							 = GetDefensePoints ( $ThePlanet );
			$Members['defs_counts'][$nb]	+= $Points['DefenseCount'];
			$Members['defs_points'][$nb]	+= ($Points['DefensePoint'] / $game_config['stat_settings']);
			$PlanetPoints					+= ($Points['DefensePoint'] / $game_config['stat_settings']);

			// Calcul des points apportés par les vaisseaux
			$Points							 = GetFleetPoints ( $ThePlanet );
			$Members['fleets_counts'][$nb]	+= $Points['FleetCount'];
			$Members['fleets_points'][$nb]	+= ($Points['FleetPoint'] / $game_config['stat_settings']);
			$PlanetPoints					+= ($Points['FleetPoint'] / $game_config['stat_settings']);
			
			// Mise à jour des points de la planète
			$QryUpdatePlanet  = "UPDATE {{table}} SET ";
			$QryUpdatePlanet .= "`points` = '". $PlanetPoints ."' ";
			$QryUpdatePlanet .= "WHERE ";
			$QryUpdatePlanet .= "`id` = '". $ThePlanet['id'] ."';";
			
			doquery ( $QryUpdatePlanet , 'planets');

		}
		
		// Mise à jour des joueurs par bloc
		
		$BlocMembers = 25;
		
		if ( sizeof($Members['id']) > $BlocMembers	)
		{
			$NumberQuerys = floor(sizeof($Members['id']) / $BlocMembers);
			$Query = 0;
		}
		else
		{
			$NumberQuerys = 1;
			$Query = 1;
			$BlocMembers = sizeof($Members['id']);
		}

		While ( $Query <= $NumberQuerys)
		{
		
			$QryInsertStats  = <<<EOF
										INSERT INTO {{table}} 
										(`id_owner`, `id_ally`, `stat_type`, `stat_code`, `tech_points`, `tech_count`,
										`tech_old_rank`, `build_points`, `build_count`, `build_old_rank`, `defs_points`, 
										`defs_count`, `defs_old_rank`, `fleet_points`, `fleet_count`, `fleet_old_rank`, 
										`total_points`, `total_count`, `total_old_rank`, `stat_date`) VALUES 
EOF;

			for ($Count = $Query * $BlocMembers ; $Count < $BlocMembers * ($Query + 1) ; $Count++)
			{
				if ($Members['id'][$Count] <> 0)
					$QryInsertStats .= <<<EOF
												('	{$Members['id'][$Count]}				'	, 	'{$Members['ally_id'][$Count]}			'	,	'1'		,		'1', 
												 '	{$Members['tech_point'][$Count]}		'	, 	'{$Members['tech_count'][$Count]}		'	,	'{$Members['old_tech_rank'][$Count]}	', 
												 '	{$Members['build_points'][$Count]}		'	, 	'{$Members['build_counts'][$Count]}		'	,	'{$Members['old_build_rank'][$Count]}	', 
												 '	{$Members['defs_points'][$Count]}		'	, 	'{$Members['defs_counts'][$Count]}		'	,	'{$Members['old_defs_rank'][$Count]}	', 
												 '	{$Members['fleets_points'][$Count]}		'	, 	'{$Members['fleets_counts'][$Count]}	'	,	'{$Members['old_fleet_rank'][$Count]}	', 
												 '	{$Members['total_points'][$Count]}		'	, 	'{$Members['total_counts'][$Count]}		'	,	'{$Members['old_total_rank'][$Count]}	', 
												 '	{$StatDate}								'), 
EOF;
			}
			
			$Query++;
		
			$QryInsertStats = substr($QryInsertStats, 0, -2);
			
			doquery ( $QryInsertStats , 'statpoints');
		}
		
		// Mise à jour du classement des Recherches
		doquery("SET @row=0;", '');
		$RankQry = doquery("SELECT @row:=@row+1 AS TechRank, `id_owner` FROM {{table}} WHERE `stat_type` = '1' AND `stat_code` = '1' ORDER BY `tech_points` DESC;", 'statpoints');
		
		while ($TheRank = mysql_fetch_assoc($RankQry))
		{
			$QryUpdateStats  = <<<EOF
										UPDATE 	{{table}} SET 
												`tech_rank` = '{$TheRank['TechRank']}' 
										WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '{$TheRank['id_owner']}';
EOF;
			doquery ( $QryUpdateStats , 'statpoints');
		}

		// Mise à jour du classement des Bâtiments
		doquery("SET @row=0;", '');
		$RankQry = doquery("SELECT @row:=@row+1 AS BuildRank, `id_owner` FROM {{table}} WHERE `stat_type` = '1' AND `stat_code` = '1' ORDER BY `build_points` DESC;", 'statpoints');
		
		while ($TheRank = mysql_fetch_assoc($RankQry))
		{
			$QryUpdateStats  = <<<EOF
										UPDATE 	{{table}} SET 
												`build_rank` = '{$TheRank['BuildRank']}' 
										WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '{$TheRank['id_owner']}';
EOF;
			doquery ( $QryUpdateStats , 'statpoints');
		}

		// Mise à jour du classment des Défenses
		doquery("SET @row=0;", '');
		$RankQry = doquery("SELECT @row:=@row+1 AS DefRank, `id_owner` FROM {{table}} WHERE `stat_type` = '1' AND `stat_code` = '1' ORDER BY `defs_points` DESC;", 'statpoints');
		
		while ($TheRank = mysql_fetch_assoc($RankQry))
		{			
			$QryUpdateStats  = <<<EOF
										UPDATE 	{{table}} SET 
												`defs_rank` = '{$TheRank['DefRank']}' 
										WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '{$TheRank['id_owner']}';
EOF;
			doquery ( $QryUpdateStats , 'statpoints');
		}

		// Mise à jour du classement des Flottes
		doquery("SET @row=0;", '');
		$RankQry = doquery("SELECT @row:=@row+1 AS FleetRank, `id_owner` FROM {{table}} WHERE `stat_type` = '1' AND `stat_code` = '1' ORDER BY `fleet_points` DESC;", 'statpoints');
		
		$RankQry        = doquery("SELECT * FROM {{table}} WHERE `stat_type` = '1' AND `stat_code` = '1' ORDER BY `fleet_points` DESC;", 'statpoints');
		while ($TheRank = mysql_fetch_assoc($RankQry))
		{		
			$QryUpdateStats  = <<<EOF
										UPDATE 	{{table}} SET 
												`defs_rank` = '{$TheRank['FleetRank']}' 
										WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '{$TheRank['id_owner']}';
EOF;
			doquery ( $QryUpdateStats , 'statpoints');
		}

		// Mise à jour du classement Général
		doquery("SET @row=0;", '');
		$RankQry = doquery("SELECT @row:=@row+1 AS TotalRank, `id_owner` FROM {{table}} WHERE `stat_type` = '1' AND `stat_code` = '1' ORDER BY `total_points` DESC;", 'statpoints');
		
		while ($TheRank = mysql_fetch_assoc($RankQry))
		{		
			$QryUpdateStats  = <<<EOF
										UPDATE 	{{table}} SET 
												`defs_rank` = '{$TheRank['TotalRank']}' 
										WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '{$TheRank['id_owner']}';
EOF;
			doquery ( $QryUpdateStats , 'statpoints');
		}			
		
		$NbreMembers = sizeof($Members['id']);
		
		unset($Members);
		
		$mtime        = microtime();
		$mtime        = explode(" ", $mtime);
		$mtime        = $mtime[1] + $mtime[0];
		$endtime      = $mtime;
		
		$LengthTime = round($endtime - $starttime, 2);
		
		AdminMessage ( "<p>" . $lang['adm_done'] . "</p><p>Dur&eacute;e du traitement : {$LengthTime} seconde(s) pour {$NbreMembers} membres", $lang['adm_stat_title'] );
?>