summaryrefslogtreecommitdiffstats
path: root/admin/Database/ogAdmBD-1.1.0pre-1.1.0.sql
blob: 131e7ba7fdf64fba305c13de4fc7093f5eb71289 (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
### Fichero de actualización de la base de datos.
# OpenGnsys 1.1.0pre - OpenGnsys 1.1.0
#use ogAdmBD

### NOTA: la configuración de MySQL solo puede modificarla el usuario "root".
# Soportar cláusuloas GROUP BY especiales para configuración de equipos.
#SET GLOBAL sql_mode = TRIM(BOTH ',' FROM REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));
# Activar calendario de eventos de MySQL.
#SET GLOBAL event_scheduler = ON;

# Eliminar procedimiento y disparador para evitar errores de ejecución.
DROP PROCEDURE IF EXISTS addcols;
DROP TRIGGER IF EXISTS registrar_acciones;
# Procedimiento para actualización condicional de tablas.
DELIMITER '//'
CREATE PROCEDURE addcols() BEGIN
	# Añadir campo para incluir aulas en proyecto Remote PC (ticket #708).
	IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS
			WHERE COLUMN_NAME='inremotepc' AND TABLE_NAME='aulas' AND TABLE_SCHEMA=DATABASE())
	THEN
		ALTER TABLE aulas
			ADD inremotepc TINYINT DEFAULT 0;
	END IF;
	# Añadir campo para incluir imágenes en proyecto Remote PC (ticket #708).
	IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS
			WHERE COLUMN_NAME='inremotepc' AND TABLE_NAME='imagenes' AND TABLE_SCHEMA=DATABASE())
	THEN
		ALTER TABLE imagenes
			ADD inremotepc TINYINT DEFAULT 0;
	END IF;
	# Añadir campo para clave de acceso a la API REST (ticket #708).
	IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS
			WHERE COLUMN_NAME='apikey' AND TABLE_NAME='usuarios' AND TABLE_SCHEMA=DATABASE())
	THEN
		ALTER TABLE usuarios
			ADD apikey VARCHAR(32) NOT NULL DEFAULT '';
	END IF;
	# Añadir porcentaje de uso de sistema de ficheros (ticket #711)
	IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS
			WHERE COLUMN_NAME='uso' AND TABLE_NAME='ordenadores_particiones' AND TABLE_SCHEMA=DATABASE())
	THEN
		ALTER TABLE ordenadores_particiones
			ADD uso TINYINT NOT NULL DEFAULT 0;
	END IF;
	# Añadir nº de serie (ticket #713)
	IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS
			WHERE COLUMN_NAME='numserie' AND TABLE_NAME='ordenadores' AND TABLE_SCHEMA=DATABASE())
	THEN
		ALTER TABLE ordenadores
			ADD numserie varchar(25) DEFAULT NULL AFTER nombreordenador;
	END IF;
	# Añadir campo para clave de acceso a la API REST de OGAgent (ticket #718).
	IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS
			WHERE COLUMN_NAME='agentkey' AND TABLE_NAME='ordenadores' AND TABLE_SCHEMA=DATABASE())
	THEN
		ALTER TABLE ordenadores
			ADD agentkey VARCHAR(32) DEFAULT NULL;
	END IF;
	# Añadir índice para mostrar correctamente el formulario de estado.
	IF NOT EXISTS (SELECT * FROM information_schema.STATISTICS
			WHERE INDEX_NAME='idaulaip' AND TABLE_NAME='ordenadores' AND TABLE_SCHEMA=DATABASE())
	THEN
		ALTER TABLE ordenadores
			ADD KEY idaulaip (idaula ASC, ip ASC);
	END IF;
	# Añadir campo para directorio de ogLive asociado al cliente (ticket #768).
	IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS
			WHERE COLUMN_NAME='oglivedir' AND TABLE_NAME='ordenadores' AND TABLE_SCHEMA=DATABASE())
	THEN
		ALTER TABLE ordenadores
			ADD oglivedir VARCHAR(50) NOT NULL DEFAULT 'ogLive';
	END IF;
	# Añadir campo para directorio de ogLive asociado al cliente (ticket #768).
	IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS
			WHERE COLUMN_NAME='oglivedir' AND TABLE_NAME='aulas' AND TABLE_SCHEMA=DATABASE())
	THEN
		ALTER TABLE aulas
			ADD oglivedir VARCHAR(50) NOT NULL DEFAULT 'ogLive';
	END IF;
	# Eliminar campos sin uso en aulas (ticket #730).
	IF EXISTS (SELECT * FROM information_schema.COLUMNS
			WHERE COLUMN_NAME='cuadro_x' AND TABLE_NAME='aulas' AND TABLE_SCHEMA=DATABASE())
	THEN
		ALTER TABLE aulas 
			DROP cuadro_x,
			DROP cuadro_y;
	END IF;
	# Eliminar campos no usado en inventario de hardware (ticket #713).
	IF EXISTS (SELECT * FROM information_schema.COLUMNS
			WHERE COLUMN_NAME='pci' AND TABLE_NAME='tipohardwares' AND TABLE_SCHEMA=DATABASE())
	THEN
		ALTER TABLE tipohardwares
			DROP pci;
	END IF;
	# Añadir servidor de sincronización horaria NTP (ticket #725).
	IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS
			WHERE COLUMN_NAME='ntp' AND TABLE_NAME='aulas' AND TABLE_SCHEMA=DATABASE())
	THEN
		ALTER TABLE aulas
			ADD ntp VARCHAR(30) AFTER proxy;
	END IF;
	# Directorios en repo para distintas UO (ticket #678).
	IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS
			WHERE COLUMN_NAME='ogunit' AND TABLE_NAME='entidades' AND TABLE_SCHEMA=DATABASE())
	THEN
		ALTER TABLE entidades
			ADD ogunit TINYINT(1) NOT NULL DEFAULT 0;
	END IF;
	IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS
			WHERE COLUMN_NAME='directorio' AND TABLE_NAME='centros' AND TABLE_SCHEMA=DATABASE())
	THEN
		ALTER TABLE centros
			ADD directorio VARCHAR(50) DEFAULT '';
	END IF;
	# Nº de revisión de imagen (ticket #737).
	IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS
			WHERE COLUMN_NAME='revision' AND TABLE_NAME='imagenes' AND TABLE_SCHEMA=DATABASE())
	THEN
		ALTER TABLE imagenes
			ADD revision SMALLINT UNSIGNED NOT NULL DEFAULT 0 AFTER nombreca;
	END IF;
	IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS
			WHERE COLUMN_NAME='revision' AND TABLE_NAME='ordenadores_particiones' AND TABLE_SCHEMA=DATABASE())
	THEN
		ALTER TABLE ordenadores_particiones 
			ADD revision SMALLINT UNSIGNED NOT NULL DEFAULT 0 AFTER idimagen;
	END IF;
	# Incluir campo sistema operativo en el perfil de software (tickets #738 #713)
	IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS
			WHERE COLUMN_NAME='idnombreso' AND TABLE_NAME='perfilessoft'  AND TABLE_SCHEMA=DATABASE())
	THEN 
		ALTER TABLE perfilessoft
			ADD idnombreso SMALLINT UNSIGNED AFTER idperfilsoft;
	END IF;
	# Añadir campo para clave de acceso a la API REST del repositorio (ticket #743).
	IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS
			WHERE COLUMN_NAME='apikey' AND TABLE_NAME='repositorios' AND TABLE_SCHEMA=DATABASE())
	THEN
		ALTER TABLE repositorios
			ADD apikey VARCHAR(32) NOT NULL DEFAULT '';
	END IF;
	# Codificar claves de los usuarios, si fuese necesario (ticket #778)
	IF ((SELECT CHARACTER_MAXIMUM_LENGTH FROM information_schema.COLUMNS
	      WHERE COLUMN_NAME='pasguor' AND TABLE_NAME='usuarios' AND TABLE_SCHEMA=DATABASE()) != 56)
	THEN
		ALTER TABLE usuarios
			MODIFY pasguor VARCHAR(56) NOT NULL DEFAULT '';
		INSERT INTO usuarios (idusuario, pasguor)
			SELECT idusuario, pasguor FROM usuarios
			ON DUPLICATE KEY UPDATE
				pasguor=SHA2(VALUES(pasguor), 224);
	END IF;
	# Crear tabla de log para la cola de acciones (ticket #782)
	IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS
			WHERE TABLE_NAME='acciones_log' AND TABLE_SCHEMA=DATABASE())
	THEN
		CREATE TABLE acciones_log LIKE acciones;
		ALTER TABLE acciones_log ADD fecha_borrado DATETIME;
	END IF;
END//
# Disparador para mover acciones borradas a la tabla de registro de acciones.
CREATE TRIGGER registrar_acciones BEFORE DELETE ON acciones FOR EACH ROW
BEGIN
	INSERT INTO acciones_log VALUES
		(OLD.idaccion, OLD.tipoaccion, OLD.idtipoaccion, OLD.descriaccion,
		OLD.idordenador, OLD.ip, OLD.sesion, OLD.idcomando, OLD.parametros,
		OLD.fechahorareg, OLD.fechahorafin, OLD.estado, OLD.resultado,
		OLD.descrinotificacion, OLD.ambito, OLD.idambito, OLD.restrambito,
		OLD.idprocedimiento, OLD.idtarea, OLD.idcentro, OLD.idprogramacion,
		NOW());
END//
# Ejecutar actualización condicional.
DELIMITER ';'
CALL addcols();
DROP PROCEDURE addcols;

# Nuevos tipos de particiones y de sistemas de ficheros.
INSERT INTO tipospar (codpar, tipopar, clonable) VALUES
	(CONV('A9',16,10), 'NETBSD', 1),
	(CONV('2700',16,10), 'WIN-RECOV', 1),
	(CONV('8302',16,10), 'LINUX', 1),
	(CONV('A504',16,10), 'FREEBSD', 1),
	(CONV('A901',16,10), 'NETBSD-SWAP', 0),
	(CONV('A902',16,10), 'NETBSD', 1),
	(CONV('A903',16,10), 'NETBSD', 1),
	(CONV('A904',16,10), 'NETBSD', 1),
	(CONV('A905',16,10), 'NETBSD', 1),
	(CONV('A906',16,10), 'NETBSD-RAID', 1),
	(CONV('AF02',16,10), 'HFS-RAID', 1),
	(CONV('FB00',16,10), 'VMFS', 1),
	(CONV('FB01',16,10), 'VMFS-RESERV', 1),
	(CONV('FB02',16,10), 'VMFS-KRN', 1),
	(CONV('10000',16,10), 'LVM-LV', 1),
	(CONV('10010',16,10), 'ZFS-VOL', 1)
	ON DUPLICATE KEY UPDATE
		codpar=VALUES(codpar), tipopar=VALUES(tipopar), clonable=VALUES(clonable);
INSERT INTO sistemasficheros (idsistemafichero, nemonico, descripcion) VALUES
	(19, 'LINUX-SWAP', 'LINUX-SWAP'),
	(20, 'F2FS', 'F2FS'),
	(21, 'NILFS2', 'NILFS2')
		ON DUPLICATE KEY UPDATE
		idsistemafichero=VALUES(idsistemafichero), nemonico=VALUES(nemonico), descripcion=VALUES(descripcion);

# Preparar generación de claves de acceso a la API REST para el usuario principal y a la del repositorio principal (tickets #708 y #743).
UPDATE usuarios
	SET apikey = 'APIKEY'
	WHERE idusuario = 1 AND apikey = '';
UPDATE repositorios
	SET apikey = 'REPOKEY'
	WHERE idrepositorio = 1 AND apikey = '';

# Nuevos componentes hardware (ticket #713)
INSERT INTO tipohardwares (idtipohardware, descripcion, urlimg, nemonico) VALUES
	(17, 'Chasis del Sistema', '', 'cha'),
	(18, 'Controladores de almacenamiento', '../images/iconos/almacenamiento.png', 'sto'),
	(19, 'Tipo de proceso de arranque', '../images/iconos/arranque.png', 'boo')
	ON DUPLICATE KEY UPDATE
		descripcion=VALUES(descripcion), urlimg=VALUES(urlimg), nemonico=VALUES(nemonico);

# Número de puestos del aula permite valores hasta 32768 (ticket #747)
ALTER TABLE aulas
	MODIFY puestos SMALLINT DEFAULT NULL;

# Nuevas tablas para datos del proyecto Remote PC y operaciones de OGAgent (ticket #708).
DROP TABLE IF EXISTS remotepc; 
CREATE TABLE remotepc ( 
	id INT(11) NOT NULL, 
	reserved DATETIME DEFAULT NULL, 
	urllogin VARCHAR(100), 
	urllogout VARCHAR(100), 
	language VARCHAR(5), 
	PRIMARY KEY (id) 
	) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS ogagent_queue;
CREATE TABLE ogagent_queue (
	id INT(11) NOT NULL AUTO_INCREMENT,
	clientid INT(11) NOT NULL,
	exectime DATETIME DEFAULT NULL,
	operation VARCHAR(25),
	PRIMARY KEY (id)
	) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

# Nuevo comando "Enviar mensaje" (ticket #779)
INSERT INTO comandos (idcomando, descripcion, pagina, gestor, funcion, urlimg, 
	aplicambito, visuparametros, parametros, comentarios, activo, submenu) VALUES
	(16, 'Enviar mensaje', '../comandos/EnviarMensaje.php', '../comandos/gestores/gestor_Comandos.php', 'EnviarMensaje', '', 31, '', '', '', 1, '' )
	ON DUPLICATE KEY UPDATE
		descripcion=VALUES(descripcion), pagina=VALUES(pagina),
		gestor=VALUES(gestor), funcion=VALUES(funcion),
		aplicambito=VALUES(aplicambito), activo=VALUES(activo);
INSERT INTO parametros (idparametro, nemonico, descripcion, nomidentificador, nomtabla, nomliteral, tipopa, visual) VALUES
	(39, 'tit', 'Título', '', '', '', 0, 1),
	(40, 'msj', 'Contenido', '', '', '', 0, 1)
	ON DUPLICATE KEY UPDATE
		nemonico=VALUES(nemonico), descripcion=VALUES(descripcion),
		tipopa=VALUES(tipopa), visual=VALUES(visual);

# Evitar error de MySQL con modo NO_ZERO_DATE (ticket #730).
ALTER TABLE acciones
	MODIFY fechahorareg DATETIME NOT NULL DEFAULT '1970-01-01 00:00:00',
	MODIFY fechahorafin DATETIME NOT NULL DEFAULT '1970-01-01 00:00:00';

# Ampliar programación de tareas hasta 2025 (ticket #732).
ALTER TABLE programaciones
	MODIFY annos SMALLINT DEFAULT NULL;

# Eliminar tabla sin uso (ticket #730).
DROP TABLE IF EXISTS campus;