source: admin/WebConsole/includes/ConfiguracionesParticiones.php

qndtest
Last change on this file was b6ec162, checked in by Ramón M. Gómez <ramongomez@…>, 5 years ago

#834: Remove all redundant PHP closing tags.

  • Property mode set to 100644
File size: 35.2 KB
Line 
1<?php
2include_once("pintaParticiones.php");
3
4/*________________________________________________________________________________________________________
5        UHU  - 2013/05/14 - Se añade la clave número de disco
6        La clave de configuración está formada por una serie de valores separados por ";"
7         
8                Ejemplo:1;1;7;30000000;3;3;0;11
9               
10                Parámetros:
11                        1) Número de disco
12                        2) Número de partición
13                        3) Código de la partición
14                        4) Tamaño
15                        5) Identificador del sistema de ficheros instalado en la partición
16                        6) Identificador del nombre del sistema operativo instalado en la partición
17                        7) Identificador de la imagen restaurada en la partición
18                        8) Identificador del perfil software que contiene el S.O. instalado en la partición
19                       
20                Además de este campo, la consulta almacena la descripción de los identificadores que forman parte
21                 de esta clave compuesta de manera que el tiempo de acceso para recuperlarlos sean corto
22                 ya que están en memoria y no en tablas.
23                 
24                En el ejempo anterior podríamos tener datos     
25                        1       1        NTFS   30000000        Windows NTFS    Windows XP profesional          NULL    Perfil Software (CUR-8, Part:1)
26                Que indica:
27                        1) Número de disco
28                        2) Número de partición
29                        3) Código de la partición
30                        4) Tamaño
31                        5) Descripción del sistema de ficheros instalado en la partición
32                        6) Descripción del nombre del sistema operativo instalado en la partición
33                        7) Descripción de la imagen restaurada en la partición
34                        8) Descripción del perfil software que contiene el S.O. instalado en la partición
35                       
36                        Estos datos se guardan en la misma tabla de claves que será una matriz asociativa.
37                       
38                        Parámetros de la función:
39                                $cmd: Objeto comando (Operativo)
40                                $idambito: Identificador del ámbito (identificador del Aula, grupo de ordenador u ordenador)                   
41                                $ambito: Tipo de ambito (Aulas, grupos de ordenadores u ordenadores)
42                                $sws: Switchs que indican el nivel de agrupamiento de los ordenadores para ser tratados
43                                                        Se trata de un octeto de manera que si tiene un "1" en la posición determinada
44                                                        indica que se requiere desplegar por ese parámetro:
45                                                                00000001- No agrupar por Sistema de ficheros
46                                                                00000010- No agrupar por Nombre de sistema Operativo
47                                                                00000100- No agrupar por Tamaño de partición
48                                                                00001000- No agrupar por Imagen instalada
49                                                                00010000- No agrupar por Perfil software contenido
50                                                                00100000- No agrupar por Contenido Cache
51                                $swr: Indica  si se se tiene en cuenta las particiones no clonables (si:true o no:false)       
52________________________________________________________________________________________________________*/
53function cargaCaves($cmd,$idambito,$ambito,$sws,$swr)
54{
55        global $tbKeys; // Tabla contenedora de claves de configuración
56        global $conKeys; // Contador de claves de configuración
57        global $AMBITO_AULAS;
58        global $AMBITO_GRUPOSORDENADORES;
59        global $AMBITO_ORDENADORES;
60       
61        global $msk_sysFi;
62        global $msk_nombreSO;
63        global $msk_tamano;
64        global $msk_imagen;
65        global $msk_perfil;     
66        global $msk_cache;
67
68        // Comprobar modos SQL para hacer que la consulta sea compatible.
69        $cmd->texto="SELECT @@sql_mode AS mode";
70        $cmd->ejecutar();
71        @$mode=$cmd->Recordset->campos["mode"];
72
73        $cmd->texto="SELECT CONCAT_WS(';', LPAD(ordenadores_particiones.numdisk, 3, 0),
74                                LPAD(ordenadores_particiones.numpar, 3, 0), ";
75
76        if($sws & $msk_tamano)
77                $cmd->texto.="  ordenadores_particiones.tamano,";
78
79        if($sws & $msk_sysFi)
80                $cmd->texto.="  ordenadores_particiones.idsistemafichero, ";   
81
82        if($sws & $msk_nombreSO)
83                $cmd->texto.="  ordenadores_particiones.idnombreso, ";
84
85        if($sws & $msk_imagen)
86                $cmd->texto.="  ordenadores_particiones.idimagen, ";
87
88        if($sws & $msk_perfil)
89                $cmd->texto.="  ordenadores_particiones.idperfilsoft, ";
90
91        if($sws & $msk_cache)
92                $cmd->texto.="  ordenadores_particiones.cache, ";
93
94        $cmd->texto.="          ordenadores_particiones.codpar) AS configuracion,
95                                ANY_VALUE(ordenadores_particiones.numdisk) AS numdisk,
96                                ANY_VALUE(ordenadores_particiones.numpar) AS numpar,
97                                ANY_VALUE(ordenadores_particiones.codpar) AS codpar,
98                                IFNULL (ANY_VALUE(tipospar.tipopar), ANY_VALUE(ordenadores_particiones.codpar)) AS tipopar,
99                                ANY_VALUE(tipospar.clonable) AS clonable,
100                                ANY_VALUE(ordenadores_particiones.tamano) AS tamano,
101                                ANY_VALUE(ordenadores_particiones.uso) AS uso,
102                                ANY_VALUE(sistemasficheros.descripcion) AS sistemafichero,
103                                ANY_VALUE(ordenadores_particiones.idnombreso) AS idnombreso,
104                                ANY_VALUE(nombresos.nombreso) AS nombreso,
105                                ANY_VALUE(imagenes.idimagen) AS idimagen,
106                                ANY_VALUE(imagenes.descripcion) AS imagen,
107                                (ANY_VALUE(imagenes.revision) - ANY_VALUE(ordenadores_particiones.revision)) AS difimagen,
108                                ANY_VALUE(imagenes.nombreca) AS nombreca,
109                                ANY_VALUE(imagenes.idrepositorio) AS repositorio,
110                                ANY_VALUE(ordenadores_particiones.fechadespliegue) AS fechadespliegue,
111                                ANY_VALUE(ordenadores_particiones.idperfilsoft) AS idperfilsoft,
112                                ANY_VALUE(perfilessoft.descripcion) AS perfilsoft
113                                FROM ordenadores
114                          INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador
115                          LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso
116                          LEFT OUTER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar
117                          LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen
118                          LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft
119                          LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero";
120
121        switch($ambito){
122                case $AMBITO_AULAS :
123                        $cmd->texto.=" INNER JOIN aulas ON aulas.idaula = ordenadores.idaula
124                                        WHERE aulas.idaula=".$idambito;
125                        break;
126                case $AMBITO_GRUPOSORDENADORES :
127                        $cmd->texto.=" INNER JOIN gruposordenadores ON gruposordenadores.idgrupo = ordenadores.grupoid
128                                        WHERE gruposordenadores.idgrupo=".$idambito;
129                        break;
130                case $AMBITO_ORDENADORES :
131                        $cmd->texto.=" WHERE ordenadores.idordenador=".$idambito;
132                        break;
133        }
134
135        if($swr) // Si se trata de restauración no se tiene en cuenta las partciones no clonables
136                $cmd->texto.=" AND tipospar.clonable=1 AND ordenadores_particiones.numpar>0 ";
137
138        $cmd->texto.=" GROUP BY configuracion";
139        // Comprobar compatiblidad de cláusula GROUP BY.
140        if (strpos($mode, 'ONLY_FULL_GROUP_BY') === false)
141                $cmd->texto=preg_replace('/ANY_VALUE/', '', $cmd->texto);
142
143        $rs=new Recordset; 
144        $rs->Comando=&$cmd; 
145        if (!$rs->Abrir()) return(false); // Error al abrir recordset
146        $rs->Primero();
147        $idx=0; 
148        while (!$rs->EOF){
149                $tbKeys[$idx]["cfg"]=$rs->campos["configuracion"];
150                $tbKeys[$idx]["numdisk"]=$rs->campos["numdisk"];
151                $tbKeys[$idx]["numpar"]=$rs->campos["numpar"];
152                $tbKeys[$idx]["codpar"]=$rs->campos["codpar"];
153                $tbKeys[$idx]["tipopar"]=$rs->campos["tipopar"];
154                $tbKeys[$idx]["clonable"]=$rs->campos["clonable"];
155                $tbKeys[$idx]["tamano"]=$rs->campos["tamano"];
156                $tbKeys[$idx]["uso"]=$rs->campos["uso"];
157                $tbKeys[$idx]["sistemafichero"]=$rs->campos["sistemafichero"];
158                $tbKeys[$idx]["idnombreso"]=$rs->campos["idnombreso"];
159                $tbKeys[$idx]["nombreso"]=$rs->campos["nombreso"];
160                $tbKeys[$idx]["idimagen"]=$rs->campos["idimagen"];
161                $tbKeys[$idx]["imagen"]=$rs->campos["imagen"];
162                $tbKeys[$idx]["nombreca"]=$rs->campos["nombreca"];
163                $tbKeys[$idx]["repositorio"]=$rs->campos["repositorio"];
164                $tbKeys[$idx]["fechadespliegue"]=$rs->campos["fechadespliegue"];
165                $tbKeys[$idx]["difimagen"]=$rs->campos["difimagen"];
166                $tbKeys[$idx]["idperfilsoft"]=$rs->campos["idperfilsoft"];
167                $tbKeys[$idx]["perfilsoft"]=$rs->campos["perfilsoft"];
168                //$tbKeys[$idx]["cache"]=$rs->campos["cache"];
169                $idx++;
170                $rs->Siguiente();
171        }
172        $conKeys=$idx; // Guarda contador
173        $rs->Cerrar();
174}
175/*________________________________________________________________________________________________________
176                        UHU  - 2013/05/14 - Se añade la clave número de disco
177                        UHU - 2013/06/06 - Se añade un return de las configuraciones detectadas
178                        Dibuja la tabla de configuración de las particiones de un grupo de ordenadores
179                       
180                        Parámetros de la función:
181                                $cmd: Objeto comando (Operativo)
182                                $idambito: Identificador del ámbito (identificador del Aula, grupo de ordenador u ordenador)                   
183                                $ambito: Tipo de ambito (Aulas, grupos de ordenadores u ordenadores)
184                                $sws: Switchs que indican el nivel de agrupamiento (ver comentarios de la función(cargaCaves)
185                                $swr: Indica  si se se tiene en cuenta las particiones no clonables (true:sólo conables , false:todas)
186                               
187                        Especificaciones:
188                                Esta función llama a pintaParticiones() que es realmente la encargada de mostrar o bien la
189                                configuración de los ordenadores o la pantalla de los comandos "Configurar" o "RestaurarImagen"
190                                para permitir introducir los    datos necesarios.               
191________________________________________________________________________________________________________*/
192function pintaConfiguraciones($cmd,$idambito,$ambito,$colums,$sws,$swr,$pintaParticionesFunction="pintaParticiones",$tipoid="idordenador")
193{
194        global $AMBITO_AULAS;
195        global $AMBITO_GRUPOSORDENADORES;
196        global $AMBITO_ORDENADORES;
197        global $TbMsg;
198        global $msk_sysFi;
199        global $msk_nombreSO;
200        global $msk_tamano;
201        global $msk_imagen;
202        global $msk_perfil;     
203        global $msk_cache;
204
205        cargaCaves($cmd,$idambito,$ambito,$sws,$swr);
206        cargaSistemasFicheros($cmd,$idambito,$ambito);
207        cargaPerfiles($cmd,$idambito,$ambito);
208        cargaImagenes($cmd,$idambito,$ambito);
209        cargaNombresSO($cmd,$idambito,$ambito);
210        cargaTamano($cmd,$idambito,$ambito);
211        cargaCache($cmd,$idambito,$ambito);
212        $cmd->texto="SELECT     COUNT(*) AS con,
213                                GROUP_CONCAT(CAST( temp2.idordenador AS CHAR(11) )  ORDER BY temp2.idordenador SEPARATOR ',' ) AS idordenadores,
214                                temp2.configuraciones
215                                FROM (SELECT
216                                        temp1.idordenador AS idordenador,
217                                        GROUP_CONCAT(CAST( temp1.configuracion AS CHAR(250) )  ORDER BY temp1.configuracion SEPARATOR '@' ) AS configuraciones
218                                        FROM (SELECT ordenadores_particiones.idordenador,ordenadores_particiones.numdisk,
219                                                ordenadores_particiones.numpar,
220                                                CONCAT_WS(';', LPAD(ordenadores_particiones.numdisk, 3, 0),
221                                                LPAD(ordenadores_particiones.numpar, 3, 0), ";
222
223        if($sws & $msk_tamano)
224                $cmd->texto.="  ordenadores_particiones.tamano,";
225
226        if($sws & $msk_sysFi)
227                $cmd->texto.="  ordenadores_particiones.idsistemafichero, ";   
228
229        if($sws & $msk_nombreSO)
230                $cmd->texto.="  ordenadores_particiones.idnombreso, ";
231
232
233        if($sws & $msk_imagen)
234                $cmd->texto.="  ordenadores_particiones.idimagen, ";   
235
236        if($sws & $msk_perfil)
237                $cmd->texto.="  ordenadores_particiones.idperfilsoft, ";
238               
239        if($sws & $msk_cache)
240                $cmd->texto.="  ordenadores_particiones.cache, ";
241                       
242        $cmd->texto.="          ordenadores_particiones.codpar) AS configuracion
243                                                FROM ordenadores
244                                                INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador
245                                                LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso
246                                                LEFT JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar
247                                                LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen
248                                                LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft
249                                                LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero";
250
251        switch($ambito){
252                case $AMBITO_AULAS :
253                        $cmd->texto.="  INNER JOIN aulas ON aulas.idaula = ordenadores.idaula WHERE aulas.idaula =".$idambito;
254                        break;
255                case $AMBITO_GRUPOSORDENADORES :
256                        $cmd->texto.="  INNER JOIN gruposordenadores ON gruposordenadores.idgrupo = ordenadores.grupoid WHERE                                                                                           gruposordenadores.idgrupo =".$idambito;
257                        break;
258                case $AMBITO_ORDENADORES :
259                        $cmd->texto.="  WHERE ordenadores.idordenador=".$idambito;
260                        break;
261        }
262
263        if ($swr) // Si se trata de restauración no se tiene en cuenta las particiones no clonables
264                $cmd->texto.=" AND tipospar.clonable=1 AND ordenadores_particiones.numpar>0";
265
266        $cmd->texto.="  ORDER BY ordenadores_particiones.idordenador, ordenadores_particiones.numdisk, ordenadores_particiones.numpar) AS temp1
267                                        GROUP BY temp1.idordenador) AS temp2
268                                        GROUP BY temp2.configuraciones
269                                        ORDER BY con desc,idordenadores";
270
271        $rs=new Recordset; 
272        $rs->Comando=&$cmd; 
273        if (!$rs->Abrir()) return; // Error al abrir recordset
274        $rs->Primero();
275        $cc=0; // Contador de configuraciones
276        $configuraciones = array();
277        echo '<table id="tabla_conf" width="95%" class="tabla_listados_sin" align="center" border="0" cellpadding="0" cellspacing="1">';
278        while (!$rs->EOF){
279                $cc++;
280                //Muestra ordenadores
281                echo '<tr><td colspan="'.$colums.'" style="background-color: #ffffff;">';
282                echo pintaOrdenadores($cmd,$rs->campos["idordenadores"],10,$cc,$tipoid);
283                echo '</td></tr>';
284                //Muestra particiones y configuración
285                $configuraciones[$cc-1] = $rs->campos["configuraciones"];
286                echo $pintaParticionesFunction($cmd,$rs->campos["configuraciones"],$rs->campos["idordenadores"],$cc,$ambito,$idambito);
287                $rs->Siguiente();
288        }
289        if ($cc == 0) {
290                echo '<tr><th>'.$TbMsg["CONFIG_NOCONFIG"].'</th><tr>';  // Cliente sin configuración.
291        }
292        echo "</table>";
293        $rs->Cerrar();
294       
295        return $configuraciones;
296}
297//________________________________________________________________________________________________________
298//      Descripción:
299//              Muestra una taba html con el icono de ordenadores
300//      Parametros:
301//              $cmd: Objeto comando (operativo)               
302//              $idordenadores: Cadena con los identificadores de los ordenadores separados por ","
303//              $maxcontor: Número máximo de ordenadores por fila
304//              $cc: Identificador del bloque de configuración
305//              $tipoid: define si el "value" de la tabla es una cadena de ip o de id de los equipos.
306//                       Valores ipordenador o idordenador (por defecto id).
307//      Versión 0.1 - Se incluye parametro tipoid.
308//              Fecha 2014-10-23
309//              Autora: Irina Gomez, ETSII Universidad de Sevilla
310//________________________________________________________________________________________________________
311function pintaOrdenadores($cmd,$idordenadores,$maxcontor,$cc,$tipoid='idordenador')
312{
313        $tablaHtml="";
314        $ipordenadores="";
315        $contor=0;
316        $maxcontor=10; // Número máximo de prodenadores por fila
317        $cmd->texto=" SELECT idordenador,nombreordenador,ip FROM ordenadores WHERE idordenador IN (".$idordenadores.") ORDER BY nombreordenador";
318        $rs=new Recordset; 
319        $rs->Comando=&$cmd; 
320        if (!$rs->Abrir()) return(""); // Error al abrir recordset
321        // Cada ordenador es una celda de la tabla.
322        while (!$rs->EOF){
323                $contor++;
324                $tablaHtml.= '<td align="center" style="BACKGROUND-COLOR: #FFFFFF;">
325                                <img src="../images/iconos/ordenador.gif" >
326                                <br><span style="FONT-SIZE:9px; COLOR: #4f4f4f;" >'.$rs->campos["nombreordenador"].'</span></td>';
327                if($contor>$maxcontor){
328                        $contor=0;
329                        $tablaHtml.='</tr><tr>';
330                }
331                $ipordenadores.=$rs->campos["ip"].',';
332                $rs->Siguiente();
333        }
334        $tablaHtml.='</tr>';
335        $tablaHtml.= '</table>';
336
337        //Quitamos coma final en ipordenadores
338        $ipordenadores = trim($ipordenadores, ',');
339
340        // Inicio tabla: el identificador de los ordenadores puede ser las ips o las ids.
341        if ($tipoid == 'ipordenador') 
342                $inicioTablaHtml='<table align="left" border="0" id="tbOrd_'.$cc.'" value="'.$ipordenadores.'"><tr>';
343        else
344                $inicioTablaHtml='<table align="left" border="0" id="tbOrd_'.$cc.'" value="'.$idordenadores.'"><tr>';
345               
346        $tablaHtml=$inicioTablaHtml.$tablaHtml;
347        return($tablaHtml);
348}
349/*________________________________________________________________________________________________________
350       
351        Selecciona los ordenadores que tienen el mismo sistema de ficheros del ámbito elegido
352        UHU 2013/05/17 - Ahora se carga también el numero de disco en la consulta
353________________________________________________________________________________________________________*/
354function cargaSistemasFicheros($cmd,$idambito,$ambito)
355{
356        global $tbSysFi; // Tabla contenedora de ordenadores incluidos en la consulta
357        global $conSysFi; // Contador de elementos anteriores
358        global $AMBITO_AULAS;
359        global $AMBITO_GRUPOSORDENADORES;
360        global $AMBITO_ORDENADORES;
361       
362        $cmd->texto="SELECT     COUNT(*) AS con,
363                                ordenadores_particiones.idsistemafichero,
364                                ordenadores_particiones.numdisk,
365                                ordenadores_particiones.numpar,
366                                sistemasficheros.descripcion AS sistemafichero,
367                                GROUP_CONCAT(CAST(ordenadores_particiones.idordenador AS CHAR(11) )
368                                        ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
369                           FROM ordenadores
370                           JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador
371                           JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero";
372
373        switch($ambito){
374                case $AMBITO_AULAS :
375                        $cmd->texto.="  JOIN aulas ON aulas.idaula = ordenadores.idaula
376                                        WHERE aulas.idaula =".$idambito;
377                        break;
378                case $AMBITO_GRUPOSORDENADORES :
379                        $cmd->texto.="  INNER JOIN gruposordenadores ON gruposordenadores.idgrupo = ordenadores.grupoid
380                                        WHERE gruposordenadores.idgrupo =".$idambito;
381                        break;
382                case $AMBITO_ORDENADORES :
383                        $cmd->texto.="  WHERE ordenadores.idordenador =".$idambito;
384                        break;
385        }       
386        $cmd->texto.="          GROUP BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ordenadores_particiones.idsistemafichero";
387
388        $rs=new Recordset; 
389        $rs->Comando=&$cmd; 
390        if (!$rs->Abrir()) return; // Error al abrir recordset
391        $rs->Primero();
392        $idx=0; 
393        while (!$rs->EOF){
394                        $tbSysFi[$idx]["idsistemafichero"]=$rs->campos["idsistemafichero"];
395                        $tbSysFi[$idx]["numdisk"]=$rs->campos["numdisk"];                       
396                        $tbSysFi[$idx]["numpar"]=$rs->campos["numpar"];                 
397                        $tbSysFi[$idx]["sistemafichero"]=$rs->campos["sistemafichero"];
398                        $tbSysFi[$idx]["ordenadores"]=$rs->campos["ordenadores"];
399                        $idx++;
400                $rs->Siguiente();
401        }
402        $conSysFi=$idx; // Guarda contador
403        $rs->Cerrar();
404}
405/*________________________________________________________________________________________________________
406       
407        Toma sistema de ficheros común a los ordenadores pasados como parámetros
408        UHU 2013/05/17 - Ahora se tienen en cuenta el disco, sino se le pasa ningun parametro, se asigna 1
409
410________________________________________________________________________________________________________*/
411function tomaSistemasFicheros($numpar,$ordenadores,$sw=false,$numdisk = 1)
412{
413        global $tbSysFi;  // Tabla contenedora de ordenadores incluidos en la consulta
414        global $conSysFi; // Contador de elementos anteriores
415
416        for ($k=0; $k<$conSysFi; $k++){
417                if ($tbSysFi[$k]["numdisk"] == $numdisk && $tbSysFi[$k]["numpar"] == $numpar) {
418                        $pcs = explode (",", $ordenadores);
419                        $intersec = array_intersect (explode(",", $tbSysFi[$k]["ordenadores"]), $pcs);
420                        if (array_diff ($pcs, $intersec) == NULL) {
421                                if ($sw) {      // Retonar identificador
422                                        return ($tbSysFi[$k]["idsistemafichero"]);
423                                } else {
424                                        return ($tbSysFi[$k]["sistemafichero"]);
425                                }
426                        }
427                }
428        }
429}
430/*________________________________________________________________________________________________________
431       
432        Selecciona los ordenadores que tienen el mismo perfil software en la misma partición
433        UHU 2013/05/17 - Ahora se carga también el numero de disco en la consulta
434________________________________________________________________________________________________________*/
435function cargaPerfiles($cmd,$idambito,$ambito)
436{
437        global $tbPerfil;  // Tabla contenedora de ordenadores incluidos en la consulta
438        global $conPerfil; // Contador de elementos anteriores
439        global $AMBITO_AULAS;
440        global $AMBITO_GRUPOSORDENADORES;
441        global $AMBITO_ORDENADORES;
442       
443        $cmd->texto="SELECT count(*) AS con,
444                            ordenadores_particiones.idperfilsoft,
445                            ordenadores_particiones.numdisk,
446                            ordenadores_particiones.numpar,
447                            perfilessoft.descripcion AS perfilsoft,
448                            GROUP_CONCAT(CAST(ordenadores_particiones.idordenador AS CHAR(11) )
449                                ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
450                       FROM ordenadores
451                       JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador
452                       JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft";
453
454        switch ($ambito) {
455                case $AMBITO_AULAS :
456                        $cmd->texto.="  JOIN aulas ON aulas.idaula = ordenadores.idaula
457                                        WHERE aulas.idaula =".$idambito;
458                        break;
459                case $AMBITO_GRUPOSORDENADORES :
460                        $cmd->texto.="  JOIN gruposordenadores ON gruposordenadores.idgrupo = ordenadores.grupoid
461                                        WHERE gruposordenadores.idgrupo =".$idambito;
462                        break;
463                case $AMBITO_ORDENADORES :
464                        $cmd->texto.="  WHERE ordenadores.idordenador =".$idambito;
465                        break;
466        }       
467        $cmd->texto.="                  GROUP BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ordenadores_particiones.idperfilsoft";
468
469        $rs=new Recordset; 
470        $rs->Comando=&$cmd; 
471        if (!$rs->Abrir()) return; // Error al abrir recordset
472        $rs->Primero();
473        $idx=0; 
474        while (!$rs->EOF){
475                        $tbPerfil[$idx]["idperfilsoft"]=$rs->campos["idperfilsoft"];
476                        $tbPerfil[$idx]["perfilsoft"]=$rs->campos["perfilsoft"];
477                        $tbPerfil[$idx]["numdisk"]=$rs->campos["numdisk"];
478                        $tbPerfil[$idx]["numpar"]=$rs->campos["numpar"];                                       
479                        $tbPerfil[$idx]["ordenadores"]=$rs->campos["ordenadores"];                     
480                        $idx++;
481                $rs->Siguiente();
482        }
483        $conPerfil=$idx; // Guarda contador
484        $rs->Cerrar();
485}
486/*________________________________________________________________________________________________________
487       
488                Toma perfilsoft común a los ordenadores pasados como parámetros
489                UHU 2013/05/17 - Ahora se tienen en cuenta el disco, sino se le pasa ningun parametro, se asigna 1
490________________________________________________________________________________________________________*/
491function tomaPerfiles($numpar,$ordenadores,$numdisk = 1)
492{
493        global $tbPerfil;  // Tabla contenedora de ordenadores incluidos en la consulta
494        global $conPerfil; // Contador de elementos anteriores
495
496        for ($k=0; $k<$conPerfil; $k++){
497                if ($tbPerfil[$k]["numdisk"] == $numdisk && $tbPerfil[$k]["numpar"] == $numpar) {
498                        $pcs = explode (",", $ordenadores);
499                        $intersec = array_intersect (explode(",", $tbPerfil[$k]["ordenadores"]), $pcs);
500                        if (array_diff ($pcs, $intersec) == NULL) {
501                                return ($tbPerfil[$k]["perfilsoft"]);
502                        }
503                }
504        }
505}
506/*________________________________________________________________________________________________________
507       
508        Selecciona los ordenadores que tienen la misma imagen en la misma partición
509                UHU 2013/05/17 - Ahora se carga también el numero de disco en la consulta
510________________________________________________________________________________________________________*/
511function cargaImagenes($cmd,$idambito,$ambito)
512{
513        global $tbImg;  // Tabla contenedora de ordenadores incluidos en la consulta
514        global $conImg; // Contador de elementos anteriores
515        global $AMBITO_AULAS;
516        global $AMBITO_GRUPOSORDENADORES;
517        global $AMBITO_ORDENADORES;
518       
519        $cmd->texto="SELECT     count(*) as con,
520                                ordenadores_particiones.idimagen,
521                                ordenadores_particiones.numdisk,
522                                ordenadores_particiones.numpar,
523                                imagenes.descripcion as imagen,
524                                GROUP_CONCAT(CAST(ordenadores_particiones.idordenador AS CHAR(11) )
525                                        ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
526                           FROM ordenadores
527                           JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador
528                           JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen";
529
530        switch($ambito){
531                case $AMBITO_AULAS :
532                        $cmd->texto.="  JOIN aulas ON aulas.idaula = ordenadores.idaula
533                                        WHERE aulas.idaula =".$idambito;
534                        break;
535                case $AMBITO_GRUPOSORDENADORES :
536                        $cmd->texto.="  JOIN gruposordenadores ON gruposordenadores.idgrupo = ordenadores.grupoid
537                                        WHERE gruposordenadores.idgrupo =".$idambito;
538                        break;
539                case $AMBITO_ORDENADORES :
540                        $cmd->texto.="  WHERE ordenadores.idordenador =".$idambito;
541                        break;
542        }       
543        $cmd->texto.="                  GROUP BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ordenadores_particiones.idimagen";
544
545        $rs=new Recordset; 
546        $rs->Comando=&$cmd; 
547        if (!$rs->Abrir()) return; // Error al abrir recordset
548        $rs->Primero();
549        $idx=0; 
550        while (!$rs->EOF){
551                        $tbImg[$idx]["idimagen"]=$rs->campos["idimagen"];
552                        $tbImg[$idx]["imagen"]=$rs->campos["imagen"];
553                        $tbImg[$idx]["numdisk"]=$rs->campos["numdisk"];                 
554                        $tbImg[$idx]["numpar"]=$rs->campos["numpar"];                   
555                        $tbImg[$idx]["ordenadores"]=$rs->campos["ordenadores"];                 
556                        $idx++;
557                $rs->Siguiente();
558        }
559        $conImg=$idx; // Guarda contador
560        $rs->Cerrar();
561}
562/*________________________________________________________________________________________________________
563       
564                Toma sistema operativo común a los ordenadores pasados como parámetros
565                UHU 2013/05/17 - Ahora se tienen en cuenta el disco, sino se le pasa ningun parametro, se asigna 1
566________________________________________________________________________________________________________*/
567function tomaImagenes($numpar,$ordenadores, $numdisk = 1)
568{
569        global $tbImg;  // Tabla contenedora de ordenadores incluidos en la consulta
570        global $conImg; // Contador de elementos anteriores
571
572        for ($k=0; $k<$conImg; $k++) {
573                if ($tbImg[$k]["numdisk"] == $numdisk && $tbImg[$k]["numpar"] == $numpar) {
574                        $pcs = explode (",", $ordenadores);
575                        $intersec = array_intersect (explode(",", $tbImg[$k]["ordenadores"]), $pcs);
576                        if (array_diff ($pcs, $intersec) == NULL) {
577                                return ($tbImg[$k]["imagen"]);
578                        }
579                }
580        }
581}
582/*________________________________________________________________________________________________________
583       
584        Selecciona los ordenadores que tienen el mismo sistema de ficheros en la misma partición
585        UHU 2013/05/17 - Ahora se carga también el numero de disco en la consulta
586________________________________________________________________________________________________________*/
587function cargaNombresSO($cmd,$idambito,$ambito)
588{
589        global $tbSO;  // Tabla contenedora de ordenadores incluidos en la consulta
590        global $conSO; // Contador de elementos anteriores
591        global $AMBITO_AULAS;
592        global $AMBITO_GRUPOSORDENADORES;
593        global $AMBITO_ORDENADORES;
594       
595        $cmd->texto="SELECT     COUNT(*) AS con,
596                                ordenadores_particiones.idnombreso,
597                                ordenadores_particiones.numdisk,ordenadores_particiones.numpar,nombresos.nombreso,
598                                GROUP_CONCAT(CAST(ordenadores_particiones.idordenador AS CHAR(11) )
599                                        ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
600                           FROM ordenadores
601                           JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador
602                           JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso";
603
604        switch($ambito){
605                case $AMBITO_AULAS :
606                        $cmd->texto.="  JOIN aulas ON aulas.idaula = ordenadores.idaula
607                                        WHERE aulas.idaula =".$idambito;
608                        break;
609                case $AMBITO_GRUPOSORDENADORES :
610                        $cmd->texto.="  JOIN gruposordenadores ON gruposordenadores.idgrupo = ordenadores.grupoid
611                                        WHERE gruposordenadores.idgrupo =".$idambito;
612                        break;
613                case $AMBITO_ORDENADORES :
614                        $cmd->texto.="  WHERE ordenadores.idordenador =".$idambito;
615                        break;
616        }       
617        $cmd->texto.="                  GROUP BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ordenadores_particiones.idnombreso";
618
619        $rs=new Recordset; 
620        $rs->Comando=&$cmd; 
621        if (!$rs->Abrir()) return; // Error al abrir recordset
622        $rs->Primero();
623        $idx=0; 
624        while (!$rs->EOF){
625                        $tbSO[$idx]["idnombreso"]=$rs->campos["idnombreso"];
626                        $tbSO[$idx]["nombreso"]=$rs->campos["nombreso"];
627                        $tbSO[$idx]["numdisk"]=$rs->campos["numdisk"];                 
628                        $tbSO[$idx]["numpar"]=$rs->campos["numpar"];                   
629                        $tbSO[$idx]["ordenadores"]=$rs->campos["ordenadores"];                 
630                        $idx++;
631                $rs->Siguiente();
632        }
633        $conSO=$idx; // Guarda contador
634        $rs->Cerrar();
635}
636/*________________________________________________________________________________________________________
637       
638                Toma sistema operativo común a los ordenadores pasados como parámetros
639                UHU 2013/05/17 - Ahora se tienen en cuenta el disco, sino se le pasa ningun parametro, se asigna 1
640________________________________________________________________________________________________________*/
641function tomaNombresSO($numpar,$ordenadores,$numdisk = 1)
642{
643        global $tbSO;  // Tabla contenedora de ordenadores incluidos en la consulta
644        global $conSO; // Contador de elementos anteriores
645
646        for($k=0; $k<$conSO; $k++) {
647                if ($tbSO[$k]["numdisk"] == $numdisk && $tbSO[$k]["numpar"] == $numpar) {
648                        //$pos = strpos($tbSO[$k]["ordenadores"], $ordenadores);
649                        //if ($pos !== false) { // Cadena encontrada
650                        $pcs = explode (",", $ordenadores);
651                        $intersec = array_intersect (explode(",", $tbSO[$k]["ordenadores"]), $pcs);
652                        if (array_diff ($pcs, $intersec) == NULL) {
653                                return ($tbSO[$k]["nombreso"]);
654                        }
655                }
656        }
657}
658/*________________________________________________________________________________________________________
659       
660        Selecciona los ordenadores que tienen el mismo tamaño para la misma partición
661        UHU 2013/05/17 - Ahora se carga también el numero de disco en la consulta
662________________________________________________________________________________________________________*/
663function cargaTamano($cmd,$idambito,$ambito)
664{
665        global $tbTam;  // Tabla contenedora de ordenadores incluidos en la consulta
666        global $conTam; // Contador de elementos anteriores
667        global $AMBITO_AULAS;
668        global $AMBITO_GRUPOSORDENADORES;
669        global $AMBITO_ORDENADORES;
670       
671        // Comprobar modos SQL para hacer que la consulta sea compatible.
672        $cmd->texto="SELECT @@sql_mode AS mode";
673        $cmd->ejecutar();
674        @$mode=$cmd->Recordset->campos["mode"];
675        $cmd->texto="SELECT     COUNT(*) AS con,
676                                ANY_VALUE(ordenadores_particiones.tamano) AS tamano,
677                                ANY_VALUE(ordenadores_particiones.uso) AS uso,
678                                ANY_VALUE(ordenadores_particiones.numdisk) AS numdisk,
679                                ANY_VALUE(ordenadores_particiones.numpar) AS numpar,
680                                GROUP_CONCAT(CAST(ordenadores_particiones.idordenador AS CHAR(11) )
681                                        ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
682                           FROM ordenadores
683                           JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador";
684
685        switch($ambito){
686                case $AMBITO_AULAS :
687                        $cmd->texto.="  JOIN aulas ON aulas.idaula = ordenadores.idaula
688                                        WHERE aulas.idaula =".$idambito;
689                        break;
690                case $AMBITO_GRUPOSORDENADORES :
691                        $cmd->texto.="  JOIN gruposordenadores ON gruposordenadores.idgrupo = ordenadores.grupoid
692                                        WHERE gruposordenadores.idgrupo =".$idambito;
693                        break;
694                case $AMBITO_ORDENADORES :
695                        $cmd->texto.="  WHERE ordenadores.idordenador =".$idambito;
696                        break;
697        }       
698        $cmd->texto.="                  GROUP BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ordenadores_particiones.tamano";
699        // Comprobar compatiblidad de cláusula GROUP BY.
700        if (strpos($mode, 'ONLY_FULL_GROUP_BY') === false)
701                $cmd->texto=preg_replace('/ANY_VALUE/', '', $cmd->texto);
702
703        $rs=new Recordset; 
704        $rs->Comando=&$cmd; 
705        if (!$rs->Abrir()) return; // Error al abrir recordset
706        $rs->Primero();
707        $idx=0; 
708        while (!$rs->EOF){
709                $tbTam[$idx]["tamano"]=$rs->campos["tamano"];
710                $tbTam[$idx]["uso"]=$rs->campos["uso"];
711                $tbTam[$idx]["numdisk"]=$rs->campos["numdisk"];
712                $tbTam[$idx]["numpar"]=$rs->campos["numpar"];                   
713                $tbTam[$idx]["ordenadores"]=$rs->campos["ordenadores"];
714                $idx++;
715                $rs->Siguiente();
716        }
717        $conTam=$idx; // Guarda contador
718        $rs->Cerrar();
719}
720/*________________________________________________________________________________________________________
721       
722                Toma tamaño de partición común a los ordenadores pasados como parámetros
723                UHU 2013/05/17 - Ahora se tienen en cuenta el disco, sino se le pasa ningun parametro, se asigna 1
724________________________________________________________________________________________________________*/
725function tomaTamano($numpar,$ordenadores,$numdisk = 1)
726{
727        global $tbTam;  // Tabla contenedora de ordenadores incluidos en la consulta
728        global $conTam; // Contador de elementos anteriores
729
730        for ($k=0; $k<$conTam; $k++) {
731                if ($tbTam[$k]["numdisk"] == $numdisk && $tbTam[$k]["numpar"] == $numpar) {
732//                      $pos = strpos ($tbTam[$k]["ordenadores"], $ordenadores);
733//                      if ($pos !== FALSE) { // Cadena encontrada
734                        $pcs = explode (",", $ordenadores);
735                        $intersec = array_intersect (explode(",", $tbTam[$k]["ordenadores"]), $pcs);
736                        if (array_diff ($pcs, $intersec) == NULL) {
737                                return ($tbTam[$k]["tamano"]);
738                        }
739                }
740        }
741}
742/*________________________________________________________________________________________________________
743       
744                Toma porcentaje de uso de partición común a los ordenadores pasados como parámetros
745________________________________________________________________________________________________________*/
746function tomaUso($numpar, $ordenadores, $numdisk=1)
747{
748        global $tbTam;  // Tabla contenedora de ordenadores incluidos en la consulta
749        global $conTam; // Contador de elementos anteriores
750
751        for ($k=0; $k<$conTam; $k++) {
752                if ($tbTam[$k]["numdisk"] == $numdisk && $tbTam[$k]["numpar"] == $numpar) {
753//                      $pos = strpos ($tbTam[$k]["ordenadores"], $ordenadores);
754//                      if ($pos !== FALSE) { // Cadena encontrada
755                        $pcs = explode (",", $ordenadores);
756                        $intersec = array_intersect (explode(",", $tbTam[$k]["ordenadores"]), $pcs);
757                        if (array_diff ($pcs, $intersec) == NULL) {
758                                return ($tbTam[$k]["uso"]);
759                        }
760                }
761        }
762}
763/*________________________________________________________________________________________________________
764       
765        Selecciona los ordenadores que tienen el mismo Contenido de Cache para la misma partición
766        UHU 2013/05/17 - Ahora se carga también el numero de disco en la consulta
767________________________________________________________________________________________________________*/
768function cargaCache($cmd,$idambito,$ambito)
769{
770        global $tbCac;  // Tabla contenedora de ordenadores incluidos en la consulta
771        global $conCac; // Contador de elementos anteriores
772        global $AMBITO_AULAS;
773        global $AMBITO_GRUPOSORDENADORES;
774        global $AMBITO_ORDENADORES;
775       
776        $cmd->texto="SELECT     COUNT(*) AS con,
777                                ordenadores_particiones.cache,
778                                ordenadores_particiones.numdisk,
779                                ordenadores_particiones.numpar,
780                                GROUP_CONCAT(CAST(ordenadores_particiones.idordenador AS CHAR(11) )
781                                        ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
782                           FROM ordenadores
783                           JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador";
784
785        switch($ambito){
786                case $AMBITO_AULAS :
787                        $cmd->texto.="  JOIN aulas ON aulas.idaula = ordenadores.idaula
788                                        WHERE aulas.idaula =".$idambito;
789                        break;
790                case $AMBITO_GRUPOSORDENADORES :
791                        $cmd->texto.="  JOIN gruposordenadores ON gruposordenadores.idgrupo = ordenadores.grupoid
792                                        WHERE gruposordenadores.idgrupo =".$idambito;
793                        break;
794                case $AMBITO_ORDENADORES :
795                        $cmd->texto.="  WHERE ordenadores.idordenador =".$idambito;
796                        break;
797        }       
798        $cmd->texto.="                  GROUP BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ordenadores_particiones.cache";
799
800        $rs=new Recordset; 
801        $rs->Comando=&$cmd; 
802        if (!$rs->Abrir()) return; // Error al abrir recordset
803        $rs->Primero();
804        $idx=0; 
805        while (!$rs->EOF){
806                        $tbCac[$idx]["cache"]=$rs->campos["cache"];
807                        $tbCac[$idx]["numdisk"]=$rs->campos["numdisk"];
808                        $tbCac[$idx]["numpar"]=$rs->campos["numpar"];
809                        $tbCac[$idx]["ordenadores"]=$rs->campos["ordenadores"];
810                        $idx++;
811                $rs->Siguiente();
812        }
813        $conCac=$idx; // Guarda contador
814        $rs->Cerrar();
815}
816/*________________________________________________________________________________________________________
817       
818                Toma tamaño de partición común a los ordenadores pasados como parámetros
819                UHU 2013/05/17 - Ahora se tienen en cuenta el disco, sino se le pasa ningun parametro, se asigna 1
820________________________________________________________________________________________________________*/
821function tomaCache($numpar,$ordenadores,$numdisk = 1)
822{
823        global $tbCac;  // Tabla contenedora de ordenadores incluidos en la consulta
824        global $conCac; // Contador de elementos anteriores
825
826        for ($k=0; $k<$conCac; $k++) {
827                if ($tbCac[$k]["numdisk"] == $numdisk && $tbCac[$k]["numpar"] == $numpar) {
828                        $pcs = explode (",", $ordenadores);
829                        $intersec = array_intersect (explode(",", $tbCac[$k]["ordenadores"]), $pcs);
830                        if (array_diff ($pcs, $intersec) == NULL) {
831                                return ($tbCac[$k]["cache"]);
832                        }
833                }
834        }
835}
836
837
Note: See TracBrowser for help on using the repository browser.