summaryrefslogtreecommitdiffstats
path: root/admin/WebConsole/gestores/gestor_ejecutaracciones.php
diff options
context:
space:
mode:
Diffstat (limited to 'admin/WebConsole/gestores/gestor_ejecutaracciones.php')
-rw-r--r--admin/WebConsole/gestores/gestor_ejecutaracciones.php300
1 files changed, 300 insertions, 0 deletions
diff --git a/admin/WebConsole/gestores/gestor_ejecutaracciones.php b/admin/WebConsole/gestores/gestor_ejecutaracciones.php
new file mode 100644
index 00000000..30aa8c7d
--- /dev/null
+++ b/admin/WebConsole/gestores/gestor_ejecutaracciones.php
@@ -0,0 +1,300 @@
+<?
+// *************************************************************************************************************************************************
+// Aplicación WEB: ogAdmWebCon
+// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
+// Fecha Creación: Año 2009-2010
+// Fecha Última modificación: Mayo-2005
+// Nombre del fichero: gestor_procedimientos.php
+// Descripción :
+// Gestiona la ejecución de procedimientos
+// *************************************************************************************************************************************************
+include_once("../includes/ctrlacc.php");
+include_once("../clases/AdoPhp.php");
+include_once("../clases/XmlPhp.php");
+include_once("../clases/ArbolVistaXML.php");
+include_once("../clases/SockHidra.php");
+include_once("../includes/CreaComando.php");
+include_once("../includes/constantes.php");
+include_once("../includes/comunes.php");
+include_once("../includes/RecopilaIpesMacs.php");
+//________________________________________________________________________________________________________
+
+$opcion=0; // Inicializa parametros
+
+$idprocedimiento=0;
+$idtarea=0;
+$ambito=0;
+$idambito=0;
+$swc=0; // switch de cliente, esta pagina la llama el cliente a través del browser
+
+if (isset($_POST["opcion"])) $opcion=$_POST["opcion"];
+if (isset($_POST["idprocedimiento"])) $idprocedimiento=$_POST["idprocedimiento"];
+if (isset($_POST["descriprocedimiento"])) $descriprocedimiento=$_POST["descriprocedimiento"];
+if (isset($_POST["ambito"])) $ambito=$_POST["ambito"];
+if (isset($_POST["idambito"])) $idambito=$_POST["idambito"];
+if (isset($_POST["idtarea"])) $idtarea=$_POST["idtarea"];
+if (isset($_POST["descritarea"])) $descritarea=$_POST["descritarea"];
+
+if (isset($_GET["opcion"])) $opcion=$_GET["opcion"];
+if (isset($_GET["idprocedimiento"])) $idprocedimiento=$_GET["idprocedimiento"];
+if (isset($_GET["descriprocedimiento"]))$descriprocedimiento=$_GET["descriprocedimiento"];
+if (isset($_GET["ambito"])) $ambito=$_GET["ambito"];
+if (isset($_GET["idambito"])) $idambito=$_GET["idambito"];
+if (isset($_GET["idtarea"])) $idtarea=$_GET["idtarea"];
+if (isset($_GET["descritarea"])) $descritarea=$_GET["descritarea"];
+
+if (isset($_GET["swc"])) $swc=$_GET["swc"]; // Switch que indica que la página la solicita un cliente a través del browser
+
+$cmd=CreaComando($cadenaconexion); // Crea objeto comando
+$resul=false;
+if ($cmd){
+ $shidra=new SockHidra($servidorhidra,$hidraport);
+ $cadenaid="";
+ $cadenaip="";
+ $cadenamac="";
+ $sesion=0;
+ $vez=0;
+ if(opcion!=$EJECUCION_TAREA)
+ RecopilaIpesMacs($cmd,$ambito,$idambito); // Recopila Ipes del ámbito
+ if(opcion!=$EJECUCION_AUTOEXEC){
+ //Creación parametros para inserción en tabla acciones
+ $sesion=time();
+ $cmd->CreaParametro("@tipoaccion",$opcion,1);
+ $cmd->CreaParametro("@idtipoaccion",0,1);
+ $cmd->CreaParametro("@descriaccion","",0);
+ $cmd->CreaParametro("@idordenador",0,1);
+ $cmd->CreaParametro("@ip","",0);
+ $cmd->CreaParametro("@sesion",$sesion,1);
+ $cmd->CreaParametro("@idcomando",0,1);
+ $cmd->CreaParametro("@parametros","",0);
+ $cmd->CreaParametro("@fechahorareg","",0);
+ $cmd->CreaParametro("@fechahorafin","",0);
+ $cmd->CreaParametro("@estado",$ACCION_INICIADA,1);
+ $cmd->CreaParametro("@resultado",$ACCION_SINRESULTADO,1);
+ $cmd->CreaParametro("@descrinotificacion","",0);
+ $cmd->CreaParametro("@idprocedimiento",0,1);
+ $cmd->CreaParametro("@idtarea",0,1);
+ $cmd->CreaParametro("@idcentro",$idcentro,1);
+ $cmd->CreaParametro("@ambito",0,1);
+ $cmd->CreaParametro("@idambito",0,1);
+ $cmd->CreaParametro("@restrambito","",0);
+ }
+ switch($opcion){
+ case $EJECUCION_AUTOEXEC:
+ $resul=actualizaAutoexec($idprocedimiento);
+ $literal="resultado_gestion_procedimiento";
+ break;
+ case $EJECUCION_PROCEDIMIENTO:
+ $cmd->ParamSetValor("@idtipoaccion",$idprocedimiento);
+ $cmd->ParamSetValor("@descriaccion",$descriprocedimiento);
+ $resul=ejecucionProcedimiento($idprocedimiento,$ambito,$idambito);
+ $literal="resultado_gestion_procedimiento";
+ break;
+ case $EJECUCION_TAREA:
+ $cmd->ParamSetValor("@idtipoaccion",$idtarea);
+ $cmd->ParamSetValor("@descriaccion",$descritarea);
+ $cmd->ParamSetValor("@idtarea",$idtarea);
+ $resul=ejecucionTarea($idtarea);
+ $literal="resultado_ejecutar_tareas";
+ break;
+ }
+ $cmd->Conexion->Cerrar();
+}
+if ($resul){
+ if(empty($swc)){
+ echo $literal."(1,'".$cmd->DescripUltimoError()."');".chr(13);
+ }
+ else{
+ echo '<SCRIPT language="javascript">'.chr(13);
+ echo 'alert("El item se ha ejecutado correctamente");'.chr(13);
+ echo 'var wurl="../varios/menucliente.php?iph='.trim($_SESSION["ogCliente"]).'";';
+ echo 'history.back();';
+ echo '</SCRIPT>';
+ }
+}
+else{
+ if(empty($swc)){
+ echo $literal."(0,'".$cmd->DescripUltimoError()."')";
+ }
+ else{
+ echo '<SCRIPT language="javascript">'.chr(13);
+ echo 'alert("***ATENCIÓN:El item NO se ha podido ejecutar");'.chr(13);
+ echo 'var wurl="../varios/menucliente.php?iph='.trim($_SESSION["ogCliente"]).'";';
+ echo 'location.href=wurl;';
+ echo '</SCRIPT>';
+ }
+}
+//********************************************************************************************************
+//
+// Incorpora un procedimiento como autoexec
+//________________________________________________________________________________________________________
+function actualizaAutoexec($idprocedimiento)
+{
+ global $cadenaid;
+ global $cmd;
+
+ $cmd->texto="UPDATE ordenadores SET idproautoexec=".$idprocedimiento." WHERE idordenador IN (".$cadenaid.")";
+ $resul=$cmd->Ejecutar();
+ return(resul);
+}
+//________________________________________________________________________________________________________
+//
+// Ejecuta un procedimiento: lo registra en acciones y lo envía por la red
+//________________________________________________________________________________________________________
+function ejecucionProcedimiento($idprocedimiento,$ambito,$idambito)
+{
+ return(recorreProcedimientos($idprocedimiento,$ambito,$idambito));
+}
+//________________________________________________________________________________________________________
+//
+// Ejecuta una tarea: la registra en acciones y la envía por la red
+//________________________________________________________________________________________________________
+function ejecucionTarea($idtarea)
+{
+ return(recorreTareas($idtarea));
+}
+//________________________________________________________________________________________________________
+function recorreProcedimientos($idprocedimiento,$ambito,$idambito)
+{
+ global $cmd;
+
+ $cmd->texto="SELECT idcomando,procedimientoid,parametros
+ FROM procedimientos_acciones
+ WHERE idprocedimiento=".$idprocedimiento."
+ ORDER BY orden";
+ //echo $cmd->texto;
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return(false); // Error al abrir recordset
+ while (!$rs->EOF){
+ $procedimientoid=$rs->campos["procedimientoid"];
+ if($procedimientoid>0){ // Procedimiento recursivo
+ if(!recorreProcedimientos($procedimientoid,$ambito,$idambito)){
+ return(false);
+ }
+ }
+ else{
+ $parametros=$rs->campos["parametros"];
+ $idcomando=$rs->campos["idcomando"];
+ if(!insertaComando($idcomando,$parametros,$idprocedimiento,$ambito,$idambito))
+ return(false);
+ }
+ $rs->Siguiente();
+ }
+ return(true);
+}
+//________________________________________________________________________________________________________
+function recorreTareas($idtarea)
+{
+ global $cadenaid;
+ global $cadenaip;
+ global $cadenamac;
+ global $cmd;
+
+ $cmd->texto="SELECT tareas_acciones.orden,tareas_acciones.idprocedimiento,tareas_acciones.tareaid,
+ tareas.ambito,tareas.idambito,tareas.restrambito
+ FROM tareas
+ INNER JOIN tareas_acciones ON tareas_acciones.idtarea=tareas.idtarea
+ WHERE tareas_acciones.idtarea=".$idtarea."
+ ORDER BY tareas_acciones.orden";
+ //echo $cmd->texto;
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return(false); // Error al abrir recordset
+ while (!$rs->EOF){
+ $tareaid=$rs->campos["tareaid"];
+ if($tareaid>0){ // Tarea recursiva
+ if(!recorreTareas($tareaid)){
+ return(false);
+ }
+ }
+ else{
+ $ambito=$rs->campos["ambito"];
+ $idambito=$rs->campos["idambito"];
+ if($ambito==0 && $idambito==0){ // Ámbito restringido
+ $idambito=$rs->campos["restrambito"];
+ }
+ RecopilaIpesMacs($cmd,$ambito,$idambito); // Recopila Ipes del ámbito
+ $idprocedimiento=$rs->campos["idprocedimiento"];
+ if(!recorreProcedimientos($idprocedimiento,$ambito,$idambito))
+ return(false);
+ }
+ $rs->Siguiente();
+ }
+ return(true);
+}
+//________________________________________________________________________________________________________
+//
+// Registra un procedimiento para un ambito concreto
+//________________________________________________________________________________________________________
+function insertaComando($idcomando,$parametros,$idprocedimiento,$ambito,$idambito)
+{
+ global $cadenaid;
+ global $cadenaip;
+ global $cmd;
+ global $vez;
+
+ if($ambito==0){ // Ambito restringido a un subconjuto de ordenadores con formato (idordenador1,idordenador2,etc)
+ $cmd->ParamSetValor("@restrambito",$idambito);
+ $idambito=0;
+ }
+
+ $cmd->ParamSetValor("@idcomando",$idcomando);
+ $cmd->ParamSetValor("@idprocedimiento",$idprocedimiento);
+ $cmd->ParamSetValor("@parametros",$parametros);
+ $cmd->ParamSetValor("@fechahorareg",date("y/m/d H:i:s"));
+ $cmd->ParamSetValor("@ambito",$ambito);
+ $cmd->ParamSetValor("@idambito",$idambito);
+
+ if(strlen($cadenaip)==0) return(true);
+
+ $auxID=split(",",$cadenaid);
+ $auxIP=split(";",$cadenaip);
+
+ for ($i=0;$i<sizeof($auxID);$i++){
+ $cmd->ParamSetValor("@idordenador",$auxID[$i]);
+ $cmd->ParamSetValor("@ip",$auxIP[$i]);
+ $cmd->texto="INSERT INTO acciones (idordenador,tipoaccion,idtipoaccion,descriaccion,ip,sesion,idcomando,parametros,fechahorareg,estado,resultado,ambito,idambito,restrambito,idprocedimiento,idtarea,idcentro)
+ VALUES (@idordenador,@tipoaccion,@idtipoaccion,@descriaccion,@ip,@sesion,@idcomando,@parametros,@fechahorareg,@estado,@resultado,@ambito,@idambito,@restrambito,@idprocedimiento,@idtarea,@idcentro)";
+ $resul=$cmd->Ejecutar();
+ //echo $cmd->texto;
+ if(!$resul) return(false);
+
+ /* Sólo envía por la red el primer comando, el resto, si hubiera,
+ lo encontrará el cliente a través de los comandos pendientes */
+ if(empty($vez))
+ if(!enviaComando($parametros)) return(false);
+ $vez++;
+ }
+ return(true);
+}
+//________________________________________________________________________________________________________
+//
+// Envia un procedimiento a un grupo de ordenadores a través de la red
+//________________________________________________________________________________________________________
+function enviaComando($parametros)
+{
+ global $cadenaid;
+ global $cadenaip;
+ global $cadenamac;
+ global $sesion;
+ global $servidorhidra;
+ global $hidraport;
+ global $LONCABECERA;
+ global $shidra;
+
+ // Envio al servidor
+
+ $aplicacion=chr(13)."ido=".$cadenaid.chr(13)."mac=".$cadenamac.chr(13)."iph=".$cadenaip.chr(13);
+ $acciones=chr(13)."ids=".$sesion.chr(13); // Para seguimiento
+
+ if ($shidra->conectar()){ // Se ha establecido la conexión con el servidor hidra
+ $parametros.=$aplicacion;
+ $parametros.=$acciones;
+ $shidra->envia_comando($parametros);
+ $trama=$shidra->recibe_respuesta();
+ $shidra->desconectar();
+ }
+ return(true);
+}
+?>