Version 15.14

This commit is contained in:
Antonio Cañas Vargas 2015-10-16 02:24:29 +02:00
parent 1691cb8fc5
commit 8bc2041f38
42 changed files with 914 additions and 51 deletions

BIN
icon/adm16x16.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 B

BIN
icon/click16x16.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 B

BIN
icon/follow64x64.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 586 B

BIN
icon/gnusocial16x16.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 582 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 586 B

BIN
icon/identica16x16.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 530 B

BIN
icon/orcid16x16.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 B

BIN
icon/researcherid16x16.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 619 B

BIN
icon/usrs16x16.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 B

View File

@ -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;

View File

@ -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"

View File

@ -27,7 +27,8 @@
/********************************** Headers **********************************/
/*****************************************************************************/
#include "swad_bool.h"
#include <stdbool.h> // For boolean type
#include "swad_constant.h"
#include "swad_user.h"

View File

@ -27,7 +27,8 @@
/********************************** Headers **********************************/
/*****************************************************************************/
#include "swad_bool.h"
#include <stdbool.h> // For boolean type
#include "swad_text.h"
/*****************************************************************************/

View File

@ -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

View File

@ -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"

View File

@ -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):

View File

@ -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"

View File

@ -25,10 +25,10 @@
/*********************************** Headers *********************************/
/*****************************************************************************/
#include <stdio.h> // For fseek, ftell...
#include <string.h> // For strcasecmp...
#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"

View File

@ -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"

View File

@ -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"
/*****************************************************************************/

View File

@ -27,11 +27,10 @@
/********************************* Headers ***********************************/
/*****************************************************************************/
#include <stdio.h> // For FILE *
#include <stdbool.h> // For boolean type
#include <stdio.h> // For FILE *
#include <time.h>
#include "swad_bool.h"
/*****************************************************************************/
/***************************** Public constants ******************************/
/*****************************************************************************/

View File

@ -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"

View File

@ -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"

View File

@ -27,7 +27,7 @@
/********************************* Headers ***********************************/
/*****************************************************************************/
#include "swad_bool.h"
#include <stdbool.h> // For boolean type
/*****************************************************************************/
/************************** Public types and constants ***********************/

View File

@ -27,9 +27,8 @@
/********************************* Headers ***********************************/
/*****************************************************************************/
#include <stdio.h> // For FILE
#include "swad_bool.h"
#include <stdbool.h> // For boolean type
#include <stdio.h> // For FILE
/*****************************************************************************/
/************************** Public types and constants ***********************/

View File

@ -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

View File

@ -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
View 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>");
}

View File

@ -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

View File

@ -27,7 +27,8 @@
/********************************* Headers ***********************************/
/*****************************************************************************/
#include "swad_bool.h"
#include <stdbool.h> // For boolean type
#include "swad_constant.h"
/*****************************************************************************/

View File

@ -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&aacute; parado por mantenimiento durante pocos minutos"
"%s est&aacute; parado por mantenimiento durante unos minutos"
"</h1>"
"<h2 class=\"CENTER_MIDDLE\">"
"Intente acceder m&aacute;s tarde, por favor."

View File

@ -27,7 +27,8 @@
/********************************* Headers ***********************************/
/*****************************************************************************/
#include "swad_bool.h"
#include <stdbool.h> // For boolean type
#include "swad_file_browser.h"
/*****************************************************************************/

View File

@ -27,9 +27,8 @@
/********************************* Headers ***********************************/
/*****************************************************************************/
#include <stddef.h> // For size_t
#include "swad_bool.h"
#include <stdbool.h> // For boolean type
#include <stddef.h> // For size_t
/*****************************************************************************/
/************************** Public types and constants ***********************/

View File

@ -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"

View File

@ -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
View 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;
}

View File

@ -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");

View File

@ -27,7 +27,7 @@
/********************************* Headers ***********************************/
/*****************************************************************************/
#include "swad_bool.h"
#include <stdbool.h> // For boolean type
/*****************************************************************************/
/***************************** Public constants ******************************/

View File

@ -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);

View File

@ -27,8 +27,8 @@
/********************************* Headers **********************************/
/*****************************************************************************/
#include <stdio.h> // For FILE
#include "swad_bool.h"
#include <stdbool.h> // For boolean type
#include <stdio.h> // For FILE
/*****************************************************************************/
/***************************** Public constants *****************************/

View File

@ -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"

View File

@ -27,7 +27,7 @@
/********************************** Headers **********************************/
/*****************************************************************************/
#include "swad_bool.h"
#include <stdbool.h> // For boolean type
/*****************************************************************************/
/************************* Public constants and types ************************/