Incam_Intranet/Objects/ListaPersonas.php

292 lines
7.2 KiB
PHP
Raw Normal View History

<?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<73>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<EFBFBD>o de la sesi<EFBFBD>n.
* @param orden - par<EFBFBD>metros por los que ordenar la lista.
* @param sql - consulta de b<EFBFBD>squeda.
*/
function ListaPersonas($usuario,$orden,$sql){
$this->usuario = $usuario;
$this->orden = $orden;
//Si where tiene alg<6C>n valor se le a<>ade la cl<63>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<EFBFBD>n
*/
$estado = $this->estado;
if($this->personas == null){
//Modificamos la consulta en funci<63>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 ('510', '520', '521', '522', '523','530', '540', '550', '560')$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<EFBFBD>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<EFBFBD> con <EFBFBD>xito y false en caso contrario.
*/
function eliminarPersona($id){
//PERMISOS:
/*
* Admin (1) - Eliminar
* RRHH (4) - Eliminar
* Otro - Excepci<EFBFBD>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<61>, 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<EFBFBD>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<63>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<54>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;
}
}
?>