summaryrefslogtreecommitdiffstats
path: root/admin/WebConsole/comandos/jscripts/Configurar.js
blob: aea678c60a2f1ed202b63d554853c0edf165bc94 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
// *************************************************************************************************************************************************
// Libreria de scripts de Javascript
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
// Fecha Creación: 2009-2010
// Fecha Última modificación: Agosto-2010
// Nombre del fichero: Configurar.js
// Descripción : 
//		Este fichero implementa las funciones javascript del fichero Configurar.php (Comandos)
// *************************************************************************************************************************************************

var atributos=""; // Variable global
var swc=false; // Switch para detectar cache

//________________________________________________________________________________________________________ 
// 
//	Elimina una fila de una tabla de configuraciones perteneciente a las propiedades de una partición
//	Parámetros:
//		icp: Identificador de la configuración-partición
//		o: Objeto checkbox que invoca la función
//________________________________________________________________________________________________________ 

function eliminaParticion(o,icp)
{
	var res=confirm(TbMsg[4]); // Pide confirmación
	if(!res){
		o.checked=false;
		return;
	}

// Toma desplegable de tipo de partición
	var desplepar=o.parentNode.nextSibling.nextSibling.childNodes[0]; 
	var tipar=tomavalorDesple(desplepar); // Partición
	if(tipar==="CACHE") swc=false; // Si es la caché se pone a false su switch

	var tbCfg = document.getElementById("tabla_conf"); // Recupera objeto <TABLE>
	var trCfg = document.getElementById("TR_"+icp); // Recupera <TR> de la fila a eliminar
	var tbodyObj=tbCfg.firstChild; // Recupera hijo <TBODY> del objeto <TABLE>
	tbodyObj.removeChild(trCfg); // Elimina nodo <TR> completo
}
//________________________________________________________________________________________________________ 

function addParticion(objImg,cc)
{
	var tbCfg = document.getElementById("tabla_conf"); // Recupera objeto <TABLE>
	var tbodyObj=tbCfg.firstChild; // Recupera hijo <TBODY> del objeto <TABLE>
		
	var trImg=document.getElementById("TRIMG_"+cc); // Recupera <TR> de los botones para insertar antes

	var k=objImg.getAttribute('value'); // Toma siguiente identificador de nodo
	var icp=cc+"_"+k; // Identificador de la configuración-partición

	/* Crea objeto TR y lo añade al TBODY de la tabla*/	
	var nwTR = document.createElement('TR');
	nwTR.setAttribute("id","TR_"+icp);
	tbodyObj.insertBefore(nwTR,trImg); // Inserta nodo <TR> completo 
	var patron = document.getElementById("TR_patron"); // Recupera <TR> patron
	nwTR.innerHTML=patron.innerHTML;
	/* Actualiza objeto checkbox nuevo para que actue como los demás */
	var nwCHK = document.getElementById("CHK_patron"); // Recupera reciente chekcbox
	var fclbk="eliminaParticion(this,'"+icp+"');";
	nwCHK.setAttribute("onclick",fclbk);	
	nwCHK.removeAttribute("id");				
	/* Incrementa para siguiente identificador de nodo */				
	k++;			
	objImg.setAttribute('value',k);		
}
//________________________________________________________________________________________________________ 
// 
//	Confirma un bloque de configuración de particiones
//	Parámetros:
//		idordenadores: Identificadores de los ordenadores a los que se aplicará el comando
//		cc: Identificador de la configuración (bloque de particiones)
// 	Especificaciones:
//		Cuando un comando se va a aplicar a un conjunto aleatorio de ordenaores, el código del
//		ámbito será cero y la variable idambito contendrá la cadena con los identificadores de 
//		los oordenadores separados por coma (este dato aparece en esta función como promer parámetro)
//________________________________________________________________________________________________________
 
function Confirmar(cc)
{
	if(comprobarDatos(cc)){
		if(document.fdatosejecucion.ambito.value!=AMBITO_ORDENADORES){
			var tbOrd= document.getElementById("tbOrd_"+cc); // Recupera tabla de ordenadores de la configuración
			var idordenadores=tbOrd.getAttribute('value'); // Toma identificadores de los ordenadores
			var cadenaid=document.fdatos.cadenaid.value; // Cadena de identificadores de todos los ordenadores del ámbito
			if(idordenadores!==cadenaid){ // Si no son iguales es que el ámbito de aplicación es restringido
				document.fdatosejecucion.ambito.value=0; // Ambito de aplicación restringido
				document.fdatosejecucion.idambito.value=idordenadores;
			}
		}	
		document.fdatosejecucion.atributos.value=atributos;	
		//alert(atributos)
		//filtrado();		
		document.fdatosejecucion.submit();		
	}
}
//________________________________________________________________________________________________________ 
// 
//	Confirma un bloque de configuración de particiones
//	Parametros:
//		cc: Identificador de la configuración (bloque de particiones)
//	Version 1.1: 2015-02-25. Irina Gomez ETSII US. Se envian datos de cuarta particion.
//________________________________________________________________________________________________________
 
function comprobarDatos(cc)	
{
	// Indices de campos a recuperar
	var ipar=1;
	var icodpar=2;
	var isysfi=3;
	var itama=4;
	var iope=6;
	
	var SL="%";
	var TB="*";
	var maxpar=0;
	var tbpar=[]; // Para control de particiones duplicadas
	var tbparam=[]; // Para control de configuración
	var npar; // Partición en formato integer
	var tch=0; // Tamaño de la caché

	var allpartsize=0; // Tamaño total de todas las particiones.
	var extsize=0; // Tamaño partición "EXTENDED"
	var allextsize=0; // Tamaño total de las particiones extendidas.

	var hdsize = document.getElementById("hdsize"+cc).value;

	var trCfg = document.getElementById("TR_"+cc); // Recupera primer <TR> de la configuración
	trCfg=trCfg.nextSibling; // Primera fila de particiones

	var swe = false;

	while(trCfg.id!=="TRIMG_"+cc){

		var tama=trCfg.childNodes[itama].childNodes[0].value; // Tamaño de partición

		// Comprobar tamaño negativo.
		if (tama < 0) {
			alert(TbMsg[8]);
			trCfg.childNodes[ipar].childNodes[0].focus();
			return(false);
		}

		var par=tomavalorDesple(trCfg.childNodes[ipar].childNodes[0]); // Partición
		npar=parseInt(par);
		if(maxpar<npar) maxpar=npar; // Guarda partición de mayor orden

		if (npar===4){
			swc=true; // Se especifica partición caché
			tch=tama;
		}

		if(npar===0){
			alert(TbMsg[1]);
			trCfg.childNodes[ipar].childNodes[0].focus();
			return(false);
		}	

		if(tbpar[npar]===1){ // Existe ya una partición con ese número
			alert(TbMsg[0]);
			trCfg.childNodes[ipar].childNodes[0].focus();
			return(false);
		}

		tbpar[npar]=1;
		var codpar=tomavalorDesple(trCfg.childNodes[icodpar].childNodes[0]); // Tipo de partición
		if(codpar===""){
			alert(TbMsg[2]);
			trCfg.childNodes[icodpar].childNodes[0].focus();
			return(false);
		}	

		if(codpar==="EXTENDED") {
			swe=true;
			extsize=tama;
		} else {
			if (npar<=4){
				allpartsize+=parseInt(tama);
			} else {
				allextsize+=parseInt(tama);
			}
		}

		if(codpar==="CACHE" && npar!==4){
			alert(TbMsg[6]);
			trCfg.childNodes[icodpar].childNodes[0].focus();
			return(false);
		}

		var ope=tomavalorCheck(trCfg.childNodes[iope].childNodes[0]); // Formatar a realizar	

		var sysfi=tomatextDesple(trCfg.childNodes[isysfi].childNodes[0]); // Sistema de ficheros
		if(sysfi==="" || sysfi==="EMPTY" ){ // Si el sistema de fichero es vacio o empty...
				if(ope===1){ // Si se quiere formatear...
					alert(TbMsg[5]);
					trCfg.childNodes[isysfi].childNodes[0].focus();
					return(false);
				}	
				else
					sysfi="EMPTY";
		}

		if(tama===0 && codpar!=="EXTENDED") {
			alert(TbMsg[3]);
			trCfg.childNodes[itama].childNodes[0].focus();
			return(false);
		}

		trCfg=trCfg.nextSibling; // Siguiente fila de particiones
		/* Compone formato del comando */
		tbparam[npar]="par="+par+TB+"cpt="+codpar+TB+"sfi="+sysfi+TB+"tam="+tama+TB+"ope="+ope+SL;

	}	
	
	//Controles finales de los paramtros a enviar
	var table_type = document.getElementById("table_type").value;

	switch (table_type) {
	case "MSDOS":
		if (!swe) {
			if (maxpar > 4) {
				alert(TbMsg[7]);
				return(false);
			}
		} else {
			if (allextsize > extsize) {
				alert(TbMsg["EXTSIZE"]);
				return(false);
			}
			allpartsize += extsize;
		}
		break;
	case "GPT":
		if (swe) {
			alert("Extended type not compatible with GPT");
			return(false);
		}
		break;
	default:
		alert("Disk type not compatible");
		return(false);
		break;
	}

	// Alerta si tamaño del disco menor que las particiones 
	if (hdsize<allpartsize) {
		alert(TbMsg["HDSIZE"]);
		return(false);
	}

	/* Compone cadena de particiones (Deja fuera la cache,
		 si se especificó) ya que va en parametro aparte 
	*/

	var RC="!";
	var disco = document.disk.current_numdisk.value;

	atributos="ttp="+table_type+"@"+"dsk="+disco+"@"+"cfg="; // Inicializa variable global de parámetros del comando


	if(swc){
 		atributos+="dis="+disco+TB+"che=1"+TB+"tch="+tch+RC; // Caché con su tamaño 
	}
	else{
 		atributos+="dis="+disco+TB+"che=0"+TB+"tch=0"+RC; // No se especifica caché
	}

	for(var i=1;i<=maxpar;i++){
		// Version 1.1: Se envian datos cuarta particion.
		//if(i!=4){
			if(tbparam[i]!=undefined)
				atributos+=tbparam[i];
			else
				atributos+="par="+i+TB+"cpt=EMPTY"+TB+"sfi=EMPTY"+TB+"tam=0"+TB+"ope=0"+SL;
		//}
	}

	// Completa con EMPTY si las particiones son menores a 4 y no hay cache
	if(maxpar<4){
		var up=4;
		if(swc) up=3;  
		for(i=maxpar+1;i<=up;i++)
			atributos+="par="+i+TB+"cpt=EMPTY"+TB+"sfi=EMPTY"+TB+"tam=0"+TB+"ope=0"+SL;
	}
											
	return(true);
}
//________________________________________________________________________________________________________ 
//
// Devuelve el valor seleccionado de un desplegable cualquiera
//________________________________________________________________________________________________________ 

function tomavalorDesple(desplegable)
{
	var idx=desplegable.selectedIndex; // Indice seleccionado en el desplegable
	var val=desplegable.options[idx].value; // Valor seleccionado en el desplegable
	return(val);
}

function tomavalorCheck(chk)
{
	if(chk.checked) // Valor seleccionado en el desplegable
		return(1);
	return(0);
}
//________________________________________________________________________________________________________ 
//
// Devuelve el valor seleccionado de un desplegable cualquiera
//________________________________________________________________________________________________________ 

function tomatextDesple(desplegable)
{
	var idx=desplegable.selectedIndex; // Indice seleccionado en el desplegable
	var txt=desplegable.options[idx].text; // Valor seleccionado en el desplegable
	return(txt);
}