usuario = $usuario; //Para los pedidos $this->paginas["gestion_pedido.php"]['0'] = "edit"; $this->paginas["gestion_pedido.php"]['1'] = "idPedido"; $this->paginas["gestion_pedido.php"]['2'] = "pedidos"; $this->paginas["gestion_pedido.php"]['3'] = "pedido.php"; $this->paginas["gestion_pedido.php"]['4'] = "1"; $this->paginas["eliminar_pedido.php"]['0'] = "edit"; $this->paginas["eliminar_pedido.php"]['1'] = "idPedido"; $this->paginas["eliminar_pedido.php"]['2'] = "pedidos"; $this->paginas["eliminar_pedido.php"]['3'] = "pedido.php"; $this->paginas["eliminar_pedido.php"]['4'] = "2"; $this->paginas["gestion_candidato.php"]['0'] = "edit"; $this->paginas["gestion_candidato.php"]['1'] = "oid"; $this->paginas["gestion_candidato.php"]['2'] = "usuarios"; $this->paginas["gestion_candidato.php"]['3'] = "detalle_candidato.php"; $this->paginas["gestion_candidato.php"]['4'] = "3"; $this->paginas["gestion_empleado.php"]['0'] = "edit"; $this->paginas["gestion_empleado.php"]['1'] = "oid"; $this->paginas["gestion_empleado.php"]['2'] = "usuarios"; $this->paginas["gestion_empleado.php"]['3'] = "detalle_empleado.php"; $this->paginas["gestion_empleado.php"]['4'] = "4"; $this->paginas["elimina_candidato.php"]['0'] = "edit"; $this->paginas["elimina_candidato.php"]['1'] = "oid"; $this->paginas["elimina_candidato.php"]['2'] = "usuarios"; $this->paginas["elimina_candidato.php"]['3'] = "detalle_candidato.php"; $this->paginas["elimina_candidato.php"]['4'] = "5"; $this->locale = $locale; } function regular($url){ $pagina = $this->nombrePagina($url); $modo = ""; $id_modo = ""; $tabla = ""; $error = ""; $cod = ""; if (isset($this->paginas[$pagina])) { $modo = $this->paginas[$pagina]['0']; $id_modo = $this->paginas[$pagina]['1']; $tabla = $this->paginas[$pagina]['2']; $error = $this->paginas[$pagina]['3']; $cod = $this->paginas[$pagina]['4']; } $id = $this->parametro($url, $id_modo); //Sistema de bloqueo nuevo. if($modo == "edit" && $id){ //Si no está bloqueado lo bloqueo para mí. if(!$this->estaBloqueado($tabla, $id)){ $this->bloquear($tabla, $id); //Si está bloqueado lanzo una excepción para avisar. } else { $error .= "?$id_modo=$id&msgSem=$cod"; throw new Exception($error); } //Página de no bloqueo, la libero. } else if ($modo != "edit"){ $this->liberar(); } } function getMensaje($cod){ $m = "s$cod"; return $this->locale[$m]; } private function nombrePagina($url){ $tok = strtok ($url,"/"); $pag = $tok; while ($tok !== false) { $tok = strtok("/"); if($tok !== false){ $pag = $tok; } } $pag = strtok ($pag,"?"); return $pag; } private function parametro($url, $id_modo){ //Recuperamos los argumentos $tok = strtok ($url,"?"); $pag = $tok; $valor = ""; while ($tok !== false) { $tok = strtok("?"); if($tok !== false){ $pag = $tok; } } //Miramos argumento a argumento $tok = strtok ($pag,"&"); while ($tok !== false) { if($tok !== false){ $id = strtok($tok, "="); if($id == $id_modo){ $valor = strtok("&"); } } $tok = strtok("&"); } return $valor; } private function bloquear($tabla, $id){ $usuario = $this->usuario->getValor("oid"); $consulta = "UPDATE $tabla SET mutex='$usuario', tiempo=now() WHERE oid='$id'"; $bd=new BD(); return $bd->execQuery($consulta); } private function liberar(){ $usuario = $this->usuario->getValor("oid"); $this->liberarPartesActividad($usuario); $this->liberarPedidos($usuario); $this->liberarUsuarios($usuario); $this->liberarVacaciones($usuario); } private function liberarPartesActividad($usuario){ $consulta = "UPDATE partes_actividad SET mutex='0' WHERE mutex='$usuario'"; $bd=new BD(); return $bd->execQuery($consulta); } private function liberarPedidos($usuario){ $consulta = "UPDATE pedidos SET mutex='0' WHERE mutex='$usuario'"; $bd=new BD(); return $bd->execQuery($consulta); } private function liberarUsuarios($usuario){ $consulta = "UPDATE usuarios SET mutex='0' WHERE mutex='$usuario'"; $bd=new BD(); return $bd->execQuery($consulta); } private function liberarVacaciones($usuario){ $consulta = "UPDATE vacaciones SET mutex='0' WHERE mutex='$usuario'"; $bd=new BD(); return $bd->execQuery($consulta); } private function estaBloqueado($tabla, $id){ $seguimos = false; $usuario = $this->usuario->getValor("oid"); $consulta = "select mutex,tiempo from $tabla where oid = '".$id."'"; $bd = new BD(); if($resultado = $bd->execQuery($consulta)){ while ($row = mysql_fetch_array($resultado)){ $mutex = $row["mutex"]; $fecha = $row["tiempo"]; $seguimos = true; } } //Si está bloqueado por el usuario que tiene sesión no se considera ocupado y puede entrar. if($mutex == $usuario) return false; if ($seguimos && ($mutex > 0)){ /* Ahora tenemos que comparar la fecha almacenada con la actual. Si la diferencia es mayor de 20 minutos, volvemos a poner el mutex a 0 */ list($a_m_d, $h_m_s) = split(" ",$fecha); list($anio, $mes, $dia) = split("-",$a_m_d); list($hora, $minuto, $segundo) = split(":",$h_m_s); $fecha_mutex = mktime($hora,$minuto,$segundo,$mes,$dia,$anio); $fecha_ahora = mktime(date("H"),date("i"),date("s"),date("m"),date("d"),date("Y")); //Han pasado 1200 segundos? $diferencia = $fecha_ahora - $fecha_mutex; if ($diferencia >= 1200){ //Ha caducado el semáforo, lo ponemos a cero $oid = $this->usuario->getValor("oid"); if ($resultado = mysql_query("update $tabla set mutex=0 where oid = '".$oid."'")){ return false; } else return false; } else return true; } else{ return false; } } } ?>