Location: PHPKode > projects > Alliances Manager > modelos/ModeloAdmin.php
<?php 
/*
 *  Alliances Manager (Gestionador de Alianzas) - Travian
 *  Copyright (C) 2008-12  Viva Mayer, Francisco Mesías <hide@address.com>
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

class ModeloAdmin extends ModeloBase
{
	public function miembros(&$total_pag)
	{
		// Determinamos el orden en que aparecerán los usuarios
 		if (isset($_GET['sort'])) {
 		 switch ($_GET['sort']) {
 		 	  case 'usuario':
			    if (substr($_SESSION['sort'], 9) == "ASC") {
 		 			$_SESSION['sort']="`nombre` DESC";
 		 		} else {
 		 			$_SESSION['sort']="`nombre` ASC";
 		 		}
				break;
			  case 'registro':
			    if (substr($_SESSION['sort'], 11) == "ASC") {
  					$_SESSION['sort']="`registro` DESC";
		  		} else {
  					$_SESSION['sort']="`registro` ASC";
		  		}
				break;
			  case 'login':
	    		if (substr($_SESSION['sort'], 13) == "ASC") {
		  			$_SESSION['sort']="`last_login` DESC";
  				} else {
		  			$_SESSION['sort']="`last_login` ASC";
  				}
				break;
			  case 'aldea':
			    if (substr($_SESSION['sort'], 20) == "ASC") {
  					$_SESSION['sort']="`last_change_aldea` DESC";
		  		} else {
  					$_SESSION['sort']="`last_change_aldea` ASC";
		  		}
				break;
			  case 'tropa':
	    		if (substr($_SESSION['sort'], 20) == "ASC") {
		  			$_SESSION['sort']="`last_change_tropa` DESC";
  				} else {
		  			$_SESSION['sort']="`last_change_tropa` ASC";
  				}
				break;
		  }
		 } else {
		 	// Ordenación Estandar
		 	$_SESSION['sort']="`nombre` ASC";
		 }
		// paginamos los resultados
		$cant_reg = 30;
		$num_pag = (isset($_GET['pag'])) ? $_GET['pag'] : 1 ;
		
		if ($num_pag == 1) $comienzo = 0;
		else $comienzo = ($num_pag - 1) * $cant_reg;		
		
		$sql = "SELECT count(*) FROM `".$this->config->get('PREFIX')."usuario` WHERE `estado` = 'Activo'";
		$resultado = mysql_query($sql, $this->db) or die(mysql_error($this->db));
		
		$total_reg = mysql_fetch_row($resultado);
		$total_pag = ceil($total_reg[0] / $cant_reg);
		
		$sql = "SELECT 
		 			`nombre` , 
					`registro` , 
					`last_login`, 
					`last_change_aldea`, 
					`last_change_tropa` 
		 		 FROM `".$this->config->get('PREFIX')."usuario`
				 WHERE `estado` = 'Activo'
				 ORDER BY ".$_SESSION['sort']."
				 LIMIT ".$comienzo.", ".$cant_reg;
		 
		$resultado = mysql_query($sql, $this->db) or die(mysql_error($this->db));
		
		$dia_act = date('d');
		$mes_act = date('m');
		$anio_act = date('Y');
		
		$patron = '/([0-9]*)-([0-9]*)-([0-9]*)/';
		// $fecha[1] --> AÑO - $fecha[2] --> MES - $fecha[3] --> DÍA
		$devolver = array();
				
		while ($row = mysql_fetch_assoc($resultado))
		{	
			if ($row['last_login'] != '0000-00-00')
			{
				preg_match($patron, $row['last_login'], $fecha);
				$longin = dias_entre($dia_act, $mes_act, $anio_act, 
											$fecha[3], $fecha[2], $fecha[1]);
				
				if ($row['last_change_aldea'] != '0000-00-00')
				{
					preg_match($patron, $row['last_change_aldea'], $fecha);
					$cambio_aldea = dias_entre($dia_act, $mes_act, $anio_act, 
													  $fecha[3], $fecha[2], $fecha[1]);
				
					if ($row['last_change_tropa'] != '0000-00-00')
					{
						preg_match($patron, $row['last_change_tropa'], $fecha);
						$cambio_tropa = dias_entre($dia_act, $mes_act, $anio_act, 
														  $fecha[3], $fecha[2], $fecha[1]);
					} else $cambio_tropa = self::$texto->get('nunca');
				} else {
					$cambio_aldea = self::$texto->get('nunca');
					$cambio_tropa = self::$texto->get('nunca');
				}
			} else {
				$longin = self::$texto->get('nunca');
				$cambio_aldea = self::$texto->get('nunca');
				$cambio_tropa = self::$texto->get('nunca');
			}		
			
			$devolver[] = array(
								'nombre'=> $row['nombre'], 
								'registro'=> $row['registro'], 
								'last_login'=> $longin, 
								'last_change_aldea'=> $cambio_aldea, 
								'last_change_tropa'=> $cambio_tropa
								);
		}
		
		mysql_free_result($resultado);
		return $devolver;
		 
	} // Fin funcion miembros
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------	
	public function nuevos()
	{
		$sql = "SELECT 
		 			`nombre` , 
					`registro`
		 		 FROM `".$this->config->get('PREFIX')."usuario`
				 WHERE `estado` = 'Inactivo'
				 ORDER BY `registro`";
				 		 
		$resultado = mysql_query($sql, $this->db) or die(mysql_error($this->db));
		
		return $resultado;
	}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------	
	// con esta función activamos nuevos usuarios
	public function activar($target)
	{
		$lista = $_POST['check'];
		$concat = "";
		$num = count($lista);
		
		foreach( $lista as $key => $user ) {
			$concat .= " `nombre`=\"".$user."\"";
			if (($key + 1) != $num) { $concat .= " OR"; }
		}
		$sql = "UPDATE `".$this->config->get('PREFIX')."usuario` SET `estado`=1 WHERE".$concat;
		mysql_query($sql, $this->db) or die(mysql_error($this->db));
		
		header("Location: ".$target);
	}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------	
	// borramos un usuario
	public function borrar($target)
	{
		$lista = $_POST['check'];
		$concat = "";
		$num = count($lista);
		
		foreach( $lista as $key => $user ) {
			$concat .= " `nombre`=\"".$user."\"";
			if (($key+1)!=$num) { $concat .= " OR"; }
		}
		$sql = "DELETE FROM `".$this->config->get('PREFIX')."usuario` WHERE".$concat;
		mysql_query($sql, $this->db) or die(mysql_error($this->db));
		
		header("Location: ".$target);
	}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------	
	// desactivamos un usuario
	public function desactivar()
	{
		$lista = $_POST['check'];
		$concat = "";
		$num = count($lista);
		
		foreach( $lista as $key => $user ) {
			$concat .= " `nombre`=\"".$user."\"";
			if (($key+1)!=$num) { $concat .= " OR"; }
		}
		$sql = "UPDATE `".$this->config->get('PREFIX')."usuario` SET `estado`=2 WHERE".$concat;
		mysql_query($sql, $this->db) or die(mysql_error($this->db));
		
		header("Location: index.php?ctrl=Admin&mod=miembros");
	}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
	//  mostramos permisos
	public function ver_permisos($flag)
	{	
		if ($flag)
			{	//consulta para permisos.php
				$sql = "SELECT p.`usuario_nombre`, p.`ver_tropas`, p.`gestion`, p.`buscar`, p.`grupo` FROM `".$this->config->get('PREFIX')."permiso` AS p, `".$this->config->get('PREFIX')."usuario` AS u WHERE p.`usuario_nombre` = u.`nombre` AND u.`estado`='Activo' ORDER BY `ver_tropas` DESC, `gestion` DESC, `buscar` DESC";
				$resultado= mysql_query($sql, $this->db) or die (mysql_error($this->db));
			}
		else {	
				if ( isset ( $_POST['check'] ) )
					{
						//concatenamos los seleccionados
						$usuarios = $_POST['check'];
						$concat = "";
						$cant = count($usuarios);
						if ($cant > 0 ) {
							foreach($usuarios as $key => $user)
							{
								$concat .= "\"".$user."\"";
								if (($key+1)!=$cant)  
									$concat .= ", "; 
							}
							//consulta para modpermisos php		
							$sql = "SELECT `usuario_nombre`, `ver_tropas`, `gestion`, `buscar`, `grupo` FROM `".$this->config->get('PREFIX')."permiso` WHERE ( `usuario_nombre` IN ( $concat )) ORDER BY `ver_tropas` DESC, `gestion` DESC, `buscar` DESC";	
							$resultado= mysql_query($sql, $this->db) or die (mysql_error($this->db));
						} else $resultado = "E_seleccion";
					}
				else 	//si no se sellecciono ninguna fila devolvemos un error
					$resultado = "E_seleccion";	
			 }
		return $resultado;
	}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------	
	// modificamos permisos
	public function modificar_permisos()
	{
		$matriz = $_POST['lista'];
		foreach($matriz as $usuario)
		{
			$sql = "UPDATE `".$this->config->get('PREFIX')."permiso` 
					SET 
						`ver_tropas` = ". (int) $usuario[2]." , 
						`gestion` = ". (int) $usuario[3]." , 
						`buscar` = ". (int) $usuario[4]." ,
						`grupo`= ". (int) $usuario[5]."
					WHERE `usuario_nombre` = '".$usuario[1]."'";
			mysql_query($sql, $this->db) or die (mysql_error($this->db));
		}
		
		header("Location: index.php?ctrl=Admin&mod=permisos");
	}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
	public function DetalleUsuario(&$DP, &$AS, &$TS)
	{
		// ---> Comenzamos obteniendo los Datos Personales
		$sql = "SELECT 
					`nombre`,
					`raza`,
					`estado`,
					`grupo`
				FROM 
					`".$this->config->get('PREFIX')."usuario`
				WHERE 
					`nombre` = '".$_GET['uname']."'";
		
		$resultado = mysql_query($sql, $this->db) or die(mysql_error($this->db));
		$aux = mysql_fetch_assoc($resultado);
		mysql_free_result($resultado);
		
		if ($aux['grupo'])
		{
			$sql = "SELECT 
						`nombre`,
						`id`
					FROM 
						`".$this->config->get('PREFIX')."grupo`
					WHERE `id` = ".$aux['grupo'];
			
			$resultado = mysql_query($sql, $this->db) or die(mysql_error($this->db));
			$aux1 = mysql_fetch_assoc($resultado);
			
			mysql_free_result($resultado);
		} else $aux1 = array('id'=>0, 'nombre'=> 'SIN GRUPO');
		
		$sql = "SELECT 
					`ver_tropas`, 
					`gestion`, 
					`buscar`,
					`grupo`
				FROM 
					`".$this->config->get('PREFIX')."permiso`
				WHERE
					`usuario_nombre`= '".$aux['nombre']."'";
		$resultado = mysql_query($sql, $this->db) or die(mysql_error($this->db));
		$aux2 = mysql_fetch_assoc($resultado);
		
		mysql_free_result($resultado);
		
		$DP = array(
					  'nombre'=> $aux['nombre'],
					  'raza' => self::$texto->get('R'.$aux['raza'].'L'),
					  'estado' => $aux['estado'],
					  'grupo'=> array($aux1['id'], $aux1['nombre']),
					  'permisos'=> array($aux2['ver_tropas'], $aux2['gestion'], 
					  					 $aux2['buscar'], $aux2['grupo'])	  
				   );
		
		// ---> Ahora obtenemos los datos pertienentes a las Aldeas
		$AS = array(0,0,0,0,0,0);
		
		$sql = "SELECT `tipo`, count(*) AS cant FROM `".$this->config->get('PREFIX')."aldea` WHERE `usuario_nombre` = '".$DP['nombre']."' GROUP BY `tipo`";
		$resultado = mysql_query($sql, $this->db) or die(mysql_error($this->db));
		
		while ($aux = mysql_fetch_assoc($resultado))
		{
			switch ($aux['tipo'])
			{
				case '15c': $AS[0] = $aux['cant'];
					break;
					
				case '9c': $AS[1] = $aux['cant'];
					break;
					
				case 'Normal': $AS[2] = $aux['cant'];
					break;
					
				case 'Madera': $AS[3] = $aux['cant'];
					break;
					
				case 'Barro': $AS[4] = $aux['cant'];
					break;
				
				case 'Hierro': $AS[5] = $aux['cant'];
					break;
			}
		}
		mysql_free_result($resultado);
				
		// ---> Y ahora por las tropas en cada aldea
		$sql = "SELECT `nombre`, `x`, `y` FROM `".$this->config->get('PREFIX')."aldea` WHERE `usuario_nombre` = '".$DP['nombre']."'";
		$sql_aldeas = mysql_query($sql, $this->db) or die(mysql_error($this->db));
		
		$contador = 0;
		while ( $aldea = mysql_fetch_assoc($sql_aldeas) )
		{	
			// ###---> COMENZADOS CON LAS TROPAS EN ESTA ALDEA <----###
			$sql = "SELECT `idtropa`, `cantidad` FROM `".$this->config->get('PREFIX')."tropas_aldea` WHERE `ox`=".$aldea['x']." AND `oy`=".$aldea['y']." ORDER BY `idtropa` ASC";
			$sql_tropas_en = mysql_query($sql, $this->db) or die(mysql_error($this->db));
			
			$TS[$contador] = array( 
					'aldea'=> $aldea['nombre'],
					'x'=> $aldea['x'],
					'y'=> $aldea['y'],
					't0'=> 0, 't1'=> 0, 't2'=> 0, 't3'=> 0, 't4'=> 0, 
					't5'=> 0, 't6'=> 0, 't7'=> 0, 't8'=> 0, 't9'=> 0 
				);
			
			while ( $aux = mysql_fetch_assoc($sql_tropas_en) )
			{
				$it = $aux['idtropa'] - (int) ($aux['idtropa']/10) * 10;
				$TS[$contador]['t'.$it] = $aux['cantidad']; // Ingresamos la cantidad pertinente al tipo de tropa
			}
			mysql_free_result($sql_tropas_en);
					
			// ###----> AHORA LAS TROPAS DE REFUERSO DE ESTA ALDEA EN OTRA ALDEA <----###
			$sql = "SELECT `idtropa`, `cantidad` FROM `".$this->config->get('PREFIX')."refuerzos` WHERE `ox`=".$aldea['x']." AND `oy`=".$aldea['y']." ORDER BY `dx` ASC , `dy` ASC";
			$sql_tropas_ref = mysql_query($sql, $this->db) or die(mysql_error($this->db));	
			
			$num = mysql_num_rows($sql_tropas_ref); $j = 0;
			$aux = mysql_fetch_assoc($sql_tropas_ref);
			while ( $j < $num )
			{	
				$it = $aux['idtropa'] - ((int) ($aux['idtropa']/10)) * 10;
				$TS[$contador]['t'.$it] += $aux['cantidad']; // Ingresamos la cantidad pertinente al tipo de tropa
				$aux = mysql_fetch_assoc($sql_tropas_ref);
				$j++;
			} // fin while interno (refuerzos)
			
			mysql_free_result($sql_tropas_ref);
			$contador++;
			
		} // fin while principal
		
	}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
	public function ResumenUsuarios()
	{
		$arreglo = array(); // aquí estarán los datos que serán retornados
		
		// primero obtenemos los datos de todos los usuarios activos
		$sql = "SELECT `nombre`, `last_login`, `grupo` FROM `".$this->config->get('PREFIX')."usuario` WHERE `estado`='Activo'";
		$jugadores = mysql_query($sql, $this->db) or die(mysql_error($this->db));
		
		while ($player = mysql_fetch_assoc($jugadores))// --> Datos <--
		{
			// grupo al que pertecene
			if ($player['grupo'])
			{
				$sql = "SELECT `nombre`, `id` FROM `".$this->config->get('PREFIX')."grupo` WHERE `id` = ".$player['grupo'];				
				$resultado = mysql_query($sql, $this->db) or die(mysql_error($this->db));
				$grupo = mysql_fetch_assoc($resultado); // --> Datos <--
				
				mysql_free_result($resultado);
			} else $grupo = array('id'=>0, 'nombre'=> 'SIN GRUPO'); // --> Datos <--
			
			// total de aldeas
			$sql = "SELECT COUNT(*) AS cant FROM `".$this->config->get('PREFIX')."aldea` WHERE `usuario_nombre`= '".$player['nombre']."'";
			$resultado = mysql_query($sql, $this->db) or die(mysql_error($this->db));
			$tot_aldeas = mysql_fetch_assoc($resultado); // --> Datos <--
				
			mysql_free_result($resultado);
			
			// ---> OFENSIVA <---
			// tropas ofensivas	en las aldeas
			$sql = "SELECT SUM( `cantidad` ) AS cant
					FROM `".$this->config->get('PREFIX')."tropas_aldea`
					WHERE 
				   		(`ox` , `oy`) IN (
								SELECT `x` , `y` 
								FROM `".$this->config->get('PREFIX')."aldea` 
								WHERE `usuario_nombre` = '".$player['nombre']."' ) AND 
						`idtropa` IN (12,14,15,20,22,25,31,33,35)";			
			
			$resultado = mysql_query($sql, $this->db) or die(mysql_error($this->db));
			$off_en = mysql_fetch_assoc($resultado);			
			mysql_free_result($resultado);
			
			// tropas ofensivas de refuerzos
			$sql = "SELECT SUM( `cantidad` ) AS cant
					FROM `".$this->config->get('PREFIX')."refuerzos`
					WHERE 
				   		(`ox` , `oy`) IN (
								SELECT `x` , `y` 
								FROM `".$this->config->get('PREFIX')."aldea` 
								WHERE `usuario_nombre` = '".$player['nombre']."' ) AND 
						`idtropa` IN (12,14,15,20,22,25,31,33,35)";			
			
			$resultado = mysql_query($sql, $this->db) or die(mysql_error($this->db));
			$off_ref = mysql_fetch_assoc($resultado);
			mysql_free_result($resultado);
			
			$tot_off = $off_en['cant'] + $off_ref['cant']; // --> Datos <--
			
			// ---> DEFENSA <---
			// tropas defensivas en las aldeas
			$sql = "SELECT SUM( `cantidad` ) AS cant
					FROM `".$this->config->get('PREFIX')."tropas_aldea`
					WHERE 
				   		(`ox` , `oy`) IN (
								SELECT `x` , `y` 
								FROM `".$this->config->get('PREFIX')."aldea` 
								WHERE `usuario_nombre` = '".$player['nombre']."' ) AND 
						`idtropa` IN (10,11,21,24,30,34)";
			
			$resultado = mysql_query($sql, $this->db) or die(mysql_error($this->db));
			$def_en = mysql_fetch_assoc($resultado);			
			mysql_free_result($resultado);
			
			// tropas defensivas de refuerzos
			$sql = "SELECT SUM( `cantidad` ) AS cant
					FROM `".$this->config->get('PREFIX')."refuerzos`
					WHERE 
				   		(`ox` , `oy`) IN (
								SELECT `x` , `y` 
								FROM `".$this->config->get('PREFIX')."aldea` 
								WHERE `usuario_nombre` = '".$player['nombre']."' ) AND 
						`idtropa` IN (10,11,21,24,30,34)";			
			
			$resultado = mysql_query($sql, $this->db) or die(mysql_error($this->db));
			$def_ref = mysql_fetch_assoc($resultado);
			mysql_free_result($resultado);
			
			$tot_def = $def_en['cant'] + $def_ref['cant']; // --> Datos <--
			
			// ---> ESPIAS <---
			// espias en casa
			$sql = "SELECT SUM( `cantidad` ) AS cant
					FROM `".$this->config->get('PREFIX')."tropas_aldea`
					WHERE 
				   		(`ox` , `oy`) IN (
								SELECT `x` , `y` 
								FROM `".$this->config->get('PREFIX')."aldea` 
								WHERE `usuario_nombre` = '".$player['nombre']."' ) AND 
						`idtropa` IN (13,23,32)";			
			
			$resultado = mysql_query($sql, $this->db) or die(mysql_error($this->db));
			$tot_espias_en = mysql_fetch_assoc($resultado);
			mysql_free_result($resultado);
			
			// espias como refuerzos
			$sql = "SELECT SUM( `cantidad` ) AS cant
					FROM `".$this->config->get('PREFIX')."refuerzos`
					WHERE 
				   		(`ox` , `oy`) IN (
								SELECT `x` , `y` 
								FROM `".$this->config->get('PREFIX')."aldea` 
								WHERE `usuario_nombre` = '".$player['nombre']."' ) AND 
						`idtropa` IN (13,23,32)";			
			
			$resultado = mysql_query($sql, $this->db) or die(mysql_error($this->db));
			$tot_espias_ref = mysql_fetch_assoc($resultado);
			mysql_free_result($resultado);
			
			$tot_espias = $tot_espias_en['cant'] + $tot_espias_ref['cant']; // --> Datos <--
			
			// ---> MAQUINARIA <---
			// maquinaria en casa
			$sql = "SELECT SUM( `cantidad` ) AS cant
					FROM `".$this->config->get('PREFIX')."tropas_aldea`
					WHERE 
				   		(`ox` , `oy`) IN (
								SELECT `x` , `y` 
								FROM `".$this->config->get('PREFIX')."aldea` 
								WHERE `usuario_nombre` = '".$player['nombre']."' ) 
						AND `idtropa` IN (16,17,26,27,36,37)";			
			
			$resultado = mysql_query($sql, $this->db) or die(mysql_error($this->db));
			$tot_maq_en = mysql_fetch_assoc($resultado);
			mysql_free_result($resultado);
			
			// maquinaria como refuerzos
			$sql = "SELECT SUM( `cantidad` ) AS cant
					FROM `".$this->config->get('PREFIX')."refuerzos`
					WHERE 
				   		(`ox` , `oy`) IN (
								SELECT `x` , `y` 
								FROM `".$this->config->get('PREFIX')."aldea` 
								WHERE `usuario_nombre` = '".$player['nombre']."' ) 
						AND `idtropa` IN (16,17,26,27,36,37)";			
			
			$resultado = mysql_query($sql, $this->db) or die(mysql_error($this->db));
			$tot_maq_ref = mysql_fetch_assoc($resultado);
			mysql_free_result($resultado);
			
			$tot_maquinaria = $tot_maq_en['cant'] + $tot_maq_ref['cant']; // --> Datos <--
			
			//--------------
			$dia_act = date('d');
			$mes_act = date('m');
			$anio_act = date('Y');
		
			$patron = '/([0-9]*)-([0-9]*)-([0-9]*)/';
			// $fecha[1] --> AÑO - $fecha[2] --> MES - $fecha[3] --> DÍA
				
			if ($player['last_login'] != '0000-00-00')
			{
				preg_match($patron, $player['last_login'], $fecha);
				$longin = dias_entre($dia_act, $mes_act, $anio_act, 
											$fecha[3], $fecha[2], $fecha[1]);
			} else $longin = self::$texto->get('nunca');
			//--------------
			
			$arreglo[] = array(
								'player' => $player['nombre'],
								'tot_aldeas' => (int) $tot_aldeas['cant'],
								'tot_off' => (int) $tot_off,
								'tot_def' => (int) $tot_def,
								'tot_espias' => (int) $tot_espias,
								'tot_maquinaria' => (int) $tot_maquinaria,
								'login' => $longin,
								'grupo' => $grupo
							  );			
			
		} // fin while player
		
		return $arreglo;
		
	} // Fin function ResumenUsuarios()

}// FIN CLASE
?>
Return current item: Alliances Manager