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

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

#942 Fix immediate procedures (web)

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