source: admin/WebConsole/gestores/gestor_ejecutaracciones.php @ 3b6c2d8

Last change on this file since 3b6c2d8 was 5a9ed93, checked in by OpenGnSys Support Team <soporte-og@…>, 5 years ago

#942 Add /run/task to API REST (web)

  • Property mode set to 100644
File size: 9.0 KB
RevLine 
[c870c84]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("../includes/CreaComando.php");
16include_once("../includes/constantes.php");
17include_once("../includes/comunes.php");
18include_once("../includes/RecopilaIpesMacs.php");
[1d380e5]19include_once("../includes/restfunctions.php");
[c870c84]20//________________________________________________________________________________________________________
21
[00f0fe2]22define('OG_CMD_ID_WAKEUP', 1);
23
[c870c84]24$opcion=0; // Inicializa parametros
25
26$idprocedimiento=0;
27$idtarea=0;
28$ambito=0;
29$idambito=0;
30$swc=0; // switch de cliente, esta pagina la llama el cliente a través del browser
31
32if (isset($_POST["opcion"])) $opcion=$_POST["opcion"];
33if (isset($_POST["idprocedimiento"]))   $idprocedimiento=$_POST["idprocedimiento"];
34if (isset($_POST["descriprocedimiento"]))       $descriprocedimiento=$_POST["descriprocedimiento"];
35if (isset($_POST["ambito"])) $ambito=$_POST["ambito"];
36if (isset($_POST["idambito"])) $idambito=$_POST["idambito"];
37if (isset($_POST["idtarea"]))   $idtarea=$_POST["idtarea"];
38if (isset($_POST["descritarea"]))       $descritarea=$_POST["descritarea"];
39
40if (isset($_GET["opcion"])) $opcion=$_GET["opcion"];
41if (isset($_GET["idprocedimiento"])) $idprocedimiento=$_GET["idprocedimiento"];
42if (isset($_GET["descriprocedimiento"]))$descriprocedimiento=$_GET["descriprocedimiento"];
43if (isset($_GET["ambito"])) $ambito=$_GET["ambito"];
44if (isset($_GET["idambito"])) $idambito=$_GET["idambito"];
45if (isset($_GET["idtarea"])) $idtarea=$_GET["idtarea"];
46if (isset($_GET["descritarea"])) $descritarea=$_GET["descritarea"];
47
48if (isset($_GET["swc"])) $swc=$_GET["swc"]; // Switch que indica que la página la solicita un cliente a través del browser
49
50$cmd=CreaComando($cadenaconexion); // Crea objeto comando
51$resul=false;
52if ($cmd){
53        $cadenaid="";
54        $cadenaip="";
55        $cadenamac="";
56        $sesion=0;
57        $vez=0;
58        if(opcion!=$EJECUCION_TAREA)
59                RecopilaIpesMacs($cmd,$ambito,$idambito); // Recopila Ipes del ámbito
60        if(opcion!=$EJECUCION_AUTOEXEC){
61                //Creación parametros para inserción en tabla acciones
62                $sesion=time();
63                $cmd->CreaParametro("@tipoaccion",$opcion,1);
64                $cmd->CreaParametro("@idtipoaccion",0,1);
65                $cmd->CreaParametro("@descriaccion","",0);
66                $cmd->CreaParametro("@idordenador",0,1);
67                $cmd->CreaParametro("@ip","",0);
68                $cmd->CreaParametro("@sesion",$sesion,1);
69                $cmd->CreaParametro("@idcomando",0,1);
70                $cmd->CreaParametro("@parametros","",0);
71                $cmd->CreaParametro("@fechahorareg","",0);
72                $cmd->CreaParametro("@fechahorafin","",0);
73                $cmd->CreaParametro("@estado",$ACCION_INICIADA,1);
74                $cmd->CreaParametro("@resultado",$ACCION_SINRESULTADO,1);
75                $cmd->CreaParametro("@descrinotificacion","",0);
76                $cmd->CreaParametro("@idprocedimiento",0,1);
77                $cmd->CreaParametro("@idtarea",0,1);
78                $cmd->CreaParametro("@idcentro",$idcentro,1);
79                $cmd->CreaParametro("@ambito",0,1);
80                $cmd->CreaParametro("@idambito",0,1);
81                $cmd->CreaParametro("@restrambito","",0);
82        }
83        switch($opcion){
84                case $EJECUCION_AUTOEXEC:
85                        $resul=actualizaAutoexec($idprocedimiento);
86                        $literal="resultado_gestion_procedimiento";
87                        break;
88                case $EJECUCION_PROCEDIMIENTO:
89                        $cmd->ParamSetValor("@idtipoaccion",$idprocedimiento);
90                        $cmd->ParamSetValor("@descriaccion",$descriprocedimiento);
91                        $resul=ejecucionProcedimiento($idprocedimiento,$ambito,$idambito);
92                        $literal="resultado_gestion_procedimiento";
93                        break;
94                case $EJECUCION_TAREA:
95                        $cmd->ParamSetValor("@idtipoaccion",$idtarea);
96                        $cmd->ParamSetValor("@descriaccion",$descritarea);
97                        $cmd->ParamSetValor("@idtarea",$idtarea);
[5a9ed93]98                        $resul=run_task($idtarea);
[c870c84]99                        $literal="resultado_ejecutar_tareas";
100                        break;
101        }
102        $cmd->Conexion->Cerrar();
103}
104if ($resul){
105        if(empty($swc)){
106                echo $literal."(1,'".$cmd->DescripUltimoError()."');".chr(13);
107        }
108        else{
109                echo '<SCRIPT language="javascript">'.chr(13);
110                echo 'alert("El item se ha ejecutado correctamente");'.chr(13);
111                echo 'var wurl="../varios/menucliente.php?iph='.trim($_SESSION["ogCliente"]).'";';
112                echo 'history.back();';
113                echo '</SCRIPT>';
114        }
115}
116else{
117        if(empty($swc)){
118                echo $literal."(0,'".$cmd->DescripUltimoError()."')";
119        }
120        else{
121                echo '<SCRIPT language="javascript">'.chr(13);
122                echo 'alert("***ATENCIÓN:El item NO se ha podido ejecutar");'.chr(13);
123                echo 'var wurl="../varios/menucliente.php?iph='.trim($_SESSION["ogCliente"]).'";';
124                echo 'location.href=wurl;';
125                echo '</SCRIPT>';
126        }
127}
128//********************************************************************************************************
129//
130// Incorpora un procedimiento como autoexec
131//________________________________________________________________________________________________________
132function actualizaAutoexec($idprocedimiento)
133{
134        global $cadenaid;
135        global $cmd;
136
137        $cmd->texto="UPDATE ordenadores SET idproautoexec=".$idprocedimiento." WHERE idordenador IN (".$cadenaid.")";
138        $resul=$cmd->Ejecutar();
139        return(resul);
140}
141//________________________________________recorreProcedimientos________________________________________________________________
142//
143// Ejecuta un procedimiento: lo registra en acciones y lo envía por la red
144//________________________________________________________________________________________________________
145function ejecucionProcedimiento($idprocedimiento,$ambito,$idambito)
146{
147        return(recorreProcedimientos($idprocedimiento,$ambito,$idambito));                                               
148}
149//________________________________________________________________________________________________________
150function recorreProcedimientos($idprocedimiento,$ambito,$idambito)
151{               
[00f0fe2]152        global $cadenamac;
153        global $cadenaip;
[c870c84]154        global $sesion;
[00f0fe2]155        global $cmd;
156
157        $wol_params;
[c870c84]158
159        $cmd->texto="SELECT   idcomando,procedimientoid,parametros
160                         FROM procedimientos_acciones
161                        WHERE idprocedimiento=".$idprocedimiento."
162                        ORDER BY orden";       
163
164        $rs=new Recordset;
165        $rs->Comando=&$cmd;
166        if (!$rs->Abrir()) return(false); // Error al abrir recordset
167        while (!$rs->EOF){
168                $procedimientoid=$rs->campos["procedimientoid"];
169                if($procedimientoid>0){ // Procedimiento recursivo
170                        if(!recorreProcedimientos($procedimientoid,$ambito,$idambito)){
171                                return(false);
172                        }
173                }
174                else{
175                        $parametros=$rs->campos["parametros"];
176                        $idcomando=$rs->campos["idcomando"];
177                        // Ticket 681: bucle infinito en procedimiento compuesto (J.M. Alonso).
178                        do{
179                                $nwsesion=time();       
180                        }while($sesion==$nwsesion);
181                        $sesion=$nwsesion;
182                        $cmd->ParamSetValor("@sesion",$sesion);
183                        // Fin ticket 681.
[00f0fe2]184                        if ($idcomando == OG_CMD_ID_WAKEUP)
185                                $wol_params = $parametros;
[c870c84]186                        if(!insertaComando($idcomando,$parametros,$idprocedimiento,$ambito,$idambito))
187                                return(false); 
188                }
189                $rs->Siguiente();
190        }
[00f0fe2]191
192        if (isset($wol_params)) {
193                $atributos = substr(trim($wol_params), -1);
194                include("../comandos/gestores/wakeonlan_repo.php");
195        }
196
[c870c84]197        return(true);
198}
199//________________________________________________________________________________________________________
200//
201//      Registra un procedimiento para un ambito concreto
202//________________________________________________________________________________________________________
203function insertaComando($idcomando,$parametros,$idprocedimiento,$ambito,$idambito)
204{
205        global $cadenaid;
206        global $cadenaip;
207        global $cmd;   
208        global $sesion;
209        global $vez;
210
211        if($ambito==0){ // Ambito restringido a un subconjuto de ordenadores con formato (idordenador1,idordenador2,etc)
212                $cmd->ParamSetValor("@restrambito",$idambito);
213                $idambito=0;
214        }       
215       
216        $cmd->ParamSetValor("@idcomando",$idcomando);
217        $cmd->ParamSetValor("@idprocedimiento",$idprocedimiento);
218        $cmd->ParamSetValor("@parametros",$parametros);
219        $cmd->ParamSetValor("@fechahorareg",date("y/m/d H:i:s"));
220        $cmd->ParamSetValor("@ambito",$ambito);
221        $cmd->ParamSetValor("@idambito",$idambito);
222
223        if(strlen($cadenaip)==0) return(true); 
224
225        $auxID=explode(",",$cadenaid);
226        $auxIP=explode(";",$cadenaip);
227
228        for ($i=0;$i<sizeof($auxID);$i++){
229                $cmd->ParamSetValor("@idordenador",$auxID[$i]);
230                $cmd->ParamSetValor("@ip",$auxIP[$i]);
231                $cmd->texto="INSERT INTO acciones (idordenador,tipoaccion,idtipoaccion,descriaccion,ip,sesion,idcomando,parametros,fechahorareg,estado,resultado,ambito,idambito,restrambito,idprocedimiento,idtarea,idcentro)
232                                        VALUES (@idordenador,@tipoaccion,@idtipoaccion,@descriaccion,@ip,@sesion,@idcomando,@parametros,@fechahorareg,@estado,@resultado,@ambito,@idambito,@restrambito,@idprocedimiento,@idtarea,@idcentro)";
233                $resul=$cmd->Ejecutar();
234                //echo $cmd->texto;
235                if(!$resul) return(false);
[1d380e5]236
237                // Let the clients know they can start executing pending commands.
[c870c84]238                if(empty($vez)){
[1d380e5]239                        run_schedule($cadenaip);
[c870c84]240                        $vez++;
241                }
242        }
243        return(true);
244}
245
Note: See TracBrowser for help on using the repository browser.