From bad0711ad9797a879a681a6cc98c252f8c95ae1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Wed, 9 Dec 2015 19:51:17 +0100 Subject: [PATCH] Version 15.61 --- sql/cambios.sql | 2 + swad_centre.c | 4 +- swad_changelog.h | 8 +- swad_config.h | 4 +- swad_country.c | 319 ++++++++++++++++++++++++++++++++------------ swad_country.h | 14 +- swad_course.c | 4 +- swad_degree.c | 6 +- swad_department.c | 4 +- swad_exam.c | 4 +- swad_forum.c | 4 +- swad_institution.c | 175 ++++++++++++++++-------- swad_institution.h | 12 +- swad_layout.c | 2 +- swad_notification.c | 4 +- swad_record.c | 14 +- swad_statistic.c | 8 +- swad_text.c | 132 +++++++++++------- swad_user.c | 81 +++++++---- swad_user.h | 3 +- swad_web_service.c | 2 +- 21 files changed, 549 insertions(+), 257 deletions(-) diff --git a/sql/cambios.sql b/sql/cambios.sql index 78c33992..73934130 100644 --- a/sql/cambios.sql +++ b/sql/cambios.sql @@ -11180,3 +11180,5 @@ INSERT INTO timetable_tut_backup SELECT * FROM timetable_tut; UPDATE timetable_crs SET Hour=Hour+2; UPDATE timetable_tut SET Hour=Hour+2; + +SELECT COUNT(DISTINCT crs_usr.UsrCod) FROM institutions,centres,degrees,courses,crs_usr WHERE institutions.CtyCod='724' AND institutions.InsCod=centres.InsCod AND centres.CtrCod=degrees.CtrCod AND degrees.DegCod=courses.DegCod AND courses.CrsCod=crs_usr.CrsCod; \ No newline at end of file diff --git a/swad_centre.c b/swad_centre.c index 3443c9fc..a510b68f 100644 --- a/swad_centre.c +++ b/swad_centre.c @@ -696,7 +696,7 @@ void Ctr_EditCentres (void) extern const char *Txt_You_must_create_at_least_one_institution_before_creating_centres; /***** Get list of institutions of the current country *****/ - Ins_GetListInstitutions (Gbl.CurrentCty.Cty.CtyCod,Ins_GET_MINIMAL_DATA); + Ins_GetListInstitutions (Gbl.CurrentCty.Cty.CtyCod,Ins_GET_BASIC_DATA); if (Gbl.Inss.Num) { /***** Get list of places *****/ @@ -1180,7 +1180,7 @@ static void Ctr_ListCentresForEdition (void) /* Get data of institution of this centre */ Ins.InsCod = Ctr->InsCod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_MINIMAL_DATA); + Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); ICanEdit = Ctr_CheckIfICanEdit (Ctr); diff --git a/swad_changelog.h b/swad_changelog.h index 41a289d1..48700ded 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -103,6 +103,10 @@ // TODO: Show nicknames of users in lists? // TODO: Form to register and remove system admins // TODO: Fix this bug: when an admin clicks on "Use this email" in the email of another user the email was confirmed, the email becomes unconfirmed +// TODO: When error ("Ya existía un evento con el título") creating a new event, the data f the event is empty +// TODO: When teacher clicks in attendance of a student (button in her/his record), +// only (the groups he/she should have attend) union (the groups he/she really attended) +// should be shown. // TODO: Reply to one user, suggested by Francisco Ocaña Lara // TODO: Reply to all @@ -110,13 +114,13 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 15.60.7 (2015/12/08)" +#define Log_PLATFORM_VERSION "SWAD 15.61 (2015/12/09)" #define CSS_FILE "swad15.60.7.css" // 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.60.7: Dec 08, 2015 Changed some small icons. (186591 lines) + Version 15.61: Dec 09, 2015 Bug fixing and lot of changes in data of countries and institutions. (186852 lines) Version 15.60.6: Dec 08, 2015 Changed icons in login. (186592 lines) Version 15.60.5: Dec 08, 2015 Changed some messages related to login. (186589 lines) Version 15.60.4: Dec 08, 2015 Change in text about first / last year of a degree. (186589 lines) diff --git a/swad_config.h b/swad_config.h index a9ca7bc1..0acacbcb 100644 --- a/swad_config.h +++ b/swad_config.h @@ -28,8 +28,8 @@ /** Uncomment one of the following installations of SWAD or create your own **/ /*****************************************************************************/ -//#define LOCALHOST_UBUNTU // Comment this line if not applicable -#define OPENSWAD_ORG // Comment this line if not applicable +#define LOCALHOST_UBUNTU // Comment this line if not applicable +//#define OPENSWAD_ORG // Comment this line if not applicable //#define SWAD_UGR_ES // Comment this line if not applicable //#define WWW_CEVUNA_UNA_PY // Comment this line if not applicable diff --git a/swad_country.c b/swad_country.c index ff48b807..ac7191c1 100644 --- a/swad_country.c +++ b/swad_country.c @@ -88,7 +88,7 @@ void Cty_SeeCtyWithPendingInss (void) extern const char *Txt_STR_LANG_ID[1+Txt_NUM_LANGUAGES]; extern const char *Txt_Countries_with_pending_institutions; extern const char *Txt_Country; - extern const char *Txt_Institutions; + extern const char *Txt_Institutions_ABBREVIATION; extern const char *Txt_There_are_no_countries_with_requests_for_institutions_to_be_confirmed; char Query[1024]; MYSQL_RES *mysql_res; @@ -129,7 +129,7 @@ void Cty_SeeCtyWithPendingInss (void) "" "", Txt_Country, - Txt_Institutions); + Txt_Institutions_ABBREVIATION); /***** List the countries *****/ for (NumCty = 0; @@ -145,7 +145,7 @@ void Cty_SeeCtyWithPendingInss (void) Gbl.ColorRows[Gbl.RowEvenOdd]; /* Get data of country */ - Cty_GetDataOfCountryByCod (&Cty); + Cty_GetDataOfCountryByCod (&Cty,Cty_GET_BASIC_DATA); /* Country map */ fprintf (Gbl.F.Out,"" @@ -211,6 +211,7 @@ static void Cty_Configuration (bool PrintView) extern const char *Txt_Centres; extern const char *Txt_Degrees; extern const char *Txt_Courses; + extern const char *Txt_Users_of_the_country; extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS]; char *MapAttribution = NULL; bool PutLink = !PrintView && Gbl.CurrentCty.Cty.WWW[Gbl.Prefs.Language][0]; @@ -345,6 +346,19 @@ static void Cty_Configuration (bool PrintView) } else { + /***** Number of users who claim to belong to this country *****/ + fprintf (Gbl.F.Out,"" + "" + "%s:" + "" + "" + "%u" + "" + "", + The_ClassForm[Gbl.Prefs.Theme], + Txt_Users_of_the_country, + Usr_GetNumUsrsWhoClaimToBelongToCty (Gbl.CurrentCty.Cty.CtyCod)); + /***** Number of institutions *****/ fprintf (Gbl.F.Out,"" "" @@ -397,7 +411,7 @@ static void Cty_Configuration (bool PrintView) Txt_Courses, Crs_GetNumCrssInCty (Gbl.CurrentCty.Cty.CtyCod)); - /***** Number of teachers *****/ + /***** Number of teachers in courses of this country *****/ fprintf (Gbl.F.Out,"" "" "%s:" @@ -410,7 +424,7 @@ static void Cty_Configuration (bool PrintView) Txt_ROLES_PLURAL_Abc[Rol_TEACHER][Usr_SEX_UNKNOWN], Usr_GetNumUsrsInCrssOfCty (Rol_TEACHER,Gbl.CurrentCty.Cty.CtyCod)); - /***** Number of students *****/ + /***** Number of students in courses of this country *****/ fprintf (Gbl.F.Out,"" "" "%s:" @@ -422,6 +436,20 @@ static void Cty_Configuration (bool PrintView) The_ClassForm[Gbl.Prefs.Theme], Txt_ROLES_PLURAL_Abc[Rol_STUDENT][Usr_SEX_UNKNOWN], Usr_GetNumUsrsInCrssOfCty (Rol_STUDENT,Gbl.CurrentCty.Cty.CtyCod)); + + /***** Number of users in courses of this country *****/ + fprintf (Gbl.F.Out,"" + "" + "%s + %s:" + "" + "" + "%u" + "" + "", + The_ClassForm[Gbl.Prefs.Theme], + Txt_ROLES_PLURAL_Abc[Rol_TEACHER][Usr_SEX_UNKNOWN], + Txt_ROLES_PLURAL_Abc[Rol_STUDENT][Usr_SEX_UNKNOWN], + Usr_GetNumUsrsInCrssOfCty (Rol_UNKNOWN,Gbl.CurrentCty.Cty.CtyCod)); } /***** End frame *****/ @@ -457,9 +485,12 @@ void Cty_ListCountries2 (void) extern const char *Txt_Countries; extern const char *Txt_COUNTRIES_HELP_ORDER[2]; extern const char *Txt_COUNTRIES_ORDER[2]; - extern const char *Txt_Users_in_courses; - extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS]; - extern const char *Txt_Institutions; + extern const char *Txt_Institutions_ABBREVIATION; + extern const char *Txt_Centres_ABBREVIATION; + extern const char *Txt_Degrees_ABBREVIATION; + extern const char *Txt_Courses_ABBREVIATION; + extern const char *Txt_Teachers_ABBREVIATION; + extern const char *Txt_Students_ABBREVIATION; extern const char *Txt_Other_countries; extern const char *Txt_Country_unspecified; Cty_CtysOrderType_t Order; @@ -499,16 +530,29 @@ void Cty_ListCountries2 (void) "%s" "" "" - "%s" - "" + "%s" + "" + "" + "%s" + "" + "" + "%s" + "" "" "%s" "" + "" + "%s+
%s" + "" "", - Txt_Users_in_courses, - Txt_ROLES_PLURAL_Abc[Rol_STUDENT][Usr_SEX_UNKNOWN], - Txt_ROLES_PLURAL_Abc[Rol_TEACHER][Usr_SEX_UNKNOWN], - Txt_Institutions); + Txt_Institutions_ABBREVIATION, + Txt_Centres_ABBREVIATION, + Txt_Degrees_ABBREVIATION, + Txt_Courses_ABBREVIATION, + Txt_Teachers_ABBREVIATION, + Txt_Students_ABBREVIATION, + Txt_Teachers_ABBREVIATION, + Txt_Students_ABBREVIATION); /***** Write all the countries and their number of users and institutions *****/ for (NumCty = 0; @@ -542,12 +586,24 @@ void Cty_ListCountries2 (void) "" "%u" "" + "" + "%u" + "" + "" + "%u" + "" + "" + "%u" + "" "", - BgColor,Gbl.Ctys.Lst[NumCty].NumUsrs, - BgColor,Usr_GetNumUsrsInCrssOfCty (Rol_UNKNOWN,Gbl.Ctys.Lst[NumCty].CtyCod), - BgColor,Usr_GetNumUsrsInCrssOfCty (Rol_STUDENT,Gbl.Ctys.Lst[NumCty].CtyCod), - BgColor,Usr_GetNumUsrsInCrssOfCty (Rol_TEACHER,Gbl.Ctys.Lst[NumCty].CtyCod), - BgColor,Gbl.Ctys.Lst[NumCty].NumInss); + BgColor,Gbl.Ctys.Lst[NumCty].NumUsrsWhoClaimToBelongToCty, + BgColor,Gbl.Ctys.Lst[NumCty].NumInss, + BgColor,Gbl.Ctys.Lst[NumCty].NumCtrs, + BgColor,Gbl.Ctys.Lst[NumCty].NumDegs, + BgColor,Gbl.Ctys.Lst[NumCty].NumCrss, + BgColor,Gbl.Ctys.Lst[NumCty].NumTchs, + BgColor,Gbl.Ctys.Lst[NumCty].NumStds, + BgColor,Gbl.Ctys.Lst[NumCty].NumUsrs); Gbl.RowEvenOdd = 1 - Gbl.RowEvenOdd; } @@ -578,13 +634,25 @@ void Cty_ListCountries2 (void) "" "%u" "" + "" + "%u" + "" + "" + "%u" + "" + "" + "%u" + "" "", Txt_Other_countries, Cty_GetNumUsrsWhoClaimToBelongToCty (0), - Usr_GetNumUsrsInCrssOfCty (Rol_UNKNOWN,0), // Here Rol_ROLE_UNKNOWN means "all users", + Ins_GetNumInssInCty (0), + Ctr_GetNumCtrsInCty (0), + Deg_GetNumDegsInCty (0), + Crs_GetNumCrssInCty (0), + Usr_GetNumUsrsInCrssOfCty (Rol_UNKNOWN,0), Usr_GetNumUsrsInCrssOfCty (Rol_STUDENT,0), - Usr_GetNumUsrsInCrssOfCty (Rol_TEACHER,0), - Ins_GetNumInssInCty (0)); + Usr_GetNumUsrsInCrssOfCty (Rol_TEACHER,0)); /***** Write users and institutions with unknown country *****/ fprintf (Gbl.F.Out,"" @@ -595,21 +663,33 @@ void Cty_ListCountries2 (void) "%u" "" "" - "0" - "" - "" - "0" - "" - "" - "0" + "%u" "" "" "%u" "" + "" + "%u" + "" + "" + "%u" + "" + "" + "0" + "" + "" + "0" + "" + "" + "0" + "" "", Txt_Country_unspecified, Cty_GetNumUsrsWhoClaimToBelongToCty (-1L), - Ins_GetNumInssInCty (-1L)); + Ins_GetNumInssInCty (-1L), + Ctr_GetNumCtrsInCty (-1L), + Deg_GetNumDegsInCty (-1L), + Crs_GetNumCrssInCty (-1L)); /***** Table end *****/ Lay_EndRoundFrameTable (); @@ -745,14 +825,14 @@ void Cty_WriteScriptGoogleGeochart (void) for (NumCty = 0; NumCty < Gbl.Ctys.Num; NumCty++) - if (Gbl.Ctys.Lst[NumCty].NumUsrs) + if (Gbl.Ctys.Lst[NumCty].NumUsrsWhoClaimToBelongToCty) { /* Write data of this country */ fprintf (Gbl.F.Out," ['%s', %u, %u],\n", Gbl.Ctys.Lst[NumCty].Alpha2, - Gbl.Ctys.Lst[NumCty].NumUsrs, + Gbl.Ctys.Lst[NumCty].NumUsrsWhoClaimToBelongToCty, Gbl.Ctys.Lst[NumCty].NumInss); - NumUsrsWithCountry += Gbl.Ctys.Lst[NumCty].NumUsrs; + NumUsrsWithCountry += Gbl.Ctys.Lst[NumCty].NumUsrsWhoClaimToBelongToCty; NumCtysWithUsrs++; } @@ -843,7 +923,7 @@ void Cty_GetListCountries (Cty_GetExtraData_t GetExtraData) /***** Get countries from database *****/ switch (GetExtraData) { - case Cty_GET_ONLY_COUNTRIES: + case Cty_GET_BASIC_DATA: sprintf (Query,"SELECT CtyCod,Alpha2,Name_%s" " FROM countries ORDER BY Name_%s", Txt_STR_LANG_ID[Gbl.Prefs.Language], @@ -891,7 +971,8 @@ void Cty_GetListCountries (Cty_GetExtraData_t GetExtraData) " UNION " "(SELECT CtyCod,Alpha2,%s%s0 AS NumUsrs" " FROM countries" - " WHERE CtyCod NOT IN (SELECT DISTINCT CtyCod FROM usr_data))" + " WHERE CtyCod NOT IN" + " (SELECT DISTINCT CtyCod FROM usr_data))" " ORDER BY %s", SubQueryNam1,SubQueryWWW1, SubQueryNam2,SubQueryWWW2,OrderBySubQuery); @@ -928,7 +1009,18 @@ void Cty_GetListCountries (Cty_GetExtraData_t GetExtraData) switch (GetExtraData) { - case Cty_GET_ONLY_COUNTRIES: + case Cty_GET_BASIC_DATA: + for (Lan = (Txt_Language_t) 1; + Lan <= Txt_NUM_LANGUAGES; + Lan++) + { + Cty->Name[Lan][0] = '\0'; + Cty->WWW[Lan][0] = '\0'; + } + Cty->NumUsrsWhoClaimToBelongToCty = 0; + Cty->NumInss = Cty->NumCtrs = Cty->NumDegs = Cty->NumCrss = 0; + Cty->NumUsrs = Cty->NumTchs = Cty->NumStds = 0; + /* Get the name of the country in current language */ strcpy (Cty->Name[Gbl.Prefs.Language],row[2]); break; @@ -942,12 +1034,26 @@ void Cty_GetListCountries (Cty_GetExtraData_t GetExtraData) strcpy (Cty->WWW[Lan],row[1+Txt_NUM_LANGUAGES+Lan]); } - /* Get number of users in this country */ - if (sscanf (row[1+Txt_NUM_LANGUAGES*2+1],"%u",&Cty->NumUsrs) != 1) - Cty->NumUsrs = 0; + /* Get number of users who claim to belong to this country */ + if (sscanf (row[1+Txt_NUM_LANGUAGES*2+1],"%u",&Cty->NumUsrsWhoClaimToBelongToCty) != 1) + Cty->NumUsrsWhoClaimToBelongToCty = 0; /* Get number of institutions in this country */ Cty->NumInss = Ins_GetNumInssInCty (Cty->CtyCod); + + /* Get number of centres in this country */ + Cty->NumCtrs = Ctr_GetNumCtrsInCty (Cty->CtyCod); + + /* Get number of degrees in this country */ + Cty->NumDegs = Deg_GetNumDegsInCty (Cty->CtyCod); + + /* Get number of courses in this country */ + Cty->NumCrss = Crs_GetNumCrssInCty (Cty->CtyCod); + + /* Get number of users in courses of this country */ + Cty->NumUsrs = Usr_GetNumUsrsInCrssOfCty (Rol_UNKNOWN,Cty->CtyCod); // Here Rol_UNKNOWN means "all users", NumUsrs <= NumStds + NumTchs + Cty->NumStds = Usr_GetNumUsrsInCrssOfCty (Rol_STUDENT,Cty->CtyCod); + Cty->NumTchs = Usr_GetNumUsrsInCrssOfCty (Rol_TEACHER,Cty->CtyCod); break; } } @@ -1042,10 +1148,10 @@ void Cty_WriteCountryName (long CtyCod,const char *Class) } /*****************************************************************************/ -/**************************** Get country full name **************************/ +/***************** Get basic data of country given its code ******************/ /*****************************************************************************/ -bool Cty_GetDataOfCountryByCod (struct Country *Cty) +bool Cty_GetDataOfCountryByCod (struct Country *Cty,Cty_GetExtraData_t GetExtraData) { extern const char *Txt_Another_country; extern const char *Txt_STR_LANG_ID[1+Txt_NUM_LANGUAGES]; @@ -1072,7 +1178,10 @@ bool Cty_GetDataOfCountryByCod (struct Country *Cty) Cty->Name[Lan][0] = '\0'; Cty->WWW[Lan][0] = '\0'; } + Cty->NumUsrsWhoClaimToBelongToCty = 0; Cty->NumUsrs = 0; + Cty->NumStds = 0; + Cty->NumTchs = 0; Cty->NumInss = 0; /***** Check if country code is correct *****/ @@ -1088,37 +1197,52 @@ bool Cty_GetDataOfCountryByCod (struct Country *Cty) return false; } - // Cty->CtyCod > 0 - /***** Get data of a country from database *****/ - SubQueryNam1[0] = '\0'; - SubQueryNam2[0] = '\0'; - SubQueryWWW1[0] = '\0'; - SubQueryWWW2[0] = '\0'; - for (Lan = (Txt_Language_t) 1; - Lan <= Txt_NUM_LANGUAGES; - Lan++) - { - sprintf (StrField,"countries.Name_%s,",Txt_STR_LANG_ID[Lan]); - strcat (SubQueryNam1,StrField); - sprintf (StrField,"Name_%s,",Txt_STR_LANG_ID[Lan]); - strcat (SubQueryNam2,StrField); + // Here Cty->CtyCod > 0 - sprintf (StrField,"countries.WWW_%s,",Txt_STR_LANG_ID[Lan]); - strcat (SubQueryWWW1,StrField); - sprintf (StrField,"WWW_%s,",Txt_STR_LANG_ID[Lan]); - strcat (SubQueryWWW2,StrField); + /***** Get data of a country from database *****/ + switch (GetExtraData) + { + case Cty_GET_BASIC_DATA: + sprintf (Query,"SELECT Alpha2,Name_%s" + " FROM countries" + " WHERE CtyCod='%03ld'", + Txt_STR_LANG_ID[Gbl.Prefs.Language], + Cty->CtyCod); + break; + case Cty_GET_EXTRA_DATA: + SubQueryNam1[0] = '\0'; + SubQueryNam2[0] = '\0'; + SubQueryWWW1[0] = '\0'; + SubQueryWWW2[0] = '\0'; + for (Lan = (Txt_Language_t) 1; + Lan <= Txt_NUM_LANGUAGES; + Lan++) + { + sprintf (StrField,"countries.Name_%s,",Txt_STR_LANG_ID[Lan]); + strcat (SubQueryNam1,StrField); + sprintf (StrField,"Name_%s,",Txt_STR_LANG_ID[Lan]); + strcat (SubQueryNam2,StrField); + + sprintf (StrField,"countries.WWW_%s,",Txt_STR_LANG_ID[Lan]); + strcat (SubQueryWWW1,StrField); + sprintf (StrField,"WWW_%s,",Txt_STR_LANG_ID[Lan]); + strcat (SubQueryWWW2,StrField); + } + sprintf (Query,"(SELECT countries.Alpha2,%s%sCOUNT(*) AS NumUsrs" + " FROM countries,usr_data" + " WHERE countries.CtyCod='%03ld'" + " AND countries.CtyCod=usr_data.CtyCod)" + " UNION " + "(SELECT Alpha2,%s%s0 AS NumUsrs" + " FROM countries" + " WHERE CtyCod='%03ld'" + " AND CtyCod NOT IN" + " (SELECT DISTINCT CtyCod FROM usr_data))", + SubQueryNam1,SubQueryWWW1,Cty->CtyCod, + SubQueryNam2,SubQueryWWW2,Cty->CtyCod); + break; } - sprintf (Query,"(SELECT Alpha2,%s%sCOUNT(*)" - " FROM countries,institutions" - " WHERE countries.CtyCod='%03ld' AND countries.CtyCod=institutions.CtyCod" - " GROUP BY countries.CtyCod)" - " UNION " - "(SELECT Alpha2,%s%s0" - " FROM countries" - " WHERE CtyCod='%03ld'" - " AND CtyCod NOT IN (SELECT DISTINCT CtyCod FROM institutions))", - SubQueryNam1,SubQueryWWW1,Cty->CtyCod, - SubQueryNam2,SubQueryWWW2,Cty->CtyCod); + NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get data of a country"); /***** Count number of rows in result *****/ @@ -1133,18 +1257,36 @@ bool Cty_GetDataOfCountryByCod (struct Country *Cty) strncpy (Cty->Alpha2,row[0],2); Cty->Alpha2[2] = '\0'; - /* Get the name of the country in several languages */ - for (Lan = (Txt_Language_t) 1; - Lan <= Txt_NUM_LANGUAGES; - Lan++) + switch (GetExtraData) { - strcpy (Cty->Name[Lan],row[Lan]); - strcpy (Cty->WWW[Lan],row[Txt_NUM_LANGUAGES+Lan]); - } + case Cty_GET_BASIC_DATA: + /* Get the name of the country in current language */ + strcpy (Cty->Name[Gbl.Prefs.Language],row[1]); + break; + case Cty_GET_EXTRA_DATA: + /* Get the name of the country in several languages */ + for (Lan = (Txt_Language_t) 1; + Lan <= Txt_NUM_LANGUAGES; + Lan++) + { + strcpy (Cty->Name[Lan],row[Lan]); + strcpy (Cty->WWW[Lan],row[Txt_NUM_LANGUAGES+Lan]); + } - /* Get number of institutions in this country */ - if (sscanf (row[Txt_NUM_LANGUAGES*2+1],"%u",&(Cty->NumInss)) != 1) - Cty->NumInss = 0; + /* Get number of users who claim to belong to this country */ + if (sscanf (row[Txt_NUM_LANGUAGES*2+1],"%u",&Cty->NumUsrsWhoClaimToBelongToCty) != 1) + Cty->NumUsrsWhoClaimToBelongToCty = 0; + + /* Get number of user in courses of this institution */ + Cty->NumUsrs = Usr_GetNumUsrsInCrssOfCty (Rol_UNKNOWN,Cty->CtyCod); // Here Rol_UNKNOWN means "all users", NumUsrs <= NumStds + NumTchs + Cty->NumStds = Usr_GetNumUsrsInCrssOfCty (Rol_STUDENT,Cty->CtyCod); + Cty->NumTchs = Usr_GetNumUsrsInCrssOfCty (Rol_TEACHER,Cty->CtyCod); + + /* Get number of institutions in this country */ + Cty->NumInss = Ins_GetNumInssInCty (Cty->CtyCod); + + break; + } } else CtyFound = false; @@ -1282,6 +1424,7 @@ static void Cty_ListCountriesForEdition (void) "", 1 + Txt_NUM_LANGUAGES); if (Cty->NumInss || + Cty->NumUsrsWhoClaimToBelongToCty || Cty->NumUsrs) // Country has institutions or users ==> deletion forbidden Lay_PutIconRemovalNotAllowed (); else @@ -1313,7 +1456,7 @@ static void Cty_ListCountriesForEdition (void) fprintf (Gbl.F.Out,"" "%u" "", - 1 + Txt_NUM_LANGUAGES,Cty->NumUsrs); + 1 + Txt_NUM_LANGUAGES,Cty->NumUsrsWhoClaimToBelongToCty); /* Number of institutions */ fprintf (Gbl.F.Out,"" @@ -1414,10 +1557,12 @@ void Cty_RemoveCountry (void) Lay_ShowErrorAndExit ("Code of country is missing."); /***** Get data of the country from database *****/ - Cty_GetDataOfCountryByCod (&Cty); + Cty_GetDataOfCountryByCod (&Cty,Cty_GET_EXTRA_DATA); /***** Check if this country has users *****/ - if (Cty.NumInss || Cty.NumUsrs) // Country has institutions or users ==> don't remove + if (Cty.NumInss || + Cty.NumUsrsWhoClaimToBelongToCty || + Cty.NumUsrs) // Country has institutions or users ==> don't remove Lay_ShowAlert (Lay_WARNING,Txt_You_can_not_remove_a_country_with_institutions_or_users); else // Country has no users ==> remove it { @@ -1466,7 +1611,7 @@ void Cty_RenameCountry (void) Par_GetParToText ("Name",NewCtyName,Cty_MAX_BYTES_COUNTRY_NAME); /***** Get from the database the data of the country *****/ - Cty_GetDataOfCountryByCod (Cty); + Cty_GetDataOfCountryByCod (Cty,Cty_GET_EXTRA_DATA); /***** Check if new name is empty *****/ if (!NewCtyName[0]) @@ -1585,7 +1730,7 @@ void Cty_ChangeCtyWWW (void) Par_GetParToText ("WWW",NewWWW,Cty_MAX_BYTES_COUNTRY_NAME); /***** Get from the database the data of the country *****/ - Cty_GetDataOfCountryByCod (Cty); + Cty_GetDataOfCountryByCod (Cty,Cty_GET_EXTRA_DATA); /***** Update the table changing old WWW by new WWW *****/ sprintf (Query,"UPDATE countries SET WWW_%s='%s'" @@ -1738,7 +1883,7 @@ static void Cty_PutHeadCountries (void) extern const char *Txt_Name; extern const char *Txt_WWW; extern const char *Txt_Users; - extern const char *Txt_Institutions; + extern const char *Txt_Institutions_ABBREVIATION; fprintf (Gbl.F.Out,"" "" @@ -1767,7 +1912,7 @@ static void Cty_PutHeadCountries (void) Txt_Name, Txt_WWW, Txt_Users, - Txt_Institutions); + Txt_Institutions_ABBREVIATION); } /*****************************************************************************/ diff --git a/swad_country.h b/swad_country.h index 46d32390..f03d310c 100644 --- a/swad_country.h +++ b/swad_country.h @@ -47,10 +47,14 @@ struct Country char Alpha2[2+1]; char Name[1+Txt_NUM_LANGUAGES][Cty_MAX_BYTES_COUNTRY_NAME+1]; char WWW [1+Txt_NUM_LANGUAGES][Cty_MAX_LENGTH_COUNTRY_WWW+1]; - unsigned NumUsrs; - unsigned NumStds; - unsigned NumTchs; + unsigned NumUsrsWhoClaimToBelongToCty; unsigned NumInss; + unsigned NumCtrs; + unsigned NumDegs; + unsigned NumCrss; + unsigned NumUsrs; // Number of users in courses of the institution + unsigned NumStds; // Number of students in courses of the institution + unsigned NumTchs; // Number of teachers in courses of the institution }; typedef enum @@ -63,7 +67,7 @@ typedef enum typedef enum { - Cty_GET_ONLY_COUNTRIES, + Cty_GET_BASIC_DATA, Cty_GET_EXTRA_DATA, } Cty_GetExtraData_t; @@ -92,7 +96,7 @@ void Cty_GetListCountries (Cty_GetExtraData_t GetExtraData); void Cty_FreeListCountries (void); void Cty_WriteSelectorOfCountry (void); void Cty_WriteCountryName (long CtyCod,const char *Class); -bool Cty_GetDataOfCountryByCod (struct Country *Cty); +bool Cty_GetDataOfCountryByCod (struct Country *Cty,Cty_GetExtraData_t GetExtraData); void Cty_GetCountryName (long CtyCod,char CtyName[Cty_MAX_BYTES_COUNTRY_NAME+1]); void Cty_PutParamCtyCod (long CtyCod); long Cty_GetParamOtherCtyCod (void); diff --git a/swad_course.c b/swad_course.c index ab8ce6e3..f8de0bfe 100644 --- a/swad_course.c +++ b/swad_course.c @@ -577,7 +577,7 @@ static void Crs_WriteListMyCoursesToSelectOne (void) /***** Get data of this institution *****/ Cty.CtyCod = Str_ConvertStrCodToLongCod (row[0]); - if (!Cty_GetDataOfCountryByCod (&Cty)) + if (!Cty_GetDataOfCountryByCod (&Cty,Cty_GET_BASIC_DATA)) Lay_ShowErrorAndExit ("Country not found."); /***** Write link to country *****/ @@ -620,7 +620,7 @@ static void Crs_WriteListMyCoursesToSelectOne (void) /***** Get data of this institution *****/ Ins.InsCod = Str_ConvertStrCodToLongCod (row[0]); - if (!Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_MINIMAL_DATA)) + if (!Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA)) Lay_ShowErrorAndExit ("Institution not found."); /***** Write link to institution *****/ diff --git a/swad_degree.c b/swad_degree.c index 30f7464b..7674c4b2 100644 --- a/swad_degree.c +++ b/swad_degree.c @@ -890,7 +890,7 @@ void Deg_InitCurrentCourse (void) /***** If numerical institution code is available, get institution data *****/ if (Gbl.CurrentIns.Ins.InsCod > 0) { - if (Ins_GetDataOfInstitutionByCod (&Gbl.CurrentIns.Ins,Ins_GET_MINIMAL_DATA)) // Institution found + if (Ins_GetDataOfInstitutionByCod (&Gbl.CurrentIns.Ins,Ins_GET_BASIC_DATA)) // Institution found Gbl.CurrentCty.Cty.CtyCod = Gbl.CurrentIns.Ins.CtyCod; else { @@ -906,7 +906,7 @@ void Deg_InitCurrentCourse (void) /***** If numerical country code is available, get country data *****/ if (Gbl.CurrentCty.Cty.CtyCod > 0) { - if (!Cty_GetDataOfCountryByCod (&Gbl.CurrentCty.Cty)) // Country not found + if (!Cty_GetDataOfCountryByCod (&Gbl.CurrentCty.Cty,Cty_GET_BASIC_DATA)) // Country not found { Gbl.YearOK = false; Gbl.CurrentCty.Cty.CtyCod = @@ -3901,7 +3901,7 @@ void Deg_GetAndWriteInsCtrDegAdminBy (long UsrCod,unsigned ColSpan) if (Ins.InsCod > 0) { /* Get data of institution */ - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_MINIMAL_DATA); + Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); /* Write institution logo and name */ Ins_DrawInstitutionLogoAndNameWithLink (&Ins,ActSeeInsInf, diff --git a/swad_department.c b/swad_department.c index 58f9b7ed..66fe0dad 100644 --- a/swad_department.c +++ b/swad_department.c @@ -230,7 +230,7 @@ void Dpt_EditDepartments (void) Lay_ShowErrorAndExit ("No institution selected."); // This should not happen /***** Get list of institutions *****/ - Ins_GetListInstitutions (Gbl.CurrentCty.Cty.CtyCod,Ins_GET_MINIMAL_DATA); + Ins_GetListInstitutions (Gbl.CurrentCty.Cty.CtyCod,Ins_GET_BASIC_DATA); if (!Gbl.Inss.Num) Lay_ShowErrorAndExit ("There is no list of institutions."); // This should not happen @@ -501,7 +501,7 @@ static void Dpt_ListDepartmentsForEdition (void) /* Get data of institution of this department */ Ins.InsCod = Dpt->InsCod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_MINIMAL_DATA); + Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); /* Put icon to remove department */ fprintf (Gbl.F.Out,"" diff --git a/swad_exam.c b/swad_exam.c index 28267642..313d862e 100644 --- a/swad_exam.c +++ b/swad_exam.c @@ -745,7 +745,7 @@ static void Exa_ShowExamAnnouncement (long ExaCod,Exa_TypeViewExamAnnouncement_t /***** Get data of institution of this degree *****/ Ins.InsCod = Gbl.CurrentIns.Ins.InsCod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_MINIMAL_DATA); + Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); switch (TypeViewExamAnnouncement) { @@ -1295,7 +1295,7 @@ static void Exa_GetNotifContentExamAnnouncement (char **ContentStr) /***** Get data of institution *****/ Ins.InsCod = Deg_GetInsCodOfDegreeByCod (Deg.DegCod); - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_MINIMAL_DATA); + Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); Dat_ConvDateToDateStr (&Gbl.ExamAnnouncement.ExamDate,StrExamDate); diff --git a/swad_forum.c b/swad_forum.c index 52bfbaea..8bc92688 100644 --- a/swad_forum.c +++ b/swad_forum.c @@ -1870,7 +1870,7 @@ static long For_WriteLinksToInsForums (long InsCod,bool IsLastIns,bool IsLastIte /***** Get data of this institution *****/ Gbl.Forum.Ins.InsCod = InsCod; - if (!Ins_GetDataOfInstitutionByCod (&Gbl.Forum.Ins,Ins_GET_MINIMAL_DATA)) + if (!Ins_GetDataOfInstitutionByCod (&Gbl.Forum.Ins,Ins_GET_BASIC_DATA)) Lay_ShowErrorAndExit ("Institution not found."); /***** Link to the forum of users from this institution *****/ @@ -3579,7 +3579,7 @@ void For_GetParamsForum (void) /***** Get parameter with code of institution *****/ Par_GetParToText ("ForInsCod",LongStr,1+10); Gbl.Forum.Ins.InsCod = Str_ConvertStrCodToLongCod (LongStr); - Ins_GetDataOfInstitutionByCod (&Gbl.Forum.Ins,Ins_GET_MINIMAL_DATA); + Ins_GetDataOfInstitutionByCod (&Gbl.Forum.Ins,Ins_GET_BASIC_DATA); /***** Get parameter with code of institution *****/ Par_GetParToText ("ForCtrCod",LongStr,1+10); diff --git a/swad_institution.c b/swad_institution.c index 93b4879b..135d7fdf 100644 --- a/swad_institution.c +++ b/swad_institution.c @@ -155,7 +155,7 @@ void Ins_SeeInsWithPendingCtrs (void) Gbl.ColorRows[Gbl.RowEvenOdd]; /* Get data of institution */ - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_MINIMAL_DATA); + Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); /* Institution logo and name */ fprintf (Gbl.F.Out,"" @@ -251,6 +251,7 @@ static void Ins_Configuration (bool PrintView) extern const char *Txt_Degrees; extern const char *Txt_Courses; extern const char *Txt_Departments; + extern const char *Txt_Users_of_the_institution; extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS]; bool PutLink = !PrintView && Gbl.CurrentIns.Ins.WWW[0]; @@ -379,6 +380,19 @@ static void Ins_Configuration (bool PrintView) } else { + /***** Number of users who claim to belong to this institution *****/ + fprintf (Gbl.F.Out,"" + "" + "%s:" + "" + "" + "%u" + "" + "", + The_ClassForm[Gbl.Prefs.Theme], + Txt_Users_of_the_institution, + Usr_GetNumUsrsWhoClaimToBelongToIns (Gbl.CurrentIns.Ins.InsCod)); + /***** Number of centres *****/ fprintf (Gbl.F.Out,"" "" @@ -431,7 +445,7 @@ static void Ins_Configuration (bool PrintView) Txt_Departments, Dpt_GetNumDepartmentsInInstitution (Gbl.CurrentIns.Ins.InsCod)); - /***** Number of teachers *****/ + /***** Number of teachers in courses of this institution *****/ fprintf (Gbl.F.Out,"" "" "%s:" @@ -444,7 +458,7 @@ static void Ins_Configuration (bool PrintView) Txt_ROLES_PLURAL_Abc[Rol_TEACHER][Usr_SEX_UNKNOWN], Usr_GetNumUsrsInCrssOfIns (Rol_TEACHER,Gbl.CurrentIns.Ins.InsCod)); - /***** Number of students *****/ + /***** Number of students in courses of this institution *****/ fprintf (Gbl.F.Out,"" "" "%s:" @@ -456,6 +470,20 @@ static void Ins_Configuration (bool PrintView) The_ClassForm[Gbl.Prefs.Theme], Txt_ROLES_PLURAL_Abc[Rol_STUDENT][Usr_SEX_UNKNOWN], Usr_GetNumUsrsInCrssOfIns (Rol_STUDENT,Gbl.CurrentIns.Ins.InsCod)); + + /***** Number of users in courses of this institution *****/ + fprintf (Gbl.F.Out,"" + "" + "%s + %s:" + "" + "" + "%u" + "" + "", + The_ClassForm[Gbl.Prefs.Theme], + Txt_ROLES_PLURAL_Abc[Rol_TEACHER][Usr_SEX_UNKNOWN], + Txt_ROLES_PLURAL_Abc[Rol_STUDENT][Usr_SEX_UNKNOWN], + Usr_GetNumUsrsInCrssOfIns (Rol_UNKNOWN,Gbl.CurrentIns.Ins.InsCod)); } /***** End of the frame *****/ @@ -581,31 +609,54 @@ static void Ins_ListOneInstitutionForSeeing (struct Institution *Ins,unsigned Nu fprintf (Gbl.F.Out,""); /***** Stats *****/ + /* Number of users who claim to belong to this institution */ fprintf (Gbl.F.Out,"" "%u" "", - TxtClassNormal,BgColor,Ins->NumUsrs); - fprintf (Gbl.F.Out,"" - "%u" - "", - TxtClassNormal,BgColor,Ins->NumStds); - fprintf (Gbl.F.Out,"" - "%u" - "", - TxtClassNormal,BgColor,Ins->NumTchs); + TxtClassNormal,BgColor,Ins->NumUsrsWhoClaimToBelongToIns); + + /* Number of centres in this institution */ fprintf (Gbl.F.Out,"" "%u" "", TxtClassNormal,BgColor,Ins->NumCtrs); + + /* Number of degrees in this institution */ fprintf (Gbl.F.Out,"" "%u" "", TxtClassNormal,BgColor,Ins->NumDegs); + + /* Number of courses in this institution */ + fprintf (Gbl.F.Out,"" + "%u" + "", + TxtClassNormal,BgColor,Ins->NumCrss); + + /* Number of departments in this institution */ fprintf (Gbl.F.Out,"" "%u" "", TxtClassNormal,BgColor,Ins->NumDpts); + /* Number of teachers in courses of this institution */ + fprintf (Gbl.F.Out,"" + "%u" + "", + TxtClassNormal,BgColor,Ins->NumTchs); + + /* Number of students in courses of this institution */ + fprintf (Gbl.F.Out,"" + "%u" + "", + TxtClassNormal,BgColor,Ins->NumStds); + + /* Number of users in courses of this institution */ + fprintf (Gbl.F.Out,"" + "%u" + "", + TxtClassNormal,BgColor,Ins->NumUsrs); + /***** Institution status *****/ StatusTxt = Ins_GetStatusTxtFromStatusBits (Ins->Status); fprintf (Gbl.F.Out,"" @@ -625,10 +676,11 @@ static void Ins_PutHeadInstitutionsForSeeing (bool OrderSelectable) { extern const char *Txt_INSTITUTIONS_HELP_ORDER[2]; extern const char *Txt_INSTITUTIONS_ORDER[2]; - extern const char *Txt_Students_ABBREVIATION; extern const char *Txt_Teachers_ABBREVIATION; - extern const char *Txt_Centres; + extern const char *Txt_Students_ABBREVIATION; + extern const char *Txt_Centres_ABBREVIATION; extern const char *Txt_Degrees_ABBREVIATION; + extern const char *Txt_Courses_ABBREVIATION; extern const char *Txt_Departments_ABBREVIATION; extern const char *Txt_Status; Ins_InssOrderType_t Order; @@ -639,7 +691,9 @@ static void Ins_PutHeadInstitutionsForSeeing (bool OrderSelectable) Order <= Ins_ORDER_BY_NUM_USRS; Order++) { - fprintf (Gbl.F.Out,""); + fprintf (Gbl.F.Out,"", + Order == Ins_ORDER_BY_INSTITUTION ? "LEFT_MIDDLE" : + "RIGHT_MIDDLE"); if (OrderSelectable) { Act_FormStart (ActSeeIns); @@ -659,7 +713,7 @@ static void Ins_PutHeadInstitutionsForSeeing (bool OrderSelectable) fprintf (Gbl.F.Out,""); } fprintf (Gbl.F.Out,"" - "%s" + "%s" "" "" "%s" @@ -673,15 +727,24 @@ static void Ins_PutHeadInstitutionsForSeeing (bool OrderSelectable) "" "%s" "" + "" + "%s" + "" + "" + "%s+
%s" + "" "" "%s" "" "", + Txt_Centres_ABBREVIATION, + Txt_Degrees_ABBREVIATION, + Txt_Courses_ABBREVIATION, + Txt_Departments_ABBREVIATION, + Txt_Teachers_ABBREVIATION, Txt_Students_ABBREVIATION, Txt_Teachers_ABBREVIATION, - Txt_Centres, - Txt_Degrees_ABBREVIATION, - Txt_Departments_ABBREVIATION, + Txt_Students_ABBREVIATION, Txt_Status); } @@ -743,7 +806,7 @@ void Ins_GetListInstitutions (long CtyCod,Ins_GetExtraData_t GetExtraData) /***** Get institutions from database *****/ switch (GetExtraData) { - case Ins_GET_MINIMAL_DATA: + case Ins_GET_BASIC_DATA: if (CtyCod <= 0) // Get all the institutions, belonging to any country sprintf (Query,"SELECT InsCod,CtyCod,Status,RequesterUsrCod,ShortName,FullName,WWW" " FROM institutions" @@ -776,7 +839,8 @@ void Ins_GetListInstitutions (long CtyCod,Ins_GetExtraData_t GetExtraData) " UNION " "(SELECT InsCod,CtyCod,Status,RequesterUsrCod,ShortName,FullName,WWW,0 AS NumUsrs" " FROM institutions" - " WHERE InsCod NOT IN (SELECT DISTINCT InsCod FROM usr_data))" + " WHERE InsCod NOT IN" + " (SELECT DISTINCT InsCod FROM usr_data))" " ORDER BY %s", OrderBySubQuery); else // Get only the institutions belonging to the country specified by CtyCod @@ -785,12 +849,15 @@ void Ins_GetListInstitutions (long CtyCod,Ins_GetExtraData_t GetExtraData) "institutions.ShortName,institutions.FullName," "institutions.WWW,COUNT(*) AS NumUsrs" " FROM institutions,usr_data" - " WHERE institutions.CtyCod='%ld' AND institutions.InsCod=usr_data.InsCod" + " WHERE institutions.CtyCod='%ld'" + " AND institutions.InsCod=usr_data.InsCod" " GROUP BY institutions.InsCod)" " UNION " "(SELECT InsCod,CtyCod,Status,RequesterUsrCod,ShortName,FullName,WWW,0 AS NumUsrs" " FROM institutions" - " WHERE CtyCod='%ld' AND InsCod NOT IN (SELECT DISTINCT InsCod FROM usr_data))" + " WHERE CtyCod='%ld'" + " AND InsCod NOT IN" + " (SELECT DISTINCT InsCod FROM usr_data))" " ORDER BY %s", CtyCod,CtyCod, OrderBySubQuery); @@ -844,32 +911,32 @@ void Ins_GetListInstitutions (long CtyCod,Ins_GetExtraData_t GetExtraData) /* Get extra data */ switch (GetExtraData) { - case Ins_GET_MINIMAL_DATA: - Ins->NumStds = Ins->NumTchs = Ins->NumUsrs = - Ins->NumCtrs = Ins->NumDpts = Ins->NumDegs = 0; + case Ins_GET_BASIC_DATA: + Ins->NumUsrsWhoClaimToBelongToIns = 0; + Ins->NumCtrs = Ins->NumDegs = Ins->NumCrss = Ins->NumDpts = 0; + Ins->NumUsrs = Ins->NumTchs = Ins->NumStds = 0; break; case Ins_GET_EXTRA_DATA: - /* Get number of users in this institution (row[7]) */ - if (sscanf (row[7],"%u",&Ins->NumUsrs) == 1) - { - if (Ins->NumUsrs) - { - Ins->NumStds = Usr_GetNumberOfUsersInInstitution (Ins->InsCod,Rol_STUDENT); // Slow query - Ins->NumTchs = Usr_GetNumberOfUsersInInstitution (Ins->InsCod,Rol_TEACHER); // Slow query - Ins->NumUsrs = Ins->NumStds + Ins->NumTchs; - } - } - else - Ins->NumStds = Ins->NumTchs = Ins->NumUsrs = 0; + /* Get number of users who claim to belong to this institution (row[7]) */ + if (sscanf (row[7],"%u",&Ins->NumUsrsWhoClaimToBelongToIns) != 1) + Ins->NumUsrsWhoClaimToBelongToIns = 0; /* Get number of centres in this institution */ Ins->NumCtrs = Ctr_GetNumCtrsInIns (Ins->InsCod); + /* Get number of degrees in this institution */ + Ins->NumDegs = Deg_GetNumDegsInIns (Ins->InsCod); + + /* Get number of degrees in this institution */ + Ins->NumCrss = Crs_GetNumCrssInIns (Ins->InsCod); + /* Get number of departments in this institution */ Ins->NumDpts = Dpt_GetNumberOfDepartmentsInInstitution (Ins->InsCod); - /* Get number of degrees in this institution */ - Ins->NumDegs = Deg_GetNumDegsInIns (Ins->InsCod); + /* Get number of users in courses */ + Ins->NumUsrs = Usr_GetNumUsrsInCrssOfIns (Rol_UNKNOWN,Ins->InsCod); // Here Rol_UNKNOWN means "all users", NumUsrs <= NumStds + NumTchs + Ins->NumTchs = Usr_GetNumUsrsInCrssOfIns (Rol_TEACHER,Ins->InsCod); + Ins->NumStds = Usr_GetNumUsrsInCrssOfIns (Rol_STUDENT,Ins->InsCod); break; } } @@ -944,10 +1011,10 @@ bool Ins_GetDataOfInstitutionByCod (struct Institution *Ins, /* Get extra data */ if (GetExtraData == Ins_GET_EXTRA_DATA) { - /* Get number of users in this institution */ - Ins->NumStds = Usr_GetNumberOfUsersInInstitution (Ins->InsCod,Rol_STUDENT); // Slow query - Ins->NumTchs = Usr_GetNumberOfUsersInInstitution (Ins->InsCod,Rol_TEACHER); // Slow query - Ins->NumUsrs = Ins->NumStds + Ins->NumTchs; + /* Get number of users in courses of this institution */ + Ins->NumUsrs = Usr_GetNumUsrsInCrssOfIns (Rol_UNKNOWN,Ins->InsCod); // Here Rol_UNKNOWN means "all users", NumUsrs <= NumStds + NumTchs + Ins->NumStds = Usr_GetNumUsrsInCrssOfIns (Rol_STUDENT,Ins->InsCod); + Ins->NumTchs = Usr_GetNumUsrsInCrssOfIns (Rol_TEACHER,Ins->InsCod); /* Get number of centres in this institution */ Ins->NumCtrs = Ctr_GetNumCtrsInIns (Ins->InsCod); @@ -1119,7 +1186,7 @@ static void Ins_ListInstitutionsForEdition (void) /***** Get list of countries *****/ Gbl.Ctys.SelectedOrderType = Cty_ORDER_BY_COUNTRY; - Cty_GetListCountries (Cty_GET_ONLY_COUNTRIES); + Cty_GetListCountries (Cty_GET_BASIC_DATA); /***** Write heading *****/ sprintf (Gbl.Title,Txt_Institutions_of_COUNTRY_X, @@ -1418,7 +1485,7 @@ void Ins_RemoveInstitution (void) Lay_ShowErrorAndExit ("Code of institution is missing."); /***** Get data of the institution from database *****/ - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_MINIMAL_DATA); + Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); /***** Check if this institution has users *****/ if (Ctr_GetNumCtrsInIns (Ins.InsCod) || @@ -1513,7 +1580,7 @@ static void Ins_RenameInstitution (Cns_ShortOrFullName_t ShortOrFullName) Par_GetParToText (ParamName,NewInsName,MaxLength); /***** Get from the database the old names of the institution *****/ - Ins_GetDataOfInstitutionByCod (Ins,Ins_GET_MINIMAL_DATA); + Ins_GetDataOfInstitutionByCod (Ins,Ins_GET_BASIC_DATA); /***** Check if new name is empty *****/ if (!NewInsName[0]) @@ -1582,7 +1649,7 @@ static bool Ins_CheckIfInsNameExistsInCty (const char *FieldName,const char *Nam void Ins_ChangeInsCountry (void) { extern const char *Txt_The_institution_X_already_exists; - extern const char *Txt_The_country_of_the_institution_X_has_changed_Y; + extern const char *Txt_The_country_of_the_institution_X_has_changed_to_Y; struct Institution *Ins; struct Country NewCty; char Query[256]; @@ -1599,10 +1666,10 @@ void Ins_ChangeInsCountry (void) Lay_ShowErrorAndExit ("Code of country is missing."); /***** Get data of the institution from database *****/ - Ins_GetDataOfInstitutionByCod (Ins,Ins_GET_MINIMAL_DATA); + Ins_GetDataOfInstitutionByCod (Ins,Ins_GET_BASIC_DATA); /***** Get data of the country from database *****/ - Cty_GetDataOfCountryByCod (&NewCty); + Cty_GetDataOfCountryByCod (&NewCty,Cty_GET_BASIC_DATA); /***** Check if country has changed *****/ if (NewCty.CtyCod != Ins->CtyCod) @@ -1629,8 +1696,8 @@ void Ins_ChangeInsCountry (void) DB_QueryUPDATE (Query,"can not update the country of an institution"); /***** Write message to show the change made *****/ - sprintf (Gbl.Message,Txt_The_country_of_the_institution_X_has_changed_Y, - Ins->FullName,NewCty.Name); + sprintf (Gbl.Message,Txt_The_country_of_the_institution_X_has_changed_to_Y, + Ins->FullName,NewCty.Name[Gbl.Prefs.Language]); Lay_ShowAlert (Lay_SUCCESS,Gbl.Message); Ins->CtyCod = NewCty.CtyCod; @@ -1712,7 +1779,7 @@ void Ins_ChangeInsStatus (void) Status = Ins_GetStatusBitsFromStatusTxt (StatusTxt); // New status /***** Get data of institution *****/ - Ins_GetDataOfInstitutionByCod (Ins,Ins_GET_MINIMAL_DATA); + Ins_GetDataOfInstitutionByCod (Ins,Ins_GET_BASIC_DATA); /***** Update status in table of institutions *****/ sprintf (Query,"UPDATE institutions SET Status='%u' WHERE InsCod='%ld'", @@ -1772,7 +1839,7 @@ static void Ins_PutFormToCreateInstitution (void) /***** Get list of countries *****/ Gbl.Ctys.SelectedOrderType = Cty_ORDER_BY_COUNTRY; - Cty_GetListCountries (Cty_GET_ONLY_COUNTRIES); + Cty_GetListCountries (Cty_GET_BASIC_DATA); /***** Start form *****/ if (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM) diff --git a/swad_institution.h b/swad_institution.h index 70432ec4..90b187a3 100644 --- a/swad_institution.h +++ b/swad_institution.h @@ -64,12 +64,14 @@ struct Institution char ShortName[Ins_MAX_LENGTH_INSTITUTION_SHORT_NAME+1]; char FullName[Ins_MAX_LENGTH_INSTITUTION_FULL_NAME+1]; char WWW[Cns_MAX_LENGTH_WWW+1]; - unsigned NumStds; - unsigned NumTchs; - unsigned NumUsrs; + unsigned NumUsrsWhoClaimToBelongToIns; unsigned NumCtrs; - unsigned NumDpts; unsigned NumDegs; + unsigned NumCrss; + unsigned NumDpts; + unsigned NumUsrs; + unsigned NumTchs; + unsigned NumStds; }; typedef enum @@ -82,7 +84,7 @@ typedef enum typedef enum { - Ins_GET_MINIMAL_DATA, + Ins_GET_BASIC_DATA, Ins_GET_EXTRA_DATA, } Ins_GetExtraData_t; diff --git a/swad_layout.c b/swad_layout.c index f10df4dc..93d01caa 100644 --- a/swad_layout.c +++ b/swad_layout.c @@ -1456,7 +1456,7 @@ void Lay_WriteHeaderClassPhoto (unsigned NumColumns,bool PrintView,bool DrawingC /***** Get data of institution *****/ Ins.InsCod = InsCod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_MINIMAL_DATA); + Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); /***** Get data of degree *****/ Deg.DegCod = DegCod; diff --git a/swad_notification.c b/swad_notification.c index 4e9da3f0..b4efecf0 100644 --- a/swad_notification.c +++ b/swad_notification.c @@ -361,7 +361,7 @@ void Ntf_ShowMyNotifications (void) /* Get institution code (row[2]) */ Ins.InsCod = Str_ConvertStrCodToLongCod (row[2]); - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_MINIMAL_DATA); + Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); /* Get centre code (row[3]) */ Ctr.CtrCod = Str_ConvertStrCodToLongCod (row[3]); @@ -1415,7 +1415,7 @@ static void Ntf_SendPendingNotifByEMailToOneUsr (struct UsrData *ToUsrDat,unsign /* Get institution code (row[2]) */ Ins.InsCod = Str_ConvertStrCodToLongCod (row[2]); - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_MINIMAL_DATA); + Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); /* Get centre code (row[3]) */ Ctr.CtrCod = Str_ConvertStrCodToLongCod (row[3]); diff --git a/swad_record.c b/swad_record.c index a03a7509..6164db2a 100644 --- a/swad_record.c +++ b/swad_record.c @@ -2127,7 +2127,7 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView, if (UsrDat->InsCod > 0) { Ins.InsCod = UsrDat->InsCod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_MINIMAL_DATA); + Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); /* Form to go to the institution */ if (PutFormLinks) @@ -2792,7 +2792,7 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView, if (!Gbl.Ctys.Num) { Gbl.Ctys.SelectedOrderType = Cty_ORDER_BY_COUNTRY; - Cty_GetListCountries (Cty_GET_ONLY_COUNTRIES); + Cty_GetListCountries (Cty_GET_BASIC_DATA); } fprintf (Gbl.F.Out,"" @@ -3366,7 +3366,7 @@ void Rec_ShowFormMyInsCtrDpt (void) extern const char *Txt_Please_fill_in_your_centre_and_department; extern const char *Txt_Institution_centre_and_department; extern const char *Txt_Institution; - extern const char *Txt_Country_of_institution; + extern const char *Txt_Country_of_the_institution; extern const char *Txt_Another_institution; extern const char *Txt_Centre; extern const char *Txt_Another_centre; @@ -3401,14 +3401,14 @@ void Rec_ShowFormMyInsCtrDpt (void) "%s:" "" "", - ClassForm,Txt_Country_of_institution, + ClassForm,Txt_Country_of_the_institution, COL2_WIDTH); /* If list of countries is empty, try to get it */ if (!Gbl.Ctys.Num) { Gbl.Ctys.SelectedOrderType = Cty_ORDER_BY_COUNTRY; - Cty_GetListCountries (Cty_GET_ONLY_COUNTRIES); + Cty_GetListCountries (Cty_GET_BASIC_DATA); } /* Start form to select the country of my institution */ @@ -3448,7 +3448,7 @@ void Rec_ShowFormMyInsCtrDpt (void) /* Get list of institutions in this country */ Ins_FreeListInstitutions (); if (Gbl.Usrs.Me.UsrDat.InsCtyCod > 0) - Ins_GetListInstitutions (Gbl.Usrs.Me.UsrDat.InsCtyCod,Ins_GET_MINIMAL_DATA); + Ins_GetListInstitutions (Gbl.Usrs.Me.UsrDat.InsCtyCod,Ins_GET_BASIC_DATA); /* Start form to select institution */ Act_FormGoToStart (ActChgMyIns); @@ -3653,7 +3653,7 @@ void Rec_UpdateMyInstitution (void) /* Get country of institution */ if (Ins.InsCod > 0) { - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_MINIMAL_DATA); + Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); if (Gbl.Usrs.Me.UsrDat.InsCtyCod != Ins.CtyCod) Gbl.Usrs.Me.UsrDat.InsCtyCod = Ins.CtyCod; } diff --git a/swad_statistic.c b/swad_statistic.c index e30544a7..f1987f85 100644 --- a/swad_statistic.c +++ b/swad_statistic.c @@ -3293,11 +3293,11 @@ static void Sta_WriteCountry (long CtyCod) { /***** Get data of country *****/ Cty.CtyCod = CtyCod; - Cty_GetDataOfCountryByCod (&Cty); + Cty_GetDataOfCountryByCod (&Cty,Cty_GET_BASIC_DATA); /***** Form to go to country *****/ Cty_DrawCountryMapAndNameWithLink (&Cty,ActSeeCtyInf, - "LOG","COUNTRY_MAP_TINY"); + "LOG","COUNTRY_MAP_TINY"); } else // Hit with no country selected /***** No country selected *****/ @@ -3384,7 +3384,7 @@ static void Sta_WriteInstitution (long InsCod) { /***** Get data of institution *****/ Ins.InsCod = InsCod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_MINIMAL_DATA); + Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); /***** Title in cell *****/ fprintf (Gbl.F.Out,"title=\"%s\">", @@ -5147,7 +5147,7 @@ static unsigned Sta_GetInsAndStat (struct Institution *Ins,MYSQL_RES *mysql_res) /***** Get data of this institution (row[0]) *****/ Ins->InsCod = Str_ConvertStrCodToLongCod (row[0]); - if (!Ins_GetDataOfInstitutionByCod (Ins,Ins_GET_MINIMAL_DATA)) + if (!Ins_GetDataOfInstitutionByCod (Ins,Ins_GET_BASIC_DATA)) Lay_ShowErrorAndExit ("Institution not found."); /***** Get statistic (row[1]) *****/ diff --git a/swad_text.c b/swad_text.c index 71d4ae71..b79e4454 100644 --- a/swad_text.c +++ b/swad_text.c @@ -1613,7 +1613,7 @@ const char *Txt_accessible_for_reading_and_writing_by_administrators_of_the_inst #elif L==4 "accesible para lectura y escritura por administradores de la institución"; #elif L==5 - "accessible en lecture et en écriture par les administrateurs de l'établissement"; + "accessible en lecture et en écriture par les administrateurs du établissement"; #elif L==6 "accesible para lectura y escritura por administradores de la institución"; // Okoteve traducción #elif L==7 @@ -1697,7 +1697,7 @@ const char *Txt_accessible_for_reading_and_writing_by_students_and_teachers_of_t #elif L==4 "accesible para lectura y escritura por estudiantes y profesores de la institución"; #elif L==5 - "accessible en lecture et en écriture par les étudiants et les enseignants de l'établissement"; + "accessible en lecture et en écriture par les étudiants et les enseignants du établissement"; #elif L==6 "accesible para lectura y escritura por estudiantes y profesores de la institución"; // Okoteve traducción #elif L==7 @@ -1865,7 +1865,7 @@ const char *Txt_accessible_only_for_reading_by_students_and_teachers_of_the_inst #elif L==4 "accesible solo para lectura por estudiantes y profesores de la institución"; #elif L==5 - "accessible uniquement pour la lecture par les étudiants et les enseignants de l'établissement"; + "accessible uniquement pour la lecture par les étudiants et les enseignants du établissement"; #elif L==6 "accesible solo para lectura por estudiantes y profesores de la institución"; // Okoteve traducción #elif L==7 @@ -3972,23 +3972,23 @@ const char *Txt_Centres = const char *Txt_Centres_ABBREVIATION = #if L==1 - "Centres"; + "Cent."; #elif L==2 - "Lehrinst."; + "Lehrin."; #elif L==3 - "Centres"; + "Cent."; #elif L==4 - "Centros"; + "Cent."; #elif L==5 - "Centres"; + "Cent."; #elif L==6 "Mbo'ehao"; #elif L==7 - "Centri"; + "Cent."; #elif L==8 - "Centra"; + "Cent."; #elif L==9 - "Centros"; + "Cent."; #endif const char *Txt_centres = @@ -5193,23 +5193,23 @@ const char *Txt_COUNTRIES_ORDER[2] = #endif , #if L==1 - "Usuaris d'aquesta nacionalitat" + "Usuaris del país" #elif L==2 - "Benutzer dieser Staatsangehörigkeit" + "Benutzer des Landes" #elif L==3 - "Users of that nationality" + "Users of the country" #elif L==4 - "Usuarios de esa nacionalidad" + "Usuarios del país" #elif L==5 - "Utilisateurs de cette nationalité" + "Utilisateurs du pays" #elif L==6 - "Usuarios de esa nacionalidad" // Okoteve traducción + "Usuarios del país" // Okoteve traducción #elif L==7 - "Utenti di questa nazionalità" + "Utenti del paese" #elif L==8 - "Użytkownicy tej narodowości" + "Użytkownicy kraju" #elif L==9 - "Utilizadores dessa nacionalidade" + "Utilizadores do país" #endif }; @@ -5234,25 +5234,25 @@ const char *Txt_Country = "País"; #endif -const char *Txt_Country_of_institution = +const char *Txt_Country_of_the_institution = #if L==1 "País de la institució"; #elif L==2 "Land der Hochschule"; #elif L==3 - "Country of institution"; + "Country of the institution"; #elif L==4 "País de la institución"; #elif L==5 - "Pays de l'établissement"; + "Pays du établissement"; #elif L==6 "Tetã mbo'ehao"; #elif L==7 - "Paese di istituzione"; + "Paese della istituzione"; #elif L==8 "Kraj instytucji"; #elif L==9 - "País de institução"; + "País da institução"; #endif const char *Txt_Country_unspecified = @@ -14814,6 +14814,27 @@ const char *Txt_Institutions = "Instituções"; #endif +const char *Txt_Institutions_ABBREVIATION = +#if L==1 + "Instit."; +#elif L==2 + "Hochsc."; +#elif L==3 + "Instit."; +#elif L==4 + "Instit."; +#elif L==5 + "Établ."; +#elif L==6 + "Mbo'ehao"; +#elif L==7 + "Istit."; +#elif L==8 + "Instyt."; +#elif L==9 + "Instit."; +#endif + const char *Txt_institutions = #if L==1 "institucions"; @@ -15027,23 +15048,23 @@ const char *Txt_INSTITUTIONS_ORDER[2] = #endif , #if L==1 - "Usuaris" + "Usuaris de la institució" #elif L==2 - "Benutzer" + "Benutzer der Hochschule" #elif L==3 - "Users" + "Users of the institution" #elif L==4 - "Usuarios" + "Usuarios de la institución" #elif L==5 - "Utilisateurs" + "Utilisateurs du établissement" #elif L==6 - "Puruhára" + "Usuarios de la institución" // Okoteve traducción #elif L==7 - "Utenti" + "Utenti della istituzione" #elif L==8 - "Użytkownicy" + "Użytkownicy instytucji" #elif L==9 - "Utilizadores" + "Utilizadores da institução" #endif }; @@ -39110,7 +39131,7 @@ const char *Txt_The_country_X_has_been_renamed_as_Y = // Warning: it is very imp "The country %s has been renamed as %s."; // Necessita de tradução #endif -const char *Txt_The_country_of_the_institution_X_has_changed_Y = // Warning: it is very important to include two %s in the following sentences +const char *Txt_The_country_of_the_institution_X_has_changed_to_Y = // Warning: it is very important to include two %s in the following sentences #if L==1 "El país de la institución %s" " ha cambiado a %s."; // Necessita traduccio @@ -47130,25 +47151,46 @@ const char *Txt_X_users_have_been_removed = // Warning: it is very important to "%u users have been removed."; // Necessita de tradução #endif -const char *Txt_Users_in_courses = +const char *Txt_Users_of_the_country = #if L==1 - "Usuaris en assignatures"; + "Usuaris del país"; #elif L==2 - "Benutzer in Kurse"; + "Benutzer des Landes"; #elif L==3 - "Users in courses"; + "Users of the country"; #elif L==4 - "Usuarios en asignaturas"; + "Usuarios del país"; #elif L==5 - "Utilisateurs dans matières"; + "Utilisateurs du pays"; #elif L==6 - "Usuarios en asignaturas"; // Okoteve traducción + "Usuarios del país"; // Okoteve traducción #elif L==7 - "Utenti in corsi"; + "Utenti del paese"; #elif L==8 - "Użytkowników w kursõw"; + "Użytkownicy kraju"; #elif L==9 - "Usuários em disciplinas"; + "Utilizadores do país"; +#endif + +const char *Txt_Users_of_the_institution = +#if L==1 + "Usuaris de la institució"; +#elif L==2 + "Benutzer der Hochschule"; +#elif L==3 + "Users of the institution"; +#elif L==4 + "Usuarios de la institución"; +#elif L==5 + "Utilisateurs du établissement"; +#elif L==6 + "Usuarios de la institución"; // Okoteve traducción +#elif L==7 + "Utenti della istituzione"; +#elif L==8 + "Użytkownicy instytucji"; +#elif L==9 + "Utilizadores da institução"; #endif const char *Txt_usr = // Abbreviation of user (three characters + dot) diff --git a/swad_user.c b/swad_user.c index 9a12268a..ed41c2ba 100644 --- a/swad_user.c +++ b/swad_user.c @@ -2719,7 +2719,7 @@ static void Usr_WriteRowGstMainData (unsigned NumUsr,struct UsrData *UsrDat) /***** Write rest of main student's data *****/ Ins.InsCod = UsrDat->InsCod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_MINIMAL_DATA); + Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); Usr_WriteMainUsrDataExceptUsrID (UsrDat,Gbl.ColorRows[Gbl.RowEvenOdd],true, UsrDat->Email[0] ? MailLink : NULL, @@ -2821,7 +2821,7 @@ void Usr_WriteRowStdMainData (unsigned NumUsr,struct UsrData *UsrDat,bool PutChe /***** Write rest of main student's data *****/ Ins.InsCod = UsrDat->InsCod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_MINIMAL_DATA); + Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); Usr_WriteMainUsrDataExceptUsrID (UsrDat,BgColor,ShowEmail, UsrDat->Email[0] ? MailLink : NULL, @@ -2870,7 +2870,7 @@ static void Usr_WriteRowGstAllData (struct UsrData *UsrDat) /***** Write rest of guest's main data *****/ Ins.InsCod = UsrDat->InsCod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_MINIMAL_DATA); + Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); Usr_WriteMainUsrDataExceptUsrID (UsrDat,Gbl.ColorRows[Gbl.RowEvenOdd],true, NULL,Ins.ShortName,NULL); @@ -2974,7 +2974,7 @@ void Usr_WriteRowStdAllData (struct UsrData *UsrDat,char *GroupNames) /***** Write rest of main student's data *****/ Ins.InsCod = UsrDat->InsCod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_MINIMAL_DATA); + Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); Usr_WriteMainUsrDataExceptUsrID (UsrDat,Gbl.ColorRows[Gbl.RowEvenOdd],ShowData,NULL,Ins.ShortName,NULL); /***** Write the rest of the data of the student *****/ @@ -3133,7 +3133,7 @@ static void Usr_WriteRowTchMainData (unsigned NumUsr,struct UsrData *UsrDat,bool /***** Write rest of main teacher's data *****/ Ins.InsCod = UsrDat->InsCod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_MINIMAL_DATA); + Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); Usr_WriteMainUsrDataExceptUsrID (UsrDat,BgColor,ShowEmail, UsrDat->Email[0] ? MailLink : NULL, @@ -3185,7 +3185,7 @@ void Usr_WriteRowTchAllData (struct UsrData *UsrDat) /***** Write rest of main teacher's data *****/ Ins.InsCod = UsrDat->InsCod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_MINIMAL_DATA); + Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); Usr_WriteMainUsrDataExceptUsrID (UsrDat,Gbl.ColorRows[Gbl.RowEvenOdd],ShowData,NULL,Ins.ShortName,NULL); /***** Write the rest of teacher's data *****/ @@ -3266,7 +3266,7 @@ void Usr_WriteRowAdmData (unsigned NumUsr,struct UsrData *UsrDat) /***** Write rest of main administrator's data *****/ Ins.InsCod = UsrDat->InsCod; - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_MINIMAL_DATA); + Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); Usr_WriteMainUsrDataExceptUsrID (UsrDat,Gbl.ColorRows[Gbl.RowEvenOdd],true, UsrDat->Email[0] ? MailLink : NULL, @@ -3377,7 +3377,7 @@ unsigned Usr_GetNumUsrsInCrssOfDeg (Rol_Role_t Role,long DegCod) { char Query[512]; - /***** Get the number of users in a degree from database ******/ + /***** Get the number of users in courses of a degree from database ******/ sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)" " FROM courses,crs_usr" " WHERE courses.DegCod='%ld'" @@ -3395,7 +3395,7 @@ unsigned Usr_GetNumUsrsInCrssOfCtr (Rol_Role_t Role,long CtrCod) { char Query[512]; - /***** Get the number of users in a degree from database ******/ + /***** Get the number of users in courses of a centre from database ******/ sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)" " FROM degrees,courses,crs_usr" " WHERE degrees.CtrCod='%ld'" @@ -3409,20 +3409,30 @@ unsigned Usr_GetNumUsrsInCrssOfCtr (Rol_Role_t Role,long CtrCod) /*****************************************************************************/ /********* Count how many users with a role belong to an institution *********/ /*****************************************************************************/ +// Here Rol_UNKNOWN means students or teachers unsigned Usr_GetNumUsrsInCrssOfIns (Rol_Role_t Role,long InsCod) { char Query[512]; - /***** Get the number of users in a degree from database ******/ - sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)" - " FROM centres,degrees,courses,crs_usr" - " WHERE centres.InsCod='%ld'" - " AND centres.CtrCod=degrees.CtrCod" - " AND degrees.DegCod=courses.DegCod" - " AND courses.CrsCod=crs_usr.CrsCod" - " AND crs_usr.Role='%u'", - InsCod,(unsigned) Role); + /***** Get the number of users in a courses of an institution from database ******/ + if (Role == Rol_UNKNOWN) // Any user + sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)" + " FROM centres,degrees,courses,crs_usr" + " WHERE centres.InsCod='%ld'" + " AND centres.CtrCod=degrees.CtrCod" + " AND degrees.DegCod=courses.DegCod" + " AND courses.CrsCod=crs_usr.CrsCod", + InsCod); + else + sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)" + " FROM centres,degrees,courses,crs_usr" + " WHERE centres.InsCod='%ld'" + " AND centres.CtrCod=degrees.CtrCod" + " AND degrees.DegCod=courses.DegCod" + " AND courses.CrsCod=crs_usr.CrsCod" + " AND crs_usr.Role='%u'", + InsCod,(unsigned) Role); return (unsigned) DB_QueryCOUNT (Query,"can not get the number of users in courses of an institution"); } @@ -3430,11 +3440,12 @@ unsigned Usr_GetNumUsrsInCrssOfIns (Rol_Role_t Role,long InsCod) /****** Count how many users with a role belong to courses of a country ******/ /*****************************************************************************/ // Here Rol_UNKNOWN means students or teachers + unsigned Usr_GetNumUsrsInCrssOfCty (Rol_Role_t Role,long CtyCod) { char Query[512]; - /***** Get the number of users in a degree from database ******/ + /***** Get the number of users in courses of a country from database ******/ if (Role == Rol_UNKNOWN) // Any user sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)" " FROM institutions,centres,degrees,courses,crs_usr" @@ -3536,20 +3547,34 @@ unsigned Usr_GetNumTchsCurrentInsInDepartment (long DptCod) } /*****************************************************************************/ -/******************* Get number of users in a institution ********************/ +/*********** Get number of users who claim to belong to a country ************/ /*****************************************************************************/ -unsigned Usr_GetNumberOfUsersInInstitution (long InsCod,Rol_Role_t Role) +unsigned Usr_GetNumUsrsWhoClaimToBelongToCty (long CtyCod) { - char Query[256]; + char Query[128]; + + /***** Get the number of users in a country from database *****/ + sprintf (Query,"SELECT COUNT(DISTINCT UsrCod)" + " FROM usr_data" + " WHERE usr_data.CtyCod='%ld'", + CtyCod); + return (unsigned) DB_QueryCOUNT (Query,"can not get the number of users in a country"); + } + +/*****************************************************************************/ +/******** Get number of users who claim to belong to an institution **********/ +/*****************************************************************************/ + +unsigned Usr_GetNumUsrsWhoClaimToBelongToIns (long InsCod) + { + char Query[128]; /***** Get the number of users in an institution from database *****/ - // The following query is very slow, so call this function as minimum as possible - sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)" - " FROM usr_data,crs_usr" - " WHERE usr_data.InsCod='%ld'" - " AND usr_data.UsrCod=crs_usr.UsrCod AND crs_usr.Role='%u'", - InsCod,(unsigned) Role); + sprintf (Query,"SELECT COUNT(DISTINCT UsrCod)" + " FROM usr_data" + " WHERE usr_data.InsCod='%ld'", + InsCod); return (unsigned) DB_QueryCOUNT (Query,"can not get the number of users in an institution"); } diff --git a/swad_user.h b/swad_user.h index 9ffa2808..bcbac48b 100644 --- a/swad_user.h +++ b/swad_user.h @@ -283,7 +283,8 @@ long Usr_GetRamdomStdFromCrs (long CrsCod); long Usr_GetRamdomStdFromGrp (long GrpCod); unsigned Usr_GetNumTchsCurrentInsInDepartment (long DptCod); -unsigned Usr_GetNumberOfUsersInInstitution (long InsCod,Rol_Role_t Role); +unsigned Usr_GetNumUsrsWhoClaimToBelongToCty (long InsCod); +unsigned Usr_GetNumUsrsWhoClaimToBelongToIns (long InsCod); unsigned Usr_GetNumberOfTeachersInCentre (long CtrCod); void Usr_GetUsrsLst (Rol_Role_t Role,Sco_Scope_t ListUsrsRange,const char *TchQuery,bool Search); diff --git a/swad_web_service.c b/swad_web_service.c index a028e8ee..35952bf9 100644 --- a/swad_web_service.c +++ b/swad_web_service.c @@ -2624,7 +2624,7 @@ int swad__getNotifications (struct soap *soap, /* Get institution (row[4]) */ Ins.InsCod = Str_ConvertStrCodToLongCod (row[4]); - Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_MINIMAL_DATA); + Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); /* Get centre (row[5]) */ Ctr.CtrCod = Str_ConvertStrCodToLongCod (row[5]);