diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index 0cc70ddb..e341e836 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + diff --git a/css/swad23.66.1.css b/css/swad23.67.css similarity index 99% rename from css/swad23.66.1.css rename to css/swad23.67.css index 96301fb2..fc6348ca 100644 --- a/css/swad23.66.1.css +++ b/css/swad23.67.css @@ -3274,7 +3274,7 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;} width:276px; } } -@media only screen and (min-width:600px) +@media only screen and (min-width:600px) and (max-width:1024px) { /* For desktop */ .Frm_C1 { @@ -3296,7 +3296,6 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;} width:382px; } } -/* @media only screen and (min-width:1024px) { * For desktop * .Frm_C1 @@ -3319,7 +3318,7 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;} width:700px; } } -*/ + /******************************** Class photo ********************************/ .CLASSPHOTO_TITLE { diff --git a/swad_assignment.c b/swad_assignment.c index 8e5860aa..29b447cb 100644 --- a/swad_assignment.c +++ b/swad_assignment.c @@ -331,9 +331,10 @@ static void Asg_ParsWhichGroupsToShow (void *Assignments) { if (Assignments) { - Par_PutParOrder ((unsigned) ((struct Asg_Assignments *) Assignments)->SelectedOrder); + Par_PutParOrder ((unsigned) + ((struct Asg_Assignments *) Assignments)->SelectedOrder); Pag_PutParPagNum (Pag_ASSIGNMENTS, - ((struct Asg_Assignments *) Assignments)->CurrentPage); + ((struct Asg_Assignments *) Assignments)->CurrentPage); } } diff --git a/swad_attendance.c b/swad_attendance.c index 2cbf7c1f..ffd54a8f 100644 --- a/swad_attendance.c +++ b/swad_attendance.c @@ -1429,6 +1429,7 @@ static void Att_ShowEvent (struct Att_Events *Events) Att_ShowOneEventRow (Events, true); // Show only this event Box_BoxTableEnd (); + HTM_BR (); switch (Gbl.Usrs.Me.Role.Logged) { @@ -1553,7 +1554,7 @@ static void Att_ListEventStudents (struct Att_Events *Events) Hlp_USERS_Attendance,Box_NOT_CLOSABLE); /***** Form to select groups *****/ - Grp_ShowFormToSelectSeveralGroups (Att_PutParAttCod,Events,Grp_MY_GROUPS); + Grp_ShowFormToSelectSeveralGroups (ActSeeOneAtt,Att_PutParAttCod,Events,NULL); /***** Begin section with user list *****/ HTM_SECTION_Begin (Usr_USER_LIST_SECTION_ID); @@ -2705,7 +2706,7 @@ static void Att_ListEventsToSelect (struct Att_Events *Events, /***** Put button to refresh *****/ if (NormalView) - Lay_WriteLinkToUpdate (Txt_Update_attendance); + Lay_WriteLinkToUpdate (Txt_Update_attendance,NULL); /***** End form *****/ if (NormalView) diff --git a/swad_changelog.h b/swad_changelog.h index 7cad1d44..9912b2b6 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -633,10 +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.66.1 (2024-02-10)" -#define CSS_FILE "swad23.66.1.css" +#define Log_PLATFORM_VERSION "SWAD 23.67 (2024-03-08)" +#define CSS_FILE "swad23.67.css" #define JS_FILE "swad23.53.6.js" /* + 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) Version 23.66.1: Feb 27, 2024 Changes in layout. (335288 lines) Version 23.66: Feb 11, 2024 Responsive design in hierarchy configurations. (335306 lines) Version 23.65: Feb 09, 2024 Responsive design in last clicks. (335502 lines) diff --git a/swad_exam_result.c b/swad_exam_result.c index 7ef5ae6e..6aa00864 100644 --- a/swad_exam_result.c +++ b/swad_exam_result.c @@ -625,7 +625,7 @@ static void ExaRes_ListExamsToSelect (struct Exa_Exams *Exams) HTM_TABLE_End (); /***** Put link to refresh *****/ - Lay_WriteLinkToUpdate (Txt_Update_results); + Lay_WriteLinkToUpdate (Txt_Update_results,NULL); /***** End form *****/ Frm_EndForm (); diff --git a/swad_group.c b/swad_group.c index 7cca03c8..703f679b 100644 --- a/swad_group.c +++ b/swad_group.c @@ -102,7 +102,7 @@ static void Grp_EditGroupTypes (void); static void Grp_EditGroups (const struct Roo_Rooms *Rooms); static void Grp_PutIconsEditingGroups (__attribute__((unused)) void *Args); -static void Grp_PutCheckboxAllGrps (Grp_WhichGroups_t GroupsSelectableByStdsOrNETs); +static void Grp_PutCheckboxAllGrps (void); static void Grp_ConstructorListGrpAlreadySelec (struct ListGrpsAlreadySelec **AlreadyExistsGroupOfType); static void Grp_DestructorListGrpAlreadySelec (struct ListGrpsAlreadySelec **AlreadyExistsGroupOfType); @@ -122,8 +122,7 @@ static void Grp_ShowWarningToStdsToChangeGrps (void); static bool Grp_ListGrpsForChangeMySelection (struct GroupType *GrpTyp, unsigned *NumGrpsThisTypeIBelong); static void Grp_ListGrpsToAddOrRemUsrs (struct GroupType *GrpTyp,long UsrCod); -static void Grp_ListGrpsForMultipleSelection (struct GroupType *GrpTyp, - Grp_WhichGroups_t GroupsSelectableByStdsOrNETs); +static void Grp_ListGrpsForMultipleSelection (struct GroupType *GrpTyp); static void Grp_WriteGrpHead (struct GroupType *GrpTyp); static void Grp_WriteRowGrp (struct Group *Grp,Lay_Highlight_t Highlight); static void Grp_PutFormToCreateGroupType (void); @@ -337,8 +336,9 @@ static void Grp_PutIconsEditingGroups (__attribute__((unused)) void *Args) /*************** Show form to select one or several groups *******************/ /*****************************************************************************/ -void Grp_ShowFormToSelectSeveralGroups (void (*FuncPars) (void *Args),void *Args, - Grp_WhichGroups_t GroupsSelectableByStdsOrNETs) +void Grp_ShowFormToSelectSeveralGroups (Act_Action_t NextAction, + void (*FuncPars) (void *Args),void *Args, + const char *OnSubmit) { extern const char *Hlp_USERS_Groups; extern const char *Txt_Groups; @@ -361,14 +361,13 @@ void Grp_ShowFormToSelectSeveralGroups (void (*FuncPars) (void *Args),void *Args /***** Begin form to update the students listed depending on the groups selected *****/ - Frm_BeginFormAnchor (Gbl.Action.Act, // Repeat current action - Usr_USER_LIST_SECTION_ID); + Frm_BeginFormAnchorOnSubmit (NextAction,Usr_USER_LIST_SECTION_ID,OnSubmit); Set_PutParsPrefsAboutUsrList (); if (FuncPars) FuncPars (Args); /***** Select all groups *****/ - Grp_PutCheckboxAllGrps (GroupsSelectableByStdsOrNETs); + Grp_PutCheckboxAllGrps (); /***** Get list of groups types and groups in this course *****/ Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS); @@ -379,15 +378,14 @@ void Grp_ShowFormToSelectSeveralGroups (void (*FuncPars) (void *Args),void *Args NumGrpTyp < Gbl.Crs.Grps.GrpTypes.NumGrpTypes; NumGrpTyp++) if (Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps) - Grp_ListGrpsForMultipleSelection (&Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp], - GroupsSelectableByStdsOrNETs); + Grp_ListGrpsForMultipleSelection (&Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp]); HTM_TABLE_End (); /***** Free list of groups types and groups in this course *****/ Grp_FreeListGrpTypesAndGrps (); /***** Submit button *****/ - Lay_WriteLinkToUpdate (Txt_Update_users); + Lay_WriteLinkToUpdate (Txt_Update_users,NULL); /***** End form *****/ Frm_EndForm (); @@ -400,17 +398,13 @@ void Grp_ShowFormToSelectSeveralGroups (void (*FuncPars) (void *Args),void *Args /******************* Put checkbox to select all groups ***********************/ /*****************************************************************************/ -static void Grp_PutCheckboxAllGrps (Grp_WhichGroups_t GroupsSelectableByStdsOrNETs) +static void Grp_PutCheckboxAllGrps (void) { extern const char *Txt_All_groups; bool ICanSelUnselGroup; switch (Gbl.Usrs.Me.Role.Logged) { - case Rol_STD: - case Rol_NET: - ICanSelUnselGroup = (GroupsSelectableByStdsOrNETs == Grp_ALL_GROUPS); - break; case Rol_TCH: case Rol_DEG_ADM: case Rol_CTR_ADM: @@ -2094,8 +2088,7 @@ static void Grp_ListGrpsToAddOrRemUsrs (struct GroupType *GrpTyp,long UsrCod) /******* Write a list of groups as checkbox form for unique selection ********/ /*****************************************************************************/ -static void Grp_ListGrpsForMultipleSelection (struct GroupType *GrpTyp, - Grp_WhichGroups_t GroupsSelectableByStdsOrNETs) +static void Grp_ListGrpsForMultipleSelection (struct GroupType *GrpTyp) { extern const char *Txt_users_with_no_group; unsigned NumGrpThisType; @@ -2133,8 +2126,7 @@ static void Grp_ListGrpsForMultipleSelection (struct GroupType *GrpTyp, { case Rol_STD: case Rol_NET: - ICanSelUnselGroup = (GroupsSelectableByStdsOrNETs == Grp_ALL_GROUPS) || - IBelongToThisGroup; + ICanSelUnselGroup = IBelongToThisGroup; break; case Rol_TCH: case Rol_DEG_ADM: diff --git a/swad_group.h b/swad_group.h index 0cae8c85..42fbcac5 100644 --- a/swad_group.h +++ b/swad_group.h @@ -166,8 +166,9 @@ struct Grp_Groups void Grp_WriteNamesOfSelectedGrps (void); void Grp_ReqEditGroups (void); -void Grp_ShowFormToSelectSeveralGroups (void (*FuncPars) (void *Args),void *Args, - Grp_WhichGroups_t GroupsSelectableByStdsOrNETs); +void Grp_ShowFormToSelectSeveralGroups (Act_Action_t NextAction, + void (*FuncPars) (void *Args),void *Args, + const char *OnSubmit); void Grp_PutParsCodGrps (void); void Grp_GetParCodsSeveralGrpsToShowUsrs (void); void Grp_GetParCodsSeveralGrps (void); diff --git a/swad_institution.c b/swad_institution.c index 5bc3283a..750ee884 100644 --- a/swad_institution.c +++ b/swad_institution.c @@ -1652,7 +1652,7 @@ void Ins_GetAndShowInstitutionsStats (void) Set_GetAndUpdatePrefsAboutUsrList (); Figures.Level = Gbl.Scope.Current; Figures.FigureType = Fig_INSTITS; - Usr_ShowFormsToSelectUsrListType (Fig_PutParsFigures,&Figures); + Usr_ShowFormsToSelectUsrListType (ActSeeUseGbl,Fig_PutParsFigures,&Figures,NULL); /***** Institutions ordered by number of centers *****/ Ins_GetAndShowInssOrderedByNumCtrs (); diff --git a/swad_layout.c b/swad_layout.c index 9be68d3b..a1d93023 100644 --- a/swad_layout.c +++ b/swad_layout.c @@ -1245,7 +1245,7 @@ void Lay_PutContextualLinkIconText (Act_Action_t NextAction,const char *Anchor, /***** Put icon and text with link *****/ if (OnSubmit) HTM_BUTTON_Submit_Begin (Text, - "class=\"BT_LINK FORM_OUT_%s BOLD\" onsubmit=\"%s;\"", + "class=\"BT_LINK FORM_OUT_%s BOLD\" onsubmit=\"%s\"", The_GetSuffix (),OnSubmit); else HTM_BUTTON_Submit_Begin (Text, @@ -1725,15 +1725,18 @@ void Lay_WriteIndex (unsigned Index,const char *Class) /*************************** Write a link to update **************************/ /*****************************************************************************/ -void Lay_WriteLinkToUpdate (const char *Txt) +void Lay_WriteLinkToUpdate (const char *Txt,const char *OnSubmit) { HTM_DIV_Begin ("class=\"UPD\""); - HTM_BUTTON_Submit_Begin (Txt, - "class=\"BT_LINK FORM_IN_%s BOLD\"%s", - The_GetSuffix (), - Gbl.Action.Act == ActReqMsgUsr ? " onsubmit=\"CopyMessageToHiddenFields();\"" : - ""); - Ico_PutIconTextUpdate (Txt); + if (OnSubmit) + HTM_BUTTON_Submit_Begin (Txt, + "class=\"BT_LINK FORM_IN_%s BOLD\" onsubmit=\"%s\"", + The_GetSuffix (),OnSubmit); + else + HTM_BUTTON_Submit_Begin (Txt, + "class=\"BT_LINK FORM_IN_%s BOLD\"", + The_GetSuffix ()); + Ico_PutIconTextUpdate (Txt); HTM_BUTTON_End (); HTM_DIV_End (); } diff --git a/swad_layout.h b/swad_layout.h index d0e52e6b..45f918d4 100644 --- a/swad_layout.h +++ b/swad_layout.h @@ -103,7 +103,7 @@ void Lay_HelpRichEditor (void); void Lay_BeginHTMLFile (FILE *File,const char *Title); void Lay_WriteIndex (unsigned Index,const char *Class); -void Lay_WriteLinkToUpdate (const char *Txt); +void Lay_WriteLinkToUpdate (const char *Txt,const char *OnSubmit); //-------------------------------- Figures ------------------------------------ void Lay_GetAndShowNumUsrsPerSideColumns (void); diff --git a/swad_match_result.c b/swad_match_result.c index de3dd94b..594bcf41 100644 --- a/swad_match_result.c +++ b/swad_match_result.c @@ -589,7 +589,7 @@ static void MchRes_ListGamesToSelect (struct Gam_Games *Games) HTM_TABLE_End (); /***** Put button to refresh *****/ - Lay_WriteLinkToUpdate (Txt_Update_results); + Lay_WriteLinkToUpdate (Txt_Update_results,NULL); /***** End form *****/ Frm_EndForm (); diff --git a/swad_message.c b/swad_message.c index 680e3cca..6b6794e7 100644 --- a/swad_message.c +++ b/swad_message.c @@ -97,7 +97,8 @@ static const Pag_WhatPaginate_t Msg_WhatPaginate[Msg_NUM_TYPES_OF_MSGS] = static void Msg_ResetMessages (struct Msg_Messages *Messages); -static void Msg_PutFormMsgUsrs (struct Msg_Messages *Messages, +static void Msg_PutFormMsgUsrs (Act_Action_t NextAction, + struct Msg_Messages *Messages, char Content[Cns_MAX_BYTES_LONG_TEXT + 1]); static void Msg_ShowSntOrRcvMessages (struct Msg_Messages *Messages); @@ -208,14 +209,15 @@ void Msg_FormMsgUsrs (void) Str_TO_TEXT,Str_DONT_REMOVE_SPACES); /***** Show a form to compose a message to users *****/ - Msg_PutFormMsgUsrs (&Messages,Content); + Msg_PutFormMsgUsrs (ActReqMsgUsr,&Messages,Content); } /*****************************************************************************/ /***************** Put a form to write a new message to users ****************/ /*****************************************************************************/ -static void Msg_PutFormMsgUsrs (struct Msg_Messages *Messages, +static void Msg_PutFormMsgUsrs (Act_Action_t NextAction, + struct Msg_Messages *Messages, char Content[Cns_MAX_BYTES_LONG_TEXT + 1]) { extern const char *Hlp_COMMUNICATION_Messages_write; @@ -280,8 +282,8 @@ static void Msg_PutFormMsgUsrs (struct Msg_Messages *Messages, if (GetUsrsInCrs) { /***** Form to select groups *****/ - Grp_ShowFormToSelectSeveralGroups (Msg_PutParsWriteMsg,Messages, - Grp_MY_GROUPS); + Grp_ShowFormToSelectSeveralGroups (NextAction,Msg_PutParsWriteMsg,Messages, + "CopyMessageToHiddenFields();"); /***** Begin section with user list *****/ HTM_SECTION_Begin (Usr_USER_LIST_SECTION_ID); @@ -289,14 +291,15 @@ static void Msg_PutFormMsgUsrs (struct Msg_Messages *Messages, if (NumUsrsInCrs) { /***** Form to select type of list used for select several users *****/ - Usr_ShowFormsToSelectUsrListType (Msg_PutParsWriteMsg,Messages); + Usr_ShowFormsToSelectUsrListType (NextAction,Msg_PutParsWriteMsg,Messages, + "CopyMessageToHiddenFields();"); /***** Put link to register students *****/ Enr_CheckStdsAndPutButtonToRegisterStdsInCurrentCrs (); /***** Check if it's a big list *****/ ShowUsrsInCrs = Usr_GetIfShowBigList (NumUsrsInCrs, - Msg_PutParsWriteMsg,Messages, + NextAction,Msg_PutParsWriteMsg,Messages, "CopyMessageToHiddenFields();"); if (ShowUsrsInCrs) @@ -361,8 +364,7 @@ static void Msg_PutFormMsgUsrs (struct Msg_Messages *Messages, Lay_HelpPlainEditor (); /***** Attached image (optional) *****/ - if (asprintf (&ClassInput,"MSG_MED_INPUT INPUT_%s", - The_GetSuffix ()) < 0) + if (asprintf (&ClassInput,"MSG_MED_INPUT INPUT_%s",The_GetSuffix ()) < 0) Err_NotEnoughMemoryExit (); Med_PutMediaUploader (-1,ClassInput); free (ClassInput); @@ -408,7 +410,7 @@ static void Msg_PutLinkToShowMorePotentialRecipients (struct Msg_Messages *Messa Msg_PutParsShowMorePotentialRecipients,Messages, "users.svg",Ico_BLACK, Txt_Show_more_recipients, - "CopyMessageToHiddenFields();"); // Show more potential recipients + "CopyMessageToHiddenFields();"); Mnu_ContextMenuEnd (); } @@ -788,7 +790,7 @@ void Msg_RecMsgFromUsr (void) /* Show the form again, with the subject and the message filled */ Str_ChangeFormat (Str_FROM_FORM,Str_TO_TEXT, Content,Cns_MAX_BYTES_LONG_TEXT,Str_REMOVE_SPACES); - Msg_PutFormMsgUsrs (&Messages,Content); + Msg_PutFormMsgUsrs (ActRcvMsgUsr,&Messages,Content); return; } @@ -1504,7 +1506,7 @@ static void Msg_ShowSntOrRcvMessages (struct Msg_Messages *Messages) Msg_ShowFormToFilterMsgs (Messages); /***** Put button to refresh *****/ - Lay_WriteLinkToUpdate (Txt_Update_messages); + Lay_WriteLinkToUpdate (Txt_Update_messages,"CopyMessageToHiddenFields();"); Frm_EndForm (); diff --git a/swad_photo.c b/swad_photo.c index 59c7d449..da38ae1b 100644 --- a/swad_photo.c +++ b/swad_photo.c @@ -256,6 +256,7 @@ void Pho_ReqMyPhoto (void) { /***** Show the form for sending the photo *****/ Pho_ReqPhoto (&Gbl.Usrs.Me.UsrDat); + HTM_BR (); /***** Show my record and other data *****/ Rec_ShowMySharedRecordAndMore (); @@ -269,6 +270,7 @@ static void Pho_ReqOtherUsrPhoto (void) { /***** Show the form to send another user's photo *****/ Pho_ReqPhoto (&Gbl.Usrs.Other.UsrDat); + HTM_BR (); /***** Show another user's record card *****/ Rec_ShowPublicSharedRecordOtherUsr (); @@ -380,7 +382,10 @@ void Pho_RecMyPhotoDetFaces (void) { /***** Receive my photo and detect faces on it *****/ if (!Pho_ReceivePhotoAndDetectFaces (Usr_ME,&Gbl.Usrs.Me.UsrDat)) + { Pho_ReqPhoto (&Gbl.Usrs.Me.UsrDat); // Request my photograph again + HTM_BR (); + } /***** Show my record and other data *****/ Rec_ShowMySharedRecordAndMore (); @@ -402,7 +407,10 @@ void Pho_RecOtherUsrPhotoDetFaces (void) { /***** Receive photo *****/ if (!Pho_ReceivePhotoAndDetectFaces (Usr_OTHER,&Gbl.Usrs.Other.UsrDat)) + { Pho_ReqPhoto (&Gbl.Usrs.Other.UsrDat); // Request user's photograph again + HTM_BR (); + } /***** Show another user's record card *****/ Rec_ShowPublicSharedRecordOtherUsr (); @@ -2136,7 +2144,7 @@ static void Pho_ShowOrPrintClassPhotoDegrees (struct Pho_DegPhotos *DegPhotos, { /***** Form to select type of list used to display degree photos *****/ if (SeeOrPrint == Pho_DEGREES_SEE) - Usr_ShowFormsToSelectUsrListType (Pho_PutParsDegPhoto,DegPhotos); + Usr_ShowFormsToSelectUsrListType (ActSeePhoDeg,Pho_PutParsDegPhoto,DegPhotos,NULL); HTM_TABLE_BeginCenter (); @@ -2219,7 +2227,7 @@ static void Pho_ShowOrPrintListDegrees (struct Pho_DegPhotos *DegPhotos, /***** Class photo start *****/ if (SeeOrPrint == Pho_DEGREES_SEE) /***** Form to select type of list used to display degree photos *****/ - Usr_ShowFormsToSelectUsrListType (Pho_PutParsDegPhoto,DegPhotos); + Usr_ShowFormsToSelectUsrListType (ActSeePhoDeg,Pho_PutParsDegPhoto,DegPhotos,NULL); /***** Write heading *****/ HTM_TABLE_BeginCenterPadding (2); diff --git a/swad_statistic.c b/swad_statistic.c index 393353a0..c9a10fc6 100644 --- a/swad_statistic.c +++ b/swad_statistic.c @@ -272,8 +272,7 @@ static void Sta_PutFormCrsHits (struct Sta_Stats *Stats) free (Title); /***** Show form to select the groups *****/ - Grp_ShowFormToSelectSeveralGroups (NULL,NULL, - Grp_MY_GROUPS); + Grp_ShowFormToSelectSeveralGroups (ActSeeAccCrs,NULL,NULL,NULL); /***** Begin section with user list *****/ HTM_SECTION_Begin (Usr_USER_LIST_SECTION_ID); @@ -281,11 +280,10 @@ static void Sta_PutFormCrsHits (struct Sta_Stats *Stats) if (NumTotalUsrs) { if (Usr_GetIfShowBigList (NumTotalUsrs, - NULL,NULL, - NULL)) + ActReqAccCrs,NULL,NULL,NULL)) { /***** Form to select type of list used for select several users *****/ - Usr_ShowFormsToSelectUsrListType (NULL,NULL); + Usr_ShowFormsToSelectUsrListType (ActReqAccCrs,NULL,NULL,NULL); /***** Put link to register students *****/ Enr_CheckStdsAndPutButtonToRegisterStdsInCurrentCrs (); diff --git a/swad_text.c b/swad_text.c index b3cbb5f9..cd5a6d36 100644 --- a/swad_text.c +++ b/swad_text.c @@ -2862,7 +2862,7 @@ const char *Txt_Attendance = // Number of times a students has attended to face- #elif L==5 // fr "Présence"; #elif L==6 // gn - "Asistencia"; // Okoteve traducción + "Asistencia"; #elif L==7 // it "Presenza"; #elif L==8 // pl @@ -12756,7 +12756,7 @@ const char *Txt_File_with_the_photo = #elif L==5 // fr "Fichier avec la photo"; #elif L==6 // gn - "Archivo con la foto"; // Okoteve traducción + "Archivo orekóva ta'anga"; #elif L==7 // it "File con la foto"; #elif L==8 // pl @@ -12764,7 +12764,7 @@ const char *Txt_File_with_the_photo = #elif L==9 // pt "Arquivo com a foto"; #elif L==10 // tr - "File with the photo"; // Çeviri lazim! + "Fotoğraflı dosya"; #endif const char *Txt_File_zone = @@ -52076,48 +52076,48 @@ const char *Txt_There_have_been_X_errors_in_sending_the_message = // Warning: it const char *Txt_There_is_already_a_file_named_X = // Warning: it is very important to include %s in the following sentences #if L==1 // ca - "Ya existe un archivo con el nombre %s."; // Necessita traducció + "Ja hi ha un arxiu amb el nom %s."; #elif L==2 // de - "There is already a file named %s."; // Übersetzung notwendig + "Es gibt bereits eine Datei mit dem Namen %s."; #elif L==3 // en "There is already a file named %s."; #elif L==4 // es "Ya existe un archivo con el nombre %s."; #elif L==5 // fr - "There is already a file named %s."; // Besoin de traduction + "Il existe déjà un fichier nommé %s."; #elif L==6 // gn - "Ya existe un archivo con el nombre %s."; // Okoteve traducción + "Oĩma peteĩ vore hérava %s."; #elif L==7 // it "C'è già un file chiamato %s."; #elif L==8 // pl - "There is already a file named %s."; // Potrzebujesz tlumaczenie + "Istnieje już plik o nazwie %s."; #elif L==9 // pt "Já existe um arquivo chamado %s."; #elif L==10 // tr - "There is already a file named %s."; // Çeviri lazim! + "Zaten %s adında bir dosya var."; #endif const char *Txt_There_is_already_a_non_empty_folder_named_X = // Warning: it is very important to include %s in the following sentences #if L==1 // ca - "Ya existe una carpeta no vacía con el nombre %s."; // Necessita traducció + "Ja hi ha una carpeta no buida amb el nom %s."; #elif L==2 // de - "There is already a non-empty folder named %s."; // Übersetzung notwendig + "Es gibt bereits einen nicht leeren Ordner mit dem Namen %s."; #elif L==3 // en "There is already a non-empty folder named %s."; #elif L==4 // es "Ya existe una carpeta no vacía con el nombre %s."; #elif L==5 // fr - "There is already a non-empty folder named %s."; // Besoin de traduction + "Il existe déjà un dossier non vide nommé %s."; #elif L==6 // gn - "Ya existe una carpeta no vacía con el nombre %s."; // Okoteve traducción + "Oĩma peteĩ kundaha nandi'&ytilde;va hérava %s."; #elif L==7 // it "C'è già una cartella non vuota chiamata %s."; #elif L==8 // pl - "There is already a non-empty folder named %s."; // Potrzebujesz tlumaczenie + "Istnieje już niepusty folder o nazwie %s."; #elif L==9 // pt "Já existe uma pasta não vazia chamada strong>%s."; #elif L==10 // tr - "There is already a non-empty folder named %s."; // Çeviri lazim! + "%s adında boş olmayan bir klasör zaten var."; #endif const char *Txt_There_is_no_empty_account_associated_with_your_ID_X = // Warning: it is very important to include %s in the following sentences @@ -52698,7 +52698,7 @@ const char *Txt_time = #elif L==5 // fr "temps"; #elif L==6 // gn - "tiempo"; // Okoteve traducción + "aravo"; #elif L==7 // it "tempo"; #elif L==8 // pl @@ -52706,7 +52706,7 @@ const char *Txt_time = #elif L==9 // pt "tempo"; #elif L==10 // tr - "time"; // Çeviri lazim! + "zaman"; #endif const char *Txt_Time_zone_used_in_the_calculation_of_these_statistics = @@ -52744,7 +52744,7 @@ const char *Txt_Timeline = #elif L==5 // fr "Chronologie"; #elif L==6 // gn - "Timeline"; // Okoteve traducción + "Timeline"; #elif L==7 // it "Timeline"; #elif L==8 // pl @@ -52752,7 +52752,7 @@ const char *Txt_Timeline = #elif L==9 // pt "Timeline"; #elif L==10 // tr - "Timeline"; // Çeviri lazim! + "Zaman çizelgesi"; #endif const char *Txt_Timeline_OF_A_USER = // Warning: it is very important to include %s in the following sentences diff --git a/swad_text_action.c b/swad_text_action.c index 8d7f8837..6bc91953 100644 --- a/swad_text_action.c +++ b/swad_text_action.c @@ -476,48 +476,48 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = , [ActRefNewPubGblTL] = #if L==1 // ca - "Refresh global timeline (new publications)" // Necessita traducció + "Actualitzar timeline global (noves publicacions)" #elif L==2 // de - "Refresh global timeline (new publications)" // Need Übersetzung + "Globale Zeitleiste aktualisieren (Neuveröffentlichungen)" #elif L==3 // en "Refresh global timeline (new publications)" #elif L==4 // es - "Refrescar timeline global (nuevas publicaciones)" + "Actualizar timeline global (nuevas publicaciones)" #elif L==5 // fr - "Refresh global timeline (new publications)" // Besoin de traduction + "Actualiser la chronologie globale (nouvelles publications)" #elif L==6 // gn - "Refrescar timeline global (nuevas publicaciones)" // Okoteve traducción + "Ombopyahu línea de tiempo global (post pyahu)" #elif L==7 // it - "Refresh global timeline (new publications)" // Bisogno di traduzione + "Aggiorna la sequenza temporale globale (nuove pubblicazioni)" #elif L==8 // pl - "Refresh global timeline (new publications)" // Potrzebujesz tlumaczenie + "Odśwież globalną oś czasu (nowe publikacje)" #elif L==9 // pt - "Refresh global timeline (new publications)" // Precisa de tradução + "Atualizar linha do tempo global (novas publicações)" #elif L==10 // tr - "Refresh global timeline (new publications)" // Çeviri lazim! + "Küresel zaman çizelgesini yenile (yeni yayınlar)" #endif , [ActRefOldPubGblTL] = #if L==1 // ca - "Show previous publications in global timeline" // Necessita traducció + "Mostrar publicacions anteriors a timeline global" #elif L==2 // de - "Show previous publications in global timeline" // Need Übersetzung + "Frühere Veröffentlichungen in der globalen Zeitleiste anzeigen" #elif L==3 // en "Show previous publications in global timeline" #elif L==4 // es "Mostrar publicaciones anteriores en timeline global" #elif L==5 // fr - "Show previous publications in global timeline" // Besoin de traduction + "Afficher les publications précédentes dans la chronologie globale" #elif L==6 // gn - "Mostrar publicaciones anteriores en timeline global" // Okoteve traducción + "Ehechauka umi kuatiañe'&etilde; yma guare línea de tiempo global-pe" #elif L==7 // it - "Show previous publications in global timeline" // Bisogno di traduzione + "Mostra le pubblicazioni precedenti nella sequenza temporale globale" #elif L==8 // pl - "Show previous publications in global timeline" // Potrzebujesz tlumaczenie + "Pokaż poprzednie publikacje na globalnej osi czasu" #elif L==9 // pt - "Show previous publications in global timeline" // Precisa de tradução + "Mostrar publicações anteriores na linha do tempo global" #elif L==10 // tr - "Show previous publications in global timeline" // Çeviri lazim! + "Önceki yayınları küresel zaman çizelgesinde göster" #endif , [ActRcvPstGblTL] = diff --git a/swad_user.c b/swad_user.c index def8f20c..bb59a783 100644 --- a/swad_user.c +++ b/swad_user.c @@ -192,6 +192,7 @@ static void Usr_GetGstsLst (Hie_Level_t Level); static void Usr_AllocateUsrsList (Rol_Role_t Role); static void Usr_PutButtonToConfirmIWantToSeeBigList (unsigned NumUsrs, + Act_Action_t NextAction, void (*FuncPars) (void *Args),void *Args, const char *OnSubmit); static void Usr_PutParsConfirmIWantToSeeBigList (void *Args); @@ -204,8 +205,10 @@ static void Usr_AllocateListSelectedEncryptedUsrCods (struct Usr_SelectedUsrs *S Rol_Role_t Role); static void Usr_AllocateListOtherRecipients (void); -static void Set_FormToSelectUsrListType (void (*FuncPars) (void *Args),void *Args, - Set_ShowUsrsType_t ListType); +static void Set_FormToSelectUsrListType (Act_Action_t NextAction, + void (*FuncPars) (void *Args),void *Args, + const char *OnSubmit, + Set_ShowUsrsType_t ListType); static void Usr_ListUsersByRoleToSelect (struct Usr_SelectedUsrs *SelectedUsrs, Rol_Role_t Role); static void Usr_ListUsrsForSelection (struct Usr_SelectedUsrs *SelectedUsrs, @@ -3006,6 +3009,7 @@ void Usr_FreeUsrsList (Rol_Role_t Role) /*****************************************************************************/ bool Usr_GetIfShowBigList (unsigned NumUsrs, + Act_Action_t NextAction, void (*FuncPars) (void *Args),void *Args, const char *OnSubmit) { @@ -3018,7 +3022,7 @@ bool Usr_GetIfShowBigList (unsigned NumUsrs, to see a big list of users *****/ if (!(ShowBigList = Par_GetParBool ("ShowBigList"))) Usr_PutButtonToConfirmIWantToSeeBigList (NumUsrs, - FuncPars,Args, + NextAction,FuncPars,Args, OnSubmit); return ShowBigList; @@ -3032,6 +3036,7 @@ bool Usr_GetIfShowBigList (unsigned NumUsrs, /*****************************************************************************/ static void Usr_PutButtonToConfirmIWantToSeeBigList (unsigned NumUsrs, + Act_Action_t NextAction, void (*FuncPars) (void *Args),void *Args, const char *OnSubmit) { @@ -3040,7 +3045,7 @@ static void Usr_PutButtonToConfirmIWantToSeeBigList (unsigned NumUsrs, /***** Show alert and button to confirm that I want to see the big list *****/ Usr_FuncParsBigList = FuncPars; // Used to pass pointer to function - Ale_ShowAlertAndButton (Gbl.Action.Act,Usr_USER_LIST_SECTION_ID,OnSubmit, + Ale_ShowAlertAndButton (NextAction,Usr_USER_LIST_SECTION_ID,OnSubmit, Usr_PutParsConfirmIWantToSeeBigList,Args, Btn_CONFIRM_BUTTON,Txt_Show_anyway, Ale_WARNING,Txt_The_list_of_X_users_is_too_large_to_be_displayed, @@ -3600,7 +3605,9 @@ void Usr_FreeListOtherRecipients (void) /*************************** Selection of list type **************************/ /*****************************************************************************/ -void Usr_ShowFormsToSelectUsrListType (void (*FuncPars) (void *Args),void *Args) +void Usr_ShowFormsToSelectUsrListType (Act_Action_t NextAction, + void (*FuncPars) (void *Args),void *Args, + const char *OnSubmit) { Set_BeginSettingsHead (); Set_BeginOneSettingSelector (); @@ -3608,12 +3615,11 @@ void Usr_ShowFormsToSelectUsrListType (void (*FuncPars) (void *Args),void *Args) /***** Select Set_USR_LIST_AS_CLASS_PHOTO *****/ Set_BeginPref (Gbl.Usrs.Me.ListType == Set_USR_LIST_AS_CLASS_PHOTO); - Set_FormToSelectUsrListType (FuncPars,Args, + Set_FormToSelectUsrListType (NextAction,FuncPars,Args,OnSubmit, Set_USR_LIST_AS_CLASS_PHOTO); /* Number of columns in the class photo */ - Frm_BeginFormAnchor (Gbl.Action.Act, // Repeat current action - Usr_USER_LIST_SECTION_ID); + Frm_BeginFormAnchor (NextAction,Usr_USER_LIST_SECTION_ID); Grp_PutParsCodGrps (); Set_PutParUsrListType (Set_USR_LIST_AS_CLASS_PHOTO); Set_PutParListWithPhotos (); @@ -3627,12 +3633,11 @@ void Usr_ShowFormsToSelectUsrListType (void (*FuncPars) (void *Args),void *Args) /***** Select Usr_LIST_AS_LISTING *****/ Set_BeginPref (Gbl.Usrs.Me.ListType == Set_USR_LIST_AS_LISTING); - Set_FormToSelectUsrListType (FuncPars,Args, + Set_FormToSelectUsrListType (NextAction,FuncPars,Args,OnSubmit, Set_USR_LIST_AS_LISTING); /* See the photos in list? */ - Frm_BeginFormAnchor (Gbl.Action.Act, // Repeat current action - Usr_USER_LIST_SECTION_ID); + Frm_BeginFormAnchor (NextAction,Usr_USER_LIST_SECTION_ID); Grp_PutParsCodGrps (); Set_PutParUsrListType (Set_USR_LIST_AS_LISTING); if (FuncPars) @@ -3650,14 +3655,15 @@ void Usr_ShowFormsToSelectUsrListType (void (*FuncPars) (void *Args),void *Args) /************* Put a radio element to select a users' list type **************/ /*****************************************************************************/ -static void Set_FormToSelectUsrListType (void (*FuncPars) (void *Args),void *Args, - Set_ShowUsrsType_t ListType) +static void Set_FormToSelectUsrListType (Act_Action_t NextAction, + void (*FuncPars) (void *Args),void *Args, + const char *OnSubmit, + Set_ShowUsrsType_t ListType) { extern const char *Txt_USR_LIST_TYPES[Set_NUM_USR_LIST_TYPES]; /***** Begin form *****/ - Frm_BeginFormAnchor (Gbl.Action.Act, // Repeat current action - Usr_USER_LIST_SECTION_ID); + Frm_BeginFormAnchorOnSubmit (NextAction,Usr_USER_LIST_SECTION_ID,OnSubmit); Grp_PutParsCodGrps (); Set_PutParUsrListType (ListType); Set_PutParListWithPhotos (); @@ -3665,14 +3671,17 @@ static void Set_FormToSelectUsrListType (void (*FuncPars) (void *Args),void *Arg FuncPars (Args); /***** Link and image *****/ - HTM_BUTTON_Submit_Begin (Txt_USR_LIST_TYPES[ListType], - "class=\"BT_LINK FORM_IN_%s NOWRAP\"%s", - The_GetSuffix (), - Gbl.Action.Act == ActReqMsgUsr ? " onsubmit=\"CopyMessageToHiddenFields();\"" : - ""); - Ico_PutIcon (Usr_IconsClassPhotoOrList[ListType],Ico_BLACK, - Txt_USR_LIST_TYPES[ListType],"ICO20x20"); - HTM_NBSPTxt (Txt_USR_LIST_TYPES[ListType]); + if (OnSubmit) + HTM_BUTTON_Submit_Begin (Txt_USR_LIST_TYPES[ListType], + "class=\"BT_LINK FORM_IN_%s NOWRAP\" onsubmit=\"%s\"", + The_GetSuffix (),OnSubmit); + else + HTM_BUTTON_Submit_Begin (Txt_USR_LIST_TYPES[ListType], + "class=\"BT_LINK FORM_IN_%s NOWRAP\"", + The_GetSuffix ()); + Ico_PutIcon (Usr_IconsClassPhotoOrList[ListType],Ico_BLACK, + Txt_USR_LIST_TYPES[ListType],"ICO20x20"); + HTM_NBSPTxt (Txt_USR_LIST_TYPES[ListType]); HTM_BUTTON_End (); /***** End form *****/ @@ -3719,8 +3728,7 @@ void Usr_PutFormToSelectUsrsToGoToAct (struct Usr_SelectedUsrs *SelectedUsrs, Gbl.Usrs.LstUsrs[Rol_TCH].NumUsrs; /***** Show form to select the groups *****/ - Grp_ShowFormToSelectSeveralGroups (FuncPars,Args, - Grp_MY_GROUPS); + Grp_ShowFormToSelectSeveralGroups (NextAction,FuncPars,Args,NULL); /***** Begin section with user list *****/ HTM_SECTION_Begin (Usr_USER_LIST_SECTION_ID); @@ -3728,11 +3736,11 @@ void Usr_PutFormToSelectUsrsToGoToAct (struct Usr_SelectedUsrs *SelectedUsrs, if (NumTotalUsrs) { if (Usr_GetIfShowBigList (NumTotalUsrs, - FuncPars,Args, + NextAction,FuncPars,Args, NULL)) { /***** Form to select type of list used for select several users *****/ - Usr_ShowFormsToSelectUsrListType (FuncPars,Args); + Usr_ShowFormsToSelectUsrListType (NextAction,FuncPars,Args,NULL); /***** Link to register students *****/ Enr_CheckStdsAndPutButtonToRegisterStdsInCurrentCrs (); @@ -5080,11 +5088,12 @@ void Usr_SeeGuests (void) if (Gbl.Usrs.LstUsrs[Rol_GST].NumUsrs) { if (Usr_GetIfShowBigList (Gbl.Usrs.LstUsrs[Rol_GST].NumUsrs, - Sco_PutParCurrentScope,&Gbl.Scope.Current, + ActLstGst,Sco_PutParCurrentScope,&Gbl.Scope.Current, NULL)) { /***** Form to select type of list of users *****/ - Usr_ShowFormsToSelectUsrListType (Sco_PutParCurrentScope,&Gbl.Scope.Current); + Usr_ShowFormsToSelectUsrListType (ActLstGst,Sco_PutParCurrentScope,&Gbl.Scope.Current, + NULL); /***** Draw a class photo with guests *****/ if (Gbl.Usrs.Me.ListType == Set_USR_LIST_AS_CLASS_PHOTO) @@ -5222,8 +5231,8 @@ void Usr_SeeStudents (void) /***** Form to select groups *****/ if (Gbl.Scope.Current == Hie_CRS) - Grp_ShowFormToSelectSeveralGroups (Sco_PutParCurrentScope,&Gbl.Scope.Current, - Grp_MY_GROUPS); + Grp_ShowFormToSelectSeveralGroups (ActLstStd,Sco_PutParCurrentScope, + &Gbl.Scope.Current,NULL); /***** Begin section with user list *****/ HTM_SECTION_Begin (Usr_USER_LIST_SECTION_ID); @@ -5231,11 +5240,12 @@ void Usr_SeeStudents (void) if (Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs) { if (Usr_GetIfShowBigList (Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs, - Sco_PutParCurrentScope,&Gbl.Scope.Current, + ActLstStd,Sco_PutParCurrentScope,&Gbl.Scope.Current, NULL)) { /***** Form to select type of list of users *****/ - Usr_ShowFormsToSelectUsrListType (Sco_PutParCurrentScope,&Gbl.Scope.Current); + Usr_ShowFormsToSelectUsrListType (ActLstStd,Sco_PutParCurrentScope,&Gbl.Scope.Current, + NULL); /***** Draw a class photo with students of the course *****/ if (Gbl.Usrs.Me.ListType == Set_USR_LIST_AS_CLASS_PHOTO) @@ -5389,8 +5399,8 @@ void Usr_SeeTeachers (void) /***** Form to select groups *****/ if (Gbl.Scope.Current == Hie_CRS) - Grp_ShowFormToSelectSeveralGroups (Sco_PutParCurrentScope,&Gbl.Scope.Current, - Grp_MY_GROUPS); + Grp_ShowFormToSelectSeveralGroups (ActLstTch,Sco_PutParCurrentScope, + &Gbl.Scope.Current,NULL); /***** Begin section with user list *****/ HTM_SECTION_Begin (Usr_USER_LIST_SECTION_ID); @@ -5398,11 +5408,12 @@ void Usr_SeeTeachers (void) if (NumUsrs) { if (Usr_GetIfShowBigList (NumUsrs, - Sco_PutParCurrentScope,&Gbl.Scope.Current, + ActLstTch,Sco_PutParCurrentScope,&Gbl.Scope.Current, NULL)) { /***** Form to select type of list of users *****/ - Usr_ShowFormsToSelectUsrListType (Sco_PutParCurrentScope,&Gbl.Scope.Current); + Usr_ShowFormsToSelectUsrListType (ActLstTch,Sco_PutParCurrentScope,&Gbl.Scope.Current, + NULL); /***** Draw a class photo with teachers of the course *****/ if (Gbl.Usrs.Me.ListType == Set_USR_LIST_AS_CLASS_PHOTO) diff --git a/swad_user.h b/swad_user.h index e486f753..0e748a2c 100644 --- a/swad_user.h +++ b/swad_user.h @@ -365,6 +365,7 @@ void Usr_CopyBasicUsrDataFromList (struct Usr_Data *UsrDat, void Usr_FreeUsrsList (Rol_Role_t Role); bool Usr_GetIfShowBigList (unsigned NumUsrs, + Act_Action_t NextAction, void (*FuncPars) (void *Args),void *Args, const char *OnSubmit); @@ -392,7 +393,9 @@ void Usr_FreeSubqueryUsrCods (char *SubQueryUsrs); void Usr_FreeListOtherRecipients (void); -void Usr_ShowFormsToSelectUsrListType (void (*FuncPars) (void *Args),void *Args); +void Usr_ShowFormsToSelectUsrListType (Act_Action_t NextAction, + void (*FuncPars) (void *Args),void *Args, + const char *OnSubmit); unsigned Usr_GetColumnsForSelectUsrs (void); void Usr_SetUsrDatMainFieldNames (void); void Usr_WriteHeaderFieldsUsrDat (bool PutCheckBoxToSelectUsr);