mirror of
https://github.com/acanas/swad-core.git
synced 2024-06-15 21:24:07 +02:00
Version 14.108
This commit is contained in:
parent
415ca04a74
commit
308a722d85
|
@ -103,11 +103,12 @@
|
||||||
/****************************** Public constants *****************************/
|
/****************************** Public constants *****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define Log_PLATFORM_VERSION "SWAD 14.107.8 (2015/04/03)"
|
#define Log_PLATFORM_VERSION "SWAD 14.108 (2015/04/03)"
|
||||||
|
|
||||||
// Number of lines (includes comments but not blank lines) has been got with the following command:
|
// 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
|
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
|
||||||
/*
|
/*
|
||||||
|
Version 14.108: Apr 03, 2015 New statistic (figure) about institutions. (184136 lines)
|
||||||
Version 14.107.8: Apr 03, 2015 Changes in statistics (figures about hierarchy). (183774 lines)
|
Version 14.107.8: Apr 03, 2015 Changes in statistics (figures about hierarchy). (183774 lines)
|
||||||
Version 14.107.7: Apr 03, 2015 Changes in layout of sent / received messages. (183753 lines)
|
Version 14.107.7: Apr 03, 2015 Changes in layout of sent / received messages. (183753 lines)
|
||||||
Version 14.107.6: Apr 03, 2015 Changes in layout of form to change password. (183748 lines)
|
Version 14.107.6: Apr 03, 2015 Changes in layout of form to change password. (183748 lines)
|
||||||
|
|
|
@ -1066,6 +1066,16 @@ void Lay_WriteTitle (const char *Title)
|
||||||
// CellPadding must be 0, 1, 2, 4 or 8
|
// CellPadding must be 0, 1, 2, 4 or 8
|
||||||
|
|
||||||
void Lay_StartRoundFrameTable10 (const char *Width,unsigned CellPadding,const char *Title)
|
void Lay_StartRoundFrameTable10 (const char *Width,unsigned CellPadding,const char *Title)
|
||||||
|
{
|
||||||
|
Lay_StartRoundFrame10 (Width,Title);
|
||||||
|
|
||||||
|
fprintf (Gbl.F.Out,"<table class=\"TABLE10");
|
||||||
|
if (CellPadding)
|
||||||
|
fprintf (Gbl.F.Out," CELLS_PAD_%u",CellPadding); // CellPadding must be 0, 1, 2, 4 or 8
|
||||||
|
fprintf (Gbl.F.Out,"\">");
|
||||||
|
}
|
||||||
|
|
||||||
|
void Lay_StartRoundFrame10 (const char *Width,const char *Title)
|
||||||
{
|
{
|
||||||
fprintf (Gbl.F.Out,"<div style=\"text-align:center;\">"
|
fprintf (Gbl.F.Out,"<div style=\"text-align:center;\">"
|
||||||
"<div class=\"FRAME10\"");
|
"<div class=\"FRAME10\"");
|
||||||
|
@ -1079,11 +1089,6 @@ void Lay_StartRoundFrameTable10 (const char *Width,unsigned CellPadding,const ch
|
||||||
"%s"
|
"%s"
|
||||||
"</div>",
|
"</div>",
|
||||||
Title);
|
Title);
|
||||||
|
|
||||||
fprintf (Gbl.F.Out,"<table class=\"TABLE10");
|
|
||||||
if (CellPadding)
|
|
||||||
fprintf (Gbl.F.Out," CELLS_PAD_%u",CellPadding); // CellPadding must be 0, 1, 2, 4 or 8
|
|
||||||
fprintf (Gbl.F.Out,"\">");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// CellPadding must be 0, 1, 2, 4 or 8
|
// CellPadding must be 0, 1, 2, 4 or 8
|
||||||
|
@ -1104,8 +1109,13 @@ void Lay_StartRoundFrameTable10Shadow (const char *Width,unsigned CellPadding)
|
||||||
|
|
||||||
void Lay_EndRoundFrameTable10 (void)
|
void Lay_EndRoundFrameTable10 (void)
|
||||||
{
|
{
|
||||||
fprintf (Gbl.F.Out,"</table>"
|
fprintf (Gbl.F.Out,"</table>");
|
||||||
"</div>"
|
Lay_EndRoundFrame10 ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Lay_EndRoundFrame10 (void)
|
||||||
|
{
|
||||||
|
fprintf (Gbl.F.Out,"</div>"
|
||||||
"</div>");
|
"</div>");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -98,8 +98,11 @@ void Lay_PutConfirmButtonInline (const char *Text);
|
||||||
void Lay_PutRemoveButton (const char *Text);
|
void Lay_PutRemoveButton (const char *Text);
|
||||||
|
|
||||||
void Lay_StartRoundFrameTable10 (const char *Width,unsigned CellPadding,const char *Title);
|
void Lay_StartRoundFrameTable10 (const char *Width,unsigned CellPadding,const char *Title);
|
||||||
|
void Lay_StartRoundFrame10 (const char *Width,const char *Title);
|
||||||
void Lay_StartRoundFrameTable10Shadow (const char *Width,unsigned CellPadding);
|
void Lay_StartRoundFrameTable10Shadow (const char *Width,unsigned CellPadding);
|
||||||
void Lay_EndRoundFrameTable10 (void);
|
void Lay_EndRoundFrameTable10 (void);
|
||||||
|
void Lay_EndRoundFrame10 (void);
|
||||||
|
|
||||||
void Lay_ShowErrorAndExit (const char *Message);
|
void Lay_ShowErrorAndExit (const char *Message);
|
||||||
void Lay_ShowAlert (Lay_AlertType_t MsgType,const char *Message);
|
void Lay_ShowAlert (Lay_AlertType_t MsgType,const char *Message);
|
||||||
void Lay_RefreshNotifsAndConnected (void);
|
void Lay_RefreshNotifsAndConnected (void);
|
||||||
|
|
378
swad_statistic.c
378
swad_statistic.c
|
@ -123,7 +123,7 @@ static void Sta_WriteDegree (long DegCod);
|
||||||
static void Sta_DrawBarNumClicks (char Color,float NumPagesGenerated,float MaxPagesGenerated,float TotalPagesGenerated,unsigned MaxBarWidth);
|
static void Sta_DrawBarNumClicks (char Color,float NumPagesGenerated,float MaxPagesGenerated,float TotalPagesGenerated,unsigned MaxBarWidth);
|
||||||
static void Sta_WriteSelectedRangeOfDates (unsigned NumDays);
|
static void Sta_WriteSelectedRangeOfDates (unsigned NumDays);
|
||||||
|
|
||||||
static void Sta_GetAndShowDegCrsStats (void);
|
static void Sta_GetAndShowHierarchyStats (void);
|
||||||
static void Sta_WriteHeadDegsCrssInSWAD (void);
|
static void Sta_WriteHeadDegsCrssInSWAD (void);
|
||||||
static void Sta_GetAndShowNumCtysInSWAD (void);
|
static void Sta_GetAndShowNumCtysInSWAD (void);
|
||||||
static void Sta_GetAndShowNumInssInSWAD (void);
|
static void Sta_GetAndShowNumInssInSWAD (void);
|
||||||
|
@ -131,6 +131,14 @@ static void Sta_GetAndShowNumCtrsInSWAD (void);
|
||||||
static void Sta_GetAndShowNumDegsInSWAD (void);
|
static void Sta_GetAndShowNumDegsInSWAD (void);
|
||||||
static void Sta_GetAndShowNumCrssInSWAD (void);
|
static void Sta_GetAndShowNumCrssInSWAD (void);
|
||||||
|
|
||||||
|
static void Sta_GetAndShowInstitutionsStats (void);
|
||||||
|
static void Sta_GetAndShowInssOrderedByNumCtrs (void);
|
||||||
|
static void Sta_GetAndShowInssOrderedByNumDegs (void);
|
||||||
|
static void Sta_GetAndShowInssOrderedByNumCrss (void);
|
||||||
|
static void Sta_GetAndShowInssOrderedByNumUsrsInCrss (void);
|
||||||
|
static void Sta_GetAndShowInssOrderedByNumUsrsWhoClaimToBelongToThem (void);
|
||||||
|
static void Sta_GetAndShowInss (const char *Query,const char *TxtFigure);
|
||||||
|
|
||||||
static void Sta_GetAndShowUsersStats (void);
|
static void Sta_GetAndShowUsersStats (void);
|
||||||
static void Sta_GetAndShowUsersRanking (void);
|
static void Sta_GetAndShowUsersRanking (void);
|
||||||
|
|
||||||
|
@ -3670,7 +3678,11 @@ void Sta_ShowUseOfPlatform (void)
|
||||||
break;
|
break;
|
||||||
case Sta_HIERARCHY:
|
case Sta_HIERARCHY:
|
||||||
/***** Number of degrees and courses *****/
|
/***** Number of degrees and courses *****/
|
||||||
Sta_GetAndShowDegCrsStats ();
|
Sta_GetAndShowHierarchyStats ();
|
||||||
|
break;
|
||||||
|
case Sta_INSTITUTIONS:
|
||||||
|
/***** Number of institutions with users *****/
|
||||||
|
Sta_GetAndShowInstitutionsStats ();
|
||||||
break;
|
break;
|
||||||
case Sta_SOCIAL_NETWORKS:
|
case Sta_SOCIAL_NETWORKS:
|
||||||
/***** Number of users in social networks *****/
|
/***** Number of users in social networks *****/
|
||||||
|
@ -3860,10 +3872,11 @@ static void Sta_GetAndShowUsersRanking (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/*************** Get and show stats about degrees and courses ****************/
|
/********* Get and show stats about hierarchy ***********/
|
||||||
|
/********* (countries, institutions, centres, degrees and courses) ***********/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void Sta_GetAndShowDegCrsStats (void)
|
static void Sta_GetAndShowHierarchyStats (void)
|
||||||
{
|
{
|
||||||
extern const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS];
|
extern const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS];
|
||||||
|
|
||||||
|
@ -4474,6 +4487,363 @@ static void Sta_GetAndShowNumCrssInSWAD (void)
|
||||||
NumCrssWithStds);
|
NumCrssWithStds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/****************** Get and show stats about institutions ********************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
static void Sta_GetAndShowInstitutionsStats (void)
|
||||||
|
{
|
||||||
|
/****** Institutions ordered by number of centres ******/
|
||||||
|
Sta_GetAndShowInssOrderedByNumCtrs ();
|
||||||
|
|
||||||
|
/****** Institutions ordered by number of degrees ******/
|
||||||
|
Sta_GetAndShowInssOrderedByNumDegs ();
|
||||||
|
|
||||||
|
/****** Institutions ordered by number of courses ******/
|
||||||
|
Sta_GetAndShowInssOrderedByNumCrss ();
|
||||||
|
|
||||||
|
/****** Institutions ordered by number of users in courses ******/
|
||||||
|
Sta_GetAndShowInssOrderedByNumUsrsInCrss ();
|
||||||
|
|
||||||
|
/****** Institutions ordered by number of users who claim to belong to them ******/
|
||||||
|
Sta_GetAndShowInssOrderedByNumUsrsWhoClaimToBelongToThem ();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/**** Get and show stats about institutions ordered by number of centres *****/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
static void Sta_GetAndShowInssOrderedByNumCtrs (void)
|
||||||
|
{
|
||||||
|
extern const char *The_ClassFormul[The_NUM_THEMES];
|
||||||
|
extern const char *Txt_Centres;
|
||||||
|
char Query[1024];
|
||||||
|
|
||||||
|
/****** Institutions ordered by number of centres ******/
|
||||||
|
Lay_StartRoundFrameTable10 ("100%",2,"Instituciones según número de centros"); // Need translation
|
||||||
|
|
||||||
|
/***** Get institutions ordered by number of centres *****/
|
||||||
|
switch (Gbl.Scope.Current)
|
||||||
|
{
|
||||||
|
case Sco_SCOPE_SYS:
|
||||||
|
sprintf (Query,"SELECT InsCod,COUNT(*) AS N"
|
||||||
|
" FROM centres"
|
||||||
|
" GROUP BY InsCod"
|
||||||
|
" ORDER BY N DESC");
|
||||||
|
break;
|
||||||
|
case Sco_SCOPE_CTY:
|
||||||
|
sprintf (Query,"SELECT centres.InsCod,COUNT(*) AS N"
|
||||||
|
" FROM institutions,centres"
|
||||||
|
" WHERE institutions.CtyCod='%ld'"
|
||||||
|
" AND institutions.InsCod=centres.InsCod"
|
||||||
|
" GROUP BY centres.InsCod"
|
||||||
|
" ORDER BY N DESC",
|
||||||
|
Gbl.CurrentCty.Cty.CtyCod);
|
||||||
|
break;
|
||||||
|
case Sco_SCOPE_INS:
|
||||||
|
case Sco_SCOPE_CTR:
|
||||||
|
case Sco_SCOPE_DEG:
|
||||||
|
case Sco_SCOPE_CRS:
|
||||||
|
sprintf (Query,"SELECT InsCod,COUNT(*) AS N"
|
||||||
|
" FROM centres"
|
||||||
|
" WHERE InsCod='%ld'"
|
||||||
|
" ORDER BY N DESC",
|
||||||
|
Gbl.CurrentIns.Ins.InsCod);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Lay_ShowErrorAndExit ("Wrong scope.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Sta_GetAndShowInss (Query,Txt_Centres);
|
||||||
|
|
||||||
|
Lay_EndRoundFrameTable10 ();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/**** Get and show stats about institutions ordered by number of degrees *****/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
static void Sta_GetAndShowInssOrderedByNumDegs (void)
|
||||||
|
{
|
||||||
|
extern const char *The_ClassFormul[The_NUM_THEMES];
|
||||||
|
extern const char *Txt_Degrees;
|
||||||
|
char Query[1024];
|
||||||
|
|
||||||
|
/****** Institutions ordered by number of centres ******/
|
||||||
|
Lay_StartRoundFrameTable10 ("100%",2,"Instituciones según número de titulaciones"); // Need translation
|
||||||
|
|
||||||
|
/***** Get institutions ordered by number of degrees *****/
|
||||||
|
switch (Gbl.Scope.Current)
|
||||||
|
{
|
||||||
|
case Sco_SCOPE_SYS:
|
||||||
|
sprintf (Query,"SELECT centres.InsCod,COUNT(*) AS N"
|
||||||
|
" FROM centres,degrees"
|
||||||
|
" WHERE centres.CtrCod=degrees.CtrCod"
|
||||||
|
" GROUP BY InsCod"
|
||||||
|
" ORDER BY N DESC");
|
||||||
|
break;
|
||||||
|
case Sco_SCOPE_CTY:
|
||||||
|
sprintf (Query,"SELECT centres.InsCod,COUNT(*) AS N"
|
||||||
|
" FROM institutions,centres,degrees"
|
||||||
|
" WHERE institutions.CtyCod='%ld'"
|
||||||
|
" AND institutions.InsCod=centres.InsCod"
|
||||||
|
" AND centres.CtrCod=degrees.CtrCod"
|
||||||
|
" GROUP BY centres.InsCod"
|
||||||
|
" ORDER BY N DESC",
|
||||||
|
Gbl.CurrentCty.Cty.CtyCod);
|
||||||
|
break;
|
||||||
|
case Sco_SCOPE_INS:
|
||||||
|
case Sco_SCOPE_CTR:
|
||||||
|
case Sco_SCOPE_DEG:
|
||||||
|
case Sco_SCOPE_CRS:
|
||||||
|
sprintf (Query,"SELECT centres.InsCod,COUNT(*) AS N"
|
||||||
|
" FROM centres,degrees"
|
||||||
|
" WHERE centres.InsCod='%ld'"
|
||||||
|
" AND centres.CtrCod=degrees.CtrCod"
|
||||||
|
" ORDER BY N DESC",
|
||||||
|
Gbl.CurrentIns.Ins.InsCod);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Lay_ShowErrorAndExit ("Wrong scope.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Sta_GetAndShowInss (Query,Txt_Degrees);
|
||||||
|
|
||||||
|
Lay_EndRoundFrameTable10 ();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/**** Get and show stats about institutions ordered by number of courses *****/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
static void Sta_GetAndShowInssOrderedByNumCrss (void)
|
||||||
|
{
|
||||||
|
extern const char *The_ClassFormul[The_NUM_THEMES];
|
||||||
|
extern const char *Txt_Courses;
|
||||||
|
char Query[1024];
|
||||||
|
|
||||||
|
/****** Institutions ordered by number of centres ******/
|
||||||
|
Lay_StartRoundFrameTable10 ("100%",2,"Instituciones según número de asignaturas"); // Need translation
|
||||||
|
|
||||||
|
/***** Get institutions ordered by number of courses *****/
|
||||||
|
switch (Gbl.Scope.Current)
|
||||||
|
{
|
||||||
|
case Sco_SCOPE_SYS:
|
||||||
|
sprintf (Query,"SELECT centres.InsCod,COUNT(*) AS N"
|
||||||
|
" FROM centres,degrees,courses"
|
||||||
|
" WHERE centres.CtrCod=degrees.CtrCod"
|
||||||
|
" AND degrees.DegCod=courses.DegCod"
|
||||||
|
" GROUP BY InsCod"
|
||||||
|
" ORDER BY N DESC");
|
||||||
|
break;
|
||||||
|
case Sco_SCOPE_CTY:
|
||||||
|
sprintf (Query,"SELECT centres.InsCod,COUNT(*) AS N"
|
||||||
|
" FROM institutions,centres,degrees,courses"
|
||||||
|
" WHERE institutions.CtyCod='%ld'"
|
||||||
|
" AND institutions.InsCod=centres.InsCod"
|
||||||
|
" AND centres.CtrCod=degrees.CtrCod"
|
||||||
|
" AND degrees.DegCod=courses.DegCod"
|
||||||
|
" GROUP BY centres.InsCod"
|
||||||
|
" ORDER BY N DESC",
|
||||||
|
Gbl.CurrentCty.Cty.CtyCod);
|
||||||
|
break;
|
||||||
|
case Sco_SCOPE_INS:
|
||||||
|
case Sco_SCOPE_CTR:
|
||||||
|
case Sco_SCOPE_DEG:
|
||||||
|
case Sco_SCOPE_CRS:
|
||||||
|
sprintf (Query,"SELECT centres.InsCod,COUNT(*) AS N"
|
||||||
|
" FROM centres,degrees,courses"
|
||||||
|
" WHERE centres.InsCod='%ld'"
|
||||||
|
" AND centres.CtrCod=degrees.CtrCod"
|
||||||
|
" AND degrees.DegCod=courses.DegCod"
|
||||||
|
" ORDER BY N DESC",
|
||||||
|
Gbl.CurrentIns.Ins.InsCod);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Lay_ShowErrorAndExit ("Wrong scope.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Sta_GetAndShowInss (Query,Txt_Courses);
|
||||||
|
|
||||||
|
Lay_EndRoundFrameTable10 ();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/***** Get and show stats about institutions ordered by users in courses *****/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
static void Sta_GetAndShowInssOrderedByNumUsrsInCrss (void)
|
||||||
|
{
|
||||||
|
extern const char *The_ClassFormul[The_NUM_THEMES];
|
||||||
|
extern const char *Txt_Users;
|
||||||
|
char Query[1024];
|
||||||
|
|
||||||
|
/****** Institutions ordered by number of centres ******/
|
||||||
|
Lay_StartRoundFrameTable10 ("100%",2,"Instituciones según número de usuarios en asignaturas"); // Need translation
|
||||||
|
|
||||||
|
/***** Get institutions ordered by number of users in courses *****/
|
||||||
|
switch (Gbl.Scope.Current)
|
||||||
|
{
|
||||||
|
case Sco_SCOPE_SYS:
|
||||||
|
sprintf (Query,"SELECT centres.InsCod,COUNT(*) AS N"
|
||||||
|
" FROM centres,degrees,courses,crs_usr"
|
||||||
|
" WHERE centres.CtrCod=degrees.CtrCod"
|
||||||
|
" AND degrees.DegCod=courses.DegCod"
|
||||||
|
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||||
|
" GROUP BY InsCod"
|
||||||
|
" ORDER BY N DESC");
|
||||||
|
break;
|
||||||
|
case Sco_SCOPE_CTY:
|
||||||
|
sprintf (Query,"SELECT centres.InsCod,COUNT(*) AS N"
|
||||||
|
" FROM institutions,centres,degrees,courses,crs_usr"
|
||||||
|
" WHERE institutions.CtyCod='%ld'"
|
||||||
|
" AND institutions.InsCod=centres.InsCod"
|
||||||
|
" AND centres.CtrCod=degrees.CtrCod"
|
||||||
|
" AND degrees.DegCod=courses.DegCod"
|
||||||
|
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||||
|
" GROUP BY centres.InsCod"
|
||||||
|
" ORDER BY N DESC",
|
||||||
|
Gbl.CurrentCty.Cty.CtyCod);
|
||||||
|
break;
|
||||||
|
case Sco_SCOPE_INS:
|
||||||
|
case Sco_SCOPE_CTR:
|
||||||
|
case Sco_SCOPE_DEG:
|
||||||
|
case Sco_SCOPE_CRS:
|
||||||
|
sprintf (Query,"SELECT centres.InsCod,COUNT(*) AS N"
|
||||||
|
" 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"
|
||||||
|
" ORDER BY N DESC",
|
||||||
|
Gbl.CurrentIns.Ins.InsCod);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Lay_ShowErrorAndExit ("Wrong scope.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Sta_GetAndShowInss (Query,Txt_Users);
|
||||||
|
|
||||||
|
Lay_EndRoundFrameTable10 ();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/************* Get and show stats about institutions ordered by **************/
|
||||||
|
/************* number of users who claim to belong to them **************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
static void Sta_GetAndShowInssOrderedByNumUsrsWhoClaimToBelongToThem (void)
|
||||||
|
{
|
||||||
|
extern const char *The_ClassFormul[The_NUM_THEMES];
|
||||||
|
extern const char *Txt_Users;
|
||||||
|
char Query[1024];
|
||||||
|
|
||||||
|
/****** Institutions ordered by number of centres ******/
|
||||||
|
Lay_StartRoundFrameTable10 ("100%",2,"Instituciones según número de usuarios que dicen pertenecer a ellas"); // Need translation
|
||||||
|
|
||||||
|
/***** Get institutions ordered by number of users who claim to belong to them *****/
|
||||||
|
switch (Gbl.Scope.Current)
|
||||||
|
{
|
||||||
|
case Sco_SCOPE_SYS:
|
||||||
|
sprintf (Query,"SELECT InsCod,COUNT(*) AS N"
|
||||||
|
" FROM usr_data"
|
||||||
|
" WHERE InsCod>'0'"
|
||||||
|
" GROUP BY InsCod"
|
||||||
|
" ORDER BY N DESC");
|
||||||
|
break;
|
||||||
|
case Sco_SCOPE_CTY:
|
||||||
|
sprintf (Query,"SELECT usr_data.InsCod,COUNT(*) AS N"
|
||||||
|
" FROM institutions,usr_data"
|
||||||
|
" WHERE institutions.CtyCod='%ld'"
|
||||||
|
" AND institutions.InsCod=usr_data.InsCod"
|
||||||
|
" GROUP BY usr_data.InsCod"
|
||||||
|
" ORDER BY N DESC",
|
||||||
|
Gbl.CurrentCty.Cty.CtyCod);
|
||||||
|
break;
|
||||||
|
case Sco_SCOPE_INS:
|
||||||
|
case Sco_SCOPE_CTR:
|
||||||
|
case Sco_SCOPE_DEG:
|
||||||
|
case Sco_SCOPE_CRS:
|
||||||
|
sprintf (Query,"SELECT InsCod,COUNT(*) AS N"
|
||||||
|
" FROM usr_data"
|
||||||
|
" WHERE InsCod='%ld'"
|
||||||
|
" ORDER BY N DESC",
|
||||||
|
Gbl.CurrentIns.Ins.InsCod);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Lay_ShowErrorAndExit ("Wrong scope.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Sta_GetAndShowInss (Query,Txt_Users);
|
||||||
|
|
||||||
|
Lay_EndRoundFrameTable10 ();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/****************** Get and show stats about institutions ********************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
static void Sta_GetAndShowInss (const char *Query,const char *TxtFigure)
|
||||||
|
{
|
||||||
|
extern const char *The_ClassFormul[The_NUM_THEMES];
|
||||||
|
extern const char *Txt_Institution;
|
||||||
|
MYSQL_RES *mysql_res;
|
||||||
|
MYSQL_ROW row;
|
||||||
|
unsigned NumInss;
|
||||||
|
unsigned NumIns;
|
||||||
|
struct Institution Ins;
|
||||||
|
|
||||||
|
/***** Query database *****/
|
||||||
|
if ((NumInss = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get institutions")))
|
||||||
|
{
|
||||||
|
fprintf (Gbl.F.Out,"<tr>"
|
||||||
|
"<th class=\"TIT_TBL\" style=\"text-align:left;\">"
|
||||||
|
"%s"
|
||||||
|
"</th>"
|
||||||
|
"<th class=\"TIT_TBL\" style=\"text-align:right;\">"
|
||||||
|
"%s"
|
||||||
|
"</th>"
|
||||||
|
"</tr>",
|
||||||
|
Txt_Institution,
|
||||||
|
TxtFigure);
|
||||||
|
|
||||||
|
for (NumIns = 0;
|
||||||
|
NumIns < NumInss;
|
||||||
|
NumIns++)
|
||||||
|
{
|
||||||
|
/***** Get next institution *****/
|
||||||
|
row = mysql_fetch_row (mysql_res);
|
||||||
|
|
||||||
|
/***** Get data of this institution (row[0]) *****/
|
||||||
|
Ins.InsCod = Str_ConvertStrCodToLongCod (row[0]);
|
||||||
|
if (!Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_MINIMAL_DATA))
|
||||||
|
Lay_ShowErrorAndExit ("Institution not found.");
|
||||||
|
|
||||||
|
/***** Write link to institution *****/
|
||||||
|
fprintf (Gbl.F.Out,"<tr>"
|
||||||
|
"<td class=\"%s\" style=\"text-align:left;\">",
|
||||||
|
The_ClassFormul[Gbl.Prefs.Theme]);
|
||||||
|
Act_FormStart (ActSeeInsInf);
|
||||||
|
Ins_PutParamInsCod (Ins.InsCod);
|
||||||
|
Act_LinkFormSubmit (Ins.ShortName,The_ClassFormul[Gbl.Prefs.Theme]);
|
||||||
|
Log_DrawLogo (Sco_SCOPE_INS,Ins.InsCod,Ins.ShortName,
|
||||||
|
32,NULL,true);
|
||||||
|
fprintf (Gbl.F.Out," %s</a>",Ins.FullName);
|
||||||
|
Act_FormEnd ();
|
||||||
|
fprintf (Gbl.F.Out,"</td>");
|
||||||
|
|
||||||
|
/***** Write number of centres (row[1]) *****/
|
||||||
|
fprintf (Gbl.F.Out,"<td class=\"DAT\" style=\"text-align:right;\">"
|
||||||
|
"%s"
|
||||||
|
"</td></tr>",
|
||||||
|
row[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Free structure that stores the query result */
|
||||||
|
DB_FreeMySQLResult (&mysql_res);
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/************************* Get total number of users *************************/
|
/************************* Get total number of users *************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -86,12 +86,13 @@ typedef enum
|
||||||
Sta_ACC_GBL_PER_COURSE = 20,
|
Sta_ACC_GBL_PER_COURSE = 20,
|
||||||
} Sta_ClicksStatType_t;
|
} Sta_ClicksStatType_t;
|
||||||
|
|
||||||
#define Sta_NUM_TYPES_USE_STATS 20
|
#define Sta_NUM_TYPES_USE_STATS 21
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
Sta_USERS, // Number of users
|
Sta_USERS, // Number of users
|
||||||
Sta_USERS_RANKING, // Users' ranking
|
Sta_USERS_RANKING, // Users' ranking
|
||||||
Sta_HIERARCHY, // Number of countries, institutions, centres, degrees and courses
|
Sta_HIERARCHY, // Number of countries, institutions, centres, degrees and courses
|
||||||
|
Sta_INSTITUTIONS, // Number of users in each institution
|
||||||
Sta_SOCIAL_NETWORKS, // Number of users in social networks
|
Sta_SOCIAL_NETWORKS, // Number of users in social networks
|
||||||
Sta_FOLDERS_AND_FILES, // Number of folders and files
|
Sta_FOLDERS_AND_FILES, // Number of folders and files
|
||||||
Sta_OER, // Number of OERs (Open Educational Resources)
|
Sta_OER, // Number of OERs (Open Educational Resources)
|
||||||
|
|
60
swad_text.c
60
swad_text.c
|
@ -36045,7 +36045,7 @@ const char *Txt_STAT_TYPE_COUNT_SMALL[Sta_NUM_STAT_COUNT_TYPES] =
|
||||||
|
|
||||||
const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS] =
|
const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS] =
|
||||||
{
|
{
|
||||||
#if L==0
|
#if L==0 // Sta_USERS
|
||||||
"Usuaris"
|
"Usuaris"
|
||||||
#elif L==1
|
#elif L==1
|
||||||
"Benutzer"
|
"Benutzer"
|
||||||
|
@ -36065,7 +36065,7 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS] =
|
||||||
"Utilizadores"
|
"Utilizadores"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
#if L==0
|
#if L==0 // Sta_USERS_RANKING
|
||||||
"Rànquing"
|
"Rànquing"
|
||||||
#elif L==1
|
#elif L==1
|
||||||
"Rang"
|
"Rang"
|
||||||
|
@ -36085,7 +36085,7 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS] =
|
||||||
"Posição"
|
"Posição"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
#if L==0
|
#if L==0 // Sta_HIERARCHY
|
||||||
"Jerarquia"
|
"Jerarquia"
|
||||||
#elif L==1
|
#elif L==1
|
||||||
"Hierarchie"
|
"Hierarchie"
|
||||||
|
@ -36105,7 +36105,27 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS] =
|
||||||
"Hierarquia"
|
"Hierarquia"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
#if L==0
|
#if L==0 // Sta_INSTITUTIONS
|
||||||
|
"Institucions"
|
||||||
|
#elif L==1
|
||||||
|
"Hochschulen"
|
||||||
|
#elif L==2
|
||||||
|
"Institutions"
|
||||||
|
#elif L==3
|
||||||
|
"Instituciones"
|
||||||
|
#elif L==4
|
||||||
|
"Établissements"
|
||||||
|
#elif L==5
|
||||||
|
"Mbo'ehao"
|
||||||
|
#elif L==6
|
||||||
|
"Istituzioni"
|
||||||
|
#elif L==7
|
||||||
|
"Instytucje"
|
||||||
|
#elif L==8
|
||||||
|
"Instituções"
|
||||||
|
#endif
|
||||||
|
,
|
||||||
|
#if L==0 // Sta_SOCIAL_NETWORKS
|
||||||
"Webs / xarxes socials"
|
"Webs / xarxes socials"
|
||||||
#elif L==1
|
#elif L==1
|
||||||
"Webs / Social Networks"
|
"Webs / Social Networks"
|
||||||
|
@ -36125,7 +36145,7 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS] =
|
||||||
"Webs / redes sociais"
|
"Webs / redes sociais"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
#if L==0
|
#if L==0 // Sta_FOLDERS_AND_FILES
|
||||||
"Carpetes i fitxers"
|
"Carpetes i fitxers"
|
||||||
#elif L==1
|
#elif L==1
|
||||||
"Verzeichnisse und Dateien"
|
"Verzeichnisse und Dateien"
|
||||||
|
@ -36145,7 +36165,7 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS] =
|
||||||
"Diretórios e arquivos"
|
"Diretórios e arquivos"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
#if L==0
|
#if L==0 // Sta_OER
|
||||||
"Recursos Educatius Oberts (OER)"
|
"Recursos Educatius Oberts (OER)"
|
||||||
#elif L==1
|
#elif L==1
|
||||||
"Open Educational Resources (OER)"
|
"Open Educational Resources (OER)"
|
||||||
|
@ -36165,7 +36185,7 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS] =
|
||||||
"Recursos Educacionais Abertos (OER)"
|
"Recursos Educacionais Abertos (OER)"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
#if L==0
|
#if L==0 // Sta_ASSIGNMENTS
|
||||||
"Activitats"
|
"Activitats"
|
||||||
#elif L==1
|
#elif L==1
|
||||||
"Aufgaben"
|
"Aufgaben"
|
||||||
|
@ -36185,7 +36205,7 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS] =
|
||||||
"Atividades"
|
"Atividades"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
#if L==0
|
#if L==0 // Sta_TESTS
|
||||||
"Tests"
|
"Tests"
|
||||||
#elif L==1
|
#elif L==1
|
||||||
"Tests"
|
"Tests"
|
||||||
|
@ -36205,7 +36225,7 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS] =
|
||||||
"Testes"
|
"Testes"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
#if L==0
|
#if L==0 // Sta_NOTIFY_EVENTS
|
||||||
"Notificacions"
|
"Notificacions"
|
||||||
#elif L==1
|
#elif L==1
|
||||||
"Anmeldungen"
|
"Anmeldungen"
|
||||||
|
@ -36225,7 +36245,7 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS] =
|
||||||
"Notificações"
|
"Notificações"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
#if L==0
|
#if L==0 // Sta_NOTICES
|
||||||
"Avisos"
|
"Avisos"
|
||||||
#elif L==1
|
#elif L==1
|
||||||
"Ankündigungen"
|
"Ankündigungen"
|
||||||
|
@ -36245,7 +36265,7 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS] =
|
||||||
"Avisos"
|
"Avisos"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
#if L==0
|
#if L==0 // Sta_MESSAGES
|
||||||
"Missatges"
|
"Missatges"
|
||||||
#elif L==1
|
#elif L==1
|
||||||
"Nachrichten"
|
"Nachrichten"
|
||||||
|
@ -36265,7 +36285,7 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS] =
|
||||||
"Mensagens"
|
"Mensagens"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
#if L==0
|
#if L==0 // Sta_FORUMS
|
||||||
"Fòrums"
|
"Fòrums"
|
||||||
#elif L==1
|
#elif L==1
|
||||||
"Foren"
|
"Foren"
|
||||||
|
@ -36285,7 +36305,7 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS] =
|
||||||
"Fóruns"
|
"Fóruns"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
#if L==0
|
#if L==0 // Sta_SURVEYS
|
||||||
"Enquestes"
|
"Enquestes"
|
||||||
#elif L==1
|
#elif L==1
|
||||||
"Umfragen"
|
"Umfragen"
|
||||||
|
@ -36305,7 +36325,7 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS] =
|
||||||
"Inquéritos"
|
"Inquéritos"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
#if L==0
|
#if L==0 // Sta_PRIVACY
|
||||||
"Privacitat"
|
"Privacitat"
|
||||||
#elif L==1
|
#elif L==1
|
||||||
"Geheimhaltung"
|
"Geheimhaltung"
|
||||||
|
@ -36325,7 +36345,7 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS] =
|
||||||
"Privacidade"
|
"Privacidade"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
#if L==0
|
#if L==0 // Sta_LANGUAGES
|
||||||
"Idioma"
|
"Idioma"
|
||||||
#elif L==1
|
#elif L==1
|
||||||
"Sprache"
|
"Sprache"
|
||||||
|
@ -36345,7 +36365,7 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS] =
|
||||||
"Lingua"
|
"Lingua"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
#if L==0
|
#if L==0 // Sta_LAYOUTS
|
||||||
"Disseny"
|
"Disseny"
|
||||||
#elif L==1
|
#elif L==1
|
||||||
"layout"
|
"layout"
|
||||||
|
@ -36365,7 +36385,7 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS] =
|
||||||
"Layout"
|
"Layout"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
#if L==0
|
#if L==0 // Sta_THEMES
|
||||||
"Tema (colors)"
|
"Tema (colors)"
|
||||||
#elif L==1
|
#elif L==1
|
||||||
"Skin"
|
"Skin"
|
||||||
|
@ -36385,7 +36405,7 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS] =
|
||||||
"Skin"
|
"Skin"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
#if L==0
|
#if L==0 // Sta_ICON_SETS
|
||||||
"Icones"
|
"Icones"
|
||||||
#elif L==1
|
#elif L==1
|
||||||
"Symbole"
|
"Symbole"
|
||||||
|
@ -36405,7 +36425,7 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS] =
|
||||||
"Ícones"
|
"Ícones"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
#if L==0
|
#if L==0 // Sta_MENUS
|
||||||
"Menú"
|
"Menú"
|
||||||
#elif L==1
|
#elif L==1
|
||||||
"Menü"
|
"Menü"
|
||||||
|
@ -36425,7 +36445,7 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS] =
|
||||||
"Menu"
|
"Menu"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
#if L==0
|
#if L==0 // Sta_SIDE_COLUMNS
|
||||||
"Columnes"
|
"Columnes"
|
||||||
#elif L==1
|
#elif L==1
|
||||||
"Spalten"
|
"Spalten"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user