2011-04-04 15:16:10 +00:00
< ? 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 {
2011-05-10 20:17:13 +00:00
$consulta = " SELECT * from usuarios where tipo = ' " . $this -> tipo . " ' and estado in ('510', '520', '521', '522', '523','530', '540', '550', '560') $this->orden " ;
2011-04-04 15:16:10 +00:00
}
}
} 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 ;
}
2011-05-04 14:28:18 +00:00
$fecha = " ' " . date ( 'Y' . " - " . 'm' . " - " . 'd' ) . " ' " ;
2011-04-04 15:16:10 +00:00
$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 ) " ;
2011-05-19 08:46:58 +00:00
2011-04-04 15:16:10 +00:00
$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 ;
}
}
?>