Compare commits

...

2 Commits

10 changed files with 282 additions and 125 deletions

View File

@ -2622,7 +2622,7 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;}
} }
.DATE_FORM_MONTH .DATE_FORM_MONTH
{ {
width:60px; width:120px;
} }
/*********************************** Lists ***********************************/ /*********************************** Lists ***********************************/

View File

@ -187,7 +187,6 @@ void MFU_WriteBigMFUActions (struct MFU_ListMFUActions *ListMFUActions)
{ {
extern const char *Hlp_ANALYTICS_Frequent; extern const char *Hlp_ANALYTICS_Frequent;
extern const char *Txt_My_frequent_actions; extern const char *Txt_My_frequent_actions;
extern const char *Txt_TABS_TXT[Tab_NUM_TABS];
unsigned NumAct; unsigned NumAct;
Act_Action_t Action; Act_Action_t Action;
const char *Title; const char *Title;
@ -214,7 +213,7 @@ void MFU_WriteBigMFUActions (struct MFU_ListMFUActions *ListMFUActions)
if ((Title = Act_GetTitleAction (Action)) != NULL) if ((Title = Act_GetTitleAction (Action)) != NULL)
{ {
/* Action string */ /* 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); sizeof (TabStr) - 1);
Str_Copy (MenuStr,Title,sizeof (MenuStr) - 1); Str_Copy (MenuStr,Title,sizeof (MenuStr) - 1);
snprintf (TabMenuStr,sizeof (TabMenuStr),"%s > %s",TabStr,MenuStr); 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) void MFU_WriteSmallMFUActions (struct MFU_ListMFUActions *ListMFUActions)
{ {
extern const char *Txt_Frequent_ACTIONS; extern const char *Txt_Frequent_ACTIONS;
extern const char *Txt_TABS_TXT[Tab_NUM_TABS];
unsigned NumAct; unsigned NumAct;
Act_Action_t Action; Act_Action_t Action;
const char *Title; const char *Title;
@ -273,7 +271,7 @@ void MFU_WriteSmallMFUActions (struct MFU_ListMFUActions *ListMFUActions)
if ((Title = Act_GetTitleAction (Action)) != NULL) if ((Title = Act_GetTitleAction (Action)) != NULL)
{ {
/* Action string */ /* 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); sizeof (TabStr) - 1);
Str_Copy (MenuStr,Title,sizeof (MenuStr) - 1); Str_Copy (MenuStr,Title,sizeof (MenuStr) - 1);
snprintf (TabMenuStr,sizeof (TabMenuStr),"%s > %s",TabStr,MenuStr); 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}, [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}, [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}, [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,12 @@ Me sale este error, no s
"can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod') "can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod')
*/ */
#define Log_PLATFORM_VERSION "SWAD 23.67.1 (2024-03-08)" #define Log_PLATFORM_VERSION "SWAD 23.67.3 (2024-03-09)"
#define CSS_FILE "swad23.67.1.css" #define CSS_FILE "swad23.67.2.css"
#define JS_FILE "swad23.53.6.js" #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.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. Version 23.67: Mar 08, 2024 Fixed bug in selection of groups related to attendance. Reported by Antonio Manuel Fernández Pérez.
Fixed bugs in messages. (335308 lines) Fixed bugs in messages. (335308 lines)

View File

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

View File

@ -711,7 +711,6 @@ static void Rep_WriteSectionGlobalHits (struct Rep_Report *Report)
static void Rep_WriteSectionHitsPerAction (struct Rep_Report *Report) static void Rep_WriteSectionHitsPerAction (struct Rep_Report *Report)
{ {
extern const char *Txt_Hits_per_action; extern const char *Txt_Hits_per_action;
extern const char *Txt_TABS_TXT[Tab_NUM_TABS];
extern const char *Txt_Other_actions; extern const char *Txt_Other_actions;
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
@ -719,7 +718,7 @@ static void Rep_WriteSectionHitsPerAction (struct Rep_Report *Report)
unsigned NumHit; unsigned NumHit;
long ActCod; long ActCod;
Act_Action_t Action; Act_Action_t Action;
Tab_Tab_t Tab; const char *TabTxt;
unsigned long NumClicks; unsigned long NumClicks;
/***** Begin section *****/ /***** Begin section *****/
@ -760,9 +759,9 @@ static void Rep_WriteSectionHitsPerAction (struct Rep_Report *Report)
{ {
if ((Action = Act_GetActionFromActCod (ActCod)) >= 0) if ((Action = Act_GetActionFromActCod (ActCod)) >= 0)
{ {
Tab = Act_GetTab (Act_GetSuperAction (Action)); TabTxt = Tab_GetTxt (Act_GetTab (Act_GetSuperAction (Action)));
if (Txt_TABS_TXT[Tab]) if (TabTxt)
fprintf (Rep_File,"%s > ",Txt_TABS_TXT[Tab]); fprintf (Rep_File,"%s > ",TabTxt);
} }
fprintf (Rep_File,"%s",Act_GetActionText (Action)); 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_PutFormCrsHits (struct Sta_Stats *Stats);
static void Sta_PutFormGblHits (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_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_ShowHits (Sta_GlobalOrCourseAccesses_t GlobalOrCourse);
static void Sta_ShowDetailedAccessesList (const struct Sta_Stats *Stats, static void Sta_ShowDetailedAccessesList (const struct Sta_Stats *Stats,
unsigned NumHits, 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 *Hlp_ANALYTICS_Visits_global_visits;
extern const char *Txt_Statistics_of_all_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_Show;
extern const char *Txt_distributed_by; extern const char *Txt_distributed_by;
extern const char *Txt_STAT_CLICKS_GROUPED_BY[Sta_NUM_CLICKS_GROUPED_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_STR_TIME] = Dat_HMS_TO_000000,
[Dat_END_TIME] = Dat_HMS_TO_235959 [Dat_END_TIME] = Dat_HMS_TO_235959
}; };
Sta_Role_t RoleStat;
unsigned RoleStatUnsigned;
Sta_ClicksGroupedBy_t ClicksGroupedBy; Sta_ClicksGroupedBy_t ClicksGroupedBy;
unsigned ClicksGroupedByUnsigned; unsigned ClicksGroupedByUnsigned;
@ -505,55 +502,13 @@ static void Sta_PutFormGblHits (struct Sta_Stats *Stats)
Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (SetHMS); Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (SetHMS);
/***** Users' roles whose accesses we want to see *****/ /***** Users' roles whose accesses we want to see *****/
HTM_TR_Begin (NULL); Sta_WriteSelectorRoles (Stats);
/* 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 ();
/***** Selection of action *****/ /***** Selection of action *****/
Sta_WriteSelectorAction (Stats); Sta_WriteSelectorAction (Stats);
/***** Clicks made from anywhere, current center, current degree or current course *****/ /***** Clicks made from anywhere, current center, current degree or current course *****/
HTM_TR_Begin (NULL); Sta_WriteSelectorScope ();
/* 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 ();
/***** Count type for the statistic *****/ /***** Count type for the statistic *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
@ -647,6 +602,130 @@ void Sta_PutLinkToGlobalHits (void)
Txt_Global_visits,NULL); 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 ******/ /****** 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 (); 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 *********************/ /******************** Compute and show access statistics *********************/
/*****************************************************************************/ /*****************************************************************************/

View File

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

View File

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

View File

@ -4867,6 +4867,29 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] =
"Change number of users of room" // Precisa de tradução "Change number of users of room" // Precisa de tradução
#elif L==10 // tr #elif L==10 // tr
"Change number of users of room" // Çeviri lazim! "Change number of users of room" // Çeviri lazim!
#endif
,
[ActChgRooMAC] =
#if L==1 // ca
"Change MAC of room" // Necessita traducció
#elif L==2 // de
"Change MAC of room" // Need Übersetzung
#elif L==3 // en
"Change MAC of room"
#elif L==4 // es
"Cambiar MAC de sala"
#elif L==5 // fr
"Change MAC of room" // Besoin de traduction
#elif L==6 // gn
"Cambiar MAC de sala" // Okoteve traducción
#elif L==7 // it
"Change MAC of room" // Bisogno di traduzione
#elif L==8 // pl
"Change MAC of room" // Potrzebujesz tlumaczenie
#elif L==9 // pt
"Change MAC of room" // Precisa de tradução
#elif L==10 // tr
"Change MAC of room" // Çeviri lazim!
#endif #endif
, ,
[ActRenRooSho] = [ActRenRooSho] =
@ -4936,6 +4959,29 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] =
"Change floor of room" // Precisa de tradução "Change floor of room" // Precisa de tradução
#elif L==10 // tr #elif L==10 // tr
"Change floor of room" // Çeviri lazim! "Change floor of room" // Çeviri lazim!
#endif
,
[ActChgRooTyp] =
#if L==1 // ca
"Change type of room" // Necessita traducció
#elif L==2 // de
"Change type of room" // Need Übersetzung
#elif L==3 // en
"Change type of room"
#elif L==4 // es
"Cambiar tipo de sala"
#elif L==5 // fr
"Change type of room" // Besoin de traduction
#elif L==6 // gn
"Cambiar tipo de sala" // Okoteve traducción
#elif L==7 // it
"Change type of room" // Bisogno di traduzione
#elif L==8 // pl
"Change type of room" // Potrzebujesz tlumaczenie
#elif L==9 // pt
"Change type of room" // Precisa de tradução
#elif L==10 // tr
"Change type of room" // Çeviri lazim!
#endif #endif
, ,
[ActSeeDegInf] = [ActSeeDegInf] =
@ -9858,6 +9904,29 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] =
"Unlock project edition" // Precisa de tradução "Unlock project edition" // Precisa de tradução
#elif L==10 // tr #elif L==10 // tr
"Unlock project edition" // Çeviri lazim! "Unlock project edition" // Çeviri lazim!
#endif
,
[ActChgPrjRev] =
#if L==1 // ca
"Change review status of a project" // Necessita traducció
#elif L==2 // de
"Change review status of a project" // Need Übersetzung
#elif L==3 // en
"Change review status of a project"
#elif L==4 // es
"Cambiar estado de revisi&oacute;n de un proyecto"
#elif L==5 // fr
"Change review status of a project" // Besoin de traduction
#elif L==6 // gn
"Cambiar estado de revisi&oacute;n de un proyecto" // Okoteve traducción
#elif L==7 // it
"Change review status of a project" // Bisogno di traduzione
#elif L==8 // pl
"Change review status of a project" // Potrzebujesz tlumaczenie
#elif L==9 // pt
"Change review status of a project" // Precisa de tradução
#elif L==10 // tr
"Change review status of a project" // Çeviri lazim!
#endif #endif
, ,
[ActReqAddStdPrj] = [ActReqAddStdPrj] =
@ -33111,6 +33180,29 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] =
"Unhide survey" // Precisa de tradução "Unhide survey" // Precisa de tradução
#elif L==10 // tr #elif L==10 // tr
"Unhide survey" // Çeviri lazim! "Unhide survey" // Çeviri lazim!
#endif
,
[ActReqLnkSvy] =
#if L==1 // ca
"Get link to survey" // Necessita traducció
#elif L==2 // de
"Copy link to survey" // Need Übersetzung
#elif L==3 // en
"Copy link to survey"
#elif L==4 // es
"Copiar enlace a encuesta"
#elif L==5 // fr
"Copy link to survey" // Besoin de traduction
#elif L==6 // gn
"Copiar enlace a encuesta" // Okoteve traducción
#elif L==7 // it
"Copy link to survey" // Bisogno di traduzione
#elif L==8 // pl
"Copy link to survey" // Potrzebujesz tlumaczenie
#elif L==9 // pt
"Copy link to survey" // Precisa de tradução
#elif L==10 // tr
"Copy link to survey" // Çeviri lazim!
#endif #endif
, ,
[ActEdiOneSvyQst] = [ActEdiOneSvyQst] =
@ -33328,11 +33420,11 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] =
#elif L==3 // en #elif L==3 // en
"Refresh the last clicks in real time" "Refresh the last clicks in real time"
#elif L==4 // es #elif L==4 // es
"Refrescar los &ucute;ltimos clics en tiempo real" "Refrescar los &uacute;ltimos clics en tiempo real"
#elif L==5 // fr #elif L==5 // fr
"Refresh the last clicks in real time" // Besoin de traduction "Refresh the last clicks in real time" // Besoin de traduction
#elif L==6 // gn #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 #elif L==7 // it
"Refresh the last clicks in real time" // Bisogno di traduzione "Refresh the last clicks in real time" // Bisogno di traduzione
#elif L==8 // pl #elif L==8 // pl
@ -34606,6 +34698,29 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] =
"Change menu" // Precisa de tradução "Change menu" // Precisa de tradução
#elif L==10 // tr #elif L==10 // tr
"Change menu" // Çeviri lazim! "Change menu" // Çeviri lazim!
#endif
,
[ActChgUsrPho] =
#if L==1 // ca
"Change user photo shape" // Necessita traducció
#elif L==2 // de
"Change user photo shape" // Need Übersetzung
#elif L==3 // en
"Change user photo shape"
#elif L==4 // es
"Cambiar forma de fotos de usuarios"
#elif L==5 // fr
"Change user photo shape" // Besoin de traduction
#elif L==6 // gn
"Cambiar forma de fotos de usuarios" // Okoteve traducción
#elif L==7 // it
"Change user photo shape" // Bisogno di traduzione
#elif L==8 // pl
"Change user photo shape" // Potrzebujesz tlumaczenie
#elif L==9 // pt
"Change user photo shape" // Precisa de tradução
#elif L==10 // tr
"Change user photo shape" // Çeviri lazim!
#endif #endif
, ,
[ActChgPriPho] = [ActChgPriPho] =