diff --git a/icon/adm16x16.gif b/icon/adm16x16.gif new file mode 100644 index 00000000..1ea83d44 Binary files /dev/null and b/icon/adm16x16.gif differ diff --git a/icon/click16x16.gif b/icon/click16x16.gif new file mode 100644 index 00000000..55a58a70 Binary files /dev/null and b/icon/click16x16.gif differ diff --git a/icon/follow64x64.gif b/icon/follow64x64.gif new file mode 100644 index 00000000..78741846 Binary files /dev/null and b/icon/follow64x64.gif differ diff --git a/icon/gnusocial16x16.gif b/icon/gnusocial16x16.gif new file mode 100644 index 00000000..bba0ee10 Binary files /dev/null and b/icon/gnusocial16x16.gif differ diff --git a/icon/iconset/awesome/action64x64/follow64x64.gif b/icon/iconset/awesome/action64x64/follow64x64.gif new file mode 100644 index 00000000..78741846 Binary files /dev/null and b/icon/iconset/awesome/action64x64/follow64x64.gif differ diff --git a/icon/identica16x16.gif b/icon/identica16x16.gif new file mode 100644 index 00000000..88b89b39 Binary files /dev/null and b/icon/identica16x16.gif differ diff --git a/icon/orcid16x16.gif b/icon/orcid16x16.gif new file mode 100644 index 00000000..49f872df Binary files /dev/null and b/icon/orcid16x16.gif differ diff --git a/icon/researcherid16x16.gif b/icon/researcherid16x16.gif new file mode 100644 index 00000000..7100e35b Binary files /dev/null and b/icon/researcherid16x16.gif differ diff --git a/icon/usrs16x16.gif b/icon/usrs16x16.gif new file mode 100644 index 00000000..5092ef1b Binary files /dev/null and b/icon/usrs16x16.gif differ diff --git a/sql/cambios.sql b/sql/cambios.sql index eb1f7f8a..ee8d597f 100644 --- a/sql/cambios.sql +++ b/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; + + diff --git a/swad_ID.c b/swad_ID.c index 3eb25979..d073c52c 100644 --- a/swad_ID.c +++ b/swad_ID.c @@ -26,11 +26,11 @@ /*****************************************************************************/ #include // For isalnum, isdigit, etc. +#include // For boolean type #include // For exit, system, malloc, free, rand, etc. #include // For string functions #include "swad_account.h" -#include "swad_bool.h" #include "swad_database.h" #include "swad_global.h" #include "swad_ID.h" diff --git a/swad_account.h b/swad_account.h index 64ac1e39..80c02c45 100644 --- a/swad_account.h +++ b/swad_account.h @@ -27,7 +27,8 @@ /********************************** Headers **********************************/ /*****************************************************************************/ -#include "swad_bool.h" +#include // For boolean type + #include "swad_constant.h" #include "swad_user.h" diff --git a/swad_action.h b/swad_action.h index b0f5b1f3..edab4d8f 100644 --- a/swad_action.h +++ b/swad_action.h @@ -27,7 +27,8 @@ /********************************** Headers **********************************/ /*****************************************************************************/ -#include "swad_bool.h" +#include // For boolean type + #include "swad_text.h" /*****************************************************************************/ diff --git a/swad_banner.c b/swad_banner.c index 2bc6f2ca..5ac6c13a 100644 --- a/swad_banner.c +++ b/swad_banner.c @@ -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 diff --git a/swad_centre.c b/swad_centre.c index e01b2fcb..3e1d29e9 100644 --- a/swad_centre.c +++ b/swad_centre.c @@ -26,10 +26,10 @@ /*****************************************************************************/ #include // For NULL +#include // For boolean type #include // For calloc #include // For string functions -#include "swad_bool.h" #include "swad_centre.h" #include "swad_constant.h" #include "swad_database.h" diff --git a/swad_changelog.h b/swad_changelog.h index 8e77f3fe..2f9f27ac 100644 --- a/swad_changelog.h +++ b/swad_changelog.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): diff --git a/swad_chat.c b/swad_chat.c index e256e7fa..2648420d 100644 --- a/swad_chat.c +++ b/swad_chat.c @@ -26,10 +26,10 @@ /*****************************************************************************/ #include // For NULL +#include // For boolean type #include // For sprintf #include -#include "swad_bool.h" #include "swad_chat.h" #include "swad_config.h" #include "swad_database.h" diff --git a/swad_config.c b/swad_config.c index aee47de1..dc69612c 100644 --- a/swad_config.c +++ b/swad_config.c @@ -25,10 +25,10 @@ /*********************************** Headers *********************************/ /*****************************************************************************/ -#include // For fseek, ftell... -#include // For strcasecmp... +#include // For boolean type +#include // For fseek, ftell... +#include // For strcasecmp... -#include "swad_bool.h" #include "swad_config.h" #include "swad_global.h" #include "swad_layout.h" diff --git a/swad_country.h b/swad_country.h index ab2fe81f..0dc611e1 100644 --- a/swad_country.h +++ b/swad_country.h @@ -27,8 +27,9 @@ /********************************* Headers ***********************************/ /*****************************************************************************/ +#include // For boolean type + #include "swad_action.h" -#include "swad_bool.h" #include "swad_role.h" #include "swad_text.h" diff --git a/swad_course.h b/swad_course.h index 43a1336c..15c16bfc 100644 --- a/swad_course.h +++ b/swad_course.h @@ -28,8 +28,8 @@ /*****************************************************************************/ #include // To access MySQL databases +#include // For boolean type -#include "swad_bool.h" #include "swad_degree.h" /*****************************************************************************/ diff --git a/swad_date.h b/swad_date.h index 06b705e2..4a225f87 100644 --- a/swad_date.h +++ b/swad_date.h @@ -27,11 +27,10 @@ /********************************* Headers ***********************************/ /*****************************************************************************/ -#include // For FILE * +#include // For boolean type +#include // For FILE * #include -#include "swad_bool.h" - /*****************************************************************************/ /***************************** Public constants ******************************/ /*****************************************************************************/ diff --git a/swad_degree.c b/swad_degree.c index c1ab2e80..3813064f 100644 --- a/swad_degree.c +++ b/swad_degree.c @@ -27,12 +27,12 @@ #include // For isprint, isspace, etc. #include // For NULL +#include // For boolean type #include // For fprintf, etc. #include // For exit, system, calloc, free, etc. #include // For string functions #include // To access MySQL databases -#include "swad_bool.h" #include "swad_changelog.h" #include "swad_config.h" #include "swad_database.h" diff --git a/swad_department.c b/swad_department.c index 163ee02e..4697ff0d 100644 --- a/swad_department.c +++ b/swad_department.c @@ -26,10 +26,10 @@ /*****************************************************************************/ #include // For NULL +#include // For boolean type #include // For calloc #include // For string functions -#include "swad_bool.h" #include "swad_constant.h" #include "swad_database.h" #include "swad_department.h" diff --git a/swad_exam.h b/swad_exam.h index 373a6770..8abf0a2d 100644 --- a/swad_exam.h +++ b/swad_exam.h @@ -27,7 +27,7 @@ /********************************* Headers ***********************************/ /*****************************************************************************/ -#include "swad_bool.h" +#include // For boolean type /*****************************************************************************/ /************************** Public types and constants ***********************/ diff --git a/swad_file.h b/swad_file.h index f4fc9471..fd512a67 100644 --- a/swad_file.h +++ b/swad_file.h @@ -27,9 +27,8 @@ /********************************* Headers ***********************************/ /*****************************************************************************/ -#include // For FILE - -#include "swad_bool.h" +#include // For boolean type +#include // For FILE /*****************************************************************************/ /************************** Public types and constants ***********************/ diff --git a/swad_file_browser.c b/swad_file_browser.c index 6db692e5..02793299 100644 --- a/swad_file_browser.c +++ b/swad_file_browser.c @@ -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 diff --git a/swad_follow.c b/swad_follow.c index 3c14ffc9..a3903d82 100644 --- a/swad_follow.c +++ b/swad_follow.c @@ -25,10 +25,10 @@ /*********************************** Headers *********************************/ /*****************************************************************************/ +#include // For boolean type #include // For sprintf #include // For string functions -#include "swad_bool.h" #include "swad_database.h" #include "swad_follow.h" #include "swad_global.h" diff --git a/swad_help.c b/swad_help.c new file mode 100644 index 00000000..71f61eb2 --- /dev/null +++ b/swad_help.c @@ -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 . +*/ +/*****************************************************************************/ +/*********************************** Headers *********************************/ +/*****************************************************************************/ + +#include // 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
%s
%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,"" + "" + "%s:" + "", + Description); + + /***** Button *****/ + fprintf (Gbl.F.Out,""); + Act_FormStart (Action); + fprintf (Gbl.F.Out,"", + ClassButton,TxtButton); + Act_FormEnd (); + fprintf (Gbl.F.Out,"" + ""); + } diff --git a/swad_bool.h b/swad_help.h similarity index 51% rename from swad_bool.h rename to swad_help.h index 4ba0007d..0888a9e2 100644 --- a/swad_bool.h +++ b/swad_help.h @@ -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 . */ /*****************************************************************************/ -/******************************* 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 diff --git a/swad_info.h b/swad_info.h index 81c8f1f4..90364c35 100644 --- a/swad_info.h +++ b/swad_info.h @@ -27,7 +27,8 @@ /********************************* Headers ***********************************/ /*****************************************************************************/ -#include "swad_bool.h" +#include // For boolean type + #include "swad_constant.h" /*****************************************************************************/ diff --git a/swad_main.c b/swad_main.c index 38519c43..ee33d46c 100644 --- a/swad_main.c +++ b/swad_main.c @@ -83,7 +83,7 @@ int main (int argc, char *argv[]) "%s" "



" "

" - "%s está parado por mantenimiento durante pocos minutos" + "%s está parado por mantenimiento durante unos minutos" "

" "

" "Intente acceder más tarde, por favor." diff --git a/swad_mark.h b/swad_mark.h index bd586c6d..e0235f33 100644 --- a/swad_mark.h +++ b/swad_mark.h @@ -27,7 +27,8 @@ /********************************* Headers ***********************************/ /*****************************************************************************/ -#include "swad_bool.h" +#include // For boolean type + #include "swad_file_browser.h" /*****************************************************************************/ diff --git a/swad_parameter.h b/swad_parameter.h index 98918543..46dcc998 100644 --- a/swad_parameter.h +++ b/swad_parameter.h @@ -27,9 +27,8 @@ /********************************* Headers ***********************************/ /*****************************************************************************/ -#include // For size_t - -#include "swad_bool.h" +#include // For boolean type +#include // For size_t /*****************************************************************************/ /************************** Public types and constants ***********************/ diff --git a/swad_plugin.c b/swad_plugin.c index 353ebc40..edac08ff 100644 --- a/swad_plugin.c +++ b/swad_plugin.c @@ -29,11 +29,11 @@ TODO: Check if web service is called from an authorized IP. /*****************************************************************************/ #include // For NULL +#include // For boolean type #include // For fprintf #include // For calloc, free #include -#include "swad_bool.h" #include "swad_config.h" #include "swad_constant.h" #include "swad_cryptography.h" diff --git a/swad_preference.c b/swad_preference.c index 1ef1ffb8..92d93ff3 100644 --- a/swad_preference.c +++ b/swad_preference.c @@ -26,10 +26,10 @@ /*****************************************************************************/ #include // For NULL +#include // For boolean type #include // For fprintf, etc. #include -#include "swad_bool.h" #include "swad_config.h" #include "swad_database.h" #include "swad_global.h" diff --git a/swad_privacy.c b/swad_privacy.c new file mode 100644 index 00000000..a582f8a0 --- /dev/null +++ b/swad_privacy.c @@ -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 . +*/ +/*****************************************************************************/ +/********************************* Headers ***********************************/ +/*****************************************************************************/ + +#include + +#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,"" + "" + "%s:" + "" + "", + The_ClassForm[Gbl.Prefs.Theme],TxtLabel); + + /***** Form with list of options *****/ + Act_FormStart (Action); + fprintf (Gbl.F.Out,"
    "); + for (Visibility = (Pri_Visibility_t) 0; + Visibility < Pri_NUM_OPTIONS_PRIVACY; + Visibility++) + { + fprintf (Gbl.F.Out,"
  • " + "" + "%s" + "
  • ", + Gbl.FormId,Txt_PRIVACY_OPTIONS[Visibility]); + } + + /***** End of list and form *****/ + fprintf (Gbl.F.Out,"
"); + Act_FormEnd (); + fprintf (Gbl.F.Out,"" + ""); + } + +/*****************************************************************************/ +/************************ 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; + } diff --git a/swad_profile.c b/swad_profile.c index 6f859256..162bf905 100644 --- a/swad_profile.c +++ b/swad_profile.c @@ -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"); diff --git a/swad_scope.h b/swad_scope.h index a42a901e..c14a2bd5 100644 --- a/swad_scope.h +++ b/swad_scope.h @@ -27,7 +27,7 @@ /********************************* Headers ***********************************/ /*****************************************************************************/ -#include "swad_bool.h" +#include // For boolean type /*****************************************************************************/ /***************************** Public constants ******************************/ diff --git a/swad_statistic.c b/swad_statistic.c index a4e92f65..bb00d616 100644 --- a/swad_statistic.c +++ b/swad_statistic.c @@ -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); diff --git a/swad_string.h b/swad_string.h index ee557b4f..795b9ad0 100644 --- a/swad_string.h +++ b/swad_string.h @@ -27,8 +27,8 @@ /********************************* Headers **********************************/ /*****************************************************************************/ -#include // For FILE -#include "swad_bool.h" +#include // For boolean type +#include // For FILE /*****************************************************************************/ /***************************** Public constants *****************************/ diff --git a/swad_test.c b/swad_test.c index c0679f4b..30967a58 100644 --- a/swad_test.c +++ b/swad_test.c @@ -30,6 +30,7 @@ #include // For NULL #include // For setlocale, LC_NUMERIC... #include // To access MySQL databases +#include // For boolean type #include // For fprintf, etc. #include // For exit, system, malloc, free, etc #include // For string functions @@ -37,7 +38,6 @@ #include // For mkdir #include "swad_action.h" -#include "swad_bool.h" #include "swad_database.h" #include "swad_global.h" #include "swad_ID.h" diff --git a/swad_timetable.h b/swad_timetable.h index ea378363..9a088c5c 100644 --- a/swad_timetable.h +++ b/swad_timetable.h @@ -27,7 +27,7 @@ /********************************** Headers **********************************/ /*****************************************************************************/ -#include "swad_bool.h" +#include // For boolean type /*****************************************************************************/ /************************* Public constants and types ************************/