From 740f317010d10e0ae7c229651b5fdb385cbe1bef Mon Sep 17 00:00:00 2001 From: acanas Date: Fri, 26 Jan 2024 10:26:19 +0100 Subject: [PATCH] Version 23.60: Jan 26, 2024 Code refactoring in my courses. --- swad_HTML.c | 6 ++ swad_HTML.h | 1 + swad_MFU.c | 2 +- swad_account.c | 3 +- swad_action_list.c | 2 +- swad_assignment.c | 9 +- swad_attendance.c | 15 +-- swad_center.c | 2 +- swad_changelog.h | 5 +- swad_chat.c | 2 +- swad_country.c | 6 +- swad_course.c | 202 ---------------------------------------- swad_course.h | 5 - swad_degree.c | 2 +- swad_exam_result.c | 9 +- swad_exam_session.c | 9 +- swad_forum.c | 2 +- swad_group.c | 4 +- swad_hierarchy.c | 214 ++++++++++++++++++++++++++++++++++++++++++- swad_hierarchy.h | 6 ++ swad_holiday.c | 8 +- swad_icon.c | 2 +- swad_institution.c | 2 +- swad_layout.c | 4 +- swad_mark.c | 6 +- swad_match.c | 17 ++-- swad_match_result.c | 9 +- swad_network.c | 2 +- swad_notification.c | 4 +- swad_project.c | 5 +- swad_question.c | 15 ++- swad_search.c | 2 +- swad_statistic.c | 6 +- swad_survey.c | 15 +-- swad_tag.c | 4 +- swad_test_print.c | 6 +- swad_timeline_note.c | 12 +-- swad_user.c | 8 +- swad_zip.c | 4 +- 39 files changed, 334 insertions(+), 303 deletions(-) diff --git a/swad_HTML.c b/swad_HTML.c index 1908aa2e..8e6c3067 100644 --- a/swad_HTML.c +++ b/swad_HTML.c @@ -1957,6 +1957,12 @@ void HTM_TxtColonNBSP (const char *Txt) HTM_NBSP (); } +void HTM_NBSPTxt (const char *Txt) + { + HTM_NBSP (); + HTM_Txt (Txt); + } + void HTM_NBSP (void) { HTM_Txt (" "); diff --git a/swad_HTML.h b/swad_HTML.h index 3257d852..1a8d5539 100644 --- a/swad_HTML.h +++ b/swad_HTML.h @@ -228,6 +228,7 @@ void HTM_Txt (const char *Txt); void HTM_TxtColon (const char *Txt); void HTM_TxtSemicolon (const char *Txt); void HTM_TxtColonNBSP (const char *Txt); +void HTM_NBSPTxt (const char *Txt); void HTM_NBSP (void); void HTM_Colon (void); void HTM_Semicolon (void); diff --git a/swad_MFU.c b/swad_MFU.c index 33de2e7f..ff59c8c4 100644 --- a/swad_MFU.c +++ b/swad_MFU.c @@ -326,7 +326,7 @@ static void MFU_PutIconAndText (Act_Action_t Action, "class=\"ICO_%s_%s\"", Ico_GetPreffix (Color[Gbl.Prefs.IconSet]), The_GetSuffix ()); - HTM_TxtF (" %s",MenuStr); + HTM_NBSPTxt (MenuStr); } /*****************************************************************************/ diff --git a/swad_account.c b/swad_account.c index 24bd4b68..1f593a36 100644 --- a/swad_account.c +++ b/swad_account.c @@ -299,7 +299,8 @@ static void Acc_WriteRowEmptyAccount (unsigned NumUsr,const char *ID,struct Usr_ HTM_TD_Begin ("class=\"LT DAT_STRONG_%s %s\"", The_GetSuffix (), The_GetColorRows ()); - HTM_TxtF ("%s: %s",Txt_ID,ID); + HTM_TxtColon (Txt_ID); + HTM_NBSPTxt (ID); HTM_BR (); HTM_TxtColonNBSP (Txt_Name); if (UsrDat->FullName[0]) diff --git a/swad_action_list.c b/swad_action_list.c index d1c6aa37..6bc0f4b4 100644 --- a/swad_action_list.c +++ b/swad_action_list.c @@ -1812,7 +1812,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] = // TabPrf ****************************************************************** // Actions in menu: [ActFrmRolSes ] = { 843, 0,TabPrf,ActFrmRolSes ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Usr_WriteFormLogout ,"power-off" }, - [ActMyCrs ] = { 987, 1,TabPrf,ActMyCrs ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Crs_ReqSelectOneOfMyCourses ,"sitemap" }, + [ActMyCrs ] = { 987, 1,TabPrf,ActMyCrs ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Hie_ReqSelectOneNodeFromMyHierarchy ,"sitemap" }, [ActSeeMyTT ] = { 408, 2,TabPrf,ActSeeMyTT ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tmt_ShowClassTimeTable ,"clock" }, [ActSeeMyAgd ] = {1602, 3,TabPrf,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Agd_GetParsAndShowMyAgenda ,"calendar" }, [ActFrmMyAcc ] = { 36, 4,TabPrf,ActFrmMyAcc ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Acc_ShowFormMyAccount ,"at" }, diff --git a/swad_assignment.c b/swad_assignment.c index 44c0c18d..7b1c29be 100644 --- a/swad_assignment.c +++ b/swad_assignment.c @@ -1333,7 +1333,8 @@ static void Asg_ShowLstGrpsToEditAssignment (long AsgCod) "AsgCod", AsgCod) ? "" : " checked=\"checked\""); - HTM_TxtF ("%s %s",Txt_The_whole_course, + HTM_TxtF ("%s %s", + Txt_The_whole_course, Gbl.Hierarchy.Node[Hie_CRS].ShrtName); HTM_LABEL_End (); HTM_TD_End (); @@ -1598,7 +1599,7 @@ static void Asg_GetAndWriteNamesOfGrpsAssociatedToAsg (struct Asg_Assignment *As row = mysql_fetch_row (mysql_res); /* Write group type name and group name */ - HTM_TxtF ("%s %s",row[0],row[1]); + HTM_TxtF ("%s %s",row[0],row[1]); if (NumGrps >= 2) { @@ -1610,8 +1611,8 @@ static void Asg_GetAndWriteNamesOfGrpsAssociatedToAsg (struct Asg_Assignment *As } } else - HTM_TxtF ("%s %s",Txt_The_whole_course, - Gbl.Hierarchy.Node[Hie_CRS].ShrtName); + HTM_TxtF ("%s %s", + Txt_The_whole_course,Gbl.Hierarchy.Node[Hie_CRS].ShrtName); HTM_DIV_End (); diff --git a/swad_attendance.c b/swad_attendance.c index c9a152b8..a3614825 100644 --- a/swad_attendance.c +++ b/swad_attendance.c @@ -1108,7 +1108,8 @@ static void Att_ShowLstGrpsToEditEvent (long AttCod) "AttCod", AttCod) ? "" : " checked=\"checked\""); - HTM_TxtF ("%s %s",Txt_The_whole_course, + HTM_TxtF ("%s %s", + Txt_The_whole_course, Gbl.Hierarchy.Node[Hie_CRS].ShrtName); HTM_LABEL_End (); HTM_TD_End (); @@ -1314,7 +1315,7 @@ static void Att_GetAndWriteNamesOfGrpsAssociatedToEvent (struct Att_Event *Event row = mysql_fetch_row (mysql_res); /* Write group type name (row[0]) and group name (row[1]) */ - HTM_TxtF ("%s %s",row[0],row[1]); + HTM_TxtF ("%s %s",row[0],row[1]); /* Write the name of the room (row[2]) */ if (row[2]) // May be NULL because of LEFT JOIN @@ -1333,8 +1334,8 @@ static void Att_GetAndWriteNamesOfGrpsAssociatedToEvent (struct Att_Event *Event } } else - HTM_TxtF ("%s %s",Txt_The_whole_course, - Gbl.Hierarchy.Node[Hie_CRS].ShrtName); + HTM_TxtF ("% %s", + Txt_The_whole_course,Gbl.Hierarchy.Node[Hie_CRS].ShrtName); /***** End container *****/ HTM_DIV_End (); @@ -1755,7 +1756,7 @@ static void Att_WriteRowUsrToCallTheRoll (unsigned NumUsr, The_GetColorRows ()); HTM_Txt (UsrDat->Surname1); if (UsrDat->Surname2[0]) - HTM_TxtF (" %s",UsrDat->Surname2); + HTM_SPTxt (UsrDat->Surname2); HTM_TxtF (", %s",UsrDat->FrstName); HTM_TD_End (); @@ -2929,7 +2930,7 @@ static void Att_WriteRowUsrSeveralAttEvents (const struct Att_Events *Events, The_GetColorRows ()); HTM_Txt (UsrDat->Surname1); if (UsrDat->Surname2[0]) - HTM_TxtF (" %s",UsrDat->Surname2); + HTM_SPTxt (UsrDat->Surname2); HTM_TxtF (", %s",UsrDat->FrstName); HTM_TD_End (); @@ -3108,7 +3109,7 @@ static void Att_ListAttEventsForAStd (struct Att_Events *Events, The_GetSuffix ()); HTM_Txt (UsrDat->Surname1); if (UsrDat->Surname2[0]) - HTM_TxtF (" %s",UsrDat->Surname2); + HTM_SPTxt (UsrDat->Surname2); HTM_TxtF (", %s",UsrDat->FrstName); HTM_TD_End (); diff --git a/swad_center.c b/swad_center.c index 47a11e54..3e1745cc 100644 --- a/swad_center.c +++ b/swad_center.c @@ -199,7 +199,7 @@ void Ctr_DrawCenterLogoAndNameWithLink (struct Hie_Node *Ctr,Act_Action_t Action /***** Center logo and name *****/ Lgo_DrawLogo (Hie_CTR,Ctr,IconClass); - HTM_TxtF (" %s",Ctr->FullName); + HTM_NBSPTxt (Ctr->FullName); /***** End link *****/ HTM_BUTTON_End (); diff --git a/swad_changelog.h b/swad_changelog.h index 300f4ee5..87dbbe3d 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -633,11 +633,12 @@ 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.59.5 (2024-01-26)" +#define Log_PLATFORM_VERSION "SWAD 23.60 (2024-01-26)" #define CSS_FILE "swad23.58.1.css" #define JS_FILE "swad23.53.6.js" /* - Version 23.59.5: Jan 26, 2024 Responsive design in forums and messages. (? lines) + Version 23.60: Jan 26, 2024 Code refactoring in my courses. (335725 lines) + Version 23.59.5: Jan 26, 2024 Responsive design in forums and messages. (335698 lines) Version 23.59.4: Jan 24, 2024 Responsive design in list of users. (335701 lines) Version 23.59.3: Jan 24, 2024 Responsive design in course hits. (335698 lines) Version 23.59.2: Jan 24, 2024 Responsive design in global hits. (335672 lines) diff --git a/swad_chat.c b/swad_chat.c index 3f687c36..62b25e59 100644 --- a/swad_chat.c +++ b/swad_chat.c @@ -324,7 +324,7 @@ static void Cht_WriteLinkToChat2 (const char *RoomCode,const char *RoomFullName) HTM_STRONG_Begin (); /* Room name and users */ - HTM_TxtF (" %s",RoomFullName); + HTM_NBSPTxt (RoomFullName); if (NumUsrsInRoom > 1) HTM_TxtF (" [%d %s]",NumUsrsInRoom,Txt_connected_PLURAL); else if (NumUsrsInRoom == 1) diff --git a/swad_country.c b/swad_country.c index 28645a41..7aff9a07 100644 --- a/swad_country.c +++ b/swad_country.c @@ -498,8 +498,6 @@ void Cty_DrawCountryMapAndNameWithLink (struct Hie_Node *Cty,Act_Action_t Action const char *ClassContainer, const char *ClassMap) { - char CountryName[Cty_MAX_BYTES_NAME + 1]; - /***** Begin form *****/ Frm_BeginFormGoTo (Action); ParCod_PutPar (ParCod_Cty,Cty->HieCod); @@ -516,9 +514,7 @@ void Cty_DrawCountryMapAndNameWithLink (struct Hie_Node *Cty,Act_Action_t Action Cty_DrawCountryMap (Cty,ClassMap); /***** Write country name *****/ - Str_Copy (CountryName,Cty->FullName,sizeof (CountryName) - 1); - HTM_TxtF (" %s ",CountryName); - HTM_TxtF ("(%s)",Cty->ShrtName); + HTM_TxtF (" %s (%s)",Cty->FullName,Cty->ShrtName); /***** End link *****/ HTM_BUTTON_End (); diff --git a/swad_course.c b/swad_course.c index 056494d5..0725450f 100644 --- a/swad_course.c +++ b/swad_course.c @@ -90,15 +90,6 @@ static struct Hie_Node *Crs_EditingCrs = NULL; // Static variable to keep the co /**************************** Private prototypes *****************************/ /*****************************************************************************/ -static void Crs_WriteListMyCoursesToSelectOne (void); -static void Crs_WriteNodes (struct Hie_Node Hie[Hie_NUM_LEVELS], - Lay_LastItem_t IsLastItemInLevel[1 + 6], - Hie_Level_t Level); -static void Crs_WriteRowMyCourses (Hie_Level_t Level, - const struct Hie_Node Hie[Hie_NUM_LEVELS], - Lay_Highlight_t Highlight, - Lay_LastItem_t IsLastItemInLevel[1 + 6]); - static void Crs_GetListCrssInCurrentDeg (void); static void Crs_ListCourses (void); static void Crs_PutIconsListCourses (__attribute__((unused)) void *Args); @@ -124,8 +115,6 @@ static void Crs_EmptyCourseCompletely (long CrsCod); static void Crs_PutButtonToGoToCrs (void); static void Crs_PutButtonToRegisterInCrs (void); -static void Crs_PutIconToSearchCourses (__attribute__((unused)) void *Args); - static void Crs_WriteRowCrsData (unsigned NumCrs,MYSQL_ROW row,bool WriteColumnAccepted); static void Crs_EditingCourseConstructor (void); @@ -149,132 +138,6 @@ void Crs_ShowIntroduction (void) Hlp_ShowHelpWhatWouldYouLikeToDo (); } -/*****************************************************************************/ -/************************ Write menu with my courses *************************/ -/*****************************************************************************/ - -static void Crs_WriteListMyCoursesToSelectOne (void) - { - extern const char *Hlp_PROFILE_Courses; - extern const char *Txt_My_courses; - struct Hie_Node Hie[Hie_NUM_LEVELS]; - Lay_LastItem_t IsLastItemInLevel[1 + 6]; - - /***** Begin box *****/ - Box_BoxBegin (NULL,Txt_My_courses, - Crs_PutIconToSearchCourses,NULL, - Hlp_PROFILE_Courses,Box_NOT_CLOSABLE); - - /***** Begin list *****/ - HTM_UL_Begin ("class=\"LIST_TREE\""); - - /***** Write nodes recursively *****/ - Crs_WriteNodes (Hie,IsLastItemInLevel,Hie_SYS); - - /***** End list *****/ - HTM_UL_End (); - - /***** End box *****/ - Box_BoxEnd (); - } - -static void Crs_WriteNodes (struct Hie_Node Hie[Hie_NUM_LEVELS], - Lay_LastItem_t IsLastItemInLevel[1 + 6], - Hie_Level_t Level) - { - extern unsigned (*Hie_GetMyNodesFromDB[Hie_NUM_LEVELS]) (MYSQL_RES **mysql_res, - long PrtCod); - extern bool (*Hie_GetDataByCod[Hie_NUM_LEVELS]) (struct Hie_Node *Node); - extern const char *Txt_HIERARCHY_SINGUL_Abc[Hie_NUM_LEVELS]; - Lay_Highlight_t Highlight; // Highlight because degree, course, etc. is selected - MYSQL_RES *mysql_res; - MYSQL_ROW row; - unsigned NumNode; - unsigned NumNodes; - - if (Level > Hie_SYS) - NumNodes = Hie_GetMyNodesFromDB[Level] (&mysql_res,Hie[Level - 1].HieCod); - else - NumNodes = 1; - - for (NumNode = 0; - NumNode < NumNodes; - NumNode++) - { - if (Level > Hie_SYS) - { - /***** Get next node *****/ - row = mysql_fetch_row (mysql_res); - Hie[Level].HieCod = Str_ConvertStrCodToLongCod (row[0]); - - /***** Get data of this node *****/ - if (!Hie_GetDataByCod[Level] (&Hie[Level])) - Err_WrongCountrExit (); - } - else - { - Hie[Level].HieCod = -1L; - Str_Copy (Hie[Level].ShrtName,Txt_HIERARCHY_SINGUL_Abc[Level], - sizeof (Hie[Level].ShrtName) - 1); - } - - /***** Write link to node *****/ - if (Level < Hie_CRS) - Highlight = (Gbl.Hierarchy.Node[Level + 1].HieCod <= 0 && - Gbl.Hierarchy.Node[Level].HieCod == Hie[Level].HieCod) ? Lay_HIGHLIGHT : - Lay_NO_HIGHLIGHT; - else - Highlight = (Gbl.Hierarchy.Node[Level].HieCod == Hie[Level].HieCod) ? Lay_HIGHLIGHT : - Lay_NO_HIGHLIGHT; - - IsLastItemInLevel[Level] = (NumNode == NumNodes - 1) ? Lay_LAST_ITEM : - Lay_NO_LAST_ITEM; - Crs_WriteRowMyCourses (Level,Hie,Highlight,IsLastItemInLevel); - - /***** Write subnodes recursively ******/ - if (Level < Hie_CRS) - Crs_WriteNodes (Hie,IsLastItemInLevel,Level + 1); - } - - if (Level > Hie_SYS) - /* Free structure that stores the query result */ - DB_FreeMySQLResult (&mysql_res); - } - -static void Crs_WriteRowMyCourses (Hie_Level_t Level, - const struct Hie_Node Hie[Hie_NUM_LEVELS], - Lay_Highlight_t Highlight, - Lay_LastItem_t IsLastItemInLevel[1 + 6]) - { - extern ParCod_Param_t Hie_ParCod[Hie_NUM_LEVELS]; - extern const char *Lay_HighlightClass[Lay_NUM_HIGHLIGHT]; - static Act_Action_t Actions[Hie_NUM_LEVELS] = - { - [Hie_SYS] = ActSeeSysInf, - [Hie_CTY] = ActSeeCtyInf, - [Hie_INS] = ActSeeInsInf, - [Hie_CTR] = ActSeeCtrInf, - [Hie_DEG] = ActSeeDegInf, - [Hie_CRS] = ActSeeCrsInf, - }; - - HTM_LI_Begin (Lay_HighlightClass[Highlight]); - Lay_IndentDependingOnLevel (Level,IsLastItemInLevel, - Lay_HORIZONTAL_LINE_AT_RIGHT); - Frm_BeginForm (ActMyCrs); - ParCod_PutPar (Hie_ParCod[Level],Hie[Level].HieCod); - HTM_BUTTON_Submit_Begin (Act_GetActionText (Actions[Level]), - "class=\"BT_LINK FORM_IN_%s\"", - The_GetSuffix ()); - Lgo_DrawLogo (Level,&Hie[Level],"ICO16x16"); - HTM_DIV_Begin ("class=\"MY_CRS_TXT\""); - HTM_TxtF (" %s",Hie[Level].ShrtName); - HTM_DIV_End (); - HTM_BUTTON_End (); - Frm_EndForm (); - HTM_LI_End (); - } - /*****************************************************************************/ /********************* Get number of courses with users **********************/ /*****************************************************************************/ @@ -1754,71 +1617,6 @@ static void Crs_PutButtonToRegisterInCrs (void) Frm_EndForm (); } -/*****************************************************************************/ -/************************* Select one of my courses **************************/ -/*****************************************************************************/ - -void Crs_ReqSelectOneOfMyCourses (void) - { - /***** Fill the list with the courses I belong to, if not filled *****/ - Hie_GetMyHierarchy (Hie_CRS); - - /***** Select one of my courses *****/ - if (Gbl.Usrs.Me.Hierarchy[Hie_CRS].Num) - /* Show my courses */ - Crs_WriteListMyCoursesToSelectOne (); - else // I am not enroled in any course - /* Show help to enrol me */ - Hlp_ShowHelpWhatWouldYouLikeToDo (); - } - -/*****************************************************************************/ -/******************* Put an icon (form) to search courses ********************/ -/*****************************************************************************/ - -static void Crs_PutIconToSearchCourses (__attribute__((unused)) void *Args) - { - Lay_PutContextualLinkOnlyIcon (ActReqSch,NULL, - Sch_PutLinkToSearchCoursesPars,NULL, - "search.svg",Ico_BLACK); - } - -/*****************************************************************************/ -/********** Put an icon (form) to select my courses in breadcrumb ************/ -/*****************************************************************************/ - -void Crs_PutIconToSelectMyCoursesInBreadcrumb (void) - { - extern const char *Hie_Icons[Hie_NUM_LEVELS]; - extern const char *Txt_My_courses; - - if (Gbl.Usrs.Me.Logged) // I am logged - { - /***** Begin form *****/ - Frm_BeginForm (ActMyCrs); - - /***** Put icon with link *****/ - HTM_INPUT_IMAGE (Cfg_URL_ICON_PUBLIC,Hie_Icons[Hie_SYS],Txt_My_courses, - "class=\"BC_ICO BC_ICO_%s ICO_HIGHLIGHT\"", - The_GetSuffix ()); - - /***** End form *****/ - Frm_EndForm (); - } - } - -/*****************************************************************************/ -/****************** Put an icon (form) to select my courses ******************/ -/*****************************************************************************/ - -void Crs_PutIconToSelectMyCourses (__attribute__((unused)) void *Args) - { - if (Gbl.Usrs.Me.Logged) // I am logged - Lay_PutContextualLinkOnlyIcon (ActMyCrs,NULL, - NULL,NULL, - "sitemap.svg",Ico_BLACK); - } - /*****************************************************************************/ /************************** Write courses of a user **************************/ /*****************************************************************************/ diff --git a/swad_course.h b/swad_course.h index 8c395486..8d626efa 100644 --- a/swad_course.h +++ b/swad_course.h @@ -79,11 +79,6 @@ void Crs_RenameCourse (struct Hie_Node *Crs,Nam_ShrtOrFullName_t ShrtOrFull); void Crs_ChangeCrsStatus (void); void Crs_ContEditAfterChgCrs (void); -void Crs_PutIconToSelectMyCoursesInBreadcrumb (void); -void Crs_PutIconToSelectMyCourses (__attribute__((unused)) void *Args); - -void Crs_ReqSelectOneOfMyCourses (void); - void Crs_GetAndWriteCrssOfAUsr (const struct Usr_Data *UsrDat,Rol_Role_t Role); void Crs_ListCrssFound (MYSQL_RES **mysql_res,unsigned NumCrss); diff --git a/swad_degree.c b/swad_degree.c index 68b1fa68..47c38235 100644 --- a/swad_degree.c +++ b/swad_degree.c @@ -205,7 +205,7 @@ void Deg_DrawDegreeLogoAndNameWithLink (struct Hie_Node *Deg,Act_Action_t Action /***** Degree logo and name *****/ Lgo_DrawLogo (Hie_DEG,Deg,IconClass); - HTM_TxtF (" %s",Deg->FullName); + HTM_NBSPTxt (Deg->FullName); /***** End link *****/ HTM_BUTTON_End (); diff --git a/swad_exam_result.c b/swad_exam_result.c index d4b40d31..3df95c03 100644 --- a/swad_exam_result.c +++ b/swad_exam_result.c @@ -1527,11 +1527,14 @@ void ExaRes_ShowExamResultUser (struct Usr_Data *UsrDat) /***** User's data *****/ HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); ID_WriteUsrIDs (UsrDat,NULL); - HTM_TxtF (" %s",UsrDat->Surname1); + HTM_NBSPTxt (UsrDat->Surname1); if (UsrDat->Surname2[0]) - HTM_TxtF (" %s",UsrDat->Surname2); + HTM_SPTxt (UsrDat->Surname2); if (UsrDat->FrstName[0]) - HTM_TxtF (", %s",UsrDat->FrstName); + { + HTM_Comma (); + HTM_SPTxt (UsrDat->FrstName); + } HTM_BR (); Pho_ShowUsrPhotoIfAllowed (UsrDat, ClassPhoto[Gbl.Prefs.PhotoShape],Pho_ZOOM); diff --git a/swad_exam_session.c b/swad_exam_session.c index 14c3834c..8b80c26a 100644 --- a/swad_exam_session.c +++ b/swad_exam_session.c @@ -574,7 +574,7 @@ static void ExaSes_GetAndWriteNamesOfGrpsAssociatedToSession (const struct ExaSe row = mysql_fetch_row (mysql_res); /* Write group type name (row[0]) and group name (row[1]) */ - HTM_TxtF ("%s %s",row[0],row[1]); + HTM_TxtF ("%s %s",row[0],row[1]); if (NumGrps >= 2) { @@ -587,8 +587,8 @@ static void ExaSes_GetAndWriteNamesOfGrpsAssociatedToSession (const struct ExaSe } } else - HTM_TxtF ("%s %s",Txt_The_whole_course, - Gbl.Hierarchy.Node[Hie_CRS].ShrtName); + HTM_TxtF ("%s %s", + Txt_The_whole_course,Gbl.Hierarchy.Node[Hie_CRS].ShrtName); HTM_DIV_End (); @@ -1016,7 +1016,8 @@ static void ExaSes_ShowLstGrpsToCreateSession (long SesCod) "SesCod", SesCod) ? "" : " checked=\"checked\""); - HTM_TxtF ("%s %s",Txt_The_whole_course, + HTM_TxtF ("%s %s", + Txt_The_whole_course, Gbl.Hierarchy.Node[Hie_CRS].ShrtName); HTM_LABEL_End (); HTM_TD_End (); diff --git a/swad_forum.c b/swad_forum.c index 6c69ad45..0490d2b4 100644 --- a/swad_forum.c +++ b/swad_forum.c @@ -1825,7 +1825,7 @@ static void For_WriteLinkToForum (const struct For_Forums *Forums, default: break; } - HTM_TxtF (" %s",ForumName); + HTM_NBSPTxt (ForumName); /***** Write total number of threads and posts in this forum *****/ if (NumThrs) diff --git a/swad_group.c b/swad_group.c index a8f321ca..b2a51aa9 100644 --- a/swad_group.c +++ b/swad_group.c @@ -169,7 +169,7 @@ void Grp_WriteNamesOfSelectedGrps (void) { GrpDat.GrpCod = GrpCod; Grp_GetGroupDataByCod (&GrpDat); - HTM_TxtF ("%s %s",GrpDat.GrpTypName,GrpDat.GrpName); + HTM_TxtF ("%s %s",GrpDat.GrpTypName,GrpDat.GrpName); } else // GrpCod < 0 ==> students not belonging to any group of type (-GrpCod) { @@ -433,7 +433,7 @@ static void Grp_PutCheckboxAllGrps (Grp_WhichGroups_t GroupsSelectableByStdsOrNE " onclick=\"togglecheckChildren(this,'GrpCods')\"" : " onclick=\"togglecheckChildren(this,'GrpCods')\"") : " disabled=\"disabled\""); - HTM_TxtF (" %s",Txt_All_groups); + HTM_NBSPTxt (Txt_All_groups); HTM_LABEL_End (); HTM_DIV_End (); } diff --git a/swad_hierarchy.c b/swad_hierarchy.c index 840fe665..3abde014 100644 --- a/swad_hierarchy.c +++ b/swad_hierarchy.c @@ -43,6 +43,7 @@ #include "swad_form.h" #include "swad_global.h" #include "swad_group_database.h" +#include "swad_help.h" #include "swad_hierarchy.h" #include "swad_hierarchy_database.h" #include "swad_hierarchy_type.h" @@ -130,6 +131,17 @@ static void Hie_ShowHierarchyRow (const char *Text1,const char *Text2, int NumNodes[Hie_NUM_LEVELS]); static void Hie_ShowHierarchyCell (const char *ClassTxt,int Num); +//--------------------------- My hierarchy ------------------------------------ +static void Hie_WriteListMyHierarchyToSelectNode (void); +static void Hie_PutIconToSearchCourses (__attribute__((unused)) void *Args); +static void Hie_WriteMyHierarchyNodes (struct Hie_Node Hie[Hie_NUM_LEVELS], + Lay_LastItem_t IsLastItemInLevel[1 + 6], + Hie_Level_t Level); +static void Hie_WriteRowMyHierarchy (Hie_Level_t Level, + const struct Hie_Node Hie[Hie_NUM_LEVELS], + Lay_Highlight_t Highlight, + Lay_LastItem_t IsLastItemInLevel[1 + 6]); + /*****************************************************************************/ /********** List pending institutions, centers, degrees and courses **********/ /*****************************************************************************/ @@ -1157,7 +1169,8 @@ static void Hie_GetAndShowHierarchyWithNodes (Hie_Level_t HavingNodesOfLevel) HavingNodesOfLevel);// Grand child /***** Write number of elements with courses *****/ - Hie_ShowHierarchyRow (Txt_With_,Txt_HIERARCHY_PLURAL_abc[HavingNodesOfLevel],"DAT",NumNodes); + Hie_ShowHierarchyRow (Txt_With_,Txt_HIERARCHY_PLURAL_abc[HavingNodesOfLevel], + "DAT",NumNodes); } /*****************************************************************************/ @@ -1457,3 +1470,202 @@ static void Hie_ShowHierarchyCell (const char *ClassTxt,int Num) HTM_Hyphen (); HTM_TD_End (); } + +/*****************************************************************************/ +/********** Put an icon (form) to select my courses in breadcrumb ************/ +/*****************************************************************************/ + +void Hie_PutIconToSelectMyHierarchyInBreadcrumb (void) + { + extern const char *Txt_My_courses; + + if (Gbl.Usrs.Me.Logged) // I am logged + { + /***** Begin form *****/ + Frm_BeginForm (ActMyCrs); + + /***** Put icon with link *****/ + HTM_INPUT_IMAGE (Cfg_URL_ICON_PUBLIC,Hie_Icons[Hie_SYS],Txt_My_courses, + "class=\"BC_ICO BC_ICO_%s ICO_HIGHLIGHT\"", + The_GetSuffix ()); + + /***** End form *****/ + Frm_EndForm (); + } + } + +/*****************************************************************************/ +/***************** Put an icon (form) to select my hierarchy *****************/ +/*****************************************************************************/ + +void Hie_PutIconToSelectMyHierarchy (__attribute__((unused)) void *Args) + { + if (Gbl.Usrs.Me.Logged) // I am logged + Lay_PutContextualLinkOnlyIcon (ActMyCrs,NULL, + NULL,NULL, + "sitemap.svg",Ico_BLACK); + } + +/*****************************************************************************/ +/****************** Select one node from my hierarchy ************************/ +/*****************************************************************************/ + +void Hie_ReqSelectOneNodeFromMyHierarchy (void) + { + /***** Fill the list with the courses I belong to, if not filled *****/ + Hie_GetMyHierarchy (Hie_CRS); + + /***** Select one of my courses *****/ + if (Gbl.Usrs.Me.Hierarchy[Hie_CRS].Num) + /* Show my courses */ + Hie_WriteListMyHierarchyToSelectNode (); + else // I am not enroled in any course + /* Show help to enrol me */ + Hlp_ShowHelpWhatWouldYouLikeToDo (); + } + +/*****************************************************************************/ +/************************ Write menu with my courses *************************/ +/*****************************************************************************/ + +static void Hie_WriteListMyHierarchyToSelectNode (void) + { + extern const char *Hlp_PROFILE_Courses; + extern const char *Txt_My_courses; + struct Hie_Node Hie[Hie_NUM_LEVELS]; + Lay_LastItem_t IsLastItemInLevel[1 + 6]; + + /***** Begin box *****/ + Box_BoxBegin (NULL,Txt_My_courses, + Hie_PutIconToSearchCourses,NULL, + Hlp_PROFILE_Courses,Box_NOT_CLOSABLE); + + /***** Begin list *****/ + HTM_UL_Begin ("class=\"LIST_TREE\""); + + /***** Write nodes recursively *****/ + Hie_WriteMyHierarchyNodes (Hie,IsLastItemInLevel,Hie_SYS); + + /***** End list *****/ + HTM_UL_End (); + + /***** End box *****/ + Box_BoxEnd (); + } + +/*****************************************************************************/ +/******************* Put an icon (form) to search courses ********************/ +/*****************************************************************************/ + +static void Hie_PutIconToSearchCourses (__attribute__((unused)) void *Args) + { + Lay_PutContextualLinkOnlyIcon (ActReqSch,NULL, + Sch_PutLinkToSearchCoursesPars,NULL, + "search.svg",Ico_BLACK); + } + +/*****************************************************************************/ +/****************** Write my hierarchy nodes recursively *********************/ +/*****************************************************************************/ + +static void Hie_WriteMyHierarchyNodes (struct Hie_Node Hie[Hie_NUM_LEVELS], + Lay_LastItem_t IsLastItemInLevel[1 + 6], + Hie_Level_t Level) + { + extern const char *Txt_HIERARCHY_SINGUL_Abc[Hie_NUM_LEVELS]; + Lay_Highlight_t Highlight; // Highlight because degree, course, etc. is selected + MYSQL_RES *mysql_res; + MYSQL_ROW row; + unsigned NumNode; + unsigned NumNodes; + + if (Level > Hie_SYS) + NumNodes = Hie_GetMyNodesFromDB[Level] (&mysql_res,Hie[Level - 1].HieCod); + else + NumNodes = 1; + + for (NumNode = 0; + NumNode < NumNodes; + NumNode++) + { + if (Level > Hie_SYS) + { + /***** Get next node *****/ + row = mysql_fetch_row (mysql_res); + Hie[Level].HieCod = Str_ConvertStrCodToLongCod (row[0]); + + /***** Get data of this node *****/ + if (!Hie_GetDataByCod[Level] (&Hie[Level])) + Err_WrongCountrExit (); + } + else + { + Hie[Level].HieCod = -1L; + Str_Copy (Hie[Level].ShrtName,Txt_HIERARCHY_SINGUL_Abc[Level], + sizeof (Hie[Level].ShrtName) - 1); + } + + /***** Write link to node *****/ + if (Level < Hie_CRS) + Highlight = (Gbl.Hierarchy.Node[Level + 1].HieCod <= 0 && + Gbl.Hierarchy.Node[Level].HieCod == Hie[Level].HieCod) ? Lay_HIGHLIGHT : + Lay_NO_HIGHLIGHT; + else + Highlight = (Gbl.Hierarchy.Node[Level].HieCod == Hie[Level].HieCod) ? Lay_HIGHLIGHT : + Lay_NO_HIGHLIGHT; + + IsLastItemInLevel[Level] = (NumNode == NumNodes - 1) ? Lay_LAST_ITEM : + Lay_NO_LAST_ITEM; + Hie_WriteRowMyHierarchy (Level,Hie,Highlight,IsLastItemInLevel); + + /***** Write subnodes recursively ******/ + if (Level < Hie_CRS) + Hie_WriteMyHierarchyNodes (Hie,IsLastItemInLevel,Level + 1); + } + + if (Level > Hie_SYS) + /* Free structure that stores the query result */ + DB_FreeMySQLResult (&mysql_res); + } + +/*****************************************************************************/ +/************************ Write a row in my hierarchy ************************/ +/*****************************************************************************/ + +static void Hie_WriteRowMyHierarchy (Hie_Level_t Level, + const struct Hie_Node Hie[Hie_NUM_LEVELS], + Lay_Highlight_t Highlight, + Lay_LastItem_t IsLastItemInLevel[1 + 6]) + { + extern const char *Lay_HighlightClass[Lay_NUM_HIGHLIGHT]; + static Act_Action_t Actions[Hie_NUM_LEVELS] = + { + [Hie_SYS] = ActSeeSysInf, + [Hie_CTY] = ActSeeCtyInf, + [Hie_INS] = ActSeeInsInf, + [Hie_CTR] = ActSeeCtrInf, + [Hie_DEG] = ActSeeDegInf, + [Hie_CRS] = ActSeeCrsInf, + }; + + HTM_LI_Begin (Lay_HighlightClass[Highlight]); + Lay_IndentDependingOnLevel (Level,IsLastItemInLevel, + Lay_HORIZONTAL_LINE_AT_RIGHT); + Frm_BeginForm (ActMyCrs); + ParCod_PutPar (Hie_ParCod[Level],Hie[Level].HieCod); + HTM_BUTTON_Submit_Begin (Act_GetActionText (Actions[Level]), + "class=\"BT_LINK FORM_IN_%s\"", + The_GetSuffix ()); + + /* Node logo */ + Lgo_DrawLogo (Level,&Hie[Level],"ICO16x16"); + + /* Node name */ + HTM_DIV_Begin ("class=\"MY_CRS_TXT\""); + HTM_NBSPTxt (Hie[Level].ShrtName); + HTM_DIV_End (); + + HTM_BUTTON_End (); + Frm_EndForm (); + HTM_LI_End (); + } diff --git a/swad_hierarchy.h b/swad_hierarchy.h index 566862c9..e74be314 100644 --- a/swad_hierarchy.h +++ b/swad_hierarchy.h @@ -93,4 +93,10 @@ unsigned Hie_GetCachedNumUsrsWhoClaimToBelongTo (Hie_Level_t Level, unsigned Hie_GetNumUsrsWhoClaimToBelongTo (Hie_Level_t Level, struct Hie_Node *Node); +//--------------------------- My hierarchy ------------------------------------ +void Hie_PutIconToSelectMyHierarchyInBreadcrumb (void); +void Hie_PutIconToSelectMyHierarchy (__attribute__((unused)) void *Args); + +void Hie_ReqSelectOneNodeFromMyHierarchy (void); + #endif diff --git a/swad_holiday.c b/swad_holiday.c index d5cca9ff..2550d2d7 100644 --- a/swad_holiday.c +++ b/swad_holiday.c @@ -163,9 +163,7 @@ void Hld_SeeAllHolidays (void) Frm_EndForm (); HTM_TH_End (); } - HTM_TH_Begin (HTM_HEAD_LEFT); - HTM_TxtF (" %s ",Txt_End_date); - HTM_TH_End (); + HTM_TH (Txt_End_date,HTM_HEAD_LEFT); HTM_TH (Txt_Holiday,HTM_HEAD_LEFT); HTM_TR_End (); @@ -184,12 +182,10 @@ void Hld_SeeAllHolidays (void) Dat_ConvDateToDateStr (&Holidays.Lst[NumHld].StartDate,StrDate); HTM_TD_Begin ("class=\"LM DAT_%s\"",The_GetSuffix ()); - HTM_NBSP (); HTM_Txt (StrDate); HTM_TD_End (); HTM_TD_Begin ("class=\"LM DAT_%s\"",The_GetSuffix ()); - HTM_NBSP (); switch (Holidays.Lst[NumHld].HldTyp) { case Hld_HOLIDAY: @@ -202,7 +198,7 @@ void Hld_SeeAllHolidays (void) HTM_TD_End (); HTM_TD_Begin ("class=\"LM DAT_%s\"",The_GetSuffix ()); - HTM_TxtF (" %s",Holidays.Lst[NumHld].Name); + HTM_Txt (Holidays.Lst[NumHld].Name); HTM_TD_End (); HTM_TR_End (); diff --git a/swad_icon.c b/swad_icon.c index 61a04b12..bd5f747a 100644 --- a/swad_icon.c +++ b/swad_icon.c @@ -459,7 +459,7 @@ void Ico_PutIconTextLink (const char *Icon,Ico_Color_t Color,const char *Text) /***** Print icon and optional text *****/ HTM_DIV_Begin ("class=\"CONTEXT_OPT ICO_HIGHLIGHT\""); Ico_PutIcon (Icon,Color,Text,"CONTEXT_ICOx16"); - HTM_TxtF (" %s",Text); + HTM_NBSPTxt (Text); HTM_DIV_End (); } diff --git a/swad_institution.c b/swad_institution.c index fa698d4c..61b7a604 100644 --- a/swad_institution.c +++ b/swad_institution.c @@ -244,7 +244,7 @@ void Ins_DrawInstitLogoAndNameWithLink (struct Hie_Node *Ins,Act_Action_t Action /***** Institution logo and name *****/ Lgo_DrawLogo (Hie_INS,Ins,IconClass); - HTM_TxtF (" %s",Ins->FullName); + HTM_NBSPTxt (Ins->FullName); /***** End link *****/ HTM_BUTTON_End (); diff --git a/swad_layout.c b/swad_layout.c index 713ea88e..e720c2ea 100644 --- a/swad_layout.c +++ b/swad_layout.c @@ -1112,7 +1112,7 @@ static void Lay_WritePageTopHeading (void) static void Lay_WriteBreadcrumb (void) { HTM_Txt (""); @@ -1303,7 +1303,7 @@ void Lay_PutContextualCheckbox (Act_Action_t NextAction, /***** Text *****/ if (Text) if (Text[0]) - HTM_TxtF (" %s",Text); + HTM_NBSPTxt (Text); /***** End label *****/ HTM_LABEL_End (); diff --git a/swad_mark.c b/swad_mark.c index b636bffa..18544248 100644 --- a/swad_mark.c +++ b/swad_mark.c @@ -106,7 +106,8 @@ void Mrk_GetAndWriteNumRowsHeaderAndFooter (void) ActChgNumRowHeaCrs); // Course zone Brw_PutImplicitParsFileBrowser (&Gbl.FileBrowser.FilFolLnk); HTM_LABEL_Begin (NULL); - HTM_TxtF (" %s: ",Txt_TABLE_Header); + // HTM_TxtF (" %s: ",Txt_TABLE_Header); + HTM_TxtColon (Txt_TABLE_Header); snprintf (StrHeadOrFoot,sizeof (StrHeadOrFoot),"%u",Marks.Header); HTM_INPUT_TEXT (Mrk_HeadOrFootStr[Brw_HEADER],Cns_MAX_DECIMAL_DIGITS_UINT,StrHeadOrFoot, HTM_SUBMIT_ON_CHANGE, @@ -124,7 +125,8 @@ void Mrk_GetAndWriteNumRowsHeaderAndFooter (void) ActChgNumRowFooCrs); // Course zone Brw_PutImplicitParsFileBrowser (&Gbl.FileBrowser.FilFolLnk); HTM_LABEL_Begin (NULL); - HTM_TxtF (" %s: ",Txt_TABLE_Footer); + // HTM_TxtF (" %s: ",Txt_TABLE_Footer); + HTM_TxtColon (Txt_TABLE_Footer); snprintf (StrHeadOrFoot,sizeof (StrHeadOrFoot),"%u",Marks.Footer); HTM_INPUT_TEXT (Mrk_HeadOrFootStr[Brw_FOOTER],Cns_MAX_DECIMAL_DIGITS_UINT,StrHeadOrFoot, HTM_SUBMIT_ON_CHANGE, diff --git a/swad_match.c b/swad_match.c index c5b741a8..3035767a 100644 --- a/swad_match.c +++ b/swad_match.c @@ -703,7 +703,7 @@ static void Mch_GetAndWriteNamesOfGrpsAssociatedToMatch (const struct Gam_Games row = mysql_fetch_row (mysql_res); /* Write group type name and group name */ - HTM_TxtF ("%s %s",row[0],row[1]); + HTM_TxtF ("%s %s",row[0],row[1]); if (NumGrps >= 2) { @@ -716,8 +716,8 @@ static void Mch_GetAndWriteNamesOfGrpsAssociatedToMatch (const struct Gam_Games } } else - HTM_TxtF ("%s %s",Txt_The_whole_course, - Gbl.Hierarchy.Node[Hie_CRS].ShrtName); + HTM_TxtF ("%s %s", + Txt_The_whole_course,Gbl.Hierarchy.Node[Hie_CRS].ShrtName); HTM_DIV_End (); @@ -1270,7 +1270,8 @@ static void Mch_ShowLstGrpsToEditMatch (long MchCod) "MchCod", MchCod) ? "" : " checked=\"checked\""); - HTM_TxtF ("%s %s",Txt_The_whole_course, + HTM_TxtF ("%s %s", + Txt_The_whole_course, Gbl.Hierarchy.Node[Hie_CRS].ShrtName); HTM_LABEL_End (); HTM_TD_End (); @@ -2613,7 +2614,7 @@ static void Mch_PutCheckboxResult (const struct Mch_Match *Match) HTM_TxtF ("", Match->Status.ShowQstResults ? "fas fa-toggle-on" : "fas fa-toggle-off"); - HTM_TxtF (" %s",Txt_View_results); + HTM_NBSPTxt (Txt_View_results); HTM_BUTTON_End (); /***** End form *****/ @@ -2650,7 +2651,7 @@ static void Mch_PutIfAnswered (const struct Mch_Match *Match,bool Answered) " onmousedown=\"this.form.submit();return false;\"", The_GetSuffix ()); HTM_TxtF ("","fas fa-check-circle"); - HTM_TxtF (" %s",Txt_MATCH_QUESTION_Answered); + HTM_NBSPTxt (Txt_MATCH_QUESTION_Answered); HTM_BUTTON_End (); /* End form */ @@ -2666,8 +2667,8 @@ static void Mch_PutIfAnswered (const struct Mch_Match *Match,bool Answered) "fas fa-exclamation-circle", Answered ? Txt_MATCH_QUESTION_Answered : Txt_MATCH_QUESTION_Unanswered); - HTM_TxtF (" %s",Answered ? Txt_MATCH_QUESTION_Answered : - Txt_MATCH_QUESTION_Unanswered); + HTM_NBSPTxt (Answered ? Txt_MATCH_QUESTION_Answered : + Txt_MATCH_QUESTION_Unanswered); HTM_DIV_End (); } diff --git a/swad_match_result.c b/swad_match_result.c index 25d73248..8ada7bb8 100644 --- a/swad_match_result.c +++ b/swad_match_result.c @@ -1125,11 +1125,14 @@ void MchRes_ShowOneMchResult (void) HTM_TD_Begin ("class=\"LB DAT_%s\"", The_GetSuffix ()); ID_WriteUsrIDs (UsrDat,NULL); - HTM_TxtF (" %s",UsrDat->Surname1); + HTM_SPTxt (UsrDat->Surname1); if (UsrDat->Surname2[0]) - HTM_TxtF (" %s",UsrDat->Surname2); + HTM_SPTxt (UsrDat->Surname2); if (UsrDat->FrstName[0]) - HTM_TxtF (", %s",UsrDat->FrstName); + { + HTM_Comma (); + HTM_SPTxt (UsrDat->FrstName); + } HTM_BR (); Pho_ShowUsrPhotoIfAllowed (UsrDat, ClassPhoto[Gbl.Prefs.PhotoShape],Pho_ZOOM); diff --git a/swad_network.c b/swad_network.c index 091e9057..928d768d 100644 --- a/swad_network.c +++ b/swad_network.c @@ -381,7 +381,7 @@ void Net_ShowWebAndSocialNetworksStats (void) The_GetSuffix ()); Ico_PutIcon (Net_WebsAndSocialNetworksIcons[Web],Ico_BLACK, Net_WebsAndSocialNetworksTitle[Web],"ICOx16"); - HTM_TxtF (" %s",Net_WebsAndSocialNetworksTitle[Web]); + HTM_NBSPTxt (Net_WebsAndSocialNetworksTitle[Web]); HTM_TD_End (); HTM_TD_Unsigned (NumUsrs); diff --git a/swad_notification.c b/swad_notification.c index a168f044..dc204db2 100644 --- a/swad_notification.c +++ b/swad_notification.c @@ -1778,8 +1778,8 @@ void Ntf_WriteNumberOfNewNtfs (void) "class=\"ICO16x16 NOTIF_ICO_%s\"",The_GetSuffix ()); HTM_TxtF (" %u",NumNewNtfs); HTM_SPAN_Begin ("id=\"notif_new\""); - HTM_TxtF (" %s",NumNewNtfs == 1 ? Txt_NOTIF_new_SINGULAR : - Txt_NOTIF_new_PLURAL); + HTM_NBSPTxt (NumNewNtfs == 1 ? Txt_NOTIF_new_SINGULAR : + Txt_NOTIF_new_PLURAL); HTM_SPAN_End (); } diff --git a/swad_project.c b/swad_project.c index 8e436d06..6c31f968 100644 --- a/swad_project.c +++ b/swad_project.c @@ -2719,8 +2719,9 @@ static void Prj_ShowTableAllProjectsMembersWithARole (const struct Prj_Project * HTM_LI_Begin (NULL); HTM_Txt (Gbl.Usrs.Other.UsrDat.Surname1); if (Gbl.Usrs.Other.UsrDat.Surname2[0]) - HTM_TxtF (" %s",Gbl.Usrs.Other.UsrDat.Surname2); - HTM_TxtF (", %s",Gbl.Usrs.Other.UsrDat.FrstName); + HTM_SPTxt (Gbl.Usrs.Other.UsrDat.Surname2); + HTM_Comma (); + HTM_SPTxt (Gbl.Usrs.Other.UsrDat.FrstName); HTM_LI_End (); } } diff --git a/swad_question.c b/swad_question.c index edee9d26..2f2eda0c 100644 --- a/swad_question.c +++ b/swad_question.c @@ -237,7 +237,7 @@ void Qst_ShowFormAnswerTypes (const struct Qst_AnswerTypes *AnswerTypes) "value=\"Y\"%s onclick=\"togglecheckChildren(this,'AnswerType');\"", AnswerTypes->All ? " checked=\"checked\"" : ""); - HTM_TxtF (" %s",Txt_All_types_of_answers); + HTM_NBSPTxt (Txt_All_types_of_answers); HTM_LABEL_End (); HTM_TD_End (); @@ -262,14 +262,14 @@ void Qst_ShowFormAnswerTypes (const struct Qst_AnswerTypes *AnswerTypes) } } HTM_TD_Begin ("class=\"LM\""); - HTM_LABEL_Begin ("class=\"DAT_%s\"", - The_GetSuffix ()); + HTM_LABEL_Begin ("class=\"DAT_%s\"",The_GetSuffix ()); HTM_INPUT_CHECKBOX ("AnswerType",HTM_DONT_SUBMIT_ON_CHANGE, - "value=\"%u\"%s onclick=\"checkParent(this,'AllAnsTypes');\"", + "value=\"%u\"%s" + " onclick=\"checkParent(this,'AllAnsTypes');\"", (unsigned) AnsType, Checked ? " checked=\"checked\"" : ""); - HTM_TxtF (" %s",Txt_TST_STR_ANSWER_TYPES[AnsType]); + HTM_NBSPTxt (Txt_TST_STR_ANSWER_TYPES[AnsType]); HTM_LABEL_End (); HTM_TD_End (); @@ -1220,18 +1220,17 @@ void Qst_ListOneOrMoreQstsForSelectionForGame (struct Gam_Games *Games, } /*****************************************************************************/ -/************** Select all questions to add them to set/game *****************/ +/********* Checkbox to select all questions to add them to set/game **********/ /*****************************************************************************/ void Qst_PutCheckboxToSelectAllQuestions (void) { extern const char *Txt_All_questions; - /***** Checkbox to select all listed questions *****/ HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",The_GetSuffix ()); HTM_INPUT_CHECKBOX ("AllQsts",HTM_DONT_SUBMIT_ON_CHANGE, "value=\"Y\" onclick=\"togglecheckChildren(this,'QstCods');\""); - HTM_TxtF (" %s",Txt_All_questions); + HTM_NBSPTxt (Txt_All_questions); HTM_LABEL_End (); } diff --git a/swad_search.c b/swad_search.c index 6258e850..a762e6ce 100644 --- a/swad_search.c +++ b/swad_search.c @@ -156,7 +156,7 @@ static void Sch_PutFormToSearchWithWhatToSearchAndScope (Hie_Level_t DefaultScop /***** Begin box *****/ Box_BoxBegin (NULL,Txt_Search, - Crs_PutIconToSelectMyCourses,NULL, + Hie_PutIconToSelectMyHierarchy,NULL, Hlp_START_Search,Box_NOT_CLOSABLE); /***** Begin form *****/ diff --git a/swad_statistic.c b/swad_statistic.c index 24913567..130ac2c1 100644 --- a/swad_statistic.c +++ b/swad_statistic.c @@ -365,7 +365,8 @@ static void Sta_PutFormCrsHits (struct Sta_Stats *Stats) HTM_LABEL_Begin ("class=\"FORM_IN_%s\"", The_GetSuffix ()); - HTM_TxtF (" %s ",Txt_distributed_by); + HTM_Txt (Txt_distributed_by); + HTM_NBSP (); HTM_SELECT_Begin (HTM_DONT_SUBMIT_ON_CHANGE,NULL, "id=\"GroupedBy\" name=\"GroupedBy\"" " class=\"INPUT_%s\"", @@ -573,7 +574,8 @@ static void Sta_PutFormGblHits (struct Sta_Stats *Stats) /***** Type of statistic *****/ HTM_LABEL_Begin ("class=\"FORM_IN_%s\"", The_GetSuffix ()); - HTM_TxtF (" %s ",Txt_distributed_by); + HTM_Txt (Txt_distributed_by); + HTM_NBSP (); if (Stats->ClicksGroupedBy < Sta_CLICKS_GBL_PER_DAY || Stats->ClicksGroupedBy > Sta_CLICKS_GBL_PER_COURSE) diff --git a/swad_survey.c b/swad_survey.c index 38b480a0..9b8887df 100644 --- a/swad_survey.c +++ b/swad_survey.c @@ -594,7 +594,8 @@ static void Svy_ShowOneSurvey (struct Svy_Surveys *Surveys, HidVis_GroupClass[Surveys->Svy.Status.HiddenOrVisible], The_GetSuffix ()); HTM_TxtColonNBSP (Txt_Scope); - HTM_TxtF ("%s %s",Txt_HIERARCHY_SINGUL_Abc[Surveys->Svy.Level], + HTM_TxtF ("%s %s", + Txt_HIERARCHY_SINGUL_Abc[Surveys->Svy.Level], Gbl.Hierarchy.Node[Surveys->Svy.Level].ShrtName); HTM_DIV_End (); @@ -1846,7 +1847,9 @@ static void Svy_ShowLstGrpsToEditSurvey (long SvyCod) "SvyCod", SvyCod) ? "" : " checked=\"checked\""); - HTM_TxtF ("%s %s",Txt_The_whole_course,Gbl.Hierarchy.Node[Hie_CRS].ShrtName); + HTM_TxtF ("%s %s", + Txt_The_whole_course, + Gbl.Hierarchy.Node[Hie_CRS].ShrtName); HTM_LABEL_End (); HTM_TD_End (); @@ -2096,7 +2099,7 @@ static void Svy_GetAndWriteNamesOfGrpsAssociatedToSvy (struct Svy_Survey *Svy) row = mysql_fetch_row (mysql_res); /* Write group type name and group name */ - HTM_TxtF ("%s %s",row[0],row[1]); + HTM_TxtF ("%s %s",row[0],row[1]); if (NumGrps >= 2) { @@ -2109,8 +2112,8 @@ static void Svy_GetAndWriteNamesOfGrpsAssociatedToSvy (struct Svy_Survey *Svy) } } else - HTM_TxtF ("%s %s",Txt_The_whole_course, - Gbl.Hierarchy.Node[Hie_CRS].ShrtName); + HTM_TxtF ("%s %s", + Txt_The_whole_course,Gbl.Hierarchy.Node[Hie_CRS].ShrtName); HTM_DIV_End (); @@ -3030,7 +3033,7 @@ static void Svy_DrawBarNumUsrs (unsigned NumUsrs,unsigned MaxUsrs) "class=\"LT\" style=\"width:%upx; height:20px;\"",BarWidth); /***** Write the number of users *****/ - HTM_TxtF (" %s",Title); + HTM_NBSPTxt (Title); /***** Free string with the number of users *****/ free (Title); diff --git a/swad_tag.c b/swad_tag.c index 942def43..827158b1 100644 --- a/swad_tag.c +++ b/swad_tag.c @@ -313,7 +313,7 @@ void Tag_ShowFormSelTags (const struct Tag_Tags *Tags, "value=\"Y\"%s onclick=\"togglecheckChildren(this,'ChkTag');\"", Tags->All ? " checked=\"checked\"" : ""); - HTM_TxtF (" %s",Txt_All_tags); + HTM_NBSPTxt (Txt_All_tags); HTM_LABEL_End (); HTM_TD_End (); @@ -361,7 +361,7 @@ void Tag_ShowFormSelTags (const struct Tag_Tags *Tags, row[1], Checked ? " checked=\"checked\"" : ""); - HTM_TxtF (" %s",row[1]); + HTM_NBSPTxt (row[1]); HTM_LABEL_End (); HTM_TD_End (); diff --git a/swad_test_print.c b/swad_test_print.c index 6251cb67..9f4a9df0 100644 --- a/swad_test_print.c +++ b/swad_test_print.c @@ -529,7 +529,7 @@ static void TstPrn_PutCheckBoxAllowTeachers (bool AllowTeachers) "value=\"Y\"%s", AllowTeachers ? " checked=\"checked\"" : // Teachers can see test exam ""); - HTM_TxtF (" %s",Txt_Allow_teachers_to_consult_this_test); + HTM_NBSPTxt (Txt_Allow_teachers_to_consult_this_test); HTM_LABEL_End (); HTM_DIV_End (); } @@ -2260,9 +2260,9 @@ void TstPrn_ShowOnePrint (void) HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); ID_WriteUsrIDs (&Gbl.Usrs.Other.UsrDat,NULL); - HTM_TxtF (" %s",Gbl.Usrs.Other.UsrDat.Surname1); + HTM_SPTxt (Gbl.Usrs.Other.UsrDat.Surname1); if (Gbl.Usrs.Other.UsrDat.Surname2[0]) - HTM_TxtF (" %s",Gbl.Usrs.Other.UsrDat.Surname2); + HTM_SPTxt (Gbl.Usrs.Other.UsrDat.Surname2); if (Gbl.Usrs.Other.UsrDat.FrstName[0]) HTM_TxtF (", %s",Gbl.Usrs.Other.UsrDat.FrstName); HTM_BR (); diff --git a/swad_timeline_note.c b/swad_timeline_note.c index ee92315b..69e3604b 100644 --- a/swad_timeline_note.c +++ b/swad_timeline_note.c @@ -498,19 +498,19 @@ static void TmlNot_WriteLocationInHierarchy (const struct TmlNot_Note *Not, case TmlNot_INS_DOC_PUB_FILE: case TmlNot_INS_SHA_PUB_FILE: /* Write location (institution) in hierarchy */ - HTM_TxtF ("%s: %s", + HTM_TxtF ("%s: %s", Txt_HIERARCHY_SINGUL_Abc[Hie_INS],Hie[Hie_INS].ShrtName); break; case TmlNot_CTR_DOC_PUB_FILE: case TmlNot_CTR_SHA_PUB_FILE: /* Write location (center) in hierarchy */ - HTM_TxtF ("%s: %s", + HTM_TxtF ("%s: %s", Txt_HIERARCHY_SINGUL_Abc[Hie_CTR],Hie[Hie_CTR].ShrtName); break; case TmlNot_DEG_DOC_PUB_FILE: case TmlNot_DEG_SHA_PUB_FILE: /* Write location (degree) in hierarchy */ - HTM_TxtF ("%s: %s", + HTM_TxtF ("%s: %s", Txt_HIERARCHY_SINGUL_Abc[Hie_DEG],Hie[Hie_DEG].ShrtName); break; case TmlNot_CRS_DOC_PUB_FILE: @@ -518,12 +518,12 @@ static void TmlNot_WriteLocationInHierarchy (const struct TmlNot_Note *Not, case TmlNot_CALL_FOR_EXAM: case TmlNot_NOTICE: /* Write location (course) in hierarchy */ - HTM_TxtF ("%s: %s", + HTM_TxtF ("%s: %s", Txt_HIERARCHY_SINGUL_Abc[Hie_CRS],Hie[Hie_CRS].ShrtName); break; case TmlNot_FORUM_POST: /* Write forum name */ - HTM_TxtF ("%s: %s",Txt_Forum,ForumName); + HTM_TxtF ("%s: %s",Txt_Forum,ForumName); break; default: break; @@ -692,7 +692,7 @@ static void TmlNot_PutFormGoToAction (const struct TmlNot_Note *Not, /* Icon and text */ Ico_PutIcon (Tml_Icons[Not->Type],Ico_BLACK, Txt_TIMELINE_NOTE[Not->Type],"CONTEXT_ICOx16"); - HTM_TxtF (" %s",Txt_TIMELINE_NOTE[Not->Type]); + HTM_NBSPTxt (Txt_TIMELINE_NOTE[Not->Type]); /* End button */ HTM_BUTTON_End (); diff --git a/swad_user.c b/swad_user.c index 57914683..a101e83b 100644 --- a/swad_user.c +++ b/swad_user.c @@ -715,7 +715,7 @@ void Usr_WriteFirstNameBRSurnames (const struct Usr_Data *UsrDat) /***** Write surname2 if exists *****/ if (UsrDat->Surname2[0]) - HTM_TxtF (" %s",UsrDat->Surname2); + HTM_SPTxt (UsrDat->Surname2); } /*****************************************************************************/ @@ -3671,7 +3671,7 @@ static void Set_FormToSelectUsrListType (void (*FuncPars) (void *Args),void *Arg ""); Ico_PutIcon (Usr_IconsClassPhotoOrList[ListType],Ico_BLACK, Txt_USR_LIST_TYPES[ListType],"ICO20x20"); - HTM_TxtF (" %s",Txt_USR_LIST_TYPES[ListType]); + HTM_NBSPTxt (Txt_USR_LIST_TYPES[ListType]); HTM_BUTTON_End (); /***** End form *****/ @@ -4450,7 +4450,7 @@ void Usr_ListAllDataStds (void) if (Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps) // If current course tiene groups of este type { HTM_TH_Span_Begin (HTM_HEAD_LEFT,1,1,"BG_HIGHLIGHT"); - HTM_TxtF ("%s %s", + HTM_TxtF ("%s %s", Txt_Group, Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].GrpTypName); HTM_TH_End (); @@ -6453,7 +6453,7 @@ void Usr_ShowTableCellWithUsrData (struct Usr_Data *UsrDat,unsigned NumRows) HTM_BR (); HTM_Txt (UsrDat->Surname1); if (UsrDat->Surname2[0]) - HTM_TxtF (" %s",UsrDat->Surname2); + HTM_SPTxt (UsrDat->Surname2); if (UsrDat->FrstName[0]) { HTM_Comma (); diff --git a/swad_zip.c b/swad_zip.c index 0da7549f..d6916416 100644 --- a/swad_zip.c +++ b/swad_zip.c @@ -540,7 +540,9 @@ static void ZIP_ShowLinkToDownloadZIP (const char *FileName,const char *URL, URL,FileName); HTM_IMG (CfG_URL_ICON_FILEXT_PUBLIC "32x32","zip32x32.gif",Txt_ZIP_file, "class=\"ICO40x40\""); - HTM_TxtF (" %s ",FileName); + HTM_NBSP (); + HTM_Txt (FileName); + HTM_NBSP (); Ico_PutIcon ("download.svg",Ico_BLACK,Txt_Download,"ICO40x40"); HTM_A_End (); HTM_TD_End ();