Version 15.44.3

This commit is contained in:
Antonio Cañas Vargas 2015-11-23 16:34:58 +01:00
parent 5deedc39f7
commit 300e667c19
4 changed files with 64 additions and 43 deletions

View File

@ -43,7 +43,8 @@ CREATE TABLE IF NOT EXISTS admin (
UsrCod INT NOT NULL,
Scope ENUM('Sys','Ins','Ctr','Deg') NOT NULL,
Cod INT NOT NULL,
UNIQUE INDEX(UsrCod,Scope,Cod));
UNIQUE INDEX(UsrCod,Scope,Cod),
INDEX(Scope,Cod));
--
-- Table ann_seen: stores users who have seen global announcements
--

View File

@ -111,11 +111,15 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 15.44.2 (2015/11/23)"
#define Log_PLATFORM_VERSION "SWAD 15.44.3 (2015/11/23)"
// 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.44.3: Nov 23, 2015 Improvement of speed in list of administrators. (187839 lines)
1 change necessary in database:
ALTER TABLE admin ADD INDEX (Scope,Cod);
Version 15.44.2: Nov 23, 2015 Improvement of speed in list of administrators. (187819 lines)
Version 15.44.1: Nov 23, 2015 Fixed bug in list of administrators. (187809 lines)
Version 15.44: Nov 23, 2015 Changes in list of institution, centre and degree administrators. (187788 lines)

View File

@ -171,7 +171,7 @@ mysql> DESCRIBE admin;
"UsrCod INT NOT NULL,"
"Scope ENUM('Sys','Ins','Ctr','Deg') NOT NULL,"
"Cod INT NOT NULL,"
"UNIQUE INDEX(UsrCod,Scope,Cod))");
"UNIQUE INDEX(UsrCod,Scope,Cod),INDEX (Scope,Cod))");
/***** Table ann_seen *****/
/*

View File

@ -4159,28 +4159,29 @@ static void Usr_GetAdmsLst (Sco_Scope_t Scope)
break;
case Sco_SCOPE_CTY: // System admins
// and admins of the institutions, centres and degrees in the current country
sprintf (Query,"SELECT UsrCod,'Y',Sex FROM usr_data WHERE UsrCod IN ("
"SELECT UsrCod FROM admin"
" WHERE Scope='Sys'"
" UNION "
"SELECT DISTINCT admin.UsrCod FROM admin,institutions"
sprintf (Query,"SELECT UsrCod,'Y',Sex FROM usr_data"
" WHERE UsrCod IN "
"(SELECT UsrCod FROM admin"
" WHERE Scope='Sys')"
" OR UsrCod IN "
"(SELECT admin.UsrCod FROM admin,institutions"
" WHERE admin.Scope='Ins'"
" AND admin.Cod=institutions.InsCod"
" AND institutions.CtyCod='%ld'"
" UNION "
"SELECT DISTINCT admin.UsrCod FROM admin,centres,institutions"
" AND institutions.CtyCod='%ld')"
" OR UsrCod IN "
"(SELECT admin.UsrCod FROM admin,centres,institutions"
" WHERE admin.Scope='Ctr'"
" AND admin.Cod=centres.CtrCod"
" AND centres.InsCod=institutions.InsCod"
" AND institutions.CtyCod='%ld'"
" UNION "
"SELECT DISTINCT admin.UsrCod FROM admin,degrees,centres,institutions"
" AND institutions.CtyCod='%ld')"
" OR UsrCod IN "
"(SELECT admin.UsrCod FROM admin,degrees,centres,institutions"
" WHERE admin.Scope='Deg'"
" AND admin.Cod=degrees.DegCod"
" AND degrees.CtrCod=centres.CtrCod"
" AND centres.InsCod=institutions.InsCod"
" AND institutions.CtyCod='%ld'"
") ORDER BY Surname1,Surname2,FirstName,UsrCod",
" AND institutions.CtyCod='%ld')"
" ORDER BY Surname1,Surname2,FirstName,UsrCod",
Gbl.CurrentCty.Cty.CtyCod,
Gbl.CurrentCty.Cty.CtyCod,
Gbl.CurrentCty.Cty.CtyCod);
@ -4188,22 +4189,25 @@ static void Usr_GetAdmsLst (Sco_Scope_t Scope)
case Sco_SCOPE_INS: // System admins,
// admins of the current institution,
// and admins of the centres and degrees in the current institution
sprintf (Query,"SELECT UsrCod,'Y',Sex FROM usr_data WHERE UsrCod IN ("
"SELECT DISTINCT UsrCod FROM admin"
" WHERE Scope='Sys' OR "
" (Scope='Ins' AND Cod='%ld')"
" UNION "
"SELECT DISTINCT admin.UsrCod FROM admin,centres"
sprintf (Query,"SELECT UsrCod,'Y',Sex FROM usr_data"
" WHERE UsrCod IN "
"(SELECT UsrCod FROM admin"
" WHERE Scope='Sys')"
" OR UsrCod IN "
"(SELECT UsrCod FROM admin"
" WHERE Scope='Ins' AND Cod='%ld')"
" OR UsrCod IN "
"(SELECT admin.UsrCod FROM admin,centres"
" WHERE admin.Scope='Ctr'"
" AND admin.Cod=centres.CtrCod"
" AND centres.InsCod='%ld'"
" UNION "
"SELECT DISTINCT admin.UsrCod FROM admin,degrees,centres"
" AND centres.InsCod='%ld')"
" OR UsrCod IN "
"(SELECT admin.UsrCod FROM admin,degrees,centres"
" WHERE admin.Scope='Deg'"
" AND admin.Cod=degrees.DegCod"
" AND degrees.CtrCod=centres.CtrCod"
" AND centres.InsCod='%ld'"
") ORDER BY Surname1,Surname2,FirstName,UsrCod",
" AND centres.InsCod='%ld')"
" ORDER BY Surname1,Surname2,FirstName,UsrCod",
Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentIns.Ins.InsCod);
@ -4212,30 +4216,42 @@ static void Usr_GetAdmsLst (Sco_Scope_t Scope)
// admins of the current institution,
// admins and the current centre,
// and admins of the degrees in the current centre
sprintf (Query,"SELECT UsrCod,'Y',Sex FROM usr_data WHERE UsrCod IN ("
"SELECT DISTINCT UsrCod FROM admin"
" WHERE Scope='Sys' OR "
" (Scope='Ins' AND Cod='%ld') OR"
" (Scope='Ctr' AND Cod='%ld')"
" UNION "
"SELECT DISTINCT admin.UsrCod FROM admin,degrees"
sprintf (Query,"SELECT UsrCod,'Y',Sex FROM usr_data"
" WHERE UsrCod IN "
"(SELECT UsrCod FROM admin"
" WHERE Scope='Sys')"
" OR UsrCod IN "
"(SELECT UsrCod FROM admin"
" WHERE Scope='Ins' AND Cod='%ld')"
" OR UsrCod IN "
"(SELECT UsrCod FROM admin"
" WHERE Scope='Ctr' AND Cod='%ld')"
" OR UsrCod IN "
"(SELECT admin.UsrCod FROM admin,degrees"
" WHERE admin.Scope='Deg'"
" AND admin.Cod=degrees.DegCod"
" AND degrees.CtrCod='%ld'"
") ORDER BY Surname1,Surname2,FirstName,UsrCod",
" AND degrees.CtrCod='%ld')"
" ORDER BY Surname1,Surname2,FirstName,UsrCod",
Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentCtr.Ctr.CtrCod,
Gbl.CurrentCtr.Ctr.CtrCod);
break;
case Sco_SCOPE_DEG: // System admins
// and admins of the current institution, centre or degree
sprintf (Query,"SELECT UsrCod,'Y',Sex FROM usr_data WHERE UsrCod IN ("
"SELECT DISTINCT UsrCod FROM admin"
" WHERE Scope='Sys' OR "
" (Scope='Ins' AND Cod='%ld') OR"
" (Scope='Ctr' AND Cod='%ld') OR"
" (Scope='Deg' AND Cod='%ld')"
") ORDER BY Surname1,Surname2,FirstName,UsrCod",
sprintf (Query,"SELECT UsrCod,'Y',Sex FROM usr_data"
" WHERE UsrCod IN "
"(SELECT UsrCod FROM admin"
" WHERE Scope='Sys')"
" OR UsrCod IN "
"(SELECT UsrCod FROM admin"
" WHERE Scope='Ins' AND Cod='%ld')"
" OR UsrCod IN "
"(SELECT UsrCod FROM admin"
" WHERE Scope='Ctr' AND Cod='%ld')"
" OR UsrCod IN "
"(SELECT UsrCod FROM admin"
" WHERE Scope='Deg' AND Cod='%ld')"
" ORDER BY Surname1,Surname2,FirstName,UsrCod",
Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentCtr.Ctr.CtrCod,
Gbl.CurrentDeg.Deg.DegCod);