Incam_Intranet/Objects/Administracion.php
2011-05-27 18:47:51 +00:00

210 lines
6.4 KiB
PHP

<?php
/*
* Clase Administración
*
* Mantenimiento de las tablas maestras del sistema. Para cada tabla ofrece unos servicios mínimos de:
*
* - Insertar elemento (addItem)
* - Editar elemento (editItem)
* - Eliminar elemento (removeItem)
* - Obtener tabla (getTabla)
*
* Adicionalmente puede ofrecer otros servicios para cada tabla.
*
* 2008-10-21 (diego): Se crea la clase con los métodos necesarios para mantener las
* tablas maestras del sistema.
*/
include_once("BD.php");
class Administracion{
//Atributos:
/* Usuario que tiene sesión activa. */
private $usuario;
/* Idioma */
private $locale;
/* Información sobre las tablas de sistema*/
private $tablasSistema;
//Constructores:
/**
* Crea un objeto encargado de administrar el sistema.
* @param usuario - Usuario con sesión activa.
* @param locale - Idioma.
*/
public function Administracion($usuario, $locale){
$this->usuario = $usuario;
$this->locale = $locale;
$this->tablasSistema = array();
//perfil, tecnologias, idiomas, titulaciones, tipoVia, provincia, procedenciaCV,
//incorporaciones, localidad, constantes, procedencia
$this->tablasSistema["perfil"] = array("perfil", "oid", "id", "abrev");
$this->tablasSistema["perfil_funcional"] = array("perfil_funcional", "oid", "id", "abrev");
$this->tablasSistema["tecnologias"] = array("tecnologia", "oid", "id");
$this->tablasSistema["idiomas"] = array("idiomas", "oid", "id");
$this->tablasSistema["titulaciones"] = array("titulaciones", "oid", "id");
$this->tablasSistema["tipoVia"] = array("tipo_via", "oid", "id");
$this->tablasSistema["provincia"] = array("provincias", "oid", "id");
$this->tablasSistema["procedenciaCV"] = array("procedencia_cv", "id", "nombre");
$this->tablasSistema["incorporaciones"] = array("incorporaciones", "oid", "id");
$this->tablasSistema["localidad"] = array("localidades", "oid", "id", "provincia");
$this->tablasSistema["constantes"] = array("sistema", "id", "valor");
$this->tablasSistema["procedencia"] = array("procedencia", "num", "id", "color");
$this->tablasSistema["salario"] = array("salario", "id", "nombre");
}
//Funciones de administración de perfiles:
public function addItem($vista, $valores){
if(!$this->usuario->tieneRol(2)){
$error = $this->locale['4039'];
throw new Exception($error);
return -1;
exit;
}
$valoresTabla = $this->tablasSistema[$vista];
$tabla = $valoresTabla[0];
$campos = array_slice($valoresTabla, 2);
if(count($campos) != count($valores)){
$error = $this->locale['3007'];
throw new Exception($error);
return -1;
exit;
}else{
$cadenaCampos = "";
foreach($campos as $campo){
$cadenaCampos .= $campo.",";
}
//Quitamos la última coma
if ($cadenaCampos{strlen($cadenaCampos) - 1} == ",")
$cadenaCampos = substr($cadenaCampos,0,strlen($cadenaCampos) - 1);
$cadenaValores = "";
foreach($valores as $valor){
$cadenaValores .= "'".$valor."',";
}
//Quitamos la última coma
if ($cadenaValores{strlen($cadenaValores) - 1} == ",")
$cadenaValores = substr($cadenaValores,0,strlen($cadenaValores) - 1);
$consulta = "INSERT INTO ".$tabla." (".$cadenaCampos.") VALUES (".$cadenaValores.")";
$bd = new BD();
if($bd->execQuery($consulta)){
return true;
}else{
$error = $this->locale['bd'];
throw new Exception($error);
return -1;
exit;
}
}
}
public function editItem($vista, $valores){
if(!$this->usuario->tieneRol(2)){
$error = $this->locale['4040'];
throw new Exception($error);
return -1;
exit;
}
$valoresTabla = $this->tablasSistema[$vista];
$tabla = $valoresTabla[0];
$campoCod = $valoresTabla[1];
$cod = $valores[0];
$campos = array_slice($valoresTabla, 2);
$valores = array_slice($valores, 1);
$total = count($campos);
if($total != count($valores)){
$error = $this->locale['3007'];
throw new Exception($error);
return -1;
exit;
}else{
$update = "";
for($i = 0; $i < $total; $i++){
$update .= $campos[$i]." = '".addslashes($valores[$i])."',";
}
//Quitamos la última coma
if ($update{strlen($update) - 1} == ",")
$update = substr($update,0,strlen($update) - 1);
$consulta = "UPDATE ".$tabla." SET ".$update." WHERE ".$campoCod."='".$cod."'";
$bd = new BD();
if($bd->execQuery($consulta)){
return true;
}else{
$error = $this->locale['bd'];
throw new Exception($error);
return -1;
exit;
}
}
}
public function removeItem($vista, $cod){
if(!$this->usuario->tieneRol(2)){
$error = $this->locale['4041'];
throw new Exception($error);
return -1;
exit;
}
$valoresTabla = $this->tablasSistema[$vista];
$tabla = $valoresTabla[0];
$campoCod = $valoresTabla[1];
$consulta = "DELETE FROM ".$tabla." WHERE ".$campoCod."='".$cod."'";
//echo $consulta;
$bd = new BD();
if($bd->execQuery($consulta)){
return true;
}else{
$error = $this->locale['4038'];
throw new Exception($error);
return -1;
exit;
}
}
public function getItem($vista){
$tabla = $this->tablasSistema[$vista][0];
$consulta="SELECT * FROM ".$tabla;
$bd = new BD();
$salida=$bd->keyValueQuery($consulta,$this->tablasSistema[$vista][1],$this->tablasSistema[$vista][2]);
return $salida;
}
/*
* Mantiene el sistema, sobre todo el tema de vacaciones y permisos:
* - Vacaciones no aprobadas con permanencia de más de 7 días, se elimina
* - Permisos no aprobados con permanencia de más de 7 días, se elimina
*/
public function mantenSistema(){
if(!$this->usuario->tieneRol(2)){
$error = $this->locale['4041'];
throw new Exception($error);
return -1;
exit;
}
$acciones=array();
$bd = new BD();
//Vacaciones no aprobadas con permanencia de más de 7 días, se elimina
$consulta="DELETE FROM vacaciones WHERE DATEDIFF(f_mod,curdate()) < -7 AND aprobada=2";
$bd->execQuery($consulta);
$acciones[]= mysql_affected_rows().$this->locale['2313'];
//Vacaciones no aprobadas con permanencia de más de 7 días, se elimina
$consulta="DELETE FROM permisos WHERE DATEDIFF(f_mod,curdate()) < -7 AND aprobada=2";
$bd->execQuery($consulta);
$acciones[]= mysql_affected_rows().$this->locale['2314'];
return $acciones;
}
}
?>