// swad_figure.c: figures (global stats) /* SWAD (Shared Workspace At a Distance), is a web platform developed at the University of Granada (Spain), and used to support university teaching. This file is part of SWAD core. Copyright (C) 1999-2019 Antonio Caņas Vargas This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ /*****************************************************************************/ /********************************* Headers ***********************************/ /*****************************************************************************/ #define _GNU_SOURCE // For asprintf #include // For asprintf #include // For system, getenv, etc. #include // For string functions #include "swad_action.h" #include "swad_box.h" #include "swad_database.h" #include "swad_figure.h" #include "swad_file_browser.h" #include "swad_follow.h" #include "swad_form.h" #include "swad_forum.h" #include "swad_global.h" #include "swad_hierarchy.h" #include "swad_HTML.h" #include "swad_institution.h" #include "swad_logo.h" #include "swad_network.h" #include "swad_notice.h" #include "swad_privacy.h" #include "swad_profile.h" #include "swad_role.h" /*****************************************************************************/ /************** External global variables from others modules ****************/ /*****************************************************************************/ extern struct Globals Gbl; /*****************************************************************************/ /***************************** Private constants *****************************/ /*****************************************************************************/ /*****************************************************************************/ /******************************* Private types *******************************/ /*****************************************************************************/ struct Fig_SizeOfFileZones { int NumCrss; // -1 stands for not aplicable int NumGrps; // -1 stands for not aplicable int NumUsrs; // -1 stands for not aplicable unsigned MaxLevels; unsigned long NumFolders; unsigned long NumFiles; unsigned long long int Size; // Total size in bytes }; struct Fig_FiguresForum { unsigned NumForums; unsigned NumThreads; unsigned NumPosts; unsigned NumUsrsToBeNotifiedByEMail; }; /*****************************************************************************/ /***************************** Internal prototypes ***************************/ /*****************************************************************************/ static void Fig_PutParamsToShowFigure (void); static void Fig_PutHiddenParamFigureType (void); static void Fig_PutHiddenParamScopeFig (void); static void Fig_GetAndShowHierarchyStats (void); static void Fig_WriteHeadHierarchy (void); static void Fig_GetAndShowHierarchyWithInss (void); static void Fig_GetAndShowHierarchyWithCtrs (void); static void Fig_GetAndShowHierarchyWithDegs (void); static void Fig_GetAndShowHierarchyWithCrss (void); static void Fig_GetAndShowHierarchyWithUsrs (Rol_Role_t Role); static void Fig_GetAndShowHierarchyTotal (void); static void Fig_ShowHierarchyRow (const char *Text1,const char *Text2, const char *ClassTxt, int NumCtys, // < 0 ==> do not show number int NumInss, // < 0 ==> do not show number int NumCtrs, // < 0 ==> do not show number int NumDegs, // < 0 ==> do not show number int NumCrss); // < 0 ==> do not show number static void Fig_ShowHierarchyCell (const char *ClassTxt,int Num); static void Fig_GetAndShowInstitutionsStats (void); static void Fig_GetAndShowInssOrderedByNumCtrs (void); static void Fig_GetAndShowInssOrderedByNumDegs (void); static void Fig_GetAndShowInssOrderedByNumCrss (void); static void Fig_GetAndShowInssOrderedByNumUsrsInCrss (void); static void Fig_GetAndShowInssOrderedByNumUsrsWhoClaimToBelongToThem (void); static void Fig_ShowInss (MYSQL_RES **mysql_res,unsigned NumInss, const char *TxtFigure); static unsigned Fig_GetInsAndStat (struct Instit *Ins,MYSQL_RES *mysql_res); static void Fig_GetAndShowDegreeTypesStats (void); static void Fig_GetAndShowUsersStats (void); static void Fig_GetAndShowNumUsrsInCrss (Rol_Role_t Role); static void Fig_GetAndShowNumUsrsNotBelongingToAnyCrs (void); static void Fig_GetAndShowUsersRanking (void); static void Fig_GetAndShowFileBrowsersStats (void); static void Fig_GetSizeOfFileZoneFromDB (Hie_Level_t Scope, Brw_FileBrowser_t FileBrowser, struct Fig_SizeOfFileZones *SizeOfFileZones); static void Fig_WriteStatsExpTreesTableHead1 (void); static void Fig_WriteStatsExpTreesTableHead2 (void); static void Fig_WriteStatsExpTreesTableHead3 (void); static void Fig_WriteRowStatsFileBrowsers1 (const char *NameOfFileZones, Brw_FileBrowser_t FileZone, struct Fig_SizeOfFileZones *SizeOfFileZones); static void Fig_WriteRowStatsFileBrowsers2 (const char *NameOfFileZones, Brw_FileBrowser_t FileZone, struct Fig_SizeOfFileZones *SizeOfFileZones); static void Fig_WriteRowStatsFileBrowsers3 (const char *NameOfFileZones, Brw_FileBrowser_t FileZone, struct Fig_SizeOfFileZones *SizeOfFileZones); static void Fig_GetAndShowOERsStats (void); static void Fig_GetNumberOfOERsFromDB (Hie_Level_t Scope,Brw_License_t License,unsigned long NumFiles[2]); static void Fig_GetAndShowAssignmentsStats (void); static void Fig_GetAndShowProjectsStats (void); static void Fig_GetAndShowTestsStats (void); static void Fig_GetAndShowGamesStats (void); static void Fig_GetAndShowSocialActivityStats (void); static void Fig_GetAndShowFollowStats (void); static void Fig_GetAndShowForumStats (void); static void Fig_ShowStatOfAForumType (For_ForumType_t ForumType, long CtyCod,long InsCod,long CtrCod,long DegCod,long CrsCod, struct Fig_FiguresForum *FiguresForum); static void Fig_WriteForumTitleAndStats (For_ForumType_t ForumType, long CtyCod,long InsCod,long CtrCod,long DegCod,long CrsCod, const char *Icon,struct Fig_FiguresForum *FiguresForum, const char *ForumName1,const char *ForumName2); static void Fig_WriteForumTotalStats (struct Fig_FiguresForum *FiguresForum); static void Fig_GetAndShowNumUsrsPerNotifyEvent (void); static void Fig_GetAndShowNoticesStats (void); static void Fig_GetAndShowMsgsStats (void); static void Fig_GetAndShowSurveysStats (void); static void Fig_GetAndShowNumUsrsPerPrivacy (void); static void Fig_GetAndShowNumUsrsPerPrivacyForAnObject (const char *TxtObject, const char *FieldName, unsigned MaskAllowedVisibility); static void Fig_GetAndShowNumUsrsPerCookies (void); static void Fig_GetAndShowNumUsrsPerLanguage (void); static void Fig_GetAndShowNumUsrsPerFirstDayOfWeek (void); static void Fig_GetAndShowNumUsrsPerDateFormat (void); static void Fig_GetAndShowNumUsrsPerIconSet (void); static void Fig_GetAndShowNumUsrsPerMenu (void); static void Fig_GetAndShowNumUsrsPerTheme (void); static void Fig_GetAndShowNumUsrsPerSideColumns (void); unsigned Fig_GetNumUsrsWhoChoseAnOption (const char *SubQuery); /*****************************************************************************/ /************************** Show use of the platform *************************/ /*****************************************************************************/ void Fig_ReqShowFigures (void) { extern const char *Hlp_ANALYTICS_Figures; extern const char *The_ClassFormInBox[The_NUM_THEMES]; extern const char *Txt_Figures; extern const char *Txt_Scope; extern const char *Txt_Statistic; extern const char *Txt_FIGURE_TYPES[Fig_NUM_FIGURES]; extern const char *Txt_Show_statistic; Fig_FigureType_t FigureType; /***** Form to show statistic *****/ Frm_StartForm (ActSeeUseGbl); /***** Begin box *****/ Box_BoxBegin (NULL,Txt_Figures,NULL, Hlp_ANALYTICS_Figures,Box_NOT_CLOSABLE); /***** Compute stats for anywhere, degree or course? *****/ HTM_LABEL_Begin ("class=\"%s\"",The_ClassFormInBox[Gbl.Prefs.Theme]); fprintf (Gbl.F.Out,"%s: ",Txt_Scope); Gbl.Scope.Allowed = 1 << Hie_SYS | 1 << Hie_CTY | 1 << Hie_INS | 1 << Hie_CTR | 1 << Hie_DEG | 1 << Hie_CRS; Gbl.Scope.Default = Hie_SYS; Sco_GetScope ("ScopeFig"); Sco_PutSelectorScope ("ScopeFig",false); HTM_LABEL_End (); fprintf (Gbl.F.Out,"
"); /***** Type of statistic *****/ HTM_LABEL_Begin ("class=\"%s\"",The_ClassFormInBox[Gbl.Prefs.Theme]); fprintf (Gbl.F.Out,"%s: ",Txt_Statistic); fprintf (Gbl.F.Out,"