1 | <?php |
---|
2 | // ******************************************************************** |
---|
3 | // Aplicación WEB: ogAdmWebCon |
---|
4 | // Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla |
---|
5 | // Fecha Creación: Diciembre-2003 |
---|
6 | // Fecha Última modificación: Febrero-2005 |
---|
7 | // Nombre del fichero: controlacceso.php |
---|
8 | // Descripción :Este fichero implementa el control de acceso a la aplicación |
---|
9 | // ********************************************************************* |
---|
10 | include_once("controlacceso.php"); |
---|
11 | include_once("./includes/CreaComando.php"); |
---|
12 | include_once("./clases/AdoPhp.php"); |
---|
13 | #include_once("idiomas/php/$idi/acceso_$idi.php"); |
---|
14 | //________________________________________________________________________________________________________ |
---|
15 | $usu=""; |
---|
16 | $pss=""; |
---|
17 | $ident=""; |
---|
18 | $idc=0; |
---|
19 | $iph=""; // Switch menu cliente |
---|
20 | $adminetboot=""; |
---|
21 | |
---|
22 | if (isset($_GET["iph"])) $iph=$_GET["iph"]; |
---|
23 | //________________________________________________________________________________________________________ |
---|
24 | $cmd=CreaComando($cnx); // Crea objeto comando |
---|
25 | if (!$cmd) |
---|
26 | die($TbMsg["ACCESS_ERROR"]); |
---|
27 | //________________________________________________________________________________________________________ |
---|
28 | |
---|
29 | if (isset($_POST["usu"])) $usu=mysqli_escape_string($cmd->Conexion->controlador, $_POST["usu"]); |
---|
30 | if (isset($_POST["pss"])) $pss=mysqli_escape_string($cmd->Conexion->controlador, $_POST["pss"]); |
---|
31 | if (isset($_POST["idcentro"])) $idc=mysqli_escape_string($cmd->Conexion->controlador, $_POST["idcentro"]); |
---|
32 | |
---|
33 | if ($idc != 0) |
---|
34 | { |
---|
35 | $sql = "SELECT * FROM centros WHERE idcentro = ?"; |
---|
36 | $statement = $cmd->Conexion->controlador->prepare ($sql) or die ("Failed to prepared the statement!"); |
---|
37 | $statement->bind_param('i', $idc); |
---|
38 | $statement->execute(); |
---|
39 | $result = $statement->get_result()->fetch_assoc();; |
---|
40 | if (empty($result)){ |
---|
41 | return(false); |
---|
42 | } else { |
---|
43 | $ident=$result["identidad"]; |
---|
44 | } |
---|
45 | $statement->close; |
---|
46 | } |
---|
47 | |
---|
48 | //________________________________________________________________________________________________________ |
---|
49 | |
---|
50 | |
---|
51 | $nmc=""; |
---|
52 | $idi=""; |
---|
53 | |
---|
54 | if(!empty($iph)){ // LLamada del browser del cliente |
---|
55 | list($wip,$wusu,$wpwd,$wbd,$tbd)=explode(";",$cnx); |
---|
56 | $usu=$wusu; |
---|
57 | $pss=$wpwd; |
---|
58 | } |
---|
59 | |
---|
60 | $resul=toma_datos($cmd,$idc,$nmc,$idi,$usu,$tsu,$pss); |
---|
61 | // Antes la variable idioma no es la correcta |
---|
62 | include_once("idiomas/php/$idi/acceso_$idi.php"); |
---|
63 | if(!$resul) |
---|
64 | Header("Location: ".$wac."?herror=4"); // Error de conexión con servidor B.D. |
---|
65 | |
---|
66 | if(!empty($iph)){ |
---|
67 | $wurl="./varios/menucliente.php"; |
---|
68 | Header("Location:".$wurl); // Accede a la página de menus |
---|
69 | } |
---|
70 | |
---|
71 | |
---|
72 | session_start(); // Activa variables de sesión |
---|
73 | |
---|
74 | $_SESSION["widentidad"]=$ident; |
---|
75 | $_SESSION["widcentro"]=$idc; |
---|
76 | $_SESSION["wnombrecentro"]=$nmc; |
---|
77 | $_SESSION["wusuario"]=$usu; |
---|
78 | $_SESSION["widtipousuario"]=$tsu; |
---|
79 | $_SESSION["widioma"]=$idi; |
---|
80 | $_SESSION["wcadenaconexion"]=$cnx; |
---|
81 | $_SESSION["wpagerror"]=$wer; |
---|
82 | $_SESSION["wurlacceso"]=$wac; |
---|
83 | $_SESSION["wadminetboot"]=$adminetboot; |
---|
84 | |
---|
85 | // Variables de entorno |
---|
86 | $resul=toma_entorno($cmd,$ips,$prt,$pclo,$rep); |
---|
87 | if(!$resul) |
---|
88 | Header("Location: ".$wac."?herror=4"); // Error de conexión con servidor B.D. |
---|
89 | |
---|
90 | $_SESSION["wservidorhidra"]=$ips; |
---|
91 | $_SESSION["whidraport"]=$prt; |
---|
92 | $_SESSION["protclonacion"]=$pclo; |
---|
93 | $_SESSION["repcentralizado"]=$rep; |
---|
94 | |
---|
95 | //________________________________________________________________________________________________________ |
---|
96 | // Busca datos del usuario que intenta acceder a la aplicación |
---|
97 | // Parámetros: |
---|
98 | // - cmd:Una comando ya operativo (con conexión abierta) |
---|
99 | // - usuario: Nombre del usuario |
---|
100 | // - pasguor: Password del uuario |
---|
101 | // |
---|
102 | // Devuelve el identificador del centro, el nombre y el idioma utilizado por el usuario |
---|
103 | //_______________________________________________________________________________________________________ |
---|
104 | function toma_datos($cmd,$idcentro,&$nombrecentro,&$idioma,$usuario,&$idtipousuario,$pasguor){ |
---|
105 | global $adminetboot; |
---|
106 | |
---|
107 | if(!empty($idcentro)){ |
---|
108 | $sql = "SELECT usuarios.idtipousuario, centros.nombrecentro, idiomas.nemonico AS idioma |
---|
109 | FROM usuarios |
---|
110 | INNER JOIN administradores_centros ON administradores_centros.idusuario=usuarios.idusuario |
---|
111 | INNER JOIN centros ON centros.idcentro=administradores_centros.idcentro |
---|
112 | INNER JOIN idiomas ON usuarios.ididioma=idiomas.ididioma |
---|
113 | WHERE usuarios.idtipousuario <> 3 |
---|
114 | AND usuarios.usuario = ? |
---|
115 | AND usuarios.pasguor=SHA2( ?, 224) |
---|
116 | AND administradores_centros.idcentro = ?;"; |
---|
117 | $statement = $cmd->Conexion->controlador->prepare ($sql) or die ("Failed to prepared the statement!"); |
---|
118 | $statement->bind_param('ssi', $usuario,$pasguor,$idcentro); |
---|
119 | |
---|
120 | } |
---|
121 | else{ |
---|
122 | $sql = "SELECT usuarios.idtipousuario, idiomas.nemonico AS idioma |
---|
123 | FROM usuarios |
---|
124 | INNER JOIN idiomas ON usuarios.ididioma=idiomas.ididioma |
---|
125 | WHERE idtipousuario <> 3 |
---|
126 | AND usuarios.usuario = ? |
---|
127 | AND usuarios.pasguor=SHA2( ? , 224)"; |
---|
128 | $statement = $cmd->Conexion->controlador->prepare ($sql) or die ("Failed to prepared the statement!"); |
---|
129 | $statement->bind_param('ss', $usuario,$pasguor); |
---|
130 | } |
---|
131 | |
---|
132 | $statement->execute(); |
---|
133 | $result = $statement->get_result()->fetch_assoc();; |
---|
134 | |
---|
135 | if (empty($result)){ |
---|
136 | // No existe el usuario |
---|
137 | return(false); |
---|
138 | } else { |
---|
139 | $idtipousuario=$result["idtipousuario"]; |
---|
140 | $adminetboot=$idtipousuario; |
---|
141 | $idioma=$result["idioma"]; |
---|
142 | if(!empty($idcentro)){ |
---|
143 | $nombrecentro=$result["nombrecentro"]; |
---|
144 | $idtipousuario=2; // Fuerza al acceso como administrador de UNidad organizativa |
---|
145 | return(true); |
---|
146 | } else { |
---|
147 | $nombrecentro=""; |
---|
148 | if($idtipousuario<>1) // Si NO es superadminsitrador |
---|
149 | return(false); |
---|
150 | else |
---|
151 | return(true); |
---|
152 | } |
---|
153 | |
---|
154 | } |
---|
155 | return(false); |
---|
156 | } |
---|
157 | //________________________________________________________________________________________________________ |
---|
158 | // Busca datos de configuración del sistema |
---|
159 | // Paráametros: |
---|
160 | // - cmd:Una comando ya operativo (con conexión abierta) |
---|
161 | // - ips: Dirección IP del servidor de administración |
---|
162 | // - prt: Puerto de comunicaciones |
---|
163 | // - pclo: Protocolo de clonación |
---|
164 | // - rep: Uso de repositorio centralizado |
---|
165 | // |
---|
166 | // Devuelve datos generales de configuración del sistema |
---|
167 | //_______________________________________________________________________________________________________ |
---|
168 | function toma_entorno($cmd,&$ips,&$prt,&$pclo,&$rep){ |
---|
169 | $rs=new Recordset; |
---|
170 | $cmd->texto="SELECT * FROM entornos"; |
---|
171 | $rs->Comando=&$cmd; |
---|
172 | if (!$rs->Abrir()) return(false); // Error al abrir recordset |
---|
173 | if(!$rs->EOF){ |
---|
174 | $ips=$rs->campos["ipserveradm"]; |
---|
175 | $prt=$rs->campos["portserveradm"]; |
---|
176 | $pclo=$rs->campos["protoclonacion"]; |
---|
177 | //$rep=$rs->campos["repositorio"]; |
---|
178 | } |
---|
179 | return(true); |
---|
180 | } |
---|
181 | //_______________________________________________________________________________________________________ |
---|
182 | // Muestra mensaje de alerta si no existe repositorio en la unidad organizativa |
---|
183 | // Parámetros: |
---|
184 | // - cmd:Una comando ya operativo (con conexión abierta) |
---|
185 | // - idcentro: identificador de la unidad organizativa |
---|
186 | //_______________________________________________________________________________________________________ |
---|
187 | function alert_norepo($cmd, $idcentro,$mensaje){ |
---|
188 | // Si entramos en la parte administrativo no se muestra mensaje |
---|
189 | if ($idcentro == 0) return; |
---|
190 | |
---|
191 | $idrepositorio = ''; |
---|
192 | $sql = "SELECT idrepositorio FROM repositorios ". |
---|
193 | " WHERE idcentro=? LIMIT 1;"; |
---|
194 | $statement = $cmd->Conexion->controlador->prepare ($sql) or die ("Failed to prepared the statement!"); |
---|
195 | $statement->bind_param('i',$idcentro); |
---|
196 | $statement->execute(); |
---|
197 | $result = $statement->get_result()->fetch_assoc(); |
---|
198 | $idrepositorio = $result["idrepositorio"]; |
---|
199 | if ($idrepositorio == '') { |
---|
200 | echo 'alert("'.$mensaje.'");'; |
---|
201 | } |
---|
202 | return; |
---|
203 | } |
---|
204 | ?> |
---|
205 | <html> |
---|
206 | <head> |
---|
207 | <title><?php echo $TbMsg["ACCESS_TITLE"] ?></title> |
---|
208 | <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> |
---|
209 | <link rel="stylesheet" type="text/css" href="estilos.css"> |
---|
210 | </head> |
---|
211 | |
---|
212 | <body> |
---|
213 | <div id="mensaje" style="position:absolute;TOP:250px;LEFT:330px; visibility:visible; text-align: center"> |
---|
214 | <span class="subcabeceras"><?php echo $TbMsg["ACCESS_ALLOWED"] ?></span> |
---|
215 | </div> |
---|
216 | <script language="javascript"> |
---|
217 | var vez=0; |
---|
218 | setTimeout("acceso();",300); |
---|
219 | |
---|
220 | function acceso(){ |
---|
221 | var o=document.getElementById("mensaje"); |
---|
222 | var s=o.style.visibility; |
---|
223 | if(s==="hidden") |
---|
224 | o.style.visibility="visible"; |
---|
225 | else |
---|
226 | o.style.visibility="hidden"; |
---|
227 | if(vez>5){ |
---|
228 | var w=window.top; |
---|
229 | w.location="frames.php"; |
---|
230 | } |
---|
231 | vez++; |
---|
232 | setTimeout("acceso();",300); |
---|
233 | } |
---|
234 | <?php alert_norepo($cmd, $idc,$TbMsg["WARN_NOREPO"]) ?>; |
---|
235 | </script> |
---|
236 | </body> |
---|
237 | </html> |
---|