// *************************************************************************************************************************************************
// 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: Agosto-2010
// Nombre del fichero: colasacciones.php
// Descripción :
// Visualiza las acciones pendientes y finalizadas con los resultados de estatus y horas de inicio y finalización
// *************************************************************************************************************************************************
include_once("../includes/ctrlacc.php");
include_once("../clases/AdoPhp.php");
include_once("../clases/MenuContextual.php");
include_once("../includes/constantes.php");
include_once("../includes/comunes.php");
include_once("../includes/RecopilaIpesMacs.php");
include_once("../includes/InvFecha.php");
include_once("../clases/XmlPhp.php");
include_once("../includes/HTMLSELECT.php");
include_once("../includes/HTMLCTESELECT.php");
include_once("../includes/TomaDato.php");
include_once("../includes/CreaComando.php");
include_once("../idiomas/php/".$idioma."/colasacciones_".$idioma.".php");
//________________________________________________________________________________________________________
//
// Captura de parámetros
//________________________________________________________________________________________________________
$ambito="";
$idambito=0;
$nombreambito="";
$fechainicio="";
$fechafin="";
$horainicio="";
$horafin="";
$tipoaccion="";
$estado="";
$resultado="";
$porcendesde="";
$porcenhasta="";
$swPOST="";
$visupro="";
$visuprm="";
$visucmd="";
if (isset($_GET["ambito"])) $ambito=$_GET["ambito"];
if (isset($_GET["idambito"])) $idambito=$_GET["idambito"];
if (isset($_GET["nombreambito"])) $nombreambito=$_GET["nombreambito"];
if (isset($_POST["ambito"])) $ambito=$_POST["ambito"];
if (isset($_POST["idambito"])) $idambito=$_POST["idambito"];
if (isset($_POST["nombreambito"])) $nombreambito=$_POST["nombreambito"];
if (isset($_POST["tipoaccion"])) $tipoaccion=$_POST["tipoaccion"];
if (isset($_POST["estado"])) $estado=$_POST["estado"];
if (isset($_POST["resultado"])) $resultado=$_POST["resultado"];
if (isset($_POST["fechainicio"])) $fechainicio=$_POST["fechainicio"];
if (isset($_POST["fechafin"])) $fechafin=$_POST["fechafin"];
if (isset($_POST["horainicio"])) $horainicio=$_POST["horainicio"];
if (isset($_POST["horafin"])) $horafin=$_POST["horafin"];
if (isset($_POST["swPOST"])) $swPOST=$_POST["swPOST"];
if (isset($_POST["visuprm"])) $visuprm=$_POST["visuprm"];
if (isset($_POST["visupro"])) $visupro=$_POST["visupro"];
if (isset($_POST["visucmd"])) $visucmd=$_POST["visucmd"];
if (isset($_POST["sesion"])) $sesion=$_POST["sesion"];
if(empty($swPOST)){ // Valores por defecto
$wfechainicio=mktime(0, 0, 0, date("m") , date("d")-3, date("Y")); // Acciones desde tres días antes
$wfechafin=mktime(0, 0, 0, date("m") , date("d")+1, date("Y"));
$fechainicio=date("d/m/Y",$wfechainicio);
$fechafin=date("d/m/Y ",$wfechafin);
$estado=0;
$resultado=0;
$tipoaccion=0;
$visuprm=0;
$visupro=0;
$visucmd=1;
}
if (isset($_POST["porcendesde"])) $porcendesde=$_POST["porcendesde"];
if (isset($_POST["porcenhasta"])) $porcenhasta=$_POST["porcenhasta"];
if($porcendesde=="") $porcendesde=0;
if($porcenhasta=="") $porcenhasta=100;
//________________________________________________________________________________________________________
$cmd=CreaComando($cadenaconexion);
if (!$cmd)
Header('Location: '.$pagerror.'?herror=2'); // Error de conexión con servidor B.D.
$tbParametros=CreaTablaParametros($cmd); // Crea tabla en memmoria para acceder a detalles de comandos
//________________________________________________________________________________________________________
//
// Clausula WHERE ( construcción )
//________________________________________________________________________________________________________
$ClausulaWhere="";
// Cuestion de fechas
$WhereFechaInicio="";
$WhereFechaFin="";
$WhereFechaReg="";
if($fechainicio!="")
$WhereFechaInicio="acciones.fechahorareg>='".InvFecha($fechainicio).' ' .$horainicio."'";
if($fechafin!="")
$WhereFechaFin.=" acciones.fechahorareg<='".InvFecha($fechafin).' ' .$horafin."'";
if($WhereFechaInicio!=""){
if($WhereFechaFin!="")
$WhereFechaReg=" (".$WhereFechaInicio." AND ".$WhereFechaFin.") ";
else
$WhereFechaReg=" (".$WhereFechaInicio.") ";
}
else{
if($WhereFechaFin!="")
$WhereFechaReg=" (".$WhereFechaFin.") ";
}
$ClausulaWhere.=$WhereFechaReg;
// Cuestion tipos de acciones
if(!empty($tipoaccion)) $ClausulaWhere.=" AND tipoaccion=".$tipoaccion;
// Cuestion identificador del Centro que ha ejecutado la acción
$WhereCentroAccion="";
$WhereCentroAccion='acciones.idcentro='.$idcentro;
$ClausulaWhere.=" AND (".$WhereCentroAccion.")";
//________________________________________________________________________________________________________
?>
Administración web de aulas
echo ''?>
echo '
'.$TbMsg[0].'
';
echo ''; // Fin formulario de criterios de busquedas
/* Cabeceras */
tomaAmbito($ambito,&$urlimg,&$textambito);
echo '
// _________________________________________________________________________
//
// Tabla de opciones que afectan a todas las acciones mostradas
// _________________________________________________________________________
?>
// Eliminar ?>
// Resaltar ?>
// Parar ?>
// Seguir ?>
// Seguir ?>
// Seguir ?>
// _________________________________________________________________________
//
// Tabla de registros de acciones
// _________________________________________________________________________
?>
$flotante=new MenuContextual(); // Crea objeto MenuContextual
$XMLcontextual=ContextualXMLAcciones(); // Crea contextual de las acciones
echo $flotante->CreaMenuContextual($XMLcontextual);
$XMLcontextual=ContextualXMLNotificaciones(); // Crea contextual de las acciones
echo $flotante->CreaMenuContextual($XMLcontextual);
?>
/********************************************************************/
// Escribe la cabecera de los registros de acciones
// _________________________________________________________________________
function cabeceraAcciones()
{
global $TbMsg;
$html="";
$html.='
';
$html.='
';
$html.='
R
';
$html.='
'.$TbMsg[19].'
';
$html.='
'.$TbMsg[20].'
';
$html.='
'.$TbMsg[21].'
';
$html.='
'.$TbMsg[22].'
';
$html.='
';
$html.='
'.$TbMsg[23].'
';
$html.='
'.$TbMsg[57].'
';
$html.='
S
';
$html.='
%
';
$html.='
';
echo $html;
}
// _________________________________________________________________________
function listaAcciones($ambito,$idambito)
{
global $cmd;
global $ClausulaWhere;
global $cadenaid;
global $cadenaip;
global $cadenamac;
global $EJECUCION_COMANDO;
global $EJECUCION_PROCEDIMIENTO;
global $EJECUCION_TAREA;
global $ACCION_PROGRAMADA;
global $acciones;
global $sesion;
global $estado;
$cadenaid="";
$cadenaip="";
$cadenamac="";
RecopilaIpesMacs($cmd,$ambito,$idambito); // Recopila Ipes del ámbito
$cadenasesion="(SELECT DISTINCT sesion FROM acciones WHERE idordenador NOT IN (".$cadenaid."))";
$cmd->texto="SELECT acciones.*,comandos.descripcion as comando,acciones.parametros,comandos.visuparametros,
ordenadores.nombreordenador,procedimientos.descripcion as procedimiento,
tareas.descripcion as tarea,programaciones.sesion as sesionprog
FROM acciones";
$cmd->texto.=" INNER JOIN comandos ON comandos.idcomando=acciones.idcomando";
$cmd->texto.=" INNER JOIN ordenadores ON ordenadores.idordenador=acciones.idordenador";
$cmd->texto.=" LEFT OUTER JOIN procedimientos ON procedimientos.idprocedimiento=acciones.idprocedimiento";
$cmd->texto.=" LEFT OUTER JOIN tareas ON tareas.idtarea=acciones.idtarea";
$cmd->texto.=" LEFT OUTER JOIN programaciones ON programaciones.sesion=acciones.sesion";
if(!empty($sesion)) // Filtro por acción
$cmd->texto.=" WHERE acciones.sesion =".$sesion;
else
$cmd->texto.=" WHERE acciones.sesion NOT IN (".$cadenasesion.")";
if($estado==$ACCION_PROGRAMADA)
$cmd->texto.=" AND (acciones.idprogramacion=0 AND programaciones.sesion>0)"; // Comando programado
else{
if(!empty($ClausulaWhere))
$cmd->texto.=" AND (".$ClausulaWhere.")";
}
$cmd->texto.=" ORDER BY acciones.idaccion desc,acciones.sesion desc ";
$rs=new Recordset;
$rs->Comando=&$cmd;
//echo $cmd->texto;
if (!$rs->Abrir()) return; // Error al abrir recordset
$acciones=""; // Variable que recogerá las acciones que cumplan los criterios
// con formato "ambito,idambito" concadenando con ";" a otro identificador
// Esta variable se usara para las operaciones globales de Eliminar, etc...
// Recorre acciones
$html="";
while (!$rs->EOF){
switch($rs->campos["tipoaccion"]){
case $EJECUCION_COMANDO:
$html.=listaComado($rs,$rs->campos["sesion"]);
break;
case $EJECUCION_PROCEDIMIENTO:
$html.=listaProcedimiento($rs,$rs->campos["sesion"]);
break;
case $EJECUCION_TAREA:
$html.=listaTarea($rs,$rs->campos["sesion"]);
break;
}
}
echo $html;
}
// _________________________________________________________________________
function listaTarea($rs,$sesion)
{
global $acciones;
$oA=new clsAccion; // Crea objeto acción para procesar comandos
iniAccion($rs,$oA);
$html=recorreTarea($rs,$sesion,$oA);
if(cumpleCriterios($oA)){
$acciones.=$oA->tipoaccion.",".$oA->idtipoaccion.",".$oA->sesion.",0;"; // Concadena identificador
$html=cabeceraSesion($oA).$html; // Escribe la cabecera del comando
}
else
$html=""; // No cumple con los criterios
return($html);
}
// _________________________________________________________________________
function recorreTarea($rs,$sesion,$oA)
{
$html="";
do{
$html.=listaProcedimiento($rs,$sesion,$rs->campos["idtarea"],$oA);
}while(!$rs->EOF
&& $rs->campos["sesion"]==$sesion);
return($html);
}
// _________________________________________________________________________
function listaProcedimiento($rs,$sesion,$idtarea=0,$oA=null)
{
global $acciones;
if($oA!=null){ // Si la función es invocada por una tarea ...
$html=recorreProcedimiento($rs,$sesion,$idtarea,$oA);
}
else{
$oA=new clsAccion; // Crea objeto acción para procesar comandos
iniAccion($rs,$oA);
$html=recorreProcedimiento($rs,$sesion,$idtarea,$oA);
if(cumpleCriterios($oA)){
$acciones.=$oA->tipoaccion.",".$oA->idtipoaccion.",".$oA->sesion.",0;"; // Concadena identificador
if($rs->campos["sesion"]!=$sesion
|| $rs->campos["idtarea"]!=$idtarea
|| $rs->EOF)
$html=cabeceraSesion($oA).$html; // Escribe la cabecera del procedimiento
}
else
$html=""; // No cumple con los criterios
}
return($html);
}
// _________________________________________________________________________
function recorreProcedimiento($rs,$sesion,$idtarea,$oA)
{
$html="";
do{
$html.=listaComado($rs,$sesion,$idtarea,$rs->campos["idprocedimiento"],$oA);
}while(!$rs->EOF
&& $rs->campos["sesion"]==$sesion
&& $rs->campos["idtarea"]==$idtarea);
return($html);
}
// _________________________________________________________________________
function listaComado($rs,$sesion,$idtarea=0,$idprocedimiento=0,$oA=null)
{
global $acciones;
global $visupro;
if($oA!=null){ // Si la función es invocada por un procedimiento...
$html.=recorreComando($rs,$sesion,$idtarea,$idprocedimiento,$oA);
}
else{
$oA=new clsAccion; // Crea objeto acción para procesar comandos
iniAccion($rs,$oA);
$html=recorreComando($rs,$sesion,$idtarea,$idprocedimiento,$oA);
$acciones.=$oA->tipoaccion.",".$oA->idtipoaccion.",".$oA->sesion.",0;"; // Concadena identificador
if($rs->campos["sesion"]!=$sesion
|| $rs->campos["idtarea"]!=$idtarea
|| $rs->campos["idprocedimiento"]!=$idprocedimiento
|| $rs->EOF)
if($oA->linot>0)
$html=cabeceraSesion($oA).$html; // Escribe la cabecera del comando
}
return($html);
}
// _________________________________________________________________________
function recorreComando($rs,$sesion,$idtarea,$idprocedimiento,$oA)
{
$html="";
do{
$html.=listaNotificacion($rs,$sesion,$idtarea,$idprocedimiento,$rs->campos["idcomando"],$oA);
}while(!$rs->EOF
&& $rs->campos["sesion"]==$sesion
&& $rs->campos["idtarea"]==$idtarea
&& $rs->campos["idprocedimiento"]==$idprocedimiento);
return($html);
}
// _________________________________________________________________________
//
// Recorre todas las notificaciones de un mismo comando registrando
// los datos que servirán para resumen de la Acción
// _________________________________________________________________________
function listaNotificacion($rs,$sesion,$idtarea,$idprocedimiento,$idcomando,$oA)
{
global $ACCION_EXITOSA;
global $ACCION_FALLIDA;
global $ACCION_SINRESULTADO;
global $ACCION_DETENIDA;
global $ACCION_INICIADA;
global $ACCION_FINALIZADA;
global $EJECUCION_TAREA;
global $visuprm;
global $visucmd;
global $visupro;
$html="";
if($visupro==1)
$html.=cambiaAmbito($rs,$oA); // Escribe cambio de ámbito
if($visuprm==1)
$html.=escribeParametros($rs->campos["comando"],$rs->campos["parametros"],$rs->campos["visuparametros"],$oA);
do{
if(cumpleCriteriosNot($rs,$oA)){
if($visucmd==1){
$html.=escribeNotificacion($rs,$oA);
$oA->linot++; // Contador de lineas de notificaciones escritas cumpliendo criterios
}
}
/* Fechas y horas */
$fechahorareg=strtotime($rs->campos["fechahorareg"]);
if($fechahorareg>0)
if($oA->fechahorareg>$fechahorareg) $oA->fechahorareg=$fechahorareg;
$fechahorafin=strtotime($rs->campos["fechahorafin"]);
if($fechahorafin>0)
if($oA->fechahorafin<$fechahorafin) $oA->fechahorafin=$fechahorafin;
$oA->notif++; // Contador de notificaciones en el comando
switch($rs->campos["estado"]){
case $ACCION_INICIADA:
$oA->notini++; // Incrementa contador de comandos con estado de finalizado
break;
case $ACCION_DETENIDA:
$oA->notdet++; // Incrementa contador de comandos con estado de finalizado
break;
case $ACCION_FINALIZADA:
$oA->noter++; // Incrementa contador de comandos con estado de finalizado
break;
}
/* Cuestión resultados */
/* Si existe al menos una notificación de error, la acción tiene ya resultado de error */
if($rs->campos["resultado"]==$ACCION_FALLIDA){
$oA->resultado=$ACCION_FALLIDA;
}
/* Si existe aún alguna notificación pendiente, la acción no tiene resultado global */
if($rs->campos["resultado"]==$ACCION_SINRESULTADO){
if($oA->resultado==$ACCION_EXITOSA)
$oA->resultado=$ACCION_SINRESULTADO;
}
$rs->Siguiente();
}while(!$rs->EOF
&& $rs->campos["sesion"]==$sesion
&& $rs->campos["idtarea"]==$idtarea
&& $rs->campos["idprocedimiento"]==$idprocedimiento
&& $rs->campos["idcomando"]==$idcomando);
if($oA->notif>0)
$oA->porcen=floor($oA->noter*100/$oA->notif); // Calcula porcentaje de finalización
if($oA->notif==$oA->noter)
$oA->estado=$ACCION_FINALIZADA; // Todas las acciones finalizadas
else{
if($oA->notif==$oA->notdet)
$oA->estado=$ACCION_DETENIDA; // Todas las acciones detenidas
else
$oA->estado=$ACCION_INICIADA;
}
if(cumpleCriterios($oA)){
if($rs->campos["sesion"]!=$sesion && !$rs->EOF ) // Separación entre sesiones distintas
$html.='
';
}
return($html);
}
// _________________________________________________________________________
function escribeNotificacion($rs,$oA)
{
global $ACCION_EXITOSA;
global $ACCION_FALLIDA;
global $ACCION_SINRESULTADO;
global $ACCION_DETENIDA;
global $ACCION_INICIADA;
global $ACCION_FINALIZADA;
global $TbMsg;
global $visupro;
global $visuprm;
$html="";
$html.='
';
if($visupro==0 )
$html.='
'.$rs->campos["comando"].'
';
else
$html.='
';
/* Resultado */
switch($rs->campos["resultado"]){
case $ACCION_EXITOSA:
$html.='
';
return($html);
}
// _________________________________________________________________________
function escribeResumen($oA)
{
global $cmd;
global $TbMsg;
global $ACCION_EXITOSA;
global $ACCION_FALLIDA;
global $ACCION_SINRESULTADO;
global $EJECUCION_TAREA;
$html="";
if($oA->swcp){ // Comando programado
$html.='
';
$html.='
';
$html.='
';
$html.='
';
$html.='
';
/* Ámbito de aplicación */
tomaAmbito($oA->ambito,&$urlimg,&$textambito);
$html.='
';
}
/* Descripción de la notificación (Descripción del error si se ha producido alguno) */
$html.='
'.$rs->campos["descrinotificacion"].'
';
/* Estado */
$html.='
';
/* Porcentaje */
$html.='
'.$oA->porcen.'%
';
return($html);
}
// _________________________________________________________________________
function cambiaAmbito($rs,$oA)
{
global $cmd;
global $TbMsg;
$bgcolor="#f6c8f5";
$html="";
$html.='
';
return($html);
}
// _________________________________________________________________________
//
// Comprueba si se cumplen los criterios para visualizar la acción
// _________________________________________________________________________
function cumpleCriterios($oA)
{
global $porcendesde;
global $porcenhasta;
global $estado;
global $resultado;
global $ACCION_PROGRAMADA;
if($estado==$ACCION_PROGRAMADA){
if(!$oA->swcp)
return(false); // Comandos programados
else
return(true);
}
if($oA->swcp){
if($estado!=$ACCION_PROGRAMADA && $estado>0)
return(false); // Comandos programados
else
return(true);
}
// Cuestion estados
if(!empty($estado))
if($oA->estado!=$estado) return(false);
if(!empty($resultado))
if($oA->resultado!=$resultado) return(false);
if($oA->porcen<$porcendesde || $oA->porcen>$porcenhasta) return(false);
return(true);
}
// _________________________________________________________________________
//
// Comprueba si se cumplen los criterios para visualizar la notificación
// _________________________________________________________________________
function cumpleCriteriosNot($rs,$oA)
{
global $porcendesde;
global $porcenhasta;
global $estado;
global $resultado;
global $ACCION_PROGRAMADA;
if($estado==$ACCION_PROGRAMADA){
if(!$oA->swcp)
return(false); // Comandos programados
else
return(true);
}
if($oA->swcp){
if($estado!=$ACCION_PROGRAMADA && $estado>0)
return(false); // Comandos programados
else
return(true);
}
// Cuestion estados
if(!empty($estado))
if($rs->campos["estado"]!=$estado) return(false);
if(!empty($resultado))
if($rs->campos["resultado"]!=$resultado) return(false);
return(true);
}
// _________________________________________________________________________
//
// Clase para procesar las acciones
// _________________________________________________________________________
class clsAccion
{
var $ambito;
var $idambito;
var $tipoaccion;
var $idtipoaccion;
var $descriaccion;
var $sesion;
var $fechahorafin;
var $fechahorareg;
var $estado;
var $resultado;
var $porcen;
var $notif;
var $noter;
var $notdet;
var $notini;
var $linot;
var $swcp;
function clsAccion(){ // Constructor
}
}
//________________________________________________________________________________________________________
function escribeParametros($comando,$parametros,$visuparametros,$oA)
{
global $cmd;
global $visupro;
global $visupro;
global $visucmd;
$html="";
$tbParametrosValor=array();
ParametrosValor($cmd,$parametros,&$tbParametrosValor); // Toma valores de cada parámetro
$vprm=split(";",$visuparametros);
if($visupro==1 || ($visupro=0 && $visucmd==0)) $comando=" "; // No se muestra el nombre del comando
for($i=0;$i2)
$valor=$tbParametrosValor[$nemo][$j]["valor"];
else
$valor=$tbParametrosValor[$nemo]["valor"];
$html.=escribiendoParametros($comando,$descripcion,$valor,$oA);
}
}
}
if(empty($visuparametros)){ // Sin parametros
$bgcolor="#cedcec";
$html.='