Version 15.14
BIN
icon/adm16x16.gif
Normal file
After Width: | Height: | Size: 153 B |
BIN
icon/click16x16.gif
Normal file
After Width: | Height: | Size: 137 B |
BIN
icon/follow64x64.gif
Normal file
After Width: | Height: | Size: 586 B |
BIN
icon/gnusocial16x16.gif
Normal file
After Width: | Height: | Size: 582 B |
BIN
icon/iconset/awesome/action64x64/follow64x64.gif
Normal file
After Width: | Height: | Size: 586 B |
BIN
icon/identica16x16.gif
Normal file
After Width: | Height: | Size: 530 B |
BIN
icon/orcid16x16.gif
Normal file
After Width: | Height: | Size: 335 B |
BIN
icon/researcherid16x16.gif
Normal file
After Width: | Height: | Size: 619 B |
BIN
icon/usrs16x16.gif
Normal file
After Width: | Height: | Size: 178 B |
365
sql/cambios.sql
|
@ -10790,4 +10790,369 @@ UPDATE log,centres SET log.InsCod=centres.InsCod WHERE log.CtrCod=centres.CtrCod
|
|||
UPDATE log,institutions SET log.CtyCod=institutions.CtyCod WHERE log.InsCod=institutions.InsCod;
|
||||
|
||||
|
||||
-------------------------
|
||||
|
||||
CREATE TABLE IF NOT EXISTS log_full (LogCod INT NOT NULL AUTO_INCREMENT,ActCod INT NOT NULL DEFAULT -1,CtyCod INT NOT NULL DEFAULT -1,InsCod INT NOT NULL DEFAULT -1,CtrCod INT NOT NULL DEFAULT -1,DegCod INT NOT NULL DEFAULT -1,CrsCod INT NOT NULL DEFAULT -1,UsrCod INT NOT NULL DEFAULT -1,Role TINYINT NOT NULL,ClickTime DATETIME NOT NULL,TimeToGenerate INT NOT NULL,TimeToSend INT NOT NULL,IP CHAR(15) NOT NULL,UNIQUE INDEX(LogCod),INDEX(ActCod),INDEX(CtyCod),INDEX(InsCod),INDEX(CtrCod),INDEX(DegCod),INDEX(CrsCod),INDEX(UsrCod),INDEX(ClickTime,Role));
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20040101' AND ClickTime<'20050101';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20050101' AND ClickTime<'20060101';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20060101' AND ClickTime<'20070101';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20070101' AND ClickTime<'20080101';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20080101' AND ClickTime<'20090101';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20090101' AND ClickTime<'20100101';
|
||||
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20100101' AND ClickTime<'20100201';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20100201' AND ClickTime<'20100301';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20100301' AND ClickTime<'20100401';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20100401' AND ClickTime<'20100501';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20100501' AND ClickTime<'20100601';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20100601' AND ClickTime<'20100701';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20100701' AND ClickTime<'20100801';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20100801' AND ClickTime<'20100901';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20100901' AND ClickTime<'20101001';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20101001' AND ClickTime<'20101101';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20101101' AND ClickTime<'20101201';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20101201' AND ClickTime<'20110101';
|
||||
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20110101' AND ClickTime<'20110201';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20110201' AND ClickTime<'20110301';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20110301' AND ClickTime<'20110401';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20110401' AND ClickTime<'20110501';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20110501' AND ClickTime<'20110601';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20110601' AND ClickTime<'20110701';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20110701' AND ClickTime<'20110801';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20110801' AND ClickTime<'20110901';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20110901' AND ClickTime<'20111001';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20111001' AND ClickTime<'20111101';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20111101' AND ClickTime<'20111201';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20111201' AND ClickTime<'20120101';
|
||||
|
||||
----------
|
||||
|
||||
DELETE FROM log WHERE ClickTime<'20050101';
|
||||
DELETE FROM log WHERE ClickTime<'20060101';
|
||||
DELETE FROM log WHERE ClickTime<'20060601';
|
||||
DELETE FROM log WHERE ClickTime<'20060701';
|
||||
DELETE FROM log WHERE ClickTime<'20080601';
|
||||
DELETE FROM log WHERE ClickTime<'20090101';
|
||||
DELETE FROM log WHERE ClickTime<'20090201';
|
||||
DELETE FROM log WHERE ClickTime<'20090302';
|
||||
DELETE LOW_PRIORITY FROM log WHERE ClickTime<'20090303';
|
||||
DELETE LOW_PRIORITY FROM log WHERE ClickTime<'20090310';
|
||||
|
||||
CREATE TABLE log_new LIKE log;
|
||||
// Insertar log muy recientes en una tabla de log nueva, sin repetir
|
||||
INSERT log_new SELECT * FROM log WHERE ClickTime>='20151013' AND LogCod NOT IN (SELECT LogCod FROM log_new);
|
||||
|
||||
DELETE LOW_PRIORITY FROM log WHERE ClickTime<'20090401';
|
||||
DELETE LOW_PRIORITY FROM log WHERE ClickTime<'20100101';
|
||||
DELETE LOW_PRIORITY FROM log WHERE ClickTime<'20110101';
|
||||
DELETE LOW_PRIORITY FROM log WHERE ClickTime<'20120101';
|
||||
|
||||
Parar MySQL
|
||||
sync
|
||||
Mover temporalmente ficheros log_full* a /var/www para dejar espacio en /var/lib/mysql
|
||||
Lanzar MySQL
|
||||
OPTIMIZE TABLE log; para liberar espacio en disco
|
||||
Parar MySQL
|
||||
Mover ficheros log_full* de /var/www a /var/lib/mysql
|
||||
Lanzar MySQL
|
||||
|
||||
Continuar las siguientes inserciones desde log a log_full
|
||||
|
||||
Se estará usando log_new en lugar de log, por tanto al final copiar todo lo nuevo que esté en log_new a log o a log_full
|
||||
INSERT log SELECT * FROM log_new WHERE LogCod NOT IN (SELECT LogCod FROM log);
|
||||
|
||||
|
||||
Revisar:
|
||||
Prf_GetFirstClickFromLogAndStoreAsUsrFigure
|
||||
Prf_GetNumClicksAndStoreAsUsrFigure
|
||||
|
||||
----------
|
||||
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20120101' AND ClickTime<'20120201';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20120201' AND ClickTime<'20120301';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20120301' AND ClickTime<'20120401';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20120401' AND ClickTime<'20120501';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20120501' AND ClickTime<'20120601';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20120601' AND ClickTime<'20120701';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20120701' AND ClickTime<'20120801';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20120801' AND ClickTime<'20120901';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20120901' AND ClickTime<'20121001';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20121001' AND ClickTime<'20121101';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20121101' AND ClickTime<'20121201';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20121201' AND ClickTime<'20130101';
|
||||
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20130101' AND ClickTime<'20130201';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20130201' AND ClickTime<'20130301';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20130301' AND ClickTime<'20130401';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20130401' AND ClickTime<'20130501';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20130501' AND ClickTime<'20130601';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20130601' AND ClickTime<'20130701';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20130701' AND ClickTime<'20130801';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20130801' AND ClickTime<'20130901';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20130901' AND ClickTime<'20131001';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20131001' AND ClickTime<'20131101';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20131101' AND ClickTime<'20131201';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20131201' AND ClickTime<'20140101';
|
||||
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20140101' AND ClickTime<'20140201';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20140201' AND ClickTime<'20140301';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20140301' AND ClickTime<'20140401';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20140401' AND ClickTime<'20140501';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20140501' AND ClickTime<'20140601';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20140601' AND ClickTime<'20140701';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20140701' AND ClickTime<'20140801';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20140801' AND ClickTime<'20140901';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20140901' AND ClickTime<'20141001';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20141001' AND ClickTime<'20141101';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20141101' AND ClickTime<'20141201';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20141201' AND ClickTime<'20150101';
|
||||
|
||||
DELETE LOW_PRIORITY FROM log WHERE ClickTime<'20130101';
|
||||
DELETE LOW_PRIORITY FROM log WHERE ClickTime<'20140101';
|
||||
DELETE LOW_PRIORITY FROM log WHERE ClickTime<'20150101';
|
||||
|
||||
Parar MySQL:
|
||||
/sbin/service mysqld stop
|
||||
sync
|
||||
|
||||
Lanzar MySQL:
|
||||
/sbin/service mysqld start
|
||||
|
||||
Mover temporalmente ficheros log_full* a /var/www para dejar espacio en /var/lib/mysql
|
||||
cd /var/lib/mysql/swad/
|
||||
ls -la log_full*
|
||||
mv log_full* /var/www
|
||||
|
||||
Liberar espacio en disco:
|
||||
OPTIMIZE TABLE log;
|
||||
|
||||
|
||||
Mover ficheros log_full* de /var/www a /var/lib/mysql:
|
||||
mv /var/www/log_full* /var/lib/mysql/swad/
|
||||
|
||||
Continuar las siguientes inserciones desde log a log_full
|
||||
|
||||
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20150101' AND ClickTime<'20150201';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20150201' AND ClickTime<'20150301';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20150301' AND ClickTime<'20150401';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20150401' AND ClickTime<'20150501';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20150501' AND ClickTime<'20150601';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20150601' AND ClickTime<'20150701';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20150701' AND ClickTime<'20150801';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20150801' AND ClickTime<'20150901';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20150901' AND ClickTime<'20151001';
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log WHERE ClickTime>='20151001' AND ClickTime<'20151013';
|
||||
|
||||
|
||||
UPDATE log_full,degrees SET log_full.CtrCod=degrees.CtrCod WHERE log_full.ClickTime>='20040101' AND log_full.ClickTime<'20050101' AND log_full.DegCod=degrees.DegCod;
|
||||
|
||||
CREATE TABLE degrees_copy LIKE degrees;
|
||||
INSERT degrees_copy SELECT * FROM degrees;
|
||||
|
||||
CREATE TABLE centres_copy LIKE centres;
|
||||
INSERT centres_copy SELECT * FROM centres;
|
||||
|
||||
CREATE TABLE institutions_copy LIKE institutions;
|
||||
INSERT institutions_copy SELECT * FROM institutions;
|
||||
|
||||
Hecho hasta aquí
|
||||
|
||||
UPDATE log_full,degrees_copy SET log_full.CtrCod=degrees_copy.CtrCod WHERE log_full.ClickTime>='20050101' AND log_full.ClickTime<'20050201' AND log_full.DegCod=degrees_copy.DegCod;
|
||||
UPDATE log_full,degrees_copy SET log_full.CtrCod=degrees_copy.CtrCod WHERE log_full.ClickTime>='20050201' AND log_full.ClickTime<'20050301' AND log_full.DegCod=degrees_copy.DegCod;
|
||||
UPDATE log_full,degrees_copy SET log_full.CtrCod=degrees_copy.CtrCod WHERE log_full.ClickTime>='20050301' AND log_full.ClickTime<'20050401' AND log_full.DegCod=degrees_copy.DegCod;
|
||||
UPDATE log_full,degrees_copy SET log_full.CtrCod=degrees_copy.CtrCod WHERE log_full.ClickTime>='20050401' AND log_full.ClickTime<'20050501' AND log_full.DegCod=degrees_copy.DegCod;
|
||||
UPDATE log_full,degrees_copy SET log_full.CtrCod=degrees_copy.CtrCod WHERE log_full.ClickTime>='20050501' AND log_full.ClickTime<'20050601' AND log_full.DegCod=degrees_copy.DegCod;
|
||||
UPDATE log_full,degrees_copy SET log_full.CtrCod=degrees_copy.CtrCod WHERE log_full.ClickTime>='20050601' AND log_full.ClickTime<'20050701' AND log_full.DegCod=degrees_copy.DegCod;
|
||||
UPDATE log_full,degrees_copy SET log_full.CtrCod=degrees_copy.CtrCod WHERE log_full.ClickTime>='20050701' AND log_full.ClickTime<'20050801' AND log_full.DegCod=degrees_copy.DegCod;
|
||||
UPDATE log_full,degrees_copy SET log_full.CtrCod=degrees_copy.CtrCod WHERE log_full.ClickTime>='20050801' AND log_full.ClickTime<'20050901' AND log_full.DegCod=degrees_copy.DegCod;
|
||||
UPDATE log_full,degrees_copy SET log_full.CtrCod=degrees_copy.CtrCod WHERE log_full.ClickTime>='20050901' AND log_full.ClickTime<'20051001' AND log_full.DegCod=degrees_copy.DegCod;
|
||||
|
||||
|
||||
DROP PROCEDURE IF EXISTS update_log_full;
|
||||
DELIMITER |
|
||||
CREATE PROCEDURE update_log_full()
|
||||
BEGIN
|
||||
DECLARE LogCodStart INT;
|
||||
DECLARE LogCodEnd INT;
|
||||
SET LogCodStart = 0;
|
||||
WHILE LogCodStart <= 400000000 DO
|
||||
SET LogCodEnd = LogCodStart + 100000;
|
||||
UPDATE log_full,degrees_copy SET log_full.CtrCod=degrees_copy.CtrCod WHERE (log_full.LogCod BETWEEN LogCodStart AND LogCodEnd) AND log_full.DegCod=degrees_copy.DegCod;
|
||||
SET LogCodStart = LogCodEnd;
|
||||
END WHILE;
|
||||
END;
|
||||
|
|
||||
DELIMITER ;
|
||||
CALL update_log_full();
|
||||
|
||||
|
||||
DROP PROCEDURE IF EXISTS update_log_full;
|
||||
DELIMITER |
|
||||
CREATE PROCEDURE update_log_full()
|
||||
BEGIN
|
||||
DECLARE LogCodStart INT;
|
||||
DECLARE LogCodEnd INT;
|
||||
SET LogCodStart = 0;
|
||||
WHILE LogCodStart <= 400000000 DO
|
||||
SET LogCodEnd = LogCodStart + 100000;
|
||||
UPDATE log_full,centres_copy SET log_full.InsCod=centres_copy.InsCod WHERE (log_full.LogCod BETWEEN LogCodStart AND LogCodEnd) AND log_full.CtrCod=centres_copy.CtrCod;
|
||||
SET LogCodStart = LogCodEnd;
|
||||
END WHILE;
|
||||
END;
|
||||
|
|
||||
DELIMITER ;
|
||||
CALL update_log_full();
|
||||
|
||||
DROP PROCEDURE IF EXISTS update_log_full;
|
||||
DELIMITER |
|
||||
CREATE PROCEDURE update_log_full()
|
||||
BEGIN
|
||||
DECLARE LogCodStart INT;
|
||||
DECLARE LogCodEnd INT;
|
||||
SET LogCodStart = 0;
|
||||
WHILE LogCodStart <= 400000000 DO
|
||||
SET LogCodEnd = LogCodStart + 100000;
|
||||
UPDATE log_full,institutions_copy SET log_full.CtyCod=institutions_copy.CtyCod WHERE (log_full.LogCod BETWEEN LogCodStart AND LogCodEnd) AND log_full.InsCod=institutions_copy.InsCod;
|
||||
SET LogCodStart = LogCodEnd;
|
||||
END WHILE;
|
||||
END;
|
||||
|
|
||||
DELIMITER ;
|
||||
CALL update_log_full();
|
||||
|
||||
|
||||
Se estará usando log_new en lugar de log, por tanto al final copiar todo lo nuevo que esté en log_new a log o a log_full
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log_new WHERE ClickTime>='20151013' AND LogCod NOT IN (SELECT LogCod FROM log_full);
|
||||
|
||||
UPDATE log_full,degrees_copy SET log_full.CtrCod=degrees_copy.CtrCod WHERE log_full.ClickTime>='20151013' AND log_full.ClickTime<'20151014' AND log_full.DegCod=degrees_copy.DegCod;
|
||||
UPDATE log_full,degrees_copy SET log_full.CtrCod=degrees_copy.CtrCod WHERE log_full.ClickTime>='20151014' AND log_full.ClickTime<'20151015' AND log_full.DegCod=degrees_copy.DegCod;
|
||||
|
||||
UPDATE log_full,centres_copy SET log_full.InsCod=centres_copy.InsCod WHERE log_full.ClickTime>='20151013' AND log_full.ClickTime<'20151014' AND log_full.CtrCod=centres_copy.CtrCod;
|
||||
UPDATE log_full,centres_copy SET log_full.InsCod=centres_copy.InsCod WHERE log_full.ClickTime>='20151014' AND log_full.ClickTime<'20151015' AND log_full.CtrCod=centres_copy.CtrCod;
|
||||
|
||||
UPDATE log_full,institutions_copy SET log_full.CtyCod=institutions_copy.CtyCod WHERE log_full.ClickTime>='20151013' AND log_full.ClickTime<'20151014' AND log_full.InsCod=institutions_copy.InsCod;
|
||||
UPDATE log_full,institutions_copy SET log_full.CtyCod=institutions_copy.CtyCod WHERE log_full.ClickTime>='20151014' AND log_full.ClickTime<'20151015' AND log_full.InsCod=institutions_copy.InsCod;
|
||||
|
||||
Hecho hasta aquí
|
||||
|
||||
|
||||
-----------
|
||||
|
||||
Paso final en swad.ugr.es con SWAD parado:
|
||||
|
||||
touch /var/www/cgi-bin/swad.lock
|
||||
|
||||
INSERT INTO log_full (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP) SELECT LogCod,ActCod, '-1' , '-1' , '-1' ,DegCod,CrsCod,UsrCod,Role,ClickTime,TimeToGenerate,TimeToSend,IP FROM log_new WHERE ClickTime>='20151015' AND LogCod NOT IN (SELECT LogCod FROM log_full);
|
||||
UPDATE log_full,degrees_copy SET log_full.CtrCod=degrees_copy.CtrCod WHERE log_full.ClickTime>='20151015' AND log_full.DegCod=degrees_copy.DegCod;
|
||||
UPDATE log_full,centres_copy SET log_full.InsCod=centres_copy.InsCod WHERE log_full.ClickTime>='20151015' AND log_full.CtrCod=centres_copy.CtrCod;
|
||||
UPDATE log_full,institutions_copy SET log_full.CtyCod=institutions_copy.CtyCod WHERE log_full.ClickTime>='20151015' AND log_full.InsCod=institutions_copy.InsCod;
|
||||
|
||||
Copiar nuevo programa swad
|
||||
|
||||
rm /var/www/cgi-bin/swad.lock
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
OPTIMIZE TABLE IP_last;
|
||||
OPTIMIZE TABLE IP_prefs;
|
||||
OPTIMIZE TABLE actions;
|
||||
OPTIMIZE TABLE actions_MFU;
|
||||
OPTIMIZE TABLE admin;
|
||||
OPTIMIZE TABLE ann_seen;
|
||||
OPTIMIZE TABLE announcements;
|
||||
OPTIMIZE TABLE asg_grp;
|
||||
OPTIMIZE TABLE assignments;
|
||||
OPTIMIZE TABLE att_events;
|
||||
OPTIMIZE TABLE att_grp;
|
||||
OPTIMIZE TABLE att_usr;
|
||||
OPTIMIZE TABLE banners;
|
||||
OPTIMIZE TABLE birthdays_today;
|
||||
OPTIMIZE TABLE centres;
|
||||
OPTIMIZE TABLE chat;
|
||||
OPTIMIZE TABLE clicks_without_photo;
|
||||
OPTIMIZE TABLE clipboard;
|
||||
OPTIMIZE TABLE connected;
|
||||
OPTIMIZE TABLE countries;
|
||||
OPTIMIZE TABLE courses;
|
||||
OPTIMIZE TABLE crs_grp;
|
||||
OPTIMIZE TABLE crs_grp_types;
|
||||
OPTIMIZE TABLE crs_grp_usr;
|
||||
OPTIMIZE TABLE crs_info_read;
|
||||
OPTIMIZE TABLE crs_info_src;
|
||||
OPTIMIZE TABLE crs_info_txt;
|
||||
OPTIMIZE TABLE crs_last;
|
||||
OPTIMIZE TABLE crs_record_fields;
|
||||
OPTIMIZE TABLE crs_records;
|
||||
OPTIMIZE TABLE crs_usr;
|
||||
OPTIMIZE TABLE crs_usr_requests;
|
||||
OPTIMIZE TABLE debug;
|
||||
OPTIMIZE TABLE deg_types;
|
||||
OPTIMIZE TABLE degrees;
|
||||
OPTIMIZE TABLE departments;
|
||||
OPTIMIZE TABLE exam_announcements;
|
||||
OPTIMIZE TABLE expanded_folders;
|
||||
OPTIMIZE TABLE file_browser_last;
|
||||
OPTIMIZE TABLE file_browser_size;
|
||||
OPTIMIZE TABLE file_view;
|
||||
OPTIMIZE TABLE files;
|
||||
OPTIMIZE TABLE forum_disabled_post;
|
||||
OPTIMIZE TABLE forum_post;
|
||||
OPTIMIZE TABLE forum_thr_clip;
|
||||
OPTIMIZE TABLE forum_thr_read;
|
||||
OPTIMIZE TABLE forum_thread;
|
||||
OPTIMIZE TABLE hidden_params;
|
||||
OPTIMIZE TABLE holidays;
|
||||
OPTIMIZE TABLE imported_groups;
|
||||
OPTIMIZE TABLE imported_sessions;
|
||||
OPTIMIZE TABLE imported_students;
|
||||
OPTIMIZE TABLE institutions;
|
||||
OPTIMIZE TABLE links;
|
||||
OPTIMIZE TABLE mail_domains;
|
||||
OPTIMIZE TABLE marks_properties;
|
||||
OPTIMIZE TABLE msg_banned;
|
||||
OPTIMIZE TABLE msg_rcv;
|
||||
OPTIMIZE TABLE msg_rcv_deleted;
|
||||
OPTIMIZE TABLE msg_snt;
|
||||
OPTIMIZE TABLE msg_snt_deleted;
|
||||
OPTIMIZE TABLE notices;
|
||||
OPTIMIZE TABLE notices_deleted;
|
||||
OPTIMIZE TABLE notif;
|
||||
OPTIMIZE TABLE pending_emails;
|
||||
OPTIMIZE TABLE pending_passwd;
|
||||
OPTIMIZE TABLE places;
|
||||
OPTIMIZE TABLE plugins;
|
||||
OPTIMIZE TABLE sessions;
|
||||
OPTIMIZE TABLE sta_degrees;
|
||||
OPTIMIZE TABLE sta_notif;
|
||||
OPTIMIZE TABLE surveys;
|
||||
OPTIMIZE TABLE svy_answers;
|
||||
OPTIMIZE TABLE svy_grp;
|
||||
OPTIMIZE TABLE svy_questions;
|
||||
OPTIMIZE TABLE svy_users;
|
||||
OPTIMIZE TABLE timetable_crs;
|
||||
OPTIMIZE TABLE timetable_tut;
|
||||
OPTIMIZE TABLE tst_answers;
|
||||
OPTIMIZE TABLE tst_config;
|
||||
OPTIMIZE TABLE tst_exam_questions;
|
||||
OPTIMIZE TABLE tst_exams;
|
||||
OPTIMIZE TABLE tst_question_tags;
|
||||
OPTIMIZE TABLE tst_questions;
|
||||
OPTIMIZE TABLE tst_status;
|
||||
OPTIMIZE TABLE tst_tags;
|
||||
OPTIMIZE TABLE usr_IDs;
|
||||
OPTIMIZE TABLE usr_banned;
|
||||
OPTIMIZE TABLE usr_data;
|
||||
OPTIMIZE TABLE usr_emails;
|
||||
OPTIMIZE TABLE usr_figures;
|
||||
OPTIMIZE TABLE usr_follow;
|
||||
OPTIMIZE TABLE usr_last;
|
||||
OPTIMIZE TABLE usr_nicknames;
|
||||
OPTIMIZE TABLE usr_webs;
|
||||
OPTIMIZE TABLE ws_keys;
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -26,11 +26,11 @@
|
|||
/*****************************************************************************/
|
||||
|
||||
#include <ctype.h> // For isalnum, isdigit, etc.
|
||||
#include <stdbool.h> // For boolean type
|
||||
#include <stdlib.h> // For exit, system, malloc, free, rand, etc.
|
||||
#include <string.h> // For string functions
|
||||
|
||||
#include "swad_account.h"
|
||||
#include "swad_bool.h"
|
||||
#include "swad_database.h"
|
||||
#include "swad_global.h"
|
||||
#include "swad_ID.h"
|
||||
|
|
|
@ -27,7 +27,8 @@
|
|||
/********************************** Headers **********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#include "swad_bool.h"
|
||||
#include <stdbool.h> // For boolean type
|
||||
|
||||
#include "swad_constant.h"
|
||||
#include "swad_user.h"
|
||||
|
||||
|
|
|
@ -27,7 +27,8 @@
|
|||
/********************************** Headers **********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#include "swad_bool.h"
|
||||
#include <stdbool.h> // For boolean type
|
||||
|
||||
#include "swad_text.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -951,6 +951,9 @@ void Ban_ClickOnBanner (void)
|
|||
|
||||
/***** Download the file *****/
|
||||
fprintf (stdout,"Location: %s\n\n",Ban.WWW);
|
||||
// TODO: Put headers Content-type and Content-disposition:
|
||||
// See: http://stackoverflow.com/questions/381954/how-do-i-fix-firefox-trying-to-save-image-as-htm
|
||||
// http://elouai.com/force-download.php
|
||||
Gbl.Layout.HTMLStartWritten =
|
||||
Gbl.Layout.TablEndWritten =
|
||||
Gbl.Layout.HTMLEndWritten = true; // Don't write HTML at all
|
||||
|
|
|
@ -26,10 +26,10 @@
|
|||
/*****************************************************************************/
|
||||
|
||||
#include <linux/stddef.h> // For NULL
|
||||
#include <stdbool.h> // For boolean type
|
||||
#include <stdlib.h> // For calloc
|
||||
#include <string.h> // For string functions
|
||||
|
||||
#include "swad_bool.h"
|
||||
#include "swad_centre.h"
|
||||
#include "swad_constant.h"
|
||||
#include "swad_database.h"
|
||||
|
|
|
@ -98,16 +98,25 @@
|
|||
// TODO: Change link to Degree in Statistics > Visits > By degree to internal Degree
|
||||
// TODO: Link to user's country in public profile
|
||||
// TODO: Show guests in connected users.
|
||||
// TODO: Hide global announcements without removing them
|
||||
// TODO: A teacher should may confirm a student ID? In what conditions? (Necessary in order to a student can view his/her marks)
|
||||
// TODO: Put headers Content-type and Content-disposition when redirecting with Location:
|
||||
// TODO: System admin should be able to remove/edit user's mail (when he/she detects a recipient does not exists, for example)
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define Log_PLATFORM_VERSION "SWAD 15.13.2 (2015/10/11)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 15.14 (2015/10/15)"
|
||||
|
||||
// Number of lines (includes comments but not blank lines) has been got with the following command:
|
||||
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
|
||||
/*
|
||||
Version 15.14: Oct 15, 2015 Table log (historical log) renamed as log_full. (? lines)
|
||||
1 change necessary in database:
|
||||
RENAME TABLE log TO log_full;
|
||||
|
||||
Version 15.13.3: Oct 14, 2015 swad_bool.h replaced by stdbool.h. (? lines)
|
||||
Version 15.13.2: Oct 11, 2015 Refactoring and bug fixing in statistics. (186183 lines)
|
||||
Version 15.13.1: Oct 11, 2015 Refactoring and bug fixing in statistics related to scopes. (186300 lines)
|
||||
6 optional slow changes in database (may spend many minutes or even hours depending on the size of log tables):
|
||||
|
|
|
@ -26,10 +26,10 @@
|
|||
/*****************************************************************************/
|
||||
|
||||
#include <linux/stddef.h> // For NULL
|
||||
#include <stdbool.h> // For boolean type
|
||||
#include <stdio.h> // For sprintf
|
||||
#include <string.h>
|
||||
|
||||
#include "swad_bool.h"
|
||||
#include "swad_chat.h"
|
||||
#include "swad_config.h"
|
||||
#include "swad_database.h"
|
||||
|
|
|
@ -25,10 +25,10 @@
|
|||
/*********************************** Headers *********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#include <stdbool.h> // For boolean type
|
||||
#include <stdio.h> // For fseek, ftell...
|
||||
#include <string.h> // For strcasecmp...
|
||||
|
||||
#include "swad_bool.h"
|
||||
#include "swad_config.h"
|
||||
#include "swad_global.h"
|
||||
#include "swad_layout.h"
|
||||
|
|
|
@ -27,8 +27,9 @@
|
|||
/********************************* Headers ***********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#include <stdbool.h> // For boolean type
|
||||
|
||||
#include "swad_action.h"
|
||||
#include "swad_bool.h"
|
||||
#include "swad_role.h"
|
||||
#include "swad_text.h"
|
||||
|
||||
|
|
|
@ -28,8 +28,8 @@
|
|||
/*****************************************************************************/
|
||||
|
||||
#include <mysql/mysql.h> // To access MySQL databases
|
||||
#include <stdbool.h> // For boolean type
|
||||
|
||||
#include "swad_bool.h"
|
||||
#include "swad_degree.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -27,11 +27,10 @@
|
|||
/********************************* Headers ***********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#include <stdbool.h> // For boolean type
|
||||
#include <stdio.h> // For FILE *
|
||||
#include <time.h>
|
||||
|
||||
#include "swad_bool.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** Public constants ******************************/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -27,12 +27,12 @@
|
|||
|
||||
#include <ctype.h> // For isprint, isspace, etc.
|
||||
#include <linux/stddef.h> // For NULL
|
||||
#include <stdbool.h> // For boolean type
|
||||
#include <stdio.h> // For fprintf, etc.
|
||||
#include <stdlib.h> // For exit, system, calloc, free, etc.
|
||||
#include <string.h> // For string functions
|
||||
#include <mysql/mysql.h> // To access MySQL databases
|
||||
|
||||
#include "swad_bool.h"
|
||||
#include "swad_changelog.h"
|
||||
#include "swad_config.h"
|
||||
#include "swad_database.h"
|
||||
|
|
|
@ -26,10 +26,10 @@
|
|||
/*****************************************************************************/
|
||||
|
||||
#include <linux/stddef.h> // For NULL
|
||||
#include <stdbool.h> // For boolean type
|
||||
#include <stdlib.h> // For calloc
|
||||
#include <string.h> // For string functions
|
||||
|
||||
#include "swad_bool.h"
|
||||
#include "swad_constant.h"
|
||||
#include "swad_database.h"
|
||||
#include "swad_department.h"
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
/********************************* Headers ***********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#include "swad_bool.h"
|
||||
#include <stdbool.h> // For boolean type
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************** Public types and constants ***********************/
|
||||
|
|
|
@ -27,10 +27,9 @@
|
|||
/********************************* Headers ***********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#include <stdbool.h> // For boolean type
|
||||
#include <stdio.h> // For FILE
|
||||
|
||||
#include "swad_bool.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************** Public types and constants ***********************/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -9262,6 +9262,9 @@ void Brw_DownloadFile (void)
|
|||
|
||||
/***** Download the file *****/
|
||||
fprintf (stdout,"Location: %s\n\n",URL);
|
||||
// TODO: Put headers Content-type and Content-disposition:
|
||||
// See: http://stackoverflow.com/questions/381954/how-do-i-fix-firefox-trying-to-save-image-as-htm
|
||||
// http://elouai.com/force-download.php
|
||||
Gbl.Layout.HTMLStartWritten =
|
||||
Gbl.Layout.TablEndWritten =
|
||||
Gbl.Layout.HTMLEndWritten = true; // Don't write HTML at all
|
||||
|
|
|
@ -25,10 +25,10 @@
|
|||
/*********************************** Headers *********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#include <stdbool.h> // For boolean type
|
||||
#include <stdio.h> // For sprintf
|
||||
#include <string.h> // For string functions
|
||||
|
||||
#include "swad_bool.h"
|
||||
#include "swad_database.h"
|
||||
#include "swad_follow.h"
|
||||
#include "swad_global.h"
|
||||
|
|
254
swad_help.c
Normal file
|
@ -0,0 +1,254 @@
|
|||
// swad_help.c: contextual help to enhance usability
|
||||
|
||||
/*
|
||||
SWAD (Shared Workspace At a Distance),
|
||||
is a web platform developed at the University of Granada (Spain),
|
||||
and used to support university teaching.
|
||||
|
||||
This file is part of SWAD core.
|
||||
Copyright (C) 1999-2015 Antonio Cañas Vargas
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General 3 License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/*****************************************************************************/
|
||||
/*********************************** Headers *********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#include <stdlib.h> // For exit, system, malloc, free, rand, etc.
|
||||
|
||||
#include "swad_action.h"
|
||||
#include "swad_config.h"
|
||||
#include "swad_global.h"
|
||||
#include "swad_help.h"
|
||||
#include "swad_user.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** Private constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************************** Internal types *******************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/*****************************************************************************/
|
||||
/************** External global variables from others modules ****************/
|
||||
/*****************************************************************************/
|
||||
|
||||
extern struct Globals Gbl;
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************* Internal global variables *************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** Private prototypes ****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Hlp_ShowRowHelpWhatWouldYouLikeToDo (const char *Description,
|
||||
Act_Action_t Action,
|
||||
const char *ClassButton,
|
||||
const char *TxtButton);
|
||||
|
||||
/*****************************************************************************/
|
||||
/*************************** Show contextual help ****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Hlp_ShowHelpWhatWouldYouLikeToDo (void)
|
||||
{
|
||||
extern const char *Txt_You_are_not_enrolled_in_any_course[Usr_NUM_SEXS];
|
||||
extern const char *Txt_You_can_search_for_courses_select_them_and_request_your_enrollment_in_them;
|
||||
extern const char *Txt_If_you_can_not_find_your_institution_your_centre_your_degree_or_your_courses_you_can_create_them;
|
||||
extern const char *Txt_What_would_you_like_to_do;
|
||||
extern const char *Txt_Upload_my_picture;
|
||||
extern const char *Txt_Upload_photo;
|
||||
extern const char *Txt_Go_to_one_of_my_courses;
|
||||
extern const char *Txt_My_courses;
|
||||
extern const char *Txt_Sign_up;
|
||||
extern const char *Txt_Remove_me_from_the_course_X;
|
||||
extern const char *Txt_Remove_me;
|
||||
extern const char *Txt_Register_me_in_the_course_X;
|
||||
extern const char *Txt_Select_another_course_of_the_degree_X;
|
||||
extern const char *Txt_Select_one_course_of_the_degree_X;
|
||||
extern const char *Txt_Courses;
|
||||
extern const char *Txt_Select_another_degree_of_the_centre_X;
|
||||
extern const char *Txt_Select_one_degree_of_the_centre_X;
|
||||
extern const char *Txt_Degrees;
|
||||
extern const char *Txt_Select_another_centre_of_the_institution_X;
|
||||
extern const char *Txt_Select_one_centre_of_the_institution_X;
|
||||
extern const char *Txt_Centres;
|
||||
extern const char *Txt_Select_another_institution_of_COUNTRY_X;
|
||||
extern const char *Txt_Select_one_institution_of_COUNTRY_X;
|
||||
extern const char *Txt_Institutions;
|
||||
extern const char *Txt_Select_another_country;
|
||||
extern const char *Txt_Select_one_country;
|
||||
extern const char *Txt_Countries;
|
||||
extern const char *Txt_Log_in;
|
||||
extern const char *Txt_New_on_PLATFORM_Sign_up;
|
||||
extern const char *Txt_Create_account;
|
||||
|
||||
/***** Alert message *****/
|
||||
if (Gbl.Usrs.Me.Logged &&
|
||||
!Gbl.Usrs.Me.MyCourses.Num)
|
||||
{
|
||||
sprintf (Gbl.Message,"%s<br />%s<br />%s",
|
||||
Txt_You_are_not_enrolled_in_any_course[Gbl.Usrs.Me.UsrDat.Sex],
|
||||
Txt_You_can_search_for_courses_select_them_and_request_your_enrollment_in_them,
|
||||
Txt_If_you_can_not_find_your_institution_your_centre_your_degree_or_your_courses_you_can_create_them);
|
||||
Lay_ShowAlert (Lay_INFO,Gbl.Message);
|
||||
}
|
||||
|
||||
/***** Contextual buttons *****/
|
||||
/* Start table */
|
||||
Lay_StartRoundFrameTable (NULL,2,Txt_What_would_you_like_to_do);
|
||||
|
||||
if (Gbl.Usrs.Me.Logged) // I am logged
|
||||
{
|
||||
if (Gbl.Usrs.Me.MyCourses.Num) // I am enrolled in some courses
|
||||
{
|
||||
if (Gbl.CurrentAct != ActMyCrs) // I am not seeing the action to list my courses
|
||||
/* Request list my courses */
|
||||
Hlp_ShowRowHelpWhatWouldYouLikeToDo (Txt_Go_to_one_of_my_courses,
|
||||
ActMyCrs,
|
||||
"BT_CONFIRM",Txt_My_courses);
|
||||
}
|
||||
|
||||
if (Gbl.CurrentDeg.Deg.DegCod > 0) // Degree selected
|
||||
{
|
||||
/* Select a course */
|
||||
sprintf (Gbl.Title,Gbl.CurrentCrs.Crs.CrsCod > 0 ? Txt_Select_another_course_of_the_degree_X :
|
||||
Txt_Select_one_course_of_the_degree_X,
|
||||
Gbl.CurrentDeg.Deg.ShortName);
|
||||
Hlp_ShowRowHelpWhatWouldYouLikeToDo (Gbl.Title,
|
||||
ActSeeCrs,
|
||||
"BT_CONFIRM",Txt_Courses);
|
||||
}
|
||||
else if (Gbl.CurrentCtr.Ctr.CtrCod > 0) // Centre selected
|
||||
{
|
||||
/* Select a degree */
|
||||
sprintf (Gbl.Title,Gbl.CurrentDeg.Deg.DegCod > 0 ? Txt_Select_another_degree_of_the_centre_X :
|
||||
Txt_Select_one_degree_of_the_centre_X,
|
||||
Gbl.CurrentCtr.Ctr.ShortName);
|
||||
Hlp_ShowRowHelpWhatWouldYouLikeToDo (Gbl.Title,
|
||||
ActSeeDeg,
|
||||
"BT_CONFIRM",Txt_Degrees);
|
||||
}
|
||||
else if (Gbl.CurrentIns.Ins.InsCod > 0) // Institution selected
|
||||
{
|
||||
/* Select a centre */
|
||||
sprintf (Gbl.Title,Gbl.CurrentCtr.Ctr.CtrCod > 0 ? Txt_Select_another_centre_of_the_institution_X :
|
||||
Txt_Select_one_centre_of_the_institution_X,
|
||||
Gbl.CurrentIns.Ins.ShortName);
|
||||
Hlp_ShowRowHelpWhatWouldYouLikeToDo (Gbl.Title,
|
||||
ActSeeCtr,
|
||||
"BT_CONFIRM",Txt_Centres);
|
||||
}
|
||||
else if (Gbl.CurrentCty.Cty.CtyCod > 0) // Country selected
|
||||
{
|
||||
/* Select an institution */
|
||||
sprintf (Gbl.Title,Gbl.CurrentIns.Ins.InsCod > 0 ? Txt_Select_another_institution_of_COUNTRY_X :
|
||||
Txt_Select_one_institution_of_COUNTRY_X,
|
||||
Gbl.CurrentCty.Cty.Name[Gbl.Prefs.Language]);
|
||||
Hlp_ShowRowHelpWhatWouldYouLikeToDo (Gbl.Title,
|
||||
ActSeeIns,
|
||||
"BT_CONFIRM",Txt_Institutions);
|
||||
}
|
||||
else
|
||||
/* Select a country */
|
||||
Hlp_ShowRowHelpWhatWouldYouLikeToDo (Gbl.CurrentCty.Cty.CtyCod > 0 ? Txt_Select_another_country :
|
||||
Txt_Select_one_country,
|
||||
ActSeeCty,
|
||||
"BT_CONFIRM",Txt_Countries);
|
||||
|
||||
if (Gbl.CurrentCrs.Crs.CrsCod > 0) // Course selected
|
||||
{
|
||||
if (Gbl.Usrs.Me.IBelongToCurrentCrs) // I belong to this course
|
||||
{
|
||||
if (Gbl.CurrentAct != ActAutUsrInt &&
|
||||
Gbl.CurrentAct != ActAutUsrExt &&
|
||||
Gbl.CurrentAct != ActAutUsrChgLan) // I am not just logged
|
||||
{
|
||||
/* Request my removing from this course */
|
||||
sprintf (Gbl.Title,Txt_Remove_me_from_the_course_X,
|
||||
Gbl.CurrentCrs.Crs.ShortName);
|
||||
Hlp_ShowRowHelpWhatWouldYouLikeToDo (Gbl.Title,
|
||||
ActReqMdfOneStd,
|
||||
"BT_REMOVE",Txt_Remove_me);
|
||||
}
|
||||
}
|
||||
else // I do not belong to this course
|
||||
{
|
||||
/* Request my registration in this course */
|
||||
sprintf (Gbl.Title,Txt_Register_me_in_the_course_X,
|
||||
Gbl.CurrentCrs.Crs.ShortName);
|
||||
Hlp_ShowRowHelpWhatWouldYouLikeToDo (Gbl.Title,
|
||||
ActReqSignUp,
|
||||
"BT_CREATE",Txt_Sign_up);
|
||||
}
|
||||
}
|
||||
|
||||
if (!Gbl.Usrs.Me.MyPhotoExists) // I have no photo
|
||||
Hlp_ShowRowHelpWhatWouldYouLikeToDo (Txt_Upload_my_picture,
|
||||
ActReqMyPho,
|
||||
"BT_CREATE",Txt_Upload_photo);
|
||||
}
|
||||
else // I am not logged
|
||||
{
|
||||
/* Log in */
|
||||
Hlp_ShowRowHelpWhatWouldYouLikeToDo (Txt_Log_in,
|
||||
ActFrmLogIn,
|
||||
"BT_CONFIRM",Txt_Log_in);
|
||||
|
||||
/* Sign up */
|
||||
sprintf (Gbl.Title,Txt_New_on_PLATFORM_Sign_up,
|
||||
Cfg_PLATFORM_SHORT_NAME);
|
||||
Hlp_ShowRowHelpWhatWouldYouLikeToDo (Gbl.Title,
|
||||
ActFrmUsrAcc,
|
||||
"BT_CREATE",Txt_Create_account);
|
||||
}
|
||||
|
||||
/* End table */
|
||||
Lay_EndRoundFrameTable ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*************************** Show contextual help ****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Hlp_ShowRowHelpWhatWouldYouLikeToDo (const char *Description,
|
||||
Act_Action_t Action,
|
||||
const char *ClassButton,
|
||||
const char *TxtButton)
|
||||
{
|
||||
/***** Description *****/
|
||||
fprintf (Gbl.F.Out,"<tr>"
|
||||
"<td class=\"DAT RIGHT_MIDDLE\">"
|
||||
"%s:"
|
||||
"</td>",
|
||||
Description);
|
||||
|
||||
/***** Button *****/
|
||||
fprintf (Gbl.F.Out,"<td class=\"LEFT_MIDDLE\">");
|
||||
Act_FormStart (Action);
|
||||
fprintf (Gbl.F.Out,"<button type=\"submit\" class=\"BT_SUBMIT_INLINE %s\">"
|
||||
"%s"
|
||||
"</button>",
|
||||
ClassButton,TxtButton);
|
||||
Act_FormEnd ();
|
||||
fprintf (Gbl.F.Out,"</td>"
|
||||
"</tr>");
|
||||
}
|
|
@ -1,9 +1,9 @@
|
|||
// swad_bool.h: bool type
|
||||
// swad_help.c: contextual help to enhance usability
|
||||
|
||||
#ifndef _SWAD_BOO
|
||||
#define _SWAD_BOO
|
||||
#ifndef _SWAD_HLP
|
||||
#define _SWAD_HLP
|
||||
/*
|
||||
SWAD (Shared Workspace At a Distance),
|
||||
SWAD (Shared Workspace At a Distance in Spanish),
|
||||
is a web platform developed at the University of Granada (Spain),
|
||||
and used to support university teaching.
|
||||
|
||||
|
@ -24,12 +24,23 @@
|
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/*****************************************************************************/
|
||||
/******************************* Public types ********************************/
|
||||
/********************************** Headers **********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#ifndef BOOL_TYPE
|
||||
#define BOOL_TYPE
|
||||
typedef enum {false=0, true=1} bool;
|
||||
#endif
|
||||
// #include "swad_user.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************** Public types *******************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************************** Public prototypes ****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Hlp_ShowHelpWhatWouldYouLikeToDo (void);
|
||||
|
||||
#endif
|
|
@ -27,7 +27,8 @@
|
|||
/********************************* Headers ***********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#include "swad_bool.h"
|
||||
#include <stdbool.h> // For boolean type
|
||||
|
||||
#include "swad_constant.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -83,7 +83,7 @@ int main (int argc, char *argv[])
|
|||
"<head><title>%s</title></head>"
|
||||
"<body><br /><br /><br /><br />"
|
||||
"<h1 class=\"CENTER_MIDDLE\">"
|
||||
"%s está parado por mantenimiento durante pocos minutos"
|
||||
"%s está parado por mantenimiento durante unos minutos"
|
||||
"</h1>"
|
||||
"<h2 class=\"CENTER_MIDDLE\">"
|
||||
"Intente acceder más tarde, por favor."
|
||||
|
|
|
@ -27,7 +27,8 @@
|
|||
/********************************* Headers ***********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#include "swad_bool.h"
|
||||
#include <stdbool.h> // For boolean type
|
||||
|
||||
#include "swad_file_browser.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -27,10 +27,9 @@
|
|||
/********************************* Headers ***********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#include <stdbool.h> // For boolean type
|
||||
#include <stddef.h> // For size_t
|
||||
|
||||
#include "swad_bool.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************** Public types and constants ***********************/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -29,11 +29,11 @@ TODO: Check if web service is called from an authorized IP.
|
|||
/*****************************************************************************/
|
||||
|
||||
#include <linux/stddef.h> // For NULL
|
||||
#include <stdbool.h> // For boolean type
|
||||
#include <stdio.h> // For fprintf
|
||||
#include <stdlib.h> // For calloc, free
|
||||
#include <string.h>
|
||||
|
||||
#include "swad_bool.h"
|
||||
#include "swad_config.h"
|
||||
#include "swad_constant.h"
|
||||
#include "swad_cryptography.h"
|
||||
|
|
|
@ -26,10 +26,10 @@
|
|||
/*****************************************************************************/
|
||||
|
||||
#include <linux/stddef.h> // For NULL
|
||||
#include <stdbool.h> // For boolean type
|
||||
#include <stdio.h> // For fprintf, etc.
|
||||
#include <string.h>
|
||||
|
||||
#include "swad_bool.h"
|
||||
#include "swad_config.h"
|
||||
#include "swad_database.h"
|
||||
#include "swad_global.h"
|
||||
|
|
216
swad_privacy.c
Normal file
|
@ -0,0 +1,216 @@
|
|||
// swad_privacy.c: users' photo and public profile visibility
|
||||
|
||||
/*
|
||||
SWAD (Shared Workspace At a Distance),
|
||||
is a web platform developed at the University of Granada (Spain),
|
||||
and used to support university teaching.
|
||||
|
||||
This file is part of SWAD core.
|
||||
Copyright (C) 1999-2015 Antonio Cañas Vargas
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/*****************************************************************************/
|
||||
/********************************* Headers ***********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "swad_action.h"
|
||||
#include "swad_global.h"
|
||||
#include "swad_parameter.h"
|
||||
#include "swad_privacy.h"
|
||||
#include "swad_theme.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
/************** External global variables from others modules ****************/
|
||||
/*****************************************************************************/
|
||||
|
||||
extern struct Globals Gbl;
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/***** Visibility (who can see user's photo or public profile) *****/
|
||||
const char *Pri_VisibilityDB[Pri_NUM_OPTIONS_PRIVACY] =
|
||||
{
|
||||
"user", // Pri_VISIBILITY_USER
|
||||
"course", // Pri_VISIBILITY_COURSE
|
||||
"system", // Pri_VISIBILITY_SYSTEM
|
||||
"world", // Pri_VISIBILITY_WORLD
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** Private constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** Private prototypes ****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Pri_PutFormVisibility (const char *TxtLabel,Act_Action_t Action,
|
||||
Pri_Visibility_t CurrentVisibilityInDB);
|
||||
|
||||
/*****************************************************************************/
|
||||
/*************** Put a link to the action to edit my privacy *****************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Pri_PutLinkToChangeMyPrivacy (void)
|
||||
{
|
||||
extern const char *Txt_Privacy;
|
||||
|
||||
/***** Link to edit my privacy *****/
|
||||
Act_PutContextualLink (ActEdiPri,NULL,"padlock",Txt_Privacy);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************* Edit my privacy *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Pri_EditMyPrivacy (void)
|
||||
{
|
||||
extern const char *Txt_Privacy;
|
||||
extern const char *Txt_Photo;
|
||||
extern const char *Txt_Public_profile;
|
||||
|
||||
/***** Start table *****/
|
||||
Lay_StartRoundFrameTable (NULL,2,Txt_Privacy);
|
||||
|
||||
/***** Edit photo visibility *****/
|
||||
Pri_PutFormVisibility (Txt_Photo,ActChgPriPho,
|
||||
Gbl.Usrs.Me.UsrDat.PhotoVisibility);
|
||||
|
||||
/***** Edit public profile visibility *****/
|
||||
Pri_PutFormVisibility (Txt_Public_profile,ActChgPriPrf,
|
||||
Gbl.Usrs.Me.UsrDat.ProfileVisibility);
|
||||
|
||||
/***** End table *****/
|
||||
Lay_EndRoundFrameTable ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************** Select photo visibility **************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Pri_PutFormVisibility (const char *TxtLabel,Act_Action_t Action,
|
||||
Pri_Visibility_t CurrentVisibilityInDB)
|
||||
{
|
||||
extern const char *The_ClassForm[The_NUM_THEMES];
|
||||
extern const char *Txt_PRIVACY_OPTIONS[Pri_NUM_OPTIONS_PRIVACY];
|
||||
Pri_Visibility_t Visibility;
|
||||
|
||||
/***** Select visibility *****/
|
||||
fprintf (Gbl.F.Out,"<tr>"
|
||||
"<td class=\"%s RIGHT_TOP\">"
|
||||
"%s:"
|
||||
"</td>"
|
||||
"<td class=\"LEFT_TOP\">",
|
||||
The_ClassForm[Gbl.Prefs.Theme],TxtLabel);
|
||||
|
||||
/***** Form with list of options *****/
|
||||
Act_FormStart (Action);
|
||||
fprintf (Gbl.F.Out,"<ul class=\"LIST_LEFT\">");
|
||||
for (Visibility = (Pri_Visibility_t) 0;
|
||||
Visibility < Pri_NUM_OPTIONS_PRIVACY;
|
||||
Visibility++)
|
||||
{
|
||||
fprintf (Gbl.F.Out,"<li class=\"DAT\">"
|
||||
"<input type=\"radio\" name=\"Visibility\" value=\"%u\"",
|
||||
(unsigned) Visibility);
|
||||
if (Visibility == CurrentVisibilityInDB)
|
||||
fprintf (Gbl.F.Out," checked=\"checked\"");
|
||||
fprintf (Gbl.F.Out," onclick=\"javascript:document.getElementById('%s').submit();\" />"
|
||||
"%s"
|
||||
"</li>",
|
||||
Gbl.FormId,Txt_PRIVACY_OPTIONS[Visibility]);
|
||||
}
|
||||
|
||||
/***** End of list and form *****/
|
||||
fprintf (Gbl.F.Out,"</ul>");
|
||||
Act_FormEnd ();
|
||||
fprintf (Gbl.F.Out,"</td>"
|
||||
"</tr>");
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************ Get visibility from string *************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
Pri_Visibility_t Pri_GetVisibilityFromStr (const char *Str)
|
||||
{
|
||||
Pri_Visibility_t Visibility;
|
||||
|
||||
for (Visibility = (Pri_Visibility_t) 0;
|
||||
Visibility < Pri_NUM_OPTIONS_PRIVACY;
|
||||
Visibility++)
|
||||
if (!strcasecmp (Str,Pri_VisibilityDB[Visibility]))
|
||||
return Visibility;
|
||||
|
||||
return Pri_VISIBILITY_DEFAULT;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/**************** Get parameter with visibility from form ********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
bool Pri_GetParamVisibility (void)
|
||||
{
|
||||
char UnsignedStr[10+1];
|
||||
unsigned UnsignedNum;
|
||||
|
||||
Par_GetParToText ("Visibility",UnsignedStr,10);
|
||||
if (UnsignedStr[0])
|
||||
{
|
||||
if (sscanf (UnsignedStr,"%u",&UnsignedNum) != 1)
|
||||
Lay_ShowErrorAndExit ("Visibility is missing.");
|
||||
if (UnsignedNum >= Pri_NUM_OPTIONS_PRIVACY)
|
||||
Lay_ShowErrorAndExit ("Visibility is missing.");
|
||||
return (Pri_Visibility_t) UnsignedNum;
|
||||
}
|
||||
return Pri_VISIBILITY_DEFAULT;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*********** Check if user's photo of public profile can be shown ************/
|
||||
/*****************************************************************************/
|
||||
// Returns true if it can be shown and false if not.
|
||||
|
||||
bool Pri_ShowIsAllowed (Pri_Visibility_t Visibility,long OtherUsrCod)
|
||||
{
|
||||
bool ICanSee = false;
|
||||
|
||||
/***** Check if I can see the other's photo *****/
|
||||
switch (Visibility)
|
||||
{
|
||||
case Pri_VISIBILITY_USER: // Only visible by me and my teachers if I am a student or me and my students if I am a teacher
|
||||
if (Gbl.Usrs.Me.UsrDat.UsrCod == OtherUsrCod || // It's me, I always can see my things
|
||||
Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM) // A system admin always can see any user's things
|
||||
ICanSee = true;
|
||||
else
|
||||
ICanSee = Usr_CheckIfUsrSharesAnyOfMyCrsWithDifferentRole (OtherUsrCod); // Both users share the same course but whit different role
|
||||
break;
|
||||
case Pri_VISIBILITY_COURSE: // Visible by users sharing courses with me
|
||||
ICanSee = Usr_CheckIfUsrSharesAnyOfMyCrs (OtherUsrCod); // Both users share the same course
|
||||
break;
|
||||
case Pri_VISIBILITY_SYSTEM: // Visible by any user logged in platform
|
||||
ICanSee = Gbl.Usrs.Me.Logged;
|
||||
break;
|
||||
case Pri_VISIBILITY_WORLD: // Public, visible by everyone, even unlogged visitors
|
||||
ICanSee = true;
|
||||
break;
|
||||
}
|
||||
|
||||
return ICanSee;
|
||||
}
|
|
@ -795,7 +795,7 @@ static void Prf_GetFirstClickFromLogAndStoreAsUsrFigure (long UsrCod)
|
|||
|
||||
/***** Get first click from log table *****/
|
||||
sprintf (Query,"SELECT DATE_FORMAT("
|
||||
"(SELECT MIN(ClickTime) FROM log WHERE UsrCod='%ld')"
|
||||
"(SELECT MIN(ClickTime) FROM log_full WHERE UsrCod='%ld')"
|
||||
",'%%Y%%m%%d%%H%%i%%S')",
|
||||
UsrCod);
|
||||
if (DB_QuerySELECT (Query,&mysql_res,"can not get user's first click"))
|
||||
|
@ -855,7 +855,7 @@ static void Prf_GetNumClicksAndStoreAsUsrFigure (long UsrCod)
|
|||
Prf_ResetUsrFigures (&UsrFigures);
|
||||
|
||||
/***** Get number of clicks from database *****/
|
||||
sprintf (Query,"SELECT COUNT(*) FROM log WHERE UsrCod='%ld'",
|
||||
sprintf (Query,"SELECT COUNT(*) FROM log_full WHERE UsrCod='%ld'",
|
||||
UsrCod);
|
||||
UsrFigures.NumClicks = (long) DB_QueryCOUNT (Query,"can not get number of clicks");
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
/********************************* Headers ***********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#include "swad_bool.h"
|
||||
#include <stdbool.h> // For boolean type
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** Public constants ******************************/
|
||||
|
|
|
@ -310,8 +310,8 @@ void Sta_LogAccess (const char *Comments)
|
|||
Gbl.Usrs.Me.LoggedRole;
|
||||
|
||||
/***** Insert access into database *****/
|
||||
/* Log access in historical log */
|
||||
sprintf (Query,"INSERT INTO log (ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,"
|
||||
/* Log access in historical log (log_full) */
|
||||
sprintf (Query,"INSERT INTO log_full (ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,"
|
||||
"Role,ClickTime,TimeToGenerate,TimeToSend,IP)"
|
||||
" VALUES ('%ld','%ld','%ld','%ld','%ld','%ld','%ld',"
|
||||
"'%u',NOW(),'%ld','%ld','%s')",
|
||||
|
@ -329,13 +329,13 @@ void Sta_LogAccess (const char *Comments)
|
|||
if (Gbl.WebService.IsWebService)
|
||||
{
|
||||
if (mysql_query (&Gbl.mysql,Query))
|
||||
Svc_Exit ("can not log access (historical)");
|
||||
Svc_Exit ("can not log access (full)");
|
||||
LogCod = (long) mysql_insert_id (&Gbl.mysql);
|
||||
}
|
||||
else
|
||||
LogCod = DB_QueryINSERTandReturnCode (Query,"can not log access (historical)");
|
||||
LogCod = DB_QueryINSERTandReturnCode (Query,"can not log access (full)");
|
||||
|
||||
/* Log access in recent log */
|
||||
/* Log access in recent log (log_recent) */
|
||||
sprintf (Query,"INSERT INTO log_recent (LogCod,ActCod,CtyCod,InsCod,CtrCod,DegCod,CrsCod,UsrCod,"
|
||||
"Role,ClickTime,TimeToGenerate,TimeToSend,IP)"
|
||||
" VALUES ('%ld','%ld','%ld','%ld','%ld','%ld','%ld','%ld',"
|
||||
|
@ -874,7 +874,7 @@ static void Sta_ShowHits (Sta_GlobalOrCourseAccesses_t GlobalOrCourse)
|
|||
/***** Set table where to find depending on initial date *****/
|
||||
// If initial day is older than current day minus Cfg_DAYS_IN_RECENT_LOG, then use recent log table, else use historic log table */
|
||||
LogTable = (Dat_GetNumDaysBetweenDates (&Gbl.DateRange.DateIni,&Gbl.Now.Date) <= Cfg_DAYS_IN_RECENT_LOG) ? "log_recent" :
|
||||
"log";
|
||||
"log_full";
|
||||
|
||||
/***** Get the type of stat of clicks ******/
|
||||
Par_GetParToText ("GroupedOrDetailed",UnsignedStr,10);
|
||||
|
|
|
@ -27,8 +27,8 @@
|
|||
/********************************* Headers **********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#include <stdbool.h> // For boolean type
|
||||
#include <stdio.h> // For FILE
|
||||
#include "swad_bool.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** Public constants *****************************/
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include <linux/stddef.h> // For NULL
|
||||
#include <locale.h> // For setlocale, LC_NUMERIC...
|
||||
#include <mysql/mysql.h> // To access MySQL databases
|
||||
#include <stdbool.h> // For boolean type
|
||||
#include <stdio.h> // For fprintf, etc.
|
||||
#include <stdlib.h> // For exit, system, malloc, free, etc
|
||||
#include <string.h> // For string functions
|
||||
|
@ -37,7 +38,6 @@
|
|||
#include <sys/types.h> // For mkdir
|
||||
|
||||
#include "swad_action.h"
|
||||
#include "swad_bool.h"
|
||||
#include "swad_database.h"
|
||||
#include "swad_global.h"
|
||||
#include "swad_ID.h"
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
/********************************** Headers **********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#include "swad_bool.h"
|
||||
#include <stdbool.h> // For boolean type
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************* Public constants and types ************************/
|
||||
|
|