Version 23.67.3: Mar 09, 2024 Changes in global hits.

This commit is contained in:
acanas 2024-03-09 21:56:57 +01:00
parent cfae1a689d
commit fdd2d2b550
9 changed files with 164 additions and 123 deletions

View File

@ -187,7 +187,6 @@ void MFU_WriteBigMFUActions (struct MFU_ListMFUActions *ListMFUActions)
{
extern const char *Hlp_ANALYTICS_Frequent;
extern const char *Txt_My_frequent_actions;
extern const char *Txt_TABS_TXT[Tab_NUM_TABS];
unsigned NumAct;
Act_Action_t Action;
const char *Title;
@ -214,7 +213,7 @@ void MFU_WriteBigMFUActions (struct MFU_ListMFUActions *ListMFUActions)
if ((Title = Act_GetTitleAction (Action)) != NULL)
{
/* Action string */
Str_Copy (TabStr,Txt_TABS_TXT[Act_GetTab (Act_GetSuperAction (Action))],
Str_Copy (TabStr,Tab_GetTxt (Act_GetTab (Act_GetSuperAction (Action))),
sizeof (TabStr) - 1);
Str_Copy (MenuStr,Title,sizeof (MenuStr) - 1);
snprintf (TabMenuStr,sizeof (TabMenuStr),"%s > %s",TabStr,MenuStr);
@ -249,7 +248,6 @@ void MFU_WriteBigMFUActions (struct MFU_ListMFUActions *ListMFUActions)
void MFU_WriteSmallMFUActions (struct MFU_ListMFUActions *ListMFUActions)
{
extern const char *Txt_Frequent_ACTIONS;
extern const char *Txt_TABS_TXT[Tab_NUM_TABS];
unsigned NumAct;
Act_Action_t Action;
const char *Title;
@ -273,7 +271,7 @@ void MFU_WriteSmallMFUActions (struct MFU_ListMFUActions *ListMFUActions)
if ((Title = Act_GetTitleAction (Action)) != NULL)
{
/* Action string */
Str_Copy (TabStr,Txt_TABS_TXT[Act_GetTab (Act_GetSuperAction (Action))],
Str_Copy (TabStr,Tab_GetTxt (Act_GetTab (Act_GetSuperAction (Action))),
sizeof (TabStr) - 1);
Str_Copy (MenuStr,Title,sizeof (MenuStr) - 1);
snprintf (TabMenuStr,sizeof (TabMenuStr),"%s > %s",TabStr,MenuStr);

View File

@ -1805,7 +1805,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActSeeAccCrs ] = { 119,-1,TabUnk,ActReqAccGbl ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Sta_SeeCrsAccesses ,NULL},
[ActLstClk ] = { 989,-1,TabUnk,ActReqAccGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Log_ShowLastClicks ,NULL},
[ActRefLstClk ] = { 994,-1,TabUnk,ActRefLstClk ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_AJAX_RFRESH,NULL ,Lay_RefreshLastClicks ,NULL},
[ActRefLstClk ] = { 994,-1,TabUnk,ActReqAccGbl ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_AJAX_RFRESH,NULL ,Lay_RefreshLastClicks ,NULL},
[ActSeeMyUsgRep ] = {1582,-1,TabUnk,ActReqMyUsgRep ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Rep_ShowMyUsageReport ,NULL},

View File

@ -633,10 +633,11 @@ Me sale este error, no s
"can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod')
*/
#define Log_PLATFORM_VERSION "SWAD 23.67.2 (2024-03-09)"
#define Log_PLATFORM_VERSION "SWAD 23.67.3 (2024-03-09)"
#define CSS_FILE "swad23.67.2.css"
#define JS_FILE "swad23.53.6.js"
/*
Version 23.67.3: Mar 09, 2024 Changes in global hits. (335454 lines)
Version 23.67.2: Mar 09, 2024 Changes in layout. Fixed missing texts in actions. (335424 lines)
Version 23.67.1: Mar 08, 2024 Fixed issue in layout. (335308 lines)
Version 23.67: Mar 08, 2024 Fixed bug in selection of groups related to attendance. Reported by Antonio Manuel Fernández Pérez.

View File

@ -347,16 +347,15 @@ static void Mai_GetMailDomain (const char *Email,
void Mai_WriteWarningEmailNotifications (void)
{
extern const char *Txt_You_can_only_receive_email_notifications_if_;
extern const char *Txt_TABS_TXT[Tab_NUM_TABS];
extern const char *Txt_MENU_TITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB];
extern const char *Txt_Domains;
Tab_Tab_t TabMyAccount = Act_GetTab (ActFrmMyAcc );
Tab_Tab_t TabMyAccount = Act_GetTab (ActFrmMyAcc);
Tab_Tab_t TabMailDomains = Act_GetTab (ActSeeMai);
Ale_ShowAlert (Ale_WARNING,Txt_You_can_only_receive_email_notifications_if_,
Txt_TABS_TXT [TabMyAccount ],
Tab_GetTxt (TabMyAccount),
Txt_MENU_TITLE[TabMyAccount ][Act_GetIndexInMenu (ActFrmMyAcc)],
Txt_TABS_TXT [TabMailDomains],
Tab_GetTxt (TabMailDomains),
Txt_MENU_TITLE[TabMailDomains][Act_GetIndexInMenu (ActSeeMai )],
Txt_Domains);
}

View File

@ -711,7 +711,6 @@ static void Rep_WriteSectionGlobalHits (struct Rep_Report *Report)
static void Rep_WriteSectionHitsPerAction (struct Rep_Report *Report)
{
extern const char *Txt_Hits_per_action;
extern const char *Txt_TABS_TXT[Tab_NUM_TABS];
extern const char *Txt_Other_actions;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
@ -719,7 +718,7 @@ static void Rep_WriteSectionHitsPerAction (struct Rep_Report *Report)
unsigned NumHit;
long ActCod;
Act_Action_t Action;
Tab_Tab_t Tab;
const char *TabTxt;
unsigned long NumClicks;
/***** Begin section *****/
@ -760,9 +759,9 @@ static void Rep_WriteSectionHitsPerAction (struct Rep_Report *Report)
{
if ((Action = Act_GetActionFromActCod (ActCod)) >= 0)
{
Tab = Act_GetTab (Act_GetSuperAction (Action));
if (Txt_TABS_TXT[Tab])
fprintf (Rep_File,"%s > ",Txt_TABS_TXT[Tab]);
TabTxt = Tab_GetTxt (Act_GetTab (Act_GetSuperAction (Action)));
if (TabTxt)
fprintf (Rep_File,"%s > ",TabTxt);
}
fprintf (Rep_File,"%s",Act_GetActionText (Action));

View File

@ -103,8 +103,10 @@ static const unsigned Sta_CellPadding[Sta_NUM_CLICKS_GROUPED_BY] =
static void Sta_PutFormCrsHits (struct Sta_Stats *Stats);
static void Sta_PutFormGblHits (struct Sta_Stats *Stats);
static void Sta_WriteSelectorCountType (const struct Sta_Stats *Stats);
static void Sta_WriteSelectorRoles (const struct Sta_Stats *Stats);
static void Sta_WriteSelectorAction (const struct Sta_Stats *Stats);
static void Sta_WriteSelectorScope (void);
static void Sta_WriteSelectorCountType (const struct Sta_Stats *Stats);
static void Sta_ShowHits (Sta_GlobalOrCourseAccesses_t GlobalOrCourse);
static void Sta_ShowDetailedAccessesList (const struct Sta_Stats *Stats,
unsigned NumHits,
@ -471,9 +473,6 @@ static void Sta_PutFormGblHits (struct Sta_Stats *Stats)
{
extern const char *Hlp_ANALYTICS_Visits_global_visits;
extern const char *Txt_Statistics_of_all_visits;
extern const char *Txt_Users;
extern const char *Txt_ROLE_STATS[Sta_NUM_ROLES_STAT];
extern const char *Txt_Scope;
extern const char *Txt_Show;
extern const char *Txt_distributed_by;
extern const char *Txt_STAT_CLICKS_GROUPED_BY[Sta_NUM_CLICKS_GROUPED_BY];
@ -483,8 +482,6 @@ static void Sta_PutFormGblHits (struct Sta_Stats *Stats)
[Dat_STR_TIME] = Dat_HMS_TO_000000,
[Dat_END_TIME] = Dat_HMS_TO_235959
};
Sta_Role_t RoleStat;
unsigned RoleStatUnsigned;
Sta_ClicksGroupedBy_t ClicksGroupedBy;
unsigned ClicksGroupedByUnsigned;
@ -505,55 +502,13 @@ static void Sta_PutFormGblHits (struct Sta_Stats *Stats)
Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (SetHMS);
/***** Users' roles whose accesses we want to see *****/
HTM_TR_Begin (NULL);
/* Label */
Frm_LabelColumn ("Frm_C1 RT","Role",Txt_Users);
/* Data */
HTM_TD_Begin ("class=\"Frm_C2 LT\"");
HTM_SELECT_Begin (HTM_DONT_SUBMIT_ON_CHANGE,NULL,
"id=\"Role\" name=\"Role\""
" class=\"Frm_C2_INPUT INPUT_%s\"",
The_GetSuffix ());
for (RoleStat = (Sta_Role_t) 0;
RoleStat <= (Sta_Role_t) (Sta_NUM_ROLES_STAT - 1);
RoleStat++)
{
RoleStatUnsigned = (unsigned) RoleStat;
HTM_OPTION (HTM_Type_UNSIGNED,&RoleStatUnsigned,
RoleStat == Stats->Role ? HTM_OPTION_SELECTED :
HTM_OPTION_UNSELECTED,
HTM_OPTION_ENABLED,
"%s",Txt_ROLE_STATS[RoleStat]);
}
HTM_SELECT_End ();
HTM_TD_End ();
HTM_TR_End ();
Sta_WriteSelectorRoles (Stats);
/***** Selection of action *****/
Sta_WriteSelectorAction (Stats);
/***** Clicks made from anywhere, current center, current degree or current course *****/
HTM_TR_Begin (NULL);
/* Label */
Frm_LabelColumn ("Frm_C1 RT","ScopeSta",Txt_Scope);
/* Data */
HTM_TD_Begin ("class=\"Frm_C2 LT\"");
Gbl.Scope.Allowed = 1 << Hie_SYS |
1 << Hie_CTY |
1 << Hie_INS |
1 << Hie_CTR |
1 << Hie_DEG |
1 << Hie_CRS;
Sco_GetScope ("ScopeSta",Hie_SYS);
Sco_PutSelectorScope ("ScopeSta",HTM_DONT_SUBMIT_ON_CHANGE);
HTM_TD_End ();
HTM_TR_End ();
Sta_WriteSelectorScope ();
/***** Count type for the statistic *****/
HTM_TR_Begin (NULL);
@ -647,6 +602,130 @@ void Sta_PutLinkToGlobalHits (void)
Txt_Global_visits,NULL);
}
/*****************************************************************************/
/******* Put selectors for users' roles whose accesses we want to see ********/
/*****************************************************************************/
static void Sta_WriteSelectorRoles (const struct Sta_Stats *Stats)
{
extern const char *Txt_Users;
extern const char *Txt_ROLE_STATS[Sta_NUM_ROLES_STAT];
Sta_Role_t RoleStat;
unsigned RoleStatUnsigned;
HTM_TR_Begin (NULL);
/* Label */
Frm_LabelColumn ("Frm_C1 RT","Role",Txt_Users);
/* Data */
HTM_TD_Begin ("class=\"Frm_C2 LT\"");
HTM_SELECT_Begin (HTM_DONT_SUBMIT_ON_CHANGE,NULL,
"id=\"Role\" name=\"Role\""
" class=\"Frm_C2_INPUT INPUT_%s\"",
The_GetSuffix ());
for (RoleStat = (Sta_Role_t) 0;
RoleStat <= (Sta_Role_t) (Sta_NUM_ROLES_STAT - 1);
RoleStat++)
{
RoleStatUnsigned = (unsigned) RoleStat;
HTM_OPTION (HTM_Type_UNSIGNED,&RoleStatUnsigned,
RoleStat == Stats->Role ? HTM_OPTION_SELECTED :
HTM_OPTION_UNSELECTED,
HTM_OPTION_ENABLED,
"%s",Txt_ROLE_STATS[RoleStat]);
}
HTM_SELECT_End ();
HTM_TD_End ();
HTM_TR_End ();
}
/*****************************************************************************/
/******************** Put selector for type of action ************************/
/*****************************************************************************/
static void Sta_WriteSelectorAction (const struct Sta_Stats *Stats)
{
extern const char *Txt_Action;
extern const char *Txt_Any_action;
Act_Action_t Action;
Tab_Tab_t Tab;
unsigned ActionUnsigned;
/***** Action *****/
HTM_TR_Begin (NULL);
/* Label */
Frm_LabelColumn ("Frm_C1 RT","StatAct",Txt_Action);
HTM_TD_Begin ("class=\"Frm_C2 LT\"");
HTM_SELECT_Begin (HTM_DONT_SUBMIT_ON_CHANGE,NULL,
"id=\"StatAct\" name=\"StatAct\""
" class=\"Frm_C2_INPUT INPUT_%s\"",
The_GetSuffix ());
HTM_OPTION (HTM_Type_STRING,"0",
Stats->NumAction == 0 ? HTM_OPTION_SELECTED :
HTM_OPTION_UNSELECTED,
HTM_OPTION_ENABLED,
"%s",Txt_Any_action);
for (Action = (Act_Action_t) 1;
Action <= (Act_Action_t) (ActLst_NUM_ACTIONS - 1);
Action++)
{
ActionUnsigned = (unsigned) Action;
Tab = Act_GetTab (Action);
if (Tab == TabUnk)
HTM_OPTION (HTM_Type_UNSIGNED,&ActionUnsigned,
Action == Stats->NumAction ? HTM_OPTION_SELECTED :
HTM_OPTION_UNSELECTED,
HTM_OPTION_ENABLED,
"%u: %s",
(unsigned) Action,Act_GetActionText (Action));
else
HTM_OPTION (HTM_Type_UNSIGNED,&ActionUnsigned,
Action == Stats->NumAction ? HTM_OPTION_SELECTED :
HTM_OPTION_UNSELECTED,
HTM_OPTION_ENABLED,
"%u: %s &gt; %s &gt; %s",
(unsigned) Action,Tab_GetTxt (Tab),
Act_GetTitleAction (Action),
Act_GetActionText (Action));
}
HTM_SELECT_End ();
HTM_TD_End ();
HTM_TR_End ();
}
/*****************************************************************************/
/************************* Put selector for scope ****************************/
/*****************************************************************************/
static void Sta_WriteSelectorScope (void)
{
extern const char *Txt_Scope;
HTM_TR_Begin (NULL);
/* Label */
Frm_LabelColumn ("Frm_C1 RT","ScopeSta",Txt_Scope);
/* Data */
HTM_TD_Begin ("class=\"Frm_C2 LT\"");
Gbl.Scope.Allowed = 1 << Hie_SYS |
1 << Hie_CTY |
1 << Hie_INS |
1 << Hie_CTR |
1 << Hie_DEG |
1 << Hie_CRS;
Sco_GetScope ("ScopeSta",Hie_SYS);
Sco_PutSelectorScope ("ScopeSta",HTM_DONT_SUBMIT_ON_CHANGE);
HTM_TD_End ();
HTM_TR_End ();
}
/*****************************************************************************/
/****** Put selectors for type of access count and for degree or course ******/
/*****************************************************************************/
@ -676,54 +755,6 @@ static void Sta_WriteSelectorCountType (const struct Sta_Stats *Stats)
HTM_SELECT_End ();
}
/*****************************************************************************/
/******************** Put selector for type of action ************************/
/*****************************************************************************/
static void Sta_WriteSelectorAction (const struct Sta_Stats *Stats)
{
extern const char *Txt_Action;
extern const char *Txt_Any_action;
extern const char *Txt_TABS_TXT[Tab_NUM_TABS];
Act_Action_t Action;
unsigned ActionUnsigned;
Tab_Tab_t Tab;
/***** Action *****/
HTM_TR_Begin (NULL);
/* Label */
Frm_LabelColumn ("Frm_C1 RT","StatAct",Txt_Action);
HTM_TD_Begin ("class=\"Frm_C2 LT\"");
HTM_SELECT_Begin (HTM_DONT_SUBMIT_ON_CHANGE,NULL,
"id=\"StatAct\" name=\"StatAct\""
" class=\"Frm_C2_INPUT INPUT_%s\"",
The_GetSuffix ());
HTM_OPTION (HTM_Type_STRING,"0",
Stats->NumAction == 0 ? HTM_OPTION_SELECTED :
HTM_OPTION_UNSELECTED,
HTM_OPTION_ENABLED,
"%s",Txt_Any_action);
for (Action = (Act_Action_t) 1;
Action <= (Act_Action_t) (ActLst_NUM_ACTIONS - 1);
Action++)
{
Tab = Act_GetTab (Act_GetSuperAction (Action));
ActionUnsigned = (unsigned) Action;
HTM_OPTION (HTM_Type_UNSIGNED,&ActionUnsigned,
Action == Stats->NumAction ? HTM_OPTION_SELECTED :
HTM_OPTION_UNSELECTED,
HTM_OPTION_ENABLED,
"%u: %s &gt; %s",
(unsigned) Action,Txt_TABS_TXT[Tab],Act_GetActionText (Action));
}
HTM_SELECT_End ();
HTM_TD_End ();
HTM_TR_End ();
}
/*****************************************************************************/
/******************** Compute and show access statistics *********************/
/*****************************************************************************/

View File

@ -53,9 +53,8 @@ static const char *Tab_GetIcon (Tab_Tab_t Tab);
void Tab_DrawTabs (void)
{
extern const char *Ico_IconSetId[Ico_NUM_ICON_SETS];
extern const char *Txt_TABS_TXT[Tab_NUM_TABS];
extern const char *Txt_TABS_TXT[Tab_NUM_TABS];
Tab_Tab_t NumTab;
const char *TabTxt;
bool ICanViewTab;
char URLIconSet[PATH_MAX + 1];
static const char *ClassIcoTab[Ico_NUM_ICON_SETS] =
@ -85,6 +84,8 @@ void Tab_DrawTabs (void)
if (ICanViewTab) // Don't show the first hidden tabs
{
TabTxt = Tab_GetTxt (NumTab);
/* Form, icon (at top) and text (at bottom) of the tab */
HTM_LI_Begin ("class=\"%s%s\"",
NumTab == Gbl.Action.Tab ? "TAB_ON TAB_ON_" :
@ -98,22 +99,21 @@ void Tab_DrawTabs (void)
Frm_BeginForm (ActMnu);
Par_PutParUnsigned (NULL,"NxtTab",(unsigned) NumTab);
HTM_BUTTON_Submit_Begin (Txt_TABS_TXT[NumTab],
"class=\"BT_LINK\"");
HTM_BUTTON_Submit_Begin (TabTxt,"class=\"BT_LINK\"");
snprintf (URLIconSet,sizeof (URLIconSet),"%s/%s",
Cfg_URL_ICON_SETS_PUBLIC,Ico_IconSetId[Gbl.Prefs.IconSet]);
if (ClassIcoTab[Gbl.Prefs.IconSet])
HTM_IMG (URLIconSet,Tab_GetIcon (NumTab),Txt_TABS_TXT[NumTab],
HTM_IMG (URLIconSet,Tab_GetIcon (NumTab),TabTxt,
"class=\"TAB_ICO %s_%s\"",
ClassIcoTab[Gbl.Prefs.IconSet],The_GetSuffix ());
else
HTM_IMG (URLIconSet,Tab_GetIcon (NumTab),Txt_TABS_TXT[NumTab],
HTM_IMG (URLIconSet,Tab_GetIcon (NumTab),TabTxt,
"class=\"TAB_ICO\"");
HTM_DIV_Begin ("class=\"TAB_TXT TAB_%s_TXT_%s\"",
NumTab == Gbl.Action.Tab ? "ON" :
"OFF",
The_GetSuffix ());
HTM_Txt (Txt_TABS_TXT[NumTab]);
HTM_Txt (TabTxt);
HTM_DIV_End ();
HTM_BUTTON_End ();
Frm_EndForm ();
@ -163,7 +163,7 @@ static bool Tab_CheckIfICanViewTab (Tab_Tab_t Tab)
}
/*****************************************************************************/
/********************** Get icon associated to an action *********************/
/************************ Get icon associated to a tab ***********************/
/*****************************************************************************/
static const char *Tab_GetIcon (Tab_Tab_t NumTab)
@ -193,6 +193,17 @@ static const char *Tab_GetIcon (Tab_Tab_t NumTab)
return Ico_GetIcon (Tab_TabIcons[NumTab]);
}
/*****************************************************************************/
/************************ Get text associated to a tab ***********************/
/*****************************************************************************/
const char *Tab_GetTxt (Tab_Tab_t NumTab)
{
extern const char *Txt_TABS_TXT[Tab_NUM_TABS];
return Txt_TABS_TXT[NumTab];
}
/*****************************************************************************/
/*************** Set current tab depending on current action *****************/
/*****************************************************************************/

View File

@ -57,6 +57,8 @@ typedef enum
void Tab_DrawTabs (void);
const char *Tab_GetTxt (Tab_Tab_t NumTab);
void Tab_SetCurrentTab (void);
void Tab_DisableIncompatibleTabs (void);

View File

@ -33420,11 +33420,11 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] =
#elif L==3 // en
"Refresh the last clicks in real time"
#elif L==4 // es
"Refrescar los &ucute;ltimos clics en tiempo real"
"Refrescar los &uacute;ltimos clics en tiempo real"
#elif L==5 // fr
"Refresh the last clicks in real time" // Besoin de traduction
#elif L==6 // gn
"Refrescar los &ucute;ltimos clics en tiempo real" // Okoteve traducción
"Refrescar los &uacute;ltimos clics en tiempo real" // Okoteve traducción
#elif L==7 // it
"Refresh the last clicks in real time" // Bisogno di traduzione
#elif L==8 // pl