source: admin/WebConsole/includes/ConfiguracionesParticiones.php @ 5d05b06

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

#1008 Add support for partitioning several disks

WebConsole? only supports for partitioning and formatting the first disk
of the client. POST /setup calls in ogserver and ogclient support
for multiple disks. Update WebConsole? to allow to choose which disk do
you want to partition and format.

  • Property mode set to 100644
File size: 35.4 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", $numdisk=1)
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                if (strcmp($pintaParticionesFunction, "pintaParticionesConfigurar") == 0)
287                        echo $pintaParticionesFunction($cmd, $rs->campos["configuraciones"], $rs->campos["idordenadores"], $cc, $numdisk);
288                else
289                        echo $pintaParticionesFunction($cmd,$rs->campos["configuraciones"],$rs->campos["idordenadores"],$cc,$ambito,$idambito);
290                $rs->Siguiente();
291        }
292        if ($cc == 0) {
293                echo '<tr><th>'.$TbMsg["CONFIG_NOCONFIG"].'</th><tr>';  // Cliente sin configuración.
294        }
295        echo "</table>";
296        $rs->Cerrar();
297       
298        return $configuraciones;
299}
300//________________________________________________________________________________________________________
301//      Descripción:
302//              Muestra una taba html con el icono de ordenadores
303//      Parametros:
304//              $cmd: Objeto comando (operativo)               
305//              $idordenadores: Cadena con los identificadores de los ordenadores separados por ","
306//              $maxcontor: Número máximo de ordenadores por fila
307//              $cc: Identificador del bloque de configuración
308//              $tipoid: define si el "value" de la tabla es una cadena de ip o de id de los equipos.
309//                       Valores ipordenador o idordenador (por defecto id).
310//      Versión 0.1 - Se incluye parametro tipoid.
311//              Fecha 2014-10-23
312//              Autora: Irina Gomez, ETSII Universidad de Sevilla
313//________________________________________________________________________________________________________
314function pintaOrdenadores($cmd,$idordenadores,$maxcontor,$cc,$tipoid='idordenador')
315{
316        $tablaHtml="";
317        $ipordenadores="";
318        $contor=0;
319        $maxcontor=10; // Número máximo de prodenadores por fila
320        $cmd->texto=" SELECT idordenador,nombreordenador,ip FROM ordenadores WHERE idordenador IN (".$idordenadores.") ORDER BY nombreordenador";
321        $rs=new Recordset;
322        $rs->Comando=&$cmd;
323        if (!$rs->Abrir()) return(""); // Error al abrir recordset
324        // Cada ordenador es una celda de la tabla.
325        while (!$rs->EOF){
326                $contor++;
327                $tablaHtml.= '<td align="center" style="BACKGROUND-COLOR: #FFFFFF;">
328                                <img src="../images/iconos/ordenador.gif" >
329                                <br><span style="FONT-SIZE:9px; COLOR: #4f4f4f;" >'.$rs->campos["nombreordenador"].'</span></td>';
330                if($contor>$maxcontor){
331                        $contor=0;
332                        $tablaHtml.='</tr><tr>';
333                }
334                $ipordenadores.=$rs->campos["ip"].',';
335                $rs->Siguiente();
336        }
337        $tablaHtml.='</tr>';
338        $tablaHtml.= '</table>';
339
340        //Quitamos coma final en ipordenadores
341        $ipordenadores = trim($ipordenadores, ',');
342
343        // Inicio tabla: el identificador de los ordenadores puede ser las ips o las ids.
344        if ($tipoid == 'ipordenador')
345                $inicioTablaHtml='<table align="left" border="0" id="tbOrd_'.$cc.'" value="'.$ipordenadores.'"><tr>';
346        else
347                $inicioTablaHtml='<table align="left" border="0" id="tbOrd_'.$cc.'" value="'.$idordenadores.'"><tr>';
348               
349        $tablaHtml=$inicioTablaHtml.$tablaHtml;
350        return($tablaHtml);
351}
352/*________________________________________________________________________________________________________
353       
354        Selecciona los ordenadores que tienen el mismo sistema de ficheros del ámbito elegido
355        UHU 2013/05/17 - Ahora se carga también el numero de disco en la consulta
356________________________________________________________________________________________________________*/
357function cargaSistemasFicheros($cmd,$idambito,$ambito)
358{
359        global $tbSysFi; // Tabla contenedora de ordenadores incluidos en la consulta
360        global $conSysFi; // Contador de elementos anteriores
361        global $AMBITO_AULAS;
362        global $AMBITO_GRUPOSORDENADORES;
363        global $AMBITO_ORDENADORES;
364       
365        $cmd->texto="SELECT     COUNT(*) AS con,
366                                ordenadores_particiones.idsistemafichero,
367                                ordenadores_particiones.numdisk,
368                                ordenadores_particiones.numpar,
369                                sistemasficheros.descripcion AS sistemafichero,
370                                GROUP_CONCAT(CAST(ordenadores_particiones.idordenador AS CHAR(11) )
371                                        ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
372                           FROM ordenadores
373                           JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador
374                           JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero";
375
376        switch($ambito){
377                case $AMBITO_AULAS :
378                        $cmd->texto.="  JOIN aulas ON aulas.idaula = ordenadores.idaula
379                                        WHERE aulas.idaula =".$idambito;
380                        break;
381                case $AMBITO_GRUPOSORDENADORES :
382                        $cmd->texto.="  INNER JOIN gruposordenadores ON gruposordenadores.idgrupo = ordenadores.grupoid
383                                        WHERE gruposordenadores.idgrupo =".$idambito;
384                        break;
385                case $AMBITO_ORDENADORES :
386                        $cmd->texto.="  WHERE ordenadores.idordenador =".$idambito;
387                        break;
388        }       
389        $cmd->texto.="          GROUP BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ordenadores_particiones.idsistemafichero";
390
391        $rs=new Recordset;
392        $rs->Comando=&$cmd;
393        if (!$rs->Abrir()) return; // Error al abrir recordset
394        $rs->Primero();
395        $idx=0;
396        while (!$rs->EOF){
397                        $tbSysFi[$idx]["idsistemafichero"]=$rs->campos["idsistemafichero"];
398                        $tbSysFi[$idx]["numdisk"]=$rs->campos["numdisk"];                       
399                        $tbSysFi[$idx]["numpar"]=$rs->campos["numpar"];                 
400                        $tbSysFi[$idx]["sistemafichero"]=$rs->campos["sistemafichero"];
401                        $tbSysFi[$idx]["ordenadores"]=$rs->campos["ordenadores"];
402                        $idx++;
403                $rs->Siguiente();
404        }
405        $conSysFi=$idx; // Guarda contador
406        $rs->Cerrar();
407}
408/*________________________________________________________________________________________________________
409       
410        Toma sistema de ficheros común a los ordenadores pasados como parámetros
411        UHU 2013/05/17 - Ahora se tienen en cuenta el disco, sino se le pasa ningun parametro, se asigna 1
412
413________________________________________________________________________________________________________*/
414function tomaSistemasFicheros($numpar,$ordenadores,$sw=false,$numdisk = 1)
415{
416        global $tbSysFi;  // Tabla contenedora de ordenadores incluidos en la consulta
417        global $conSysFi; // Contador de elementos anteriores
418
419        for ($k=0; $k<$conSysFi; $k++){
420                if ($tbSysFi[$k]["numdisk"] == $numdisk && $tbSysFi[$k]["numpar"] == $numpar) {
421                        $pcs = explode (",", $ordenadores);
422                        $intersec = array_intersect (explode(",", $tbSysFi[$k]["ordenadores"]), $pcs);
423                        if (array_diff ($pcs, $intersec) == NULL) {
424                                if ($sw) {      // Retonar identificador
425                                        return ($tbSysFi[$k]["idsistemafichero"]);
426                                } else {
427                                        return ($tbSysFi[$k]["sistemafichero"]);
428                                }
429                        }
430                }
431        }
432}
433/*________________________________________________________________________________________________________
434       
435        Selecciona los ordenadores que tienen el mismo perfil software en la misma partición
436        UHU 2013/05/17 - Ahora se carga también el numero de disco en la consulta
437________________________________________________________________________________________________________*/
438function cargaPerfiles($cmd,$idambito,$ambito)
439{
440        global $tbPerfil;  // Tabla contenedora de ordenadores incluidos en la consulta
441        global $conPerfil; // Contador de elementos anteriores
442        global $AMBITO_AULAS;
443        global $AMBITO_GRUPOSORDENADORES;
444        global $AMBITO_ORDENADORES;
445       
446        $cmd->texto="SELECT count(*) AS con,
447                            ordenadores_particiones.idperfilsoft,
448                            ordenadores_particiones.numdisk,
449                            ordenadores_particiones.numpar,
450                            perfilessoft.descripcion AS perfilsoft,
451                            GROUP_CONCAT(CAST(ordenadores_particiones.idordenador AS CHAR(11) )
452                                ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
453                       FROM ordenadores
454                       JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador
455                       JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft";
456
457        switch ($ambito) {
458                case $AMBITO_AULAS :
459                        $cmd->texto.="  JOIN aulas ON aulas.idaula = ordenadores.idaula
460                                        WHERE aulas.idaula =".$idambito;
461                        break;
462                case $AMBITO_GRUPOSORDENADORES :
463                        $cmd->texto.="  JOIN gruposordenadores ON gruposordenadores.idgrupo = ordenadores.grupoid
464                                        WHERE gruposordenadores.idgrupo =".$idambito;
465                        break;
466                case $AMBITO_ORDENADORES :
467                        $cmd->texto.="  WHERE ordenadores.idordenador =".$idambito;
468                        break;
469        }       
470        $cmd->texto.="                  GROUP BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ordenadores_particiones.idperfilsoft";
471
472        $rs=new Recordset;
473        $rs->Comando=&$cmd;
474        if (!$rs->Abrir()) return; // Error al abrir recordset
475        $rs->Primero();
476        $idx=0;
477        while (!$rs->EOF){
478                        $tbPerfil[$idx]["idperfilsoft"]=$rs->campos["idperfilsoft"];
479                        $tbPerfil[$idx]["perfilsoft"]=$rs->campos["perfilsoft"];
480                        $tbPerfil[$idx]["numdisk"]=$rs->campos["numdisk"];
481                        $tbPerfil[$idx]["numpar"]=$rs->campos["numpar"];                                       
482                        $tbPerfil[$idx]["ordenadores"]=$rs->campos["ordenadores"];                     
483                        $idx++;
484                $rs->Siguiente();
485        }
486        $conPerfil=$idx; // Guarda contador
487        $rs->Cerrar();
488}
489/*________________________________________________________________________________________________________
490       
491                Toma perfilsoft común a los ordenadores pasados como parámetros
492                UHU 2013/05/17 - Ahora se tienen en cuenta el disco, sino se le pasa ningun parametro, se asigna 1
493________________________________________________________________________________________________________*/
494function tomaPerfiles($numpar,$ordenadores,$numdisk = 1)
495{
496        global $tbPerfil;  // Tabla contenedora de ordenadores incluidos en la consulta
497        global $conPerfil; // Contador de elementos anteriores
498
499        for ($k=0; $k<$conPerfil; $k++){
500                if ($tbPerfil[$k]["numdisk"] == $numdisk && $tbPerfil[$k]["numpar"] == $numpar) {
501                        $pcs = explode (",", $ordenadores);
502                        $intersec = array_intersect (explode(",", $tbPerfil[$k]["ordenadores"]), $pcs);
503                        if (array_diff ($pcs, $intersec) == NULL) {
504                                return ($tbPerfil[$k]["perfilsoft"]);
505                        }
506                }
507        }
508}
509/*________________________________________________________________________________________________________
510       
511        Selecciona los ordenadores que tienen la misma imagen en la misma partición
512                UHU 2013/05/17 - Ahora se carga también el numero de disco en la consulta
513________________________________________________________________________________________________________*/
514function cargaImagenes($cmd,$idambito,$ambito)
515{
516        global $tbImg;  // Tabla contenedora de ordenadores incluidos en la consulta
517        global $conImg; // Contador de elementos anteriores
518        global $AMBITO_AULAS;
519        global $AMBITO_GRUPOSORDENADORES;
520        global $AMBITO_ORDENADORES;
521       
522        $cmd->texto="SELECT     count(*) as con,
523                                ordenadores_particiones.idimagen,
524                                ordenadores_particiones.numdisk,
525                                ordenadores_particiones.numpar,
526                                imagenes.descripcion as imagen,
527                                GROUP_CONCAT(CAST(ordenadores_particiones.idordenador AS CHAR(11) )
528                                        ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
529                           FROM ordenadores
530                           JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador
531                           JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen";
532
533        switch($ambito){
534                case $AMBITO_AULAS :
535                        $cmd->texto.="  JOIN aulas ON aulas.idaula = ordenadores.idaula
536                                        WHERE aulas.idaula =".$idambito;
537                        break;
538                case $AMBITO_GRUPOSORDENADORES :
539                        $cmd->texto.="  JOIN gruposordenadores ON gruposordenadores.idgrupo = ordenadores.grupoid
540                                        WHERE gruposordenadores.idgrupo =".$idambito;
541                        break;
542                case $AMBITO_ORDENADORES :
543                        $cmd->texto.="  WHERE ordenadores.idordenador =".$idambito;
544                        break;
545        }       
546        $cmd->texto.="                  GROUP BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ordenadores_particiones.idimagen";
547
548        $rs=new Recordset;
549        $rs->Comando=&$cmd;
550        if (!$rs->Abrir()) return; // Error al abrir recordset
551        $rs->Primero();
552        $idx=0;
553        while (!$rs->EOF){
554                        $tbImg[$idx]["idimagen"]=$rs->campos["idimagen"];
555                        $tbImg[$idx]["imagen"]=$rs->campos["imagen"];
556                        $tbImg[$idx]["numdisk"]=$rs->campos["numdisk"];                 
557                        $tbImg[$idx]["numpar"]=$rs->campos["numpar"];                   
558                        $tbImg[$idx]["ordenadores"]=$rs->campos["ordenadores"];                 
559                        $idx++;
560                $rs->Siguiente();
561        }
562        $conImg=$idx; // Guarda contador
563        $rs->Cerrar();
564}
565/*________________________________________________________________________________________________________
566       
567                Toma sistema operativo común a los ordenadores pasados como parámetros
568                UHU 2013/05/17 - Ahora se tienen en cuenta el disco, sino se le pasa ningun parametro, se asigna 1
569________________________________________________________________________________________________________*/
570function tomaImagenes($numpar,$ordenadores, $numdisk = 1)
571{
572        global $tbImg;  // Tabla contenedora de ordenadores incluidos en la consulta
573        global $conImg; // Contador de elementos anteriores
574
575        for ($k=0; $k<$conImg; $k++) {
576                if ($tbImg[$k]["numdisk"] == $numdisk && $tbImg[$k]["numpar"] == $numpar) {
577                        $pcs = explode (",", $ordenadores);
578                        $intersec = array_intersect (explode(",", $tbImg[$k]["ordenadores"]), $pcs);
579                        if (array_diff ($pcs, $intersec) == NULL) {
580                                return ($tbImg[$k]["imagen"]);
581                        }
582                }
583        }
584}
585/*________________________________________________________________________________________________________
586       
587        Selecciona los ordenadores que tienen el mismo sistema de ficheros en la misma partición
588        UHU 2013/05/17 - Ahora se carga también el numero de disco en la consulta
589________________________________________________________________________________________________________*/
590function cargaNombresSO($cmd,$idambito,$ambito)
591{
592        global $tbSO;  // Tabla contenedora de ordenadores incluidos en la consulta
593        global $conSO; // Contador de elementos anteriores
594        global $AMBITO_AULAS;
595        global $AMBITO_GRUPOSORDENADORES;
596        global $AMBITO_ORDENADORES;
597       
598        $cmd->texto="SELECT     COUNT(*) AS con,
599                                ordenadores_particiones.idnombreso,
600                                ordenadores_particiones.numdisk,ordenadores_particiones.numpar,nombresos.nombreso,
601                                GROUP_CONCAT(CAST(ordenadores_particiones.idordenador AS CHAR(11) )
602                                        ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
603                           FROM ordenadores
604                           JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador
605                           JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso";
606
607        switch($ambito){
608                case $AMBITO_AULAS :
609                        $cmd->texto.="  JOIN aulas ON aulas.idaula = ordenadores.idaula
610                                        WHERE aulas.idaula =".$idambito;
611                        break;
612                case $AMBITO_GRUPOSORDENADORES :
613                        $cmd->texto.="  JOIN gruposordenadores ON gruposordenadores.idgrupo = ordenadores.grupoid
614                                        WHERE gruposordenadores.idgrupo =".$idambito;
615                        break;
616                case $AMBITO_ORDENADORES :
617                        $cmd->texto.="  WHERE ordenadores.idordenador =".$idambito;
618                        break;
619        }       
620        $cmd->texto.="                  GROUP BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ordenadores_particiones.idnombreso";
621
622        $rs=new Recordset;
623        $rs->Comando=&$cmd;
624        if (!$rs->Abrir()) return; // Error al abrir recordset
625        $rs->Primero();
626        $idx=0;
627        while (!$rs->EOF){
628                        $tbSO[$idx]["idnombreso"]=$rs->campos["idnombreso"];
629                        $tbSO[$idx]["nombreso"]=$rs->campos["nombreso"];
630                        $tbSO[$idx]["numdisk"]=$rs->campos["numdisk"];                 
631                        $tbSO[$idx]["numpar"]=$rs->campos["numpar"];                   
632                        $tbSO[$idx]["ordenadores"]=$rs->campos["ordenadores"];                 
633                        $idx++;
634                $rs->Siguiente();
635        }
636        $conSO=$idx; // Guarda contador
637        $rs->Cerrar();
638}
639/*________________________________________________________________________________________________________
640       
641                Toma sistema operativo común a los ordenadores pasados como parámetros
642                UHU 2013/05/17 - Ahora se tienen en cuenta el disco, sino se le pasa ningun parametro, se asigna 1
643________________________________________________________________________________________________________*/
644function tomaNombresSO($numpar,$ordenadores,$numdisk = 1)
645{
646        global $tbSO;  // Tabla contenedora de ordenadores incluidos en la consulta
647        global $conSO; // Contador de elementos anteriores
648
649        for($k=0; $k<$conSO; $k++) {
650                if ($tbSO[$k]["numdisk"] == $numdisk && $tbSO[$k]["numpar"] == $numpar) {
651                        //$pos = strpos($tbSO[$k]["ordenadores"], $ordenadores);
652                        //if ($pos !== false) { // Cadena encontrada
653                        $pcs = explode (",", $ordenadores);
654                        $intersec = array_intersect (explode(",", $tbSO[$k]["ordenadores"]), $pcs);
655                        if (array_diff ($pcs, $intersec) == NULL) {
656                                return ($tbSO[$k]["nombreso"]);
657                        }
658                }
659        }
660}
661/*________________________________________________________________________________________________________
662       
663        Selecciona los ordenadores que tienen el mismo tamaño para la misma partición
664        UHU 2013/05/17 - Ahora se carga también el numero de disco en la consulta
665________________________________________________________________________________________________________*/
666function cargaTamano($cmd,$idambito,$ambito)
667{
668        global $tbTam;  // Tabla contenedora de ordenadores incluidos en la consulta
669        global $conTam; // Contador de elementos anteriores
670        global $AMBITO_AULAS;
671        global $AMBITO_GRUPOSORDENADORES;
672        global $AMBITO_ORDENADORES;
673       
674        // Comprobar modos SQL para hacer que la consulta sea compatible.
675        $cmd->texto="SELECT @@sql_mode AS mode";
676        $cmd->ejecutar();
677        @$mode=$cmd->Recordset->campos["mode"];
678        $cmd->texto="SELECT     COUNT(*) AS con,
679                                ANY_VALUE(ordenadores_particiones.tamano) AS tamano,
680                                ANY_VALUE(ordenadores_particiones.uso) AS uso,
681                                ANY_VALUE(ordenadores_particiones.numdisk) AS numdisk,
682                                ANY_VALUE(ordenadores_particiones.numpar) AS numpar,
683                                GROUP_CONCAT(CAST(ordenadores_particiones.idordenador AS CHAR(11) )
684                                        ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
685                           FROM ordenadores
686                           JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador";
687
688        switch($ambito){
689                case $AMBITO_AULAS :
690                        $cmd->texto.="  JOIN aulas ON aulas.idaula = ordenadores.idaula
691                                        WHERE aulas.idaula =".$idambito;
692                        break;
693                case $AMBITO_GRUPOSORDENADORES :
694                        $cmd->texto.="  JOIN gruposordenadores ON gruposordenadores.idgrupo = ordenadores.grupoid
695                                        WHERE gruposordenadores.idgrupo =".$idambito;
696                        break;
697                case $AMBITO_ORDENADORES :
698                        $cmd->texto.="  WHERE ordenadores.idordenador =".$idambito;
699                        break;
700        }       
701        $cmd->texto.="                  GROUP BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ordenadores_particiones.tamano";
702        // Comprobar compatiblidad de cláusula GROUP BY.
703        if (strpos($mode, 'ONLY_FULL_GROUP_BY') === false)
704                $cmd->texto=preg_replace('/ANY_VALUE/', '', $cmd->texto);
705
706        $rs=new Recordset;
707        $rs->Comando=&$cmd;
708        if (!$rs->Abrir()) return; // Error al abrir recordset
709        $rs->Primero();
710        $idx=0;
711        while (!$rs->EOF){
712                $tbTam[$idx]["tamano"]=$rs->campos["tamano"];
713                $tbTam[$idx]["uso"]=$rs->campos["uso"];
714                $tbTam[$idx]["numdisk"]=$rs->campos["numdisk"];
715                $tbTam[$idx]["numpar"]=$rs->campos["numpar"];                   
716                $tbTam[$idx]["ordenadores"]=$rs->campos["ordenadores"];
717                $idx++;
718                $rs->Siguiente();
719        }
720        $conTam=$idx; // Guarda contador
721        $rs->Cerrar();
722}
723/*________________________________________________________________________________________________________
724       
725                Toma tamaño de partición común a los ordenadores pasados como parámetros
726                UHU 2013/05/17 - Ahora se tienen en cuenta el disco, sino se le pasa ningun parametro, se asigna 1
727________________________________________________________________________________________________________*/
728function tomaTamano($numpar,$ordenadores,$numdisk = 1)
729{
730        global $tbTam;  // Tabla contenedora de ordenadores incluidos en la consulta
731        global $conTam; // Contador de elementos anteriores
732
733        for ($k=0; $k<$conTam; $k++) {
734                if ($tbTam[$k]["numdisk"] == $numdisk && $tbTam[$k]["numpar"] == $numpar) {
735//                      $pos = strpos ($tbTam[$k]["ordenadores"], $ordenadores);
736//                      if ($pos !== FALSE) { // Cadena encontrada
737                        $pcs = explode (",", $ordenadores);
738                        $intersec = array_intersect (explode(",", $tbTam[$k]["ordenadores"]), $pcs);
739                        if (array_diff ($pcs, $intersec) == NULL) {
740                                return ($tbTam[$k]["tamano"]);
741                        }
742                }
743        }
744}
745/*________________________________________________________________________________________________________
746       
747                Toma porcentaje de uso de partición común a los ordenadores pasados como parámetros
748________________________________________________________________________________________________________*/
749function tomaUso($numpar, $ordenadores, $numdisk=1)
750{
751        global $tbTam;  // Tabla contenedora de ordenadores incluidos en la consulta
752        global $conTam; // Contador de elementos anteriores
753
754        for ($k=0; $k<$conTam; $k++) {
755                if ($tbTam[$k]["numdisk"] == $numdisk && $tbTam[$k]["numpar"] == $numpar) {
756//                      $pos = strpos ($tbTam[$k]["ordenadores"], $ordenadores);
757//                      if ($pos !== FALSE) { // Cadena encontrada
758                        $pcs = explode (",", $ordenadores);
759                        $intersec = array_intersect (explode(",", $tbTam[$k]["ordenadores"]), $pcs);
760                        if (array_diff ($pcs, $intersec) == NULL) {
761                                return ($tbTam[$k]["uso"]);
762                        }
763                }
764        }
765}
766/*________________________________________________________________________________________________________
767       
768        Selecciona los ordenadores que tienen el mismo Contenido de Cache para la misma partición
769        UHU 2013/05/17 - Ahora se carga también el numero de disco en la consulta
770________________________________________________________________________________________________________*/
771function cargaCache($cmd,$idambito,$ambito)
772{
773        global $tbCac;  // Tabla contenedora de ordenadores incluidos en la consulta
774        global $conCac; // Contador de elementos anteriores
775        global $AMBITO_AULAS;
776        global $AMBITO_GRUPOSORDENADORES;
777        global $AMBITO_ORDENADORES;
778       
779        $cmd->texto="SELECT     COUNT(*) AS con,
780                                ordenadores_particiones.cache,
781                                ordenadores_particiones.numdisk,
782                                ordenadores_particiones.numpar,
783                                GROUP_CONCAT(CAST(ordenadores_particiones.idordenador AS CHAR(11) )
784                                        ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
785                           FROM ordenadores
786                           JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador";
787
788        switch($ambito){
789                case $AMBITO_AULAS :
790                        $cmd->texto.="  JOIN aulas ON aulas.idaula = ordenadores.idaula
791                                        WHERE aulas.idaula =".$idambito;
792                        break;
793                case $AMBITO_GRUPOSORDENADORES :
794                        $cmd->texto.="  JOIN gruposordenadores ON gruposordenadores.idgrupo = ordenadores.grupoid
795                                        WHERE gruposordenadores.idgrupo =".$idambito;
796                        break;
797                case $AMBITO_ORDENADORES :
798                        $cmd->texto.="  WHERE ordenadores.idordenador =".$idambito;
799                        break;
800        }       
801        $cmd->texto.="                  GROUP BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ordenadores_particiones.cache";
802
803        $rs=new Recordset;
804        $rs->Comando=&$cmd;
805        if (!$rs->Abrir()) return; // Error al abrir recordset
806        $rs->Primero();
807        $idx=0;
808        while (!$rs->EOF){
809                        $tbCac[$idx]["cache"]=$rs->campos["cache"];
810                        $tbCac[$idx]["numdisk"]=$rs->campos["numdisk"];
811                        $tbCac[$idx]["numpar"]=$rs->campos["numpar"];
812                        $tbCac[$idx]["ordenadores"]=$rs->campos["ordenadores"];
813                        $idx++;
814                $rs->Siguiente();
815        }
816        $conCac=$idx; // Guarda contador
817        $rs->Cerrar();
818}
819/*________________________________________________________________________________________________________
820       
821                Toma tamaño de partición común a los ordenadores pasados como parámetros
822                UHU 2013/05/17 - Ahora se tienen en cuenta el disco, sino se le pasa ningun parametro, se asigna 1
823________________________________________________________________________________________________________*/
824function tomaCache($numpar,$ordenadores,$numdisk = 1)
825{
826        global $tbCac;  // Tabla contenedora de ordenadores incluidos en la consulta
827        global $conCac; // Contador de elementos anteriores
828
829        for ($k=0; $k<$conCac; $k++) {
830                if ($tbCac[$k]["numdisk"] == $numdisk && $tbCac[$k]["numpar"] == $numpar) {
831                        $pcs = explode (",", $ordenadores);
832                        $intersec = array_intersect (explode(",", $tbCac[$k]["ordenadores"]), $pcs);
833                        if (array_diff ($pcs, $intersec) == NULL) {
834                                return ($tbCac[$k]["cache"]);
835                        }
836                }
837        }
838}
839
840
Note: See TracBrowser for help on using the repository browser.