From 803b15d88665b06fcc39988e713e0bef7a22ee45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Fri, 24 Mar 2017 13:01:42 +0100 Subject: [PATCH] Version 16.164.1 --- swad_changelog.h | 3 +- swad_degree_type.c | 88 +++++++++++++++++++++++++++++++++++++++------- 2 files changed, 78 insertions(+), 13 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index 0f32ed4b5..f9091c843 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -209,13 +209,14 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 16.164 (2017-03-24)" +#define Log_PLATFORM_VERSION "SWAD 16.164.1 (2017-03-24)" #define CSS_FILE "swad16.161.css" #define JS_FILE "swad16.144.js" // 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 16.164.1: Mar 24, 2017 Statistics about types of degree depends on the selected scope. (217575 lines) Version 16.164: Mar 24, 2017 New figure in statistics: types of degree. (217510 lines) Version 16.163: Mar 24, 2017 Types of degree can be ordered by name and by number of degrees. Integer fields in database queries without single quotes. (217434 lines) diff --git a/swad_degree_type.c b/swad_degree_type.c index d011b2972..7592555cb 100644 --- a/swad_degree_type.c +++ b/swad_degree_type.c @@ -505,18 +505,82 @@ void DT_GetListDegreeTypes (void) unsigned long NumRow; /***** Get types of degree from database *****/ - sprintf (Query,"(SELECT deg_types.DegTypCod," - "deg_types.DegTypName AS DegTypName," - " COUNT(degrees.DegCod) AS NumDegs" - " FROM deg_types,degrees" - " WHERE deg_types.DegTypCod=degrees.DegTypCod" - " GROUP BY degrees.DegTypCod)" - " UNION " - "(SELECT DegTypCod,DegTypName,0 AS NumDegs" // Do not use '0' because NumDegs will be casted to string and order will be wrong - " FROM deg_types" - " WHERE DegTypCod NOT IN (SELECT DegTypCod FROM degrees))" - " ORDER BY %s", - OrderBySubQuery[Gbl.Degs.DegTypes.SelectedOrder]); + switch (Gbl.Scope.Current) + { + case Sco_SCOPE_SYS: + /* Get + all degree types with degrees + union with + all degree types without any degree */ + sprintf (Query,"(SELECT deg_types.DegTypCod,deg_types.DegTypName," + "COUNT(degrees.DegCod) AS NumDegs" + " FROM degrees,deg_types" + " WHERE degrees.DegTypCod=deg_types.DegTypCod" + " GROUP BY degrees.DegTypCod)" + " UNION " + "(SELECT DegTypCod,DegTypName,0 AS NumDegs" // Do not use '0' because NumDegs will be casted to string and order will be wrong + " FROM deg_types" + " WHERE DegTypCod NOT IN" + " (SELECT DegTypCod FROM degrees))" + " ORDER BY %s", + OrderBySubQuery[Gbl.Degs.DegTypes.SelectedOrder]); + break; + case Sco_SCOPE_CTY: + /* Get only degree types with degrees in the current country */ + sprintf (Query,"SELECT deg_types.DegTypCod,deg_types.DegTypName," + "COUNT(degrees.DegCod) AS NumDegs" + " FROM institutions,centres,degrees,deg_types" + " WHERE institutions.CtyCod=%ld" + " AND institutions.InsCod=centres.InsCod" + " AND centres.CtrCod=degrees.CtrCod" + " AND degrees.DegTypCod=deg_types.DegTypCod" + " GROUP BY degrees.DegTypCod" + " ORDER BY %s", + Gbl.CurrentCty.Cty.CtyCod, + OrderBySubQuery[Gbl.Degs.DegTypes.SelectedOrder]); + break; + case Sco_SCOPE_INS: + /* Get only degree types with degrees in the current institution */ + sprintf (Query,"SELECT deg_types.DegTypCod,deg_types.DegTypName," + "COUNT(degrees.DegCod) AS NumDegs" + " FROM centres,degrees,deg_types" + " WHERE centres.InsCod=%ld" + " AND centres.CtrCod=degrees.CtrCod" + " AND degrees.DegTypCod=deg_types.DegTypCod" + " GROUP BY degrees.DegTypCod" + " ORDER BY %s", + Gbl.CurrentIns.Ins.InsCod, + OrderBySubQuery[Gbl.Degs.DegTypes.SelectedOrder]); + break; + case Sco_SCOPE_CTR: + /* Get only degree types with degrees in the current centre */ + sprintf (Query,"SELECT deg_types.DegTypCod,deg_types.DegTypName," + "COUNT(degrees.DegCod) AS NumDegs" + " FROM degrees,deg_types" + " WHERE degrees.CtrCod=%ld" + " AND degrees.DegTypCod=deg_types.DegTypCod" + " GROUP BY degrees.DegTypCod" + " ORDER BY %s", + Gbl.CurrentCtr.Ctr.CtrCod, + OrderBySubQuery[Gbl.Degs.DegTypes.SelectedOrder]); + break; + case Sco_SCOPE_DEG: + case Sco_SCOPE_CRS: + /* Get only degree types with degrees in the current degree */ + sprintf (Query,"SELECT deg_types.DegTypCod,deg_types.DegTypName," + "COUNT(degrees.DegCod) AS NumDegs" + " FROM degrees,deg_types" + " WHERE degrees.DegCod=%ld" + " AND degrees.DegTypCod=deg_types.DegTypCod" + " GROUP BY degrees.DegTypCod" + " ORDER BY %s", + Gbl.CurrentDeg.Deg.DegCod, + OrderBySubQuery[Gbl.Degs.DegTypes.SelectedOrder]); + break; + default: + Lay_ShowErrorAndExit ("Wrong scope."); + break; + } Gbl.Degs.DegTypes.Num = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get types of degree"); /***** Get degree types *****/