<?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
?>