numFilas($consulta); if($num > 0){ $this->campos['oid']=$oid; }else{ $error = "Persona no encontrada."; throw new Exception($error); } } function tieneRol($rol){ $roles=$this->getValor("rol"); $arrayByUser=explode(".", $roles); //Comprobamos si tiene el rol directamente: if(in_array($rol,$arrayByUser)){ return true; //En caso contrario, miramos si tiene rol padre: }else{ $objetoRol = new Rol($rol); foreach($arrayByUser as $unRol){ if($objetoRol->esHijoDe($unRol)){ return true; } } } return false; } function tieneRolLista($rol){ $roles=$this->getValor("rol"); $arrayByUser=explode(".", $roles); $arrayRoles=explode(".", $rol); // echo "roles usuario:"; // print_r($arrayByUser); // echo " roles opcion:"; // print_r($arrayRoles); // echo "
"; $cuenta=count(array_diff($arrayByUser,$arrayRoles)); $cuenta2=count($arrayByUser); return ($cuenta<$cuenta2); } function getValor($nombre){ $especial = false; if(gettype($nombre) != "integer" && gettype($nombre) != "string"){ return false; exit; } if(array_key_exists($nombre,$this->campos)){ // El campo ya lo hab�amos recuperamos, lo mostramos return $this->campos[$nombre]; } else { // Hay que recuperar el campo de la base de datos $consulta="SELECT * FROM usuarios WHERE oid=\"".$this->campos['oid']."\""; switch ($nombre) { case "nombre_procedencia":$idProcedencia=$this->getValor("procedencia"); $consulta="SELECT id FROM procedencia WHERE procedencia.num=\"".$idProcedencia."\""; $especial = true; break; case "nombre_estado":$idEstado=$this->getValor("estado"); $consulta="SELECT nombre FROM candidatos_estados WHERE cod=\"".$idEstado."\""; $especial = true; break; case "nombre_rol":$idRol=$this->getValor("rol"); $consulta="SELECT id FROM rol WHERE oid=\"".$idRol."\""; $especial = true; break; case "nombre_localidad":$idLocalidad=$this->getValor("localidad"); $consulta="SELECT id FROM localidades WHERE oid=\"".$idLocalidad."\""; $especial = true; break; case "nombre_localidad_deseada":$idLocalidad=$this->getValor("localidad_deseada"); $consulta="SELECT id FROM localidades WHERE oid=\"".$idLocalidad."\""; $especial = true; break; case "nombre_perfil":$idPerfil=$this->getValor("perfil"); $consulta="SELECT id FROM perfil WHERE oid=\"".$idPerfil."\""; $especial = true; break; case "nombre_cliente":$idCliente=$this->getValor("cliente"); $consulta="SELECT id FROM clientes WHERE oid=\"".$$idCliente."\""; $especial = true; break; case "nombre_procedencia_cv":$idPCV=$this->getValor("procedenciaCV"); $consulta="SELECT nombre FROM procedencia_cv WHERE id=\"".$idPCV."\""; $especial = true; break; case "nombre_salario_min": $consulta="SELECT salario.nombre FROM salario, usuarios WHERE salario.id=usuarios.salario_min AND usuarios.oid=\"".$this->getValor("oid")."\""; $especial = true; break; case "nombre_salario_max": $consulta="SELECT salario.nombre FROM salario, usuarios WHERE salario.id=usuarios.salario_max AND usuarios.oid=\"".$this->getValor("oid")."\""; $especial = true; break; case "nombre_tipo":$tipo=$this->getValor("tipo"); if($tipo == "candidato"){ $arrayAct=array($nombre => $tipo); $this->campos=$this->campos + $arrayAct; return "Candidato"; }else if($tipo == "usuario"){ $arrayAct=array($nombre => $tipo); $this->campos=$this->campos + $arrayAct; return "Empleado"; } break; default: break; } $bd=new BD(); if(!$especial){ $valores = $bd->getRegistro($consulta); // Lo insertamos para nosotros foreach($valores as $key => $value){ $arrayAct=array($key => $value); $this->campos=$this->campos + $arrayAct; } }else{ // Lo insertamos para nosotros $valor= $bd->getCampo($consulta); // Lo insertamos para nosotros $arrayAct=array($nombre => $valor); $this->campos=$this->campos + $arrayAct; } return $this->campos[$nombre]; } } /** * Acceso a los campos de la persona. * @return los campos de la persona. */ function getCampos(){ return $this->campos; } public function setPassword($viejo, $nuevo, $confirmar){ $password = $this->getValor("password"); if($password != md5($viejo)){ return false; }else if($nuevo == ""){ return false; }else if($nuevo != $confirmar){ return false; }else{ $oid = $this->getValor("oid"); $nuevo = md5($nuevo); $consulta = "UPDATE usuarios SET password='$nuevo' WHERE oid='$oid'"; $bd = new BD(); $this->campos["password"]=$nuevo; return $bd->execQuery($consulta); } } public function modFechaCandidatura(){ $fecha = date(Y."-".m."-".d); $this->campos["fecha"] = $fecha; } public function modObsGerente($obs){ $this->campos["obsGerente"] = $obs; } public function modObsRRHH($obs){ $this->campos["obsRRHH"] = $obs; } /** * Asigna un nuevo campo a la persona. * @param nombre - nombre del campo a asignar. * @param valor - valor del campo. */ protected function setCampo($nombre, $valor){ /*if($nombre == "salario_min" || $nombre == "salario_max"){ if(!$this->compruebaSalario($nombre, $valor)){ $error = "El salario máximo debe ser mayor que el salario mínimo."; throw new Exception($error); return false; } }*/ if($nombre != "password" || $valor != ""){ //Antes de editar comprobamos si ya existe una persona //con esos datos. if($this->existe($nombre, $valor)){ $error = "Ya existe una persona con esos campos. No se edita."; throw new Exception($error); return false; } $viejo = $this->getValor($nombre); if($viejo != $valor){ //Comprobamos multivaluado y casos especiales antes del cambio: $viejo = $this->getValorMulti($nombre, $viejo); $this->campos[$nombre] = $valor; $oid = $this->getValor("oid"); // $fecha = "'".date(Y."-".m."-".d)."'"; $dato = $nombre." = '".$valor."',"; // $consulta = "UPDATE usuarios SET $nombre = '$valor', fecha_modificacion = $fecha WHERE oid='$oid'"; // $bd = new BD(); // if($bd->execQuery($consulta)){ //Comprobamos multivaluado y casos especiales: $valor = $this->getValorMulti($nombre, $valor); if(($nombre == "observaciones") || ($nombre == "descripcion")){ $historial = $nombre; }else if($viejo == "" && $valor != ""){ $historial = "$nombre (de - a $valor)"; }else{ $historial = "$nombre (de $viejo a $valor)"; } //Hay campos que no actualizan el historial if(($nombre != "msgEstado") && ($nombre != "diasEspera")){ $this->actualizarHistorial($historial); } // } return $dato; }else{ return ""; } } } private function compruebaSalario($nombre, $valor){ $salario = nombre_salario($valor); //Hago comparaciones num�ricas. $search = array(">", "<", "=", ".", "+", "-"); $replace = array("", "", "", "", "", ""); $salario = str_replace($search, $replace, $salario); switch ($nombre) { case "salario_min": $salario_max = $this->getValor("nombre_salario_max"); $search = array(">", "<", "=", ".", "+", "-"); $replace = array("", "", "", "", "", ""); $salario_max = str_replace($search, $replace, $salario_max); if($salario_max < $salario){ return false; }else{ return true; } break; case "salario_max": $salario_min = $this->getValor("nombre_salario_min"); $search = array(">", "<", "=", ".", "+", "-"); $replace = array("", "", "", "", "", ""); $salario_min = str_replace($search, $replace, $salario_min); if($salario_min > $salario){ return false; }else{ return true; } break; default: break; } return false; } private function existe($nombre, $valor){ if($valor == ""){ return false; } $bd = new BD(); $oid = $this->getValor("oid"); switch ($nombre) { case "dni": $consulta = "SELECT dni FROM usuarios WHERE dni='$valor' AND oid <> '$oid'"; break; case "email": $consulta = "SELECT email FROM usuarios WHERE email='$valor' AND oid <> '$oid'"; break; default: return false; break; } $cont = $bd->numFilas($consulta); if($cont > 0){ return true; } return false; } private function getValorMulti($nombre, $antiguo){ switch ($nombre) { case "procedencia": $valor = nombre_procedencia($antiguo); break; case "procedenciaCV": $valor = nombre_procedencia_cv($antiguo); break; case "estado": $valor = nombre_estado($antiguo); break; case "localidad": $valor = nombre_localidad($antiguo); break; case "localidad_deseada": $valor = nombre_localidad($antiguo); break; case "perfil": $valor = nombre_perfil($antiguo); break; case "cliente": $valor = nombre_cliente($antiguo); break; case "salario_min": $valor = nombre_salario($antiguo); break; case "salario_max": $valor = nombre_salario($antiguo); break; default: $valor = $antiguo; break; } return $valor; } /** * Asigna nuevos campos a la persona. * @param array - lista de campos a asignar de la forma campo => valor. */ function setCampos($array){ $consulta = "UPDATE usuarios SET ";//" $nombre = '$valor', fecha_modificacion = $fecha WHERE oid='$oid'"; foreach($array as $key => $value){ $consulta .= $this->setCampo($key, $value); } //Quitamos la �ltima coma /*if ($consulta{strlen($consulta) - 1} == ",") $consulta = substr($consulta,0,strlen($consulta) - 1);*/ $fecha = "'".date('Y'."-".'m'."-".'d')."'"; $consulta .= " fecha_modificacion = $fecha "; $oid = $this->getValor("oid"); $consulta .= "WHERE oid='$oid'"; $bd = new BD(); return $bd->execQuery($consulta); } /** * Elimina una persona de la base de datos. */ protected function eliminar(){ $oid = $this->getValor("oid"); // Recuperamos todos sus curriculum para eliminarlos $consulta = "SELECT curriculum FROM curriculum_usuario WHERE oid='".$oid."'"; $bd = new BD(); $curriculums=$bd->arrayQuery($consulta,"curriculum"); $administracion=new Administracion("",""); $constantes=$administracion->getItem("constantes"); $url = $constantes['srcDocs']; foreach ($curriculums as $doc){ echo "eliminamos ".$url.SLASH.$doc; @unlink($url.SLASH.$doc); } $consulta = "DELETE FROM usuarios WHERE oid='$oid'"; return $bd->execQuery($consulta); } /** * Devuelve una lista de tecnolog�as asociadas al usuario. */ function getTecnologias(){ if($this->listaTecnologias == null){ $oid = $this->getValor("oid"); $consulta = "SELECT tecnologia, id FROM tecnologia_usuario, tecnologia WHERE oid_i = '$oid' and tecnologia_usuario.tecnologia = tecnologia.oid"; $bd = new BD(); $this->listaTecnologias = $bd->keyValueQuery($consulta, "id", "tecnologia"); } return $this->listaTecnologias; } /** * Devuelve una lista de idiomas asociados al usuario. */ function getIdiomas(){ if($this->listaIdiomas == null){ $oid = $this->getValor("oid"); $consulta = "SELECT idioma, id FROM idioma_usuario, idiomas WHERE oid_i = '$oid' and idioma_usuario.idioma = idiomas.oid"; $bd = new BD(); $this->listaIdiomas = $bd->keyValueQuery($consulta, "id", "idioma"); } return $this->listaIdiomas; } /** * Devuelve una lista de titulaciones asociadas al usuario. */ function getTitulaciones(){ if($this->listaTitulaciones == null){ $oid = $this->getValor("oid"); $consulta = "SELECT t.oid, t.id FROM titulacion_usuario tu, titulaciones t WHERE tu.oid_i = '$oid' and tu.titulacion = t.oid"; $bd = new BD(); $this->listaTitulaciones = $bd->keyValueQuery($consulta, "id", "oid"); } return $this->listaTitulaciones; } /** * Devuelve una lista de provincias deseadas asociadas al usuario. */ function getProvinciasDeseadas(){ if($this->listaProvinciasDeseadas == null){ $oid = $this->getValor("oid"); $consulta = "SELECT l.oid, l.id FROM provincia_usuario lu, provincias l WHERE lu.oid_i = '$oid' and lu.provincia = l.oid"; $bd = new BD(); $this->listaProvinciasDeseadas = $bd->keyValueQuery($consulta, "id", "oid"); } return $this->listaProvinciasDeseadas; } /** * Devuelve una lista de provincias deseadas asociadas al usuario. */ function getProvinciasNoDeseadas(){ if($this->listaProvinciasNoDeseadas == null){ $oid = $this->getValor("oid"); $consulta = "SELECT l.oid, l.id FROM no_provincia_usuario lu, provincias l WHERE lu.oid_i = '$oid' and lu.provincia = l.oid"; $bd = new BD(); $this->listaProvinciasNoDeseadas = $bd->keyValueQuery($consulta, "id", "oid"); } return $this->listaProvinciasNoDeseadas; } /** * Devuelve una lista de perfiles asociadas al usuario. */ function getPerfiles(){ if($this->listaPerfiles == null){ $oid = $this->getValor("oid"); $consulta = "SELECT p.oid, p.id FROM perfil_usuario pu, perfil p WHERE pu.oid_i = '$oid' and pu.perfil = p.oid"; $bd = new BD(); $this->listaPerfiles = $bd->keyValueQuery($consulta, "id", "oid"); } return $this->listaPerfiles; } function addTecnologias($array){ if(gettype($array) == "array"){ foreach($array as $elem){ $this->addTecnologia($elem); } $this->calculaAfinidad(); } } function addIdiomas($array){ if(gettype($array) == "array"){ foreach($array as $elem){ $this->addIdioma($elem); } $this->calculaAfinidad(); } } function addTitulaciones($array){ if(gettype($array) == "array"){ foreach($array as $elem){ $this->addTitulacion($elem); } } } function addProvinciasDeseadas($array){ if(gettype($array) == "array"){ foreach($array as $elem){ $this->addProvinciaDeseada($elem); } $this->calculaAfinidad(); } } function addProvinciasNoDeseadas($array){ if(gettype($array) == "array"){ foreach($array as $elem){ $this->addProvinciaNoDeseada($elem); } $this->calculaAfinidad(); } } function addPerfiles($array){ if(gettype($array) == "array"){ foreach($array as $elem){ $this->addPerfil($elem); } $this->calculaAfinidad(); } } /** * Asocia una nueva tecnolog�a en la base de datos. */ private function addTecnologia($id){ $oid = $this->getValor("oid"); $this->getTecnologias(); if(!in_array($id, $this->listaTecnologias)){ $consulta = "SELECT id FROM tecnologia WHERE oid='$id'"; $bd = new BD(); $nombre_tecno = $bd->getCampo($consulta); $consulta = "INSERT INTO tecnologia_usuario VALUES('$id', '$oid')"; $bd = new BD(); if($bd->execQuery($consulta)){ $mensaje = "Nueva tecno: $nombre_tecno"; $this->actualizarHistorial($mensaje); $this->listaTecnologias[$nombre_tecno] = $id; }else{ return false; } }else{ return false; } return true; } /** * Asocia un nuevo idioma en la base de datos. */ private function addIdioma($id){ $oid = $this->getValor("oid"); $this->getIdiomas(); if(!in_array($id, $this->listaIdiomas)){ $consulta = "SELECT id FROM idiomas WHERE oid='$id'"; $bd = new BD(); $nombre_idioma = $bd->getCampo($consulta); $consulta = "INSERT INTO idioma_usuario VALUES('$id', '$oid')"; $bd = new BD(); if($bd->execQuery($consulta)){ $mensaje = "Nuevo idioma: $nombre_idioma"; $this->actualizarHistorial($mensaje); $this->listaIdiomas[$nombre_idioma] = $id; }else{ return false; } }else{ return false; } return true; } /** * Asocia una nueva titulaci�n en la base de datos. */ private function addTitulacion($id){ $oid = $this->getValor("oid"); $this->getTitulaciones(); if(!in_array($id, $this->listaTitulaciones)){ $consulta = "SELECT id FROM titulaciones WHERE oid='$id'"; $bd = new BD(); $nombre_titulacion = $bd->getCampo($consulta); $consulta = "INSERT INTO titulacion_usuario VALUES('$id', '$oid')"; $bd = new BD(); if($bd->execQuery($consulta)){ $mensaje = "Nueva titu: $nombre_titulacion"; $this->actualizarHistorial($mensaje); $this->listaTitulaciones[$nombre_titulacion] = $id; }else{ return false; } }else{ return false; } return true; } /** * Asocia una nueva provincia deseada en la base de datos. */ private function addProvinciaDeseada($id){ $oid = $this->getValor("oid"); $this->getProvinciasDeseadas(); if(!in_array($id, $this->listaProvinciasDeseadas)){ $consulta = "SELECT id FROM provincias WHERE oid='$id'"; $bd = new BD(); $nombre_provincia = $bd->getCampo($consulta); $consulta = "INSERT INTO provincia_usuario VALUES('$id', '$oid')"; $bd = new BD(); if($bd->execQuery($consulta)){ $mensaje = "Nueva provincia deseada: ".$nombre_provincia; $this->actualizarHistorial($mensaje); $this->listaProvinciasDeseadas[$nombre_provincia] = $id; }else{ return false; } }else{ return false; } return true; } /** * Asocia una nueva provincia no deseada en la base de datos. */ private function addProvinciaNoDeseada($id){ $oid = $this->getValor("oid"); $this->getProvinciasNoDeseadas(); if(!in_array($id, $this->listaProvinciasNoDeseadas)){ $consulta = "SELECT id FROM provincias WHERE oid='$id'"; $bd = new BD(); $nombre_provincia = $bd->getCampo($consulta); $consulta = "INSERT INTO no_provincia_usuario VALUES('$id', '$oid')"; $bd = new BD(); if($bd->execQuery($consulta)){ $mensaje = "Nueva provincia no deseada: ".$nombre_provincia; $this->actualizarHistorial($mensaje); $this->listaProvinciasNoDeseadas[$nombre_provincia] = $id; }else{ return false; } }else{ return false; } return true; } /** * Asocia un nuevo perfil en la base de datos. */ private function addPerfil($id){ $oid = $this->getValor("oid"); $this->getPerfiles(); if(!in_array($id, $this->listaPerfiles)){ $consulta = "SELECT id FROM perfil WHERE oid='$id'"; $bd = new BD(); $nombre_perfil = $bd->getCampo($consulta); $consulta = "INSERT INTO perfil_usuario VALUES('$id', '$oid')"; $bd = new BD(); if($bd->execQuery($consulta)){ $mensaje = "Nuevo perfil: ".$nombre_perfil; $this->actualizarHistorial($mensaje); $this->listaPerfiles[$nombre_perfil] = $id; }else{ return false; } }else{ return false; } return true; } /** * A�ade un nuevo curr�culum a la persona. */ protected function addCurriculum($archivo, $usuario){ $cv = $this->getValor("cv") + 1; $oid = $this->getValor("oid"); $nombre_archivo = $oid."-".$cv; $directorio = constante("srcDocs").SLASH."cv".SLASH; if (!@file_exists($directorio)){ mkdir($directorio, 0777); } $tamano_archivo = $archivo['size']; $nombre_archivo .= ".".nombre_extension($archivo['name']); $destino = $directorio.$nombre_archivo; $nombre_ruta_tabla = "cv".SLASH.$nombre_archivo; $fichero_subido = false; if (($tamano_archivo < 10000000) && (is_uploaded_file($archivo['tmp_name']))) { copy($archivo['tmp_name'], $destino); $fichero_subido = true; } $nombre_ruta_tabla=addslashes($nombre_ruta_tabla); if($fichero_subido){ $bd = new BD(); $consulta = "INSERT INTO curriculum_usuario (oid, curriculum, fecha) values ('".$oid."', '".$nombre_ruta_tabla."', now())"; $bd->execQuery($consulta); $this->actualizarHistorial("Nuevo CV", $usuario); $consulta = "update usuarios set cv=cv+1 where oid='$oid'"; $bd->execQuery($consulta); return true; } return false; } protected function removeCurriculum($curriculum, $fecha, $usuario){ $oid = $this->getValor("oid"); $consulta = "DELETE FROM curriculum_usuario WHERE oid = '".$oid."' and curriculum = '".$curriculum."' and fecha = '".$fecha."'"; $bd = new BD(); $resultado = $bd->execQuery($consulta); if ($resultado){ $consulta = "update usuarios set cv=cv-1 where oid='$oid'"; $bd->execQuery($consulta); $cambios = "CV eliminado"; $this->actualizarHistorial($cambios, $usuario); $ruta = constante("srcDocs")."\\".$curriculum; if (!@unlink($ruta)){ return false; }else{ return true; } } return false; } /** * Elimina la asociaci�n entre una tecnolog�a y un usuario. */ function removeTecnologia($id){ $oid = $this->getValor("oid"); $this->getTecnologias(); if(in_array($id, $this->listaTecnologias)){ $consulta = "SELECT id FROM tecnologia WHERE oid='$id'"; $bd = new BD(); $nombre_tecno = $bd->getCampo($consulta); $consulta = "DELETE FROM tecnologia_usuario WHERE tecnologia='$id' and oid_i='$oid'"; $bd = new BD(); if($bd->execQuery($consulta)){ $mensaje = "Eliminada tecno: $nombre_tecno"; $this->actualizarHistorial($mensaje); $lista = $this->listaTecnologias; $this->listaTecnologias = null; foreach($lista as $key => $value){ if($value != $id){ $this->listaTecnologias[$key] = $value; } } }else{ return false; } }else{ return false; } $this->calculaAfinidad(); return true; } /** * Elimina la asociaci�n entre un idioma y un usuario. */ function removeIdioma($id){ $oid = $this->getValor("oid"); $this->getIdiomas(); if(in_array($id, $this->listaIdiomas)){ $consulta = "SELECT id FROM idiomas WHERE oid='$id'"; $bd = new BD(); $nombre_idioma = $bd->getCampo($consulta); $consulta = "DELETE FROM idioma_usuario WHERE idioma='$id' and oid_i='$oid'"; $bd = new BD(); if($bd->execQuery($consulta)){ $mensaje = "Eliminado idioma: $nombre_idioma"; $this->actualizarHistorial($mensaje); $lista = $this->listaIdiomas; $this->listaIdiomas = null; foreach($lista as $key => $value){ if($value != $id){ $this->listaIdiomas[$key] = $value; } } }else{ return false; } }else{ return false; } $this->calculaAfinidad(); return true; } /** * Elimina la asociaci�n entre una titulaci�n y un usuario. */ function removeTitulacion($id){ $oid = $this->getValor("oid"); $this->getTitulaciones(); if(in_array($id, $this->listaTitulaciones)){ $consulta = "SELECT id FROM titulaciones WHERE oid='$id'"; $bd = new BD(); $nombre_titulacion = $bd->getCampo($consulta); $consulta = "DELETE FROM titulacion_usuario WHERE titulacion='$id' and oid_i='$oid'"; $bd = new BD(); if($bd->execQuery($consulta)){ $mensaje = "Eliminada titulacion: $nombre_titulacion"; $this->actualizarHistorial($mensaje); $lista = $this->listaTitulaciones; $this->listaTitulaciones = null; foreach($lista as $key => $value){ if($value != $id){ $this->listaTitulaciones[$key] = $value; } } }else{ return false; } }else{ return false; } $this->calculaAfinidad(); return true; } /** * Elimina la asociación entre una localidad deseada y un usuario. */ function removeProvinciaDeseada($id){ $oid = $this->getValor("oid"); $this->getProvinciasDeseadas(); if(in_array($id, $this->listaProvinciasDeseadas)){ $consulta = "SELECT id FROM provincias WHERE oid='$id'"; $bd = new BD(); $nombre_provincia = $bd->getCampo($consulta); $consulta = "DELETE FROM provincia_usuario WHERE provincia='$id' and oid_i='$oid'"; $bd = new BD(); if($bd->execQuery($consulta)){ $mensaje = "Eliminada provincia deseada: $nombre_provincia"; $this->actualizarHistorial($mensaje); $lista = $this->listaProvinciasDeseadas; $this->listaProvinciasDeseadas = null; foreach($lista as $key => $value){ if($value != $id){ $this->listaProvinciasDeseadas[$key] = $value; } } }else{ return false; } }else{ return false; } $this->calculaAfinidad(); return true; } /** * Elimina la asociación entre una localidad no deseada y un usuario. */ function removeProvinciaNoDeseada($id){ $oid = $this->getValor("oid"); $this->getProvinciasNoDeseadas(); if(in_array($id, $this->listaProvinciasNoDeseadas)){ $consulta = "SELECT id FROM provincias WHERE oid='$id'"; $bd = new BD(); $nombre_provincia = $bd->getCampo($consulta); $consulta = "DELETE FROM no_provincia_usuario WHERE provincia='$id' and oid_i='$oid'"; $bd = new BD(); if($bd->execQuery($consulta)){ $mensaje = "Eliminada provincia no deseada: $nombre_provincia"; $this->actualizarHistorial($mensaje); $lista = $this->listaProvinciasNoDeseadas; $this->listaProvinciasNoDeseadas = null; foreach($lista as $key => $value){ if($value != $id){ $this->listaProvinciasNoDeseadas[$key] = $value; } } }else{ return false; } }else{ return false; } $this->calculaAfinidad(); return true; } /** * Elimina la asociaci�n entre un perfil y un usuario. */ function removePerfil($id){ $oid = $this->getValor("oid"); $this->getPerfiles(); if(in_array($id, $this->listaPerfiles)){ $consulta = "SELECT id FROM perfil WHERE oid='$id'"; $bd = new BD(); $nombre_perfil = $bd->getCampo($consulta); $consulta = "DELETE FROM perfil_usuario WHERE perfil='$id' and oid_i='$oid'"; $bd = new BD(); if($bd->execQuery($consulta)){ $mensaje = "Eliminada localidad deseada: $nombre_perfil"; $this->actualizarHistorial($mensaje); $lista = $this->listaPerfiles; $this->listaPerfiles = null; foreach($lista as $key => $value){ if($value != $id){ $this->listaPerfiles[$key] = $value; } } }else{ return false; } }else{ return false; } $this->calculaAfinidad(); return true; } /** * Calcula la afinidad del usuario con todos los pedidos del sistema. * @param id - identificador del usuario. */ function calculaAfinidad(){ //Recuperamos al usuario: $id = $this->getValor("oid"); $email = $this->getValor("email"); //Eliminamos al usuario de la tabla de candidatos en pedido para todos los //pedidos en los que se encuentre en proceso. $consulta = "DELETE FROM candidato_pedido WHERE candidato='$id' AND estado='3'"; $bd = new BD(); $bd->execQuery($consulta); //Si el candidato es v�lido calculamos su afinidad para los pedidos: $estado = $this->getValor("estado"); //Estados v�lidos: Disponible, En proceso, Entrevistado y en En proceso (entrevistado). if(($estado == 10) || ($estado == 30) || ($estado == 50) || ($estado == 70)){ $consulta = "SELECT oid FROM pedidos WHERE estado = 10"; $bd = new BD(); $listaPedidos = $bd->arrayQuery($consulta, "oid"); foreach($listaPedidos as $idPedido){ $pedido = new Pedido($idPedido, new Usuario($email)); $idiomasPedido = $pedido->getIdiomas(); $idiomasUsuario = $this->getidiomas(); $tecnologiasPedido = $pedido->getTecnologias(); $tecnologiasUsuario = $this->getTecnologias(); $perfilPedido = $pedido->getValor("perfil"); $perfilUsuario = $this->getPerfiles(); $provinciasPedido = $pedido->getProvincias(); $provinciasDeseadas = $this->getProvinciasDeseadas(); $provinciasNoDeseadas = $this->getProvinciasNoDeseadas(); $afinidad = new Afinidad($idiomasPedido, $idiomasUsuario, $tecnologiasPedido, $tecnologiasUsuario, $perfilPedido, $perfilUsuario, $provinciasPedido, $provinciasDeseadas, $provinciasNoDeseadas); $afi = $afinidad->calculaAfinidad($pedido->getValor("PesoIdioma"), $pedido->getValor("PesoPerfil"), $pedido->getValor("PesoTecno")); if($afi >= 0){ $consulta = "INSERT INTO candidato_pedido (candidato, pedido, afinidad, estado, fecha) VALUES('$id', '$idPedido', '$afi', '30', curdate())"; $bd = new BD(); $bd->execQuery($consulta); } } } return $afi; } protected function actualizarHistorial($mensaje, $usuario){ try{ $oid = $this->getValor("oid"); $p = new Persona($oid); $consulta = "INSERT INTO historial_usuario (oid_h, fecha_h, persona_h, texto_h) VALUES('$oid', now(), '$usuario', '$mensaje')"; $bd = new BD(); return $bd->execQuery($consulta); }catch(Exception $e){ //No muestro nada, pongo este try catch para evitar que actualice //el historial al asignar campos a un usuario antes de meterlo en la BD. return false; } } function getHistorial(){ $historial = ""; $oid = $this->getValor("oid"); $consulta = "SELECT * FROM historial_usuario WHERE oid_h='$oid' ORDER BY fecha_h DESC"; $bd = new BD(); $resultado = $bd->execQuery($consulta); while($rows = mysql_fetch_array($resultado)){ $fecha = $rows["fecha_h"]; $persona = $rows["persona_h"]; $texto = $rows["texto_h"]; $historial .= "[$fecha] $persona - $texto\n"; } return $historial; } private function calculaVacaciones($anio){ $fecha = $this->getValor("fecha_alta"); $fecha_array = explode("-", $fecha); $anyo = $fecha_array[0]; $mes = $fecha_array[1]; $dia = $fecha_array[2]; $fecha = mktime(0,0,0,$mes,$dia,$anyo); $dias_mes = date('t',$fecha); $fiestas = constante("fiestas"); //Si se dio de alta un a�o anterior al actual tiene todos sus d�as. if($anio<$anyo){ $fiestas=0; }elseif($anio==$anyo){ if($anyo == date('Y')){ $fiestas = (($fiestas/12)*(12-$mes))+(($fiestas/12/$dias_mes)*($dias_mes-$dia)); $fiestas=round($fiestas,0); } } return $fiestas; } public function getDiasVacaciones($anio){ $consulta = "SELECT dias FROM vacaciones_oid WHERE oid='".$this->getValor("oid")."' AND anyo='".$anio."'"; $bd = new BD(); $dias = $bd->getCampo($consulta); if(($dias >= 0) && ($dias != "")){ return $dias; }else{ $dias=$this->calculaVacaciones($anio); // Insertamos en la tabla $consulta = "INSERT INTO vacaciones_oid (oid, anyo, dias) VALUES ('".$this->getValor("oid")."', '".$anio."', '".$dias."')"; $bd = new BD(); $bd->execQuery($consulta); } return $dias; } /** * Suma o resta las vacaciones de un usuario dando el número que hay que sumar o restar * Comprueba en qué año hay que hacer la cuenta */ public function variaVacaciones($cantidad){ $diaoff=substr(constante("daycacationsoff"),0,2); $mesoff=substr(constante("daycacationsoff"),3,2); $diaCierreVac=mktime(0,0,0,$mesoff,$diaoff,date('Y')); $hoy=mktime(0,0,0,date('m'),date('d'),date('Y')); $anio_sig=date('Y')+1; $anio_ant=date('Y')-1; if($cantidad < 0){ // Quitamos dias, hay que calcular el año $cantidad = -1*$cantidad; if($hoy>$diaCierreVac){ // este y posterior if($this->getDiasVacaciones(date('Y'))>0) { $anio=date('Y'); }elseif($this->getDiasVacaciones($anio_sig)>0){ $anio=$anio_sig; }else { // No le quedan vacaciones, lanzamos exception $error = "No quedan vacaciones."; throw new Exception($error); exit(); } } else { // anterior y este $pos=date('Y')-1; if($this->getDiasVacaciones($anio_ant)>0) { $anio=$anio_ant; }elseif($this->getDiasVacaciones(date('Y'))>0){ $anio=date('Y'); }else { // No le quedan vacaciones, lanzamos exception $error = "No quedan vacaciones."; throw new Exception($error); exit(); } } $consulta = "UPDATE vacaciones_oid SET dias=dias-".$cantidad." WHERE oid='".$this->getValor("oid")."' AND anyo='".$anio."'"; } else{ // hay que sumar días if($hoy>$diaCierreVac){ // este y posterior constante("fiestas") if($this->getDiasVacaciones($anio_sig)getDiasVacaciones(date('Y'))execQuery($consulta); } public function diasTotalesVacaciones(){ $diaoff=substr(constante("daycacationsoff"),0,2); $mesoff=substr(constante("daycacationsoff"),3,2); $diaCierreVac=mktime(0,0,0,$mesoff,$diaoff,date('Y')); $hoy=mktime(0,0,0,date('m'),date('d'),date('Y')); $anio_sig=date('Y')+1; $anio_ant=date('Y')-1; if($hoy>$diaCierreVac){ // este y posterior $diasTotales=$this->getDiasVacaciones(date('Y'))+$this->getDiasVacaciones($anio_sig); } else { $diasTotales=$this->getDiasVacaciones($anio_ant)+$this->getDiasVacaciones(date('Y')); } return $diasTotales; } } ?>