git-svn-id: https://192.168.0.254/svn/Proyectos.Incam_Intranet/trunk/src@44 e2b1556b-49f8-d141-9351-52d6861a72d9
291 lines
7.2 KiB
PHP
291 lines
7.2 KiB
PHP
<?php
|
|
/*
|
|
* Clase ListaPersonas
|
|
*
|
|
* Contiene una lista de personas.
|
|
*
|
|
*/
|
|
include_once("Candidato.php");
|
|
include_once("Empleado.php");
|
|
class ListaPersonas{
|
|
|
|
//Atributos:
|
|
|
|
/* Una lista de personas. */
|
|
protected $personas = array();
|
|
|
|
/* Usuario que posee activa la sesión. */
|
|
protected $usuario;
|
|
|
|
/* Tipo de personas de la lista (candidatos o empleados). */
|
|
protected $tipo;
|
|
|
|
/* Campos por los que ordenar la lista. */
|
|
protected $orden;
|
|
|
|
/* Condiciones para búsquedas. */
|
|
protected $sql = "";
|
|
|
|
/* modo de búsqueda */
|
|
protected $order_by = "";
|
|
|
|
protected $estado = "";
|
|
|
|
//Constructor:
|
|
|
|
/**
|
|
* Crea una lista de personas.
|
|
* @param usuario - dueño de la sesión.
|
|
* @param orden - parámetros por los que ordenar la lista.
|
|
* @param sql - consulta de búsqueda.
|
|
*/
|
|
function ListaPersonas($usuario,$orden,$sql){
|
|
$this->usuario = $usuario;
|
|
$this->orden = $orden;
|
|
//Si where tiene algún valor se le añade la cláusula where.
|
|
if($sql != ""){
|
|
$this->sql = $sql;
|
|
}
|
|
if($orden != ""){
|
|
$this->order_by = $orden;
|
|
}
|
|
}
|
|
|
|
function getSQL(){
|
|
return $this->sql;
|
|
}
|
|
|
|
/**
|
|
* Busca y devuelve todas las personas de un tipo.
|
|
*/
|
|
function getPersonas(){
|
|
//PERMISOS:
|
|
/*
|
|
* Admin (1) - Todos
|
|
* RRHH (4) - Todos
|
|
* Otro - Excepción
|
|
*/
|
|
$estado = $this->estado;
|
|
if($this->personas == null){
|
|
//Modificamos la consulta en función del rol.
|
|
if($this->usuario->tieneRol(4) || $this->usuario->tieneRol(1)){
|
|
if($this->sql != ""){
|
|
if($estado > 0){
|
|
if(stripos($this->sql,"WHERE")>0){
|
|
$sqlAntesWhere=substr($this->sql,0,stripos($this->sql,"WHERE"));
|
|
$sqlDespuesWhere=substr($this->sql,stripos($this->sql,"WHERE")+5,strlen($this->sql));
|
|
// echo "antes:".$sqlAntesWhere." -- ".$sqlDespuesWhere;
|
|
$sqlConTipo="WHERE usuarios.estado='".$estado."' and ";
|
|
$sqlNueva=$sqlAntesWhere.$sqlConTipo.$sqlDespuesWhere;
|
|
|
|
} else{
|
|
// TODO quitar el aviso este
|
|
echo "COMPRUEBAME si ListaPersonas.php cuando no hay WHERE,(avisar a Sergio)";
|
|
$sqlConTipo="WHERE usuarios.estado='".$estado."' ";
|
|
$sqlNueva=$this->sql.$sqlConTipo;
|
|
}
|
|
|
|
$consulta = $this->sql." ".$this->order_by;
|
|
} else {
|
|
$sqlNueva=$this->sql;
|
|
}
|
|
$consulta = $sqlNueva." ".$this->order_by;
|
|
}else{
|
|
if($estado > 0){
|
|
$consulta = "SELECT * from usuarios where tipo = '".$this->tipo."' and estado='".$estado."' ".$this->orden;
|
|
} else{
|
|
$consulta = "SELECT * from usuarios where tipo = '".$this->tipo."' and estado in ('10', '30', '50', '70', '90','80', '100')$this->orden";
|
|
}
|
|
}
|
|
|
|
}else{
|
|
$error = "El usuario no tiene permisos para listar personas.";
|
|
throw new Exception($error);
|
|
}
|
|
$bd=new BD();
|
|
$resultado = $bd->execQuery($consulta);
|
|
//Procesamos los candidatos.
|
|
if(mysql_num_rows($resultado) == 0){
|
|
$this->personas = array();
|
|
}else{
|
|
while($rows = mysql_fetch_array($resultado)){
|
|
switch ($this->tipo) {
|
|
case "candidato":$p = new Candidato($this->usuario,$rows["oid"]);
|
|
break;
|
|
case "usuario":$p = new Empleado($this->usuario,$rows["oid"]);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
$this->personas[] = $p;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $this->personas;
|
|
}
|
|
|
|
/**
|
|
* Añade un candidato a la bd.
|
|
* @param campos - campos del nuevo candidato.
|
|
*/
|
|
protected function addPersona($campos){
|
|
if(!$this->usuario->tieneRol(1) && !$this->usuario->tieneRol(4)){
|
|
$error = "El usuario no tiene permisos para crear candidatos.";
|
|
throw new Exception($error);
|
|
return false;
|
|
}
|
|
|
|
if($this->existe($campos)){
|
|
$error = "Ya existe una persona con esos campos. No se inserta.";
|
|
throw new Exception($error);
|
|
return false;
|
|
}
|
|
|
|
$fecha = "'".date('Y'."-".'m'."-".'d')."'";
|
|
$inserto = "tipo, fecha_modificacion, fecha_registro";
|
|
$valores = "'".$this->tipo."', $fecha, $fecha";
|
|
|
|
//Procesamos los datos
|
|
foreach($campos as $key => $value){
|
|
$inserto .= ", $key";
|
|
$valores .= ", '$value'";
|
|
}
|
|
|
|
//Insertamos en la BD
|
|
$consulta = "INSERT INTO usuarios ($inserto) VALUES ($valores)";
|
|
echo $consulta;
|
|
$bd = new BD();
|
|
if(!$bd->execQuery($consulta)){
|
|
$error = "Campos del candidato incorrectos. Por favor, avise al webmaster de este error.";
|
|
throw new Exception($error);
|
|
return false;
|
|
}
|
|
$id = mysql_insert_id();
|
|
return $id;
|
|
}
|
|
|
|
/**
|
|
* Elimina un candidato, tanto de la BD como de la lista de candidatos.
|
|
* @param id - Identificador del candidato a eliminar.
|
|
* @return true si lo eliminó con éxito y false en caso contrario.
|
|
*/
|
|
function eliminarPersona($id){
|
|
//PERMISOS:
|
|
/*
|
|
* Admin (1) - Eliminar
|
|
* RRHH (4) - Eliminar
|
|
* Otro - Excepción
|
|
*/
|
|
if(!$this->usuario->tieneRol(1) && !$this->usuario->tieneRol(4)){
|
|
$error = "El usuario no tiene permisos para borrar personas.";
|
|
throw new Exception($error);
|
|
}
|
|
$persona = $this->buscarPersona($id);
|
|
//Si lo encuentro puedo eliminarlo.
|
|
if($persona != null){
|
|
$lista = $this->personas;
|
|
$this->personas = null;
|
|
//Compruebo elemento a elemento es o no el que quiero
|
|
//eliminar. Si es así, no lo copio.
|
|
foreach($lista as $elem){
|
|
if($elem->getValor("oid") != $id){
|
|
$this->personas[] = $elem;
|
|
}
|
|
}
|
|
//Elimino el pedido de la BD.
|
|
$persona->eliminar();
|
|
return true;
|
|
}else{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Busca un candidato en función de su identificador.
|
|
* @return el candidato, en caso de encontrarlo y null en
|
|
* caso contrario.
|
|
*/
|
|
function buscarPersona($id){
|
|
$lista = $this->getPersonas();
|
|
if($lista){
|
|
foreach($lista as $elem){
|
|
if($elem->getValor("oid") == $id){
|
|
return $elem;
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private function existe($campos){
|
|
$existe = false;
|
|
/** EXISTENCIA DE DNI **/
|
|
$dni = $campos["dni"];
|
|
|
|
//Si hay letra en la posición 7 es porque el DNI empezaba por cero y se le ha quitado
|
|
if(!ereg("^[0-9]+$",$dni[7])){
|
|
$letra = $dni[7];
|
|
$cont=8;
|
|
while(!ereg("^[a-zA-Z]+$",$letra) && $cont < 11){
|
|
$letra = $dni[$cont];
|
|
$cont++;
|
|
}
|
|
$nums = "0".substr($dni, 0, 7);
|
|
}else{
|
|
$letra = $dni[8];
|
|
$cont=9;
|
|
while(!verificar_letra($letra) && $cont < 12){
|
|
$letra = $dni[$cont];
|
|
$cont++;
|
|
}
|
|
$nums = substr($dni, 0, 8);
|
|
}
|
|
|
|
$letra = strtoupper($letra);
|
|
|
|
$dni = $nums.$letra;
|
|
|
|
$link = conectar();
|
|
|
|
$bd = new BD();
|
|
$consulta = "select dni from usuarios where dni='$dni'";
|
|
|
|
if($bd->numFilas($consulta) > 0){
|
|
return true;
|
|
}
|
|
|
|
/** EXISTENCIA DE CORREO ELECTRÓNICO **/
|
|
$email = $campos["email"];
|
|
|
|
$consulta = "select email from usuarios where email='$email'";
|
|
$num = $bd->numFilas($consulta);
|
|
|
|
if($num > 0){
|
|
return true;
|
|
}
|
|
|
|
/** EXISTENCIA DE NOMBRE Y APELLIDOS **/
|
|
|
|
if($campos["nombre"] == "-"){
|
|
$dato = " ";
|
|
}else{
|
|
$dato = $campos["nombre"];
|
|
}
|
|
|
|
$total = trim($dato." ".$campos["apellidos"]);
|
|
|
|
$consulta = "select email from usuarios where CONCAT(nombre,' ',apellidos)='$total' or apellidos='$total'";
|
|
$num = $bd->numFilas($consulta);
|
|
|
|
if($num > 0){
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
?>
|