source: admin/WebConsole/gestores/gestor_ejecutaracciones.php @ fa0bb7d

918-git-images-111dconfigfileconfigure-oglivegit-imageslgromero-new-oglivemainmaint-cronmount-efivarfsmultivmmultivm-ogboot-installerogClonningEngineogboot-installer-jenkinsoglive-ipv6test-python-scriptsticket-301ticket-50ticket-50-oldticket-577ticket-585ticket-611ticket-612ticket-693ticket-700ubu24tplunification2use-local-agent-oglivevarios-instalacionwebconsole3
Last change on this file since fa0bb7d was 9f1274e, checked in by ramon <ramongomez@…>, 7 years ago

#804: Sustituir funciones para compatibilidad con PHP 7 (split por explode y ereg... por preg_...).

git-svn-id: https://opengnsys.es/svn/branches/version1.1@5619 a21b9725-9963-47de-94b9-378ad31fedc9

  • Property mode set to 100644
File size: 11.7 KB
Line 
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: Año 2009-2010
6// Fecha Última modificación: Mayo-2005
7// Nombre del fichero: gestor_procedimientos.php
8// Descripción :
9//              Gestiona la ejecución de procedimientos
10// *************************************************************************************************************************************************
11include_once("../includes/ctrlacc.php");
12include_once("../clases/AdoPhp.php");
13include_once("../clases/XmlPhp.php");
14include_once("../clases/ArbolVistaXML.php");
15include_once("../clases/SockHidra.php");
16include_once("../includes/CreaComando.php");
17include_once("../includes/constantes.php");
18include_once("../includes/comunes.php");
19include_once("../includes/RecopilaIpesMacs.php");
20//________________________________________________________________________________________________________
21
22$opcion=0; // Inicializa parametros
23
24$idprocedimiento=0;
25$idtarea=0;
26$ambito=0;
27$idambito=0;
28$swc=0; // switch de cliente, esta pagina la llama el cliente a través del browser
29
30if (isset($_POST["opcion"])) $opcion=$_POST["opcion"];
31if (isset($_POST["idprocedimiento"]))   $idprocedimiento=$_POST["idprocedimiento"];
32if (isset($_POST["descriprocedimiento"]))       $descriprocedimiento=$_POST["descriprocedimiento"];
33if (isset($_POST["ambito"])) $ambito=$_POST["ambito"];
34if (isset($_POST["idambito"])) $idambito=$_POST["idambito"];
35if (isset($_POST["idtarea"]))   $idtarea=$_POST["idtarea"];
36if (isset($_POST["descritarea"]))       $descritarea=$_POST["descritarea"];
37
38if (isset($_GET["opcion"])) $opcion=$_GET["opcion"];
39if (isset($_GET["idprocedimiento"])) $idprocedimiento=$_GET["idprocedimiento"];
40if (isset($_GET["descriprocedimiento"]))$descriprocedimiento=$_GET["descriprocedimiento"];
41if (isset($_GET["ambito"])) $ambito=$_GET["ambito"];
42if (isset($_GET["idambito"])) $idambito=$_GET["idambito"];
43if (isset($_GET["idtarea"])) $idtarea=$_GET["idtarea"];
44if (isset($_GET["descritarea"])) $descritarea=$_GET["descritarea"];
45
46if (isset($_GET["swc"])) $swc=$_GET["swc"]; // Switch que indica que la página la solicita un cliente a través del browser
47
48$cmd=CreaComando($cadenaconexion); // Crea objeto comando
49$resul=false;
50if ($cmd){
51        $shidra=new SockHidra($servidorhidra,$hidraport);
52        $cadenaid="";
53        $cadenaip="";
54        $cadenamac="";
55        $sesion=0;
56        $vez=0;
57        if(opcion!=$EJECUCION_TAREA)
58                RecopilaIpesMacs($cmd,$ambito,$idambito); // Recopila Ipes del ámbito
59        if(opcion!=$EJECUCION_AUTOEXEC){
60                //Creación parametros para inserción en tabla acciones
61                $sesion=time();
62                $cmd->CreaParametro("@tipoaccion",$opcion,1);
63                $cmd->CreaParametro("@idtipoaccion",0,1);
64                $cmd->CreaParametro("@descriaccion","",0);
65                $cmd->CreaParametro("@idordenador",0,1);
66                $cmd->CreaParametro("@ip","",0);
67                $cmd->CreaParametro("@sesion",$sesion,1);
68                $cmd->CreaParametro("@idcomando",0,1);
69                $cmd->CreaParametro("@parametros","",0);
70                $cmd->CreaParametro("@fechahorareg","",0);
71                $cmd->CreaParametro("@fechahorafin","",0);
72                $cmd->CreaParametro("@estado",$ACCION_INICIADA,1);
73                $cmd->CreaParametro("@resultado",$ACCION_SINRESULTADO,1);
74                $cmd->CreaParametro("@descrinotificacion","",0);       
75                $cmd->CreaParametro("@idprocedimiento",0,1);   
76                $cmd->CreaParametro("@idtarea",0,1);
77                $cmd->CreaParametro("@idcentro",$idcentro,1);   
78                $cmd->CreaParametro("@ambito",0,1);
79                $cmd->CreaParametro("@idambito",0,1);
80                $cmd->CreaParametro("@restrambito","",0);               
81        }
82        switch($opcion){
83                case $EJECUCION_AUTOEXEC:
84                        $resul=actualizaAutoexec($idprocedimiento);
85                        $literal="resultado_gestion_procedimiento";
86                        break;
87                case $EJECUCION_PROCEDIMIENTO:
88                        $cmd->ParamSetValor("@idtipoaccion",$idprocedimiento);
89                        $cmd->ParamSetValor("@descriaccion",$descriprocedimiento);
90                        $resul=ejecucionProcedimiento($idprocedimiento,$ambito,$idambito);
91                        $literal="resultado_gestion_procedimiento";
92                        break;
93                case $EJECUCION_TAREA:
94                        $cmd->ParamSetValor("@idtipoaccion",$idtarea);
95                        $cmd->ParamSetValor("@descriaccion",$descritarea);             
96                        $cmd->ParamSetValor("@idtarea",$idtarea);       
97                        $resul=ejecucionTarea($idtarea);
98                        $literal="resultado_ejecutar_tareas";
99                        break;                                 
100        }
101        $cmd->Conexion->Cerrar();
102}
103if ($resul){
104        if(empty($swc)){
105                echo $literal."(1,'".$cmd->DescripUltimoError()."');".chr(13);
106        }
107        else{
108                echo '<SCRIPT language="javascript">'.chr(13);
109                echo 'alert("El item se ha ejecutado correctamente");'.chr(13);
110                echo 'var wurl="../varios/menucliente.php?iph='.trim($_SESSION["ogCliente"]).'";';
111                echo 'history.back();';
112                echo '</SCRIPT>';
113        }
114}
115else{
116        if(empty($swc)){
117                echo $literal."(0,'".$cmd->DescripUltimoError()."')";
118        }
119        else{
120                echo '<SCRIPT language="javascript">'.chr(13);
121                echo 'alert("***ATENCIÓN:El item NO se ha podido ejecutar");'.chr(13);
122                echo 'var wurl="../varios/menucliente.php?iph='.trim($_SESSION["ogCliente"]).'";';
123                echo 'location.href=wurl;';
124                echo '</SCRIPT>';
125        }
126}
127//********************************************************************************************************
128//
129// Incorpora un procedimiento como autoexec
130//________________________________________________________________________________________________________
131function actualizaAutoexec($idprocedimiento)
132{
133        global $cadenaid;
134        global $cmd;
135
136        $cmd->texto="UPDATE ordenadores SET idproautoexec=".$idprocedimiento." WHERE idordenador IN (".$cadenaid.")";
137        $resul=$cmd->Ejecutar();
138        return(resul);
139}
140//________________________________________recorreProcedimientos________________________________________________________________
141//
142// Ejecuta un procedimiento: lo registra en acciones y lo envía por la red
143//________________________________________________________________________________________________________
144function ejecucionProcedimiento($idprocedimiento,$ambito,$idambito)
145{
146        return(recorreProcedimientos($idprocedimiento,$ambito,$idambito));                                               
147}
148//________________________________________________________________________________________________________
149//
150// Ejecuta una tarea: la registra en acciones y la envía por la red
151//________________________________________________________________________________________________________
152function ejecucionTarea($idtarea)
153{
154        return(recorreTareas($idtarea));                                                 
155}
156//________________________________________________________________________________________________________
157function recorreProcedimientos($idprocedimiento,$ambito,$idambito)
158{               
159        global $cmd;
160        global $sesion;
161
162        $cmd->texto="SELECT   idcomando,procedimientoid,parametros
163                         FROM procedimientos_acciones
164                        WHERE idprocedimiento=".$idprocedimiento."
165                        ORDER BY orden";       
166
167        $rs=new Recordset;
168        $rs->Comando=&$cmd;
169        if (!$rs->Abrir()) return(false); // Error al abrir recordset
170        while (!$rs->EOF){
171                $procedimientoid=$rs->campos["procedimientoid"];
172                if($procedimientoid>0){ // Procedimiento recursivo
173                        if(!recorreProcedimientos($procedimientoid,$ambito,$idambito)){
174                                return(false);
175                        }
176                }
177                else{
178                        $parametros=$rs->campos["parametros"];
179                        $idcomando=$rs->campos["idcomando"];
180                        // Ticket 681: bucle infinito en procedimiento compuesto (J.M. Alonso).
181                        do{
182                                $nwsesion=time();       
183                        }while($sesion==$nwsesion);
184                        $sesion=$nwsesion;
185                        $cmd->ParamSetValor("@sesion",$sesion);
186                        // Fin ticket 681.
187                        if(!insertaComando($idcomando,$parametros,$idprocedimiento,$ambito,$idambito))
188                                return(false); 
189                }
190                $rs->Siguiente();
191        }
192        return(true);
193}
194//________________________________________________________________________________________________________
195function recorreTareas($idtarea)
196{               
197        global $cadenaid;
198        global $cadenaip;
199        global $cadenamac;     
200        global $cmd;   
201                         
202        $cmd->texto="SELECT tareas_acciones.orden,tareas_acciones.idprocedimiento,tareas_acciones.tareaid,
203                                                tareas.ambito,tareas.idambito,tareas.restrambito
204                                 FROM tareas
205                                 INNER JOIN tareas_acciones ON tareas_acciones.idtarea=tareas.idtarea
206                                 WHERE tareas_acciones.idtarea=".$idtarea."
207                                 ORDER BY tareas_acciones.orden";       
208        //echo $cmd->texto;                                                                     
209        $rs=new Recordset;
210        $rs->Comando=&$cmd;
211        if (!$rs->Abrir()) return(false); // Error al abrir recordset
212        while (!$rs->EOF){
213                $tareaid=$rs->campos["tareaid"];
214                if($tareaid>0){ // Tarea recursiva
215                        if(!recorreTareas($tareaid)){
216                                return(false);
217                        }
218                }
219                else{
220                        $ambito=$rs->campos["ambito"];
221                        $idambito=$rs->campos["idambito"];
222                        if($ambito==0 && $idambito==0){ // Ámbito restringido
223                                $idambito=$rs->campos["restrambito"];
224                        }
225                        RecopilaIpesMacs($cmd,$ambito,$idambito); // Recopila Ipes del ámbito           
226                        $idprocedimiento=$rs->campos["idprocedimiento"];
227                        if(!recorreProcedimientos($idprocedimiento,$ambito,$idambito))
228                                return(false); 
229                }
230                $rs->Siguiente();
231        }
232        return(true);
233}
234//________________________________________________________________________________________________________
235//
236//      Registra un procedimiento para un ambito concreto
237//________________________________________________________________________________________________________
238function insertaComando($idcomando,$parametros,$idprocedimiento,$ambito,$idambito)
239{
240        global $cadenaid;
241        global $cadenaip;
242        global $cmd;   
243        global $sesion;
244        global $vez;
245       
246        if($ambito==0){ // Ambito restringido a un subconjuto de ordenadores con formato (idordenador1,idordenador2,etc)
247                $cmd->ParamSetValor("@restrambito",$idambito);
248                $idambito=0;
249        }       
250       
251        $cmd->ParamSetValor("@idcomando",$idcomando);
252        $cmd->ParamSetValor("@idprocedimiento",$idprocedimiento);
253        $cmd->ParamSetValor("@parametros",$parametros);
254        $cmd->ParamSetValor("@fechahorareg",date("y/m/d H:i:s"));
255        $cmd->ParamSetValor("@ambito",$ambito);
256        $cmd->ParamSetValor("@idambito",$idambito);
257                       
258        if(strlen($cadenaip)==0) return(true); 
259       
260        $auxID=explode(",",$cadenaid);
261        $auxIP=explode(";",$cadenaip);
262
263        for ($i=0;$i<sizeof($auxID);$i++){
264                $cmd->ParamSetValor("@idordenador",$auxID[$i]);
265                $cmd->ParamSetValor("@ip",$auxIP[$i]);
266                $cmd->texto="INSERT INTO acciones (idordenador,tipoaccion,idtipoaccion,descriaccion,ip,sesion,idcomando,parametros,fechahorareg,estado,resultado,ambito,idambito,restrambito,idprocedimiento,idtarea,idcentro)
267                                        VALUES (@idordenador,@tipoaccion,@idtipoaccion,@descriaccion,@ip,@sesion,@idcomando,@parametros,@fechahorareg,@estado,@resultado,@ambito,@idambito,@restrambito,@idprocedimiento,@idtarea,@idcentro)";
268                $resul=$cmd->Ejecutar();
269                //echo $cmd->texto;
270                if(!$resul) return(false);
271               
272                /* Sólo envía por la red el primer comando, el resto, si hubiera,
273                lo encontrará el cliente a través de los comandos pendientes */
274                if(empty($vez)){
275                        if(!enviaComando($parametros,$sesion)) return(false);
276                        $vez++;
277                }
278        }
279        return(true);
280}
281//________________________________________________________________________________________________________
282//
283//      Envia un procedimiento a un grupo de ordenadores a través de la red
284//________________________________________________________________________________________________________
285function enviaComando($parametros,$sesion)
286{       
287        global $cadenaid;
288        global $cadenaip;
289        global $cadenamac;     
290        global $servidorhidra;         
291        global $hidraport;             
292        global $LONCABECERA;           
293        global $shidra;
294       
295        // Envio al servidor
296
297        $aplicacion=chr(13)."ido=".$cadenaid.chr(13)."mac=".$cadenamac.chr(13)."iph=".$cadenaip.chr(13);
298        $acciones=chr(13)."ids=".$sesion.chr(13); // Para seguimiento
299       
300        if ($shidra->conectar()){ // Se ha establecido la conexión con el servidor hidra
301                $parametros.=$aplicacion;
302                $parametros.=$acciones;
303                $shidra->envia_comando($parametros);
304                $trama=$shidra->recibe_respuesta();
305                $shidra->desconectar();
306        }
307        return(true);
308}
309?>
310
Note: See TracBrowser for help on using the repository browser.