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=run_task($idtarea);
$literal="resultado_ejecutar_tareas";
break;
}
$cmd->Conexion->Cerrar();
}
if ($resul){
if(empty($swc)){
echo $literal."(1,'".$cmd->DescripUltimoError()."');".chr(13);
}
else{
echo '';
}
}
else{
if(empty($swc)){
echo $literal."(0,'".$cmd->DescripUltimoError()."')";
}
else{
echo '';
}
}
//********************************************************************************************************
//
// 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);
}
//________________________________________recorreProcedimientos________________________________________________________________
//
// Ejecuta un procedimiento: lo registra en acciones y lo envía por la red
//________________________________________________________________________________________________________
function ejecucionProcedimiento($idprocedimiento,$ambito,$idambito)
{
return(recorreProcedimientos($idprocedimiento,$ambito,$idambito));
}
//________________________________________________________________________________________________________
function recorreProcedimientos($idprocedimiento,$ambito,$idambito)
{
global $cadenamac;
global $cadenaip;
global $sesion;
global $cmd;
$wol_params;
$cmd->texto="SELECT idcomando,procedimientoid,parametros
FROM procedimientos_acciones
WHERE idprocedimiento=".$idprocedimiento."
ORDER BY orden";
$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"];
// Ticket 681: bucle infinito en procedimiento compuesto (J.M. Alonso).
do{
$nwsesion=time();
}while($sesion==$nwsesion);
$sesion=$nwsesion;
$cmd->ParamSetValor("@sesion",$sesion);
// Fin ticket 681.
if ($idcomando == OG_CMD_ID_WAKEUP)
$wol_params = $parametros;
if(!insertaComando($idcomando,$parametros,$idprocedimiento,$ambito,$idambito))
return(false);
}
$rs->Siguiente();
}
if (isset($wol_params)) {
$atributos = substr(trim($wol_params), -1);
include("../comandos/gestores/wakeonlan_repo.php");
}
return(true);
}
//________________________________________________________________________________________________________
//
// Registra un procedimiento para un ambito concreto
//________________________________________________________________________________________________________
function insertaComando($idcomando,$parametros,$idprocedimiento,$ambito,$idambito)
{
global $EJECUCION_PROCEDIMIENTO;
global $cadenaid;
global $cadenaip;
global $cmd;
global $sesion;
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=explode(",",$cadenaid);
$auxIP=explode(";",$cadenaip);
for ($i=0;$iParamSetValor("@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);
if ($i == 0) {
$sesion = $cmd->Autonumerico();
$cmd->ParamSetValor("@sesion",$sesion);
}
}
$cmd->texto = "UPDATE acciones SET sesion=@sesion ".
"WHERE idaccion = @sesion";
$resul=$cmd->Ejecutar();
if (resul) {
$when = now_params();
$resul = create_schedule(strval($sesion), $EJECUCION_PROCEDIMIENTO, "",
$when['map_year'], $when['map_month'],
0, 0, $when['map_day'],
$when['map_hour'], $when['map_am_pm'],
$when['map_minute']);
}
return(true);
}