diff --git a/swad_attendance.c b/swad_attendance.c index f7bb929c4..c637de8f5 100644 --- a/swad_attendance.c +++ b/swad_attendance.c @@ -1935,7 +1935,7 @@ static void Att_ListAttStudents (struct AttendanceEvent *Att) Hlp_USERS_Attendance,Box_NOT_CLOSABLE); /***** Form to select groups *****/ - Grp_ShowFormToSelectSeveralGroups (ActSeeOneAtt,false); + Grp_ShowFormToSelectSeveralGroups (ActSeeOneAtt,Grp_ONLY_MY_GROUPS); /***** Start section with user list *****/ Lay_StartSection (Usr_USER_LIST_SECTION_ID); @@ -2672,7 +2672,7 @@ void Usr_ReqListStdsAttendanceCrs (void) Hlp_USERS_Attendance_attendance_list,Box_NOT_CLOSABLE); /***** Form to select groups *****/ - Grp_ShowFormToSelectSeveralGroups (ActReqLstStdAtt,false); + Grp_ShowFormToSelectSeveralGroups (ActReqLstStdAtt,Grp_ONLY_MY_GROUPS); /***** Start section with user list *****/ Lay_StartSection (Usr_USER_LIST_SECTION_ID); diff --git a/swad_changelog.h b/swad_changelog.h index 71338b6a9..76c95e55f 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -232,18 +232,24 @@ // TODO: Cuando sólo se cambian los grupos y no el rol de un profesor ya existente, no sale ningún mensaje. se haga lo que se haga en la edición debería salir un mensaje del tipo "Cambios realizados" +// TODO: Al buscar asignaturas, Estudiantes y Profesores están al revés + +// !!!!!!!!!!!!!!!!!!!!!!!!! +// BUG!!!! Al ver resultados de una encuesta: "Space allocated to string is full." + /*****************************************************************************/ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 16.247.2 (2017-06-23)" +#define Log_PLATFORM_VERSION "SWAD 16.247.3 (2017-07-02)" #define CSS_FILE "swad16.235.1.css" #define JS_FILE "swad16.206.3.js" // Number of lines (includes comments but not blank lines) has been got with the following command: // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1 /* - Version 16.247.2: Jun 23, 2017 Non-editing teachers can not view records of users who do not share groups with them. + Version 16.247.3: Jul 02, 2017 Students can not view records of some users who do not share groups with them. (222132 lines) + Version 16.247.2: Jun 23, 2017 Non-editing teachers can not view records of some users who do not share groups with them. Code refactoring related with roles. (222094 lines) Version 16.247.1: Jun 23, 2017 Non-editing teachers can select all groups when writing a message. (222068 lines) Version 16.247: Jun 20, 2017 Fixed bug when removing a user from a course. diff --git a/swad_file_browser.c b/swad_file_browser.c index e1ee90d88..97da94bd7 100644 --- a/swad_file_browser.c +++ b/swad_file_browser.c @@ -3124,7 +3124,7 @@ void Brw_AskEditWorksCrs (void) Hlp_FILES_Homework_for_teachers,Box_NOT_CLOSABLE); /***** Show form to select the groups *****/ - Grp_ShowFormToSelectSeveralGroups (ActReqAsgWrkCrs,false); + Grp_ShowFormToSelectSeveralGroups (ActReqAsgWrkCrs,Grp_ONLY_MY_GROUPS); /***** Start section with user list *****/ Lay_StartSection (Usr_USER_LIST_SECTION_ID); diff --git a/swad_group.c b/swad_group.c index a3790b665..b1c02bf90 100644 --- a/swad_group.c +++ b/swad_group.c @@ -90,7 +90,7 @@ static void Grp_EditGroups (void); static void Grp_PutIconsEditingGroups (void); static void Grp_PutIconToCreateNewGroup (void); -static void Grp_PutCheckboxAllGrps (bool AllGroupsSelectable); +static void Grp_PutCheckboxAllGrps (Grp_WhichGroups_t GroupsSelectableByStdsOrNETs); static void Grp_ConstructorListGrpAlreadySelec (struct ListGrpsAlreadySelec **AlreadyExistsGroupOfType); static void Grp_DestructorListGrpAlreadySelec (struct ListGrpsAlreadySelec **AlreadyExistsGroupOfType); @@ -112,7 +112,7 @@ 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, - bool AllGroupsSelectable); + Grp_WhichGroups_t GroupsSelectableByStdsOrNETs); static void Grp_WriteGrpHead (struct GroupType *GrpTyp); static void Grp_WriteRowGrp (struct Group *Grp,bool Highlight); static void Grp_PutFormToCreateGroupType (void); @@ -347,7 +347,8 @@ static void Grp_PutIconToCreateNewGroup (void) /*************** Show form to select one or several groups *******************/ /*****************************************************************************/ -void Grp_ShowFormToSelectSeveralGroups (Act_Action_t NextAction,bool AllGroupsSelectable) +void Grp_ShowFormToSelectSeveralGroups (Act_Action_t NextAction, + Grp_WhichGroups_t GroupsSelectableByStdsOrNETs) { extern const char *Hlp_USERS_Groups; extern const char *The_ClassFormBold[The_NUM_THEMES]; @@ -377,7 +378,7 @@ void Grp_ShowFormToSelectSeveralGroups (Act_Action_t NextAction,bool AllGroupsSe Usr_PutExtraParamsUsrList (NextAction); /***** Select all groups *****/ - Grp_PutCheckboxAllGrps (AllGroupsSelectable); + Grp_PutCheckboxAllGrps (GroupsSelectableByStdsOrNETs); /***** Get list of groups types and groups in this course *****/ Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS); @@ -389,7 +390,7 @@ void Grp_ShowFormToSelectSeveralGroups (Act_Action_t NextAction,bool AllGroupsSe NumGrpTyp++) if (Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps) Grp_ListGrpsForMultipleSelection (&Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp], - AllGroupsSelectable); + GroupsSelectableByStdsOrNETs); Tbl_EndTable (); /***** Free list of groups types and groups in this course *****/ @@ -417,7 +418,7 @@ void Grp_ShowFormToSelectSeveralGroups (Act_Action_t NextAction,bool AllGroupsSe /******************* Put checkbox to select all groups ***********************/ /*****************************************************************************/ -static void Grp_PutCheckboxAllGrps (bool AllGroupsSelectable) +static void Grp_PutCheckboxAllGrps (Grp_WhichGroups_t GroupsSelectableByStdsOrNETs) { extern const char *The_ClassForm[The_NUM_THEMES]; extern const char *Txt_All_groups; @@ -425,10 +426,10 @@ static void Grp_PutCheckboxAllGrps (bool AllGroupsSelectable) switch (Gbl.Usrs.Me.Role.Logged) { - case Rol_NET: - ICanSelUnselGroup = AllGroupsSelectable; - break; case Rol_STD: + case Rol_NET: + ICanSelUnselGroup = (GroupsSelectableByStdsOrNETs == Grp_ALL_GROUPS); + break; case Rol_TCH: case Rol_DEG_ADM: case Rol_CTR_ADM: @@ -976,8 +977,8 @@ bool Grp_CheckIfSelectionGrpsSingleEnrolmentIsValid (Rol_Role_t Role,struct List /***** Create and initialize list of groups already selected *****/ Grp_ConstructorListGrpAlreadySelec (&AlreadyExistsGroupOfType); - /***** Go across the list of groups selected checking if a group of the same type - is already selected *****/ + /***** Go across the list of groups selected + checking if a group of the same type is already selected *****/ SelectionValid = true; for (NumCodGrp = 0; SelectionValid && NumCodGrp < LstGrps->NumGrps; @@ -1003,7 +1004,6 @@ bool Grp_CheckIfSelectionGrpsSingleEnrolmentIsValid (Rol_Role_t Role,struct List /***** Free memory of the list of booleanos that indicates if a group of each type has been selected *****/ Grp_DestructorListGrpAlreadySelec (&AlreadyExistsGroupOfType); - return SelectionValid; // Return true if the selection of groups is correct case Rol_NET: case Rol_TCH: @@ -2131,7 +2131,7 @@ static void Grp_ListGrpsToAddOrRemUsrs (struct GroupType *GrpTyp,long UsrCod) /*****************************************************************************/ static void Grp_ListGrpsForMultipleSelection (struct GroupType *GrpTyp, - bool AllGroupsSelectable) + Grp_WhichGroups_t GroupsSelectableByStdsOrNETs) { extern const char *Txt_users_with_no_group; unsigned NumGrpThisType; @@ -2166,20 +2166,20 @@ static void Grp_ListGrpsForMultipleSelection (struct GroupType *GrpTyp, else switch (Gbl.Usrs.Me.Role.Logged) { + case Rol_STD: case Rol_NET: - ICanSelUnselGroup = AllGroupsSelectable || + ICanSelUnselGroup = (GroupsSelectableByStdsOrNETs == Grp_ALL_GROUPS) || IBelongToThisGroup; break; - case Rol_STD: case Rol_TCH: case Rol_DEG_ADM: case Rol_CTR_ADM: case Rol_INS_ADM: case Rol_SYS_ADM: - ICanSelUnselGroup = true; + ICanSelUnselGroup = true; // GroupsSelectable is ignored break; default: - ICanSelUnselGroup = false; + ICanSelUnselGroup = false; // GroupsSelectable is ignored break; } diff --git a/swad_group.h b/swad_group.h index a9965150c..13dfbd03f 100644 --- a/swad_group.h +++ b/swad_group.h @@ -135,7 +135,8 @@ typedef enum void Grp_WriteNamesOfSelectedGrps (void); void Grp_ReqEditGroups (void); -void Grp_ShowFormToSelectSeveralGroups (Act_Action_t NextAction,bool AllGroupsSelectable); +void Grp_ShowFormToSelectSeveralGroups (Act_Action_t NextAction, + Grp_WhichGroups_t GroupsSelectable); void Grp_PutParamsCodGrps (void); void Grp_GetParCodsSeveralGrpsToShowUsrs (void); void Grp_GetParCodsSeveralGrps (void); diff --git a/swad_mail.c b/swad_mail.c index 37641ea30..0991c86a0 100644 --- a/swad_mail.c +++ b/swad_mail.c @@ -892,7 +892,7 @@ void Mai_ListEmails (void) Hlp_MESSAGES_Email,Box_NOT_CLOSABLE); /***** Form to select groups *****/ - Grp_ShowFormToSelectSeveralGroups (ActMaiStd,false); + Grp_ShowFormToSelectSeveralGroups (ActMaiStd,Grp_ONLY_MY_GROUPS); /***** Start section with user list *****/ Lay_StartSection (Usr_USER_LIST_SECTION_ID); diff --git a/swad_message.c b/swad_message.c index f92b47209..0a61413f1 100644 --- a/swad_message.c +++ b/swad_message.c @@ -238,7 +238,8 @@ static void Msg_PutFormMsgUsrs (char Content[Cns_MAX_BYTES_LONG_TEXT + 1]) if (GetUsrsInCrs) { /***** Form to select groups *****/ - Grp_ShowFormToSelectSeveralGroups (ActReqMsgUsr,true); + Grp_ShowFormToSelectSeveralGroups (ActReqMsgUsr, + Grp_ALL_GROUPS); // All groups are selectable to send a message /***** Start section with user list *****/ Lay_StartSection (Usr_USER_LIST_SECTION_ID); diff --git a/swad_statistic.c b/swad_statistic.c index d77f8c874..3f87b1e00 100644 --- a/swad_statistic.c +++ b/swad_statistic.c @@ -480,7 +480,7 @@ void Sta_AskShowCrsHits (void) Hlp_STATS_Visits_visits_to_course,Box_NOT_CLOSABLE); /***** Show form to select the groups *****/ - Grp_ShowFormToSelectSeveralGroups (ActReqAccCrs,false); + Grp_ShowFormToSelectSeveralGroups (ActReqAccCrs,Grp_ONLY_MY_GROUPS); /***** Start section with user list *****/ Lay_StartSection (Usr_USER_LIST_SECTION_ID); diff --git a/swad_test.c b/swad_test.c index 6ee7affb0..498a77294 100644 --- a/swad_test.c +++ b/swad_test.c @@ -6986,7 +6986,7 @@ void Tst_SelUsrsToSeeUsrsTestResults (void) Hlp_ASSESSMENT_Tests_test_results,Box_NOT_CLOSABLE); /***** Show form to select the groups *****/ - Grp_ShowFormToSelectSeveralGroups (ActReqSeeUsrTstRes,false); + Grp_ShowFormToSelectSeveralGroups (ActReqSeeUsrTstRes,Grp_ONLY_MY_GROUPS); /***** Start section with user list *****/ Lay_StartSection (Usr_USER_LIST_SECTION_ID); diff --git a/swad_text.c b/swad_text.c index ede5fb3df..72c4d6b04 100644 --- a/swad_text.c +++ b/swad_text.c @@ -30700,23 +30700,23 @@ const char *Txt_Register_teacher = const char *Txt_Register_user_IN_A_COURSE_OR_DEGREE = #if L==1 - "Inscriure usuari"; + "Inscriure usuari/a"; #elif L==2 "Anmeldung Benutzer"; #elif L==3 "Register user"; #elif L==4 - "Inscribir usuario"; + "Inscribir usuario/a"; #elif L==5 - "Inscrire utilisateur"; + "Inscrire utilisateur/se"; #elif L==6 - "Inscribir usuario"; // Okoteve traducción + "Inscribir usuario/a"; // Okoteve traducción #elif L==7 "Registrare utente"; #elif L==8 "Rejestracja użytkownika"; #elif L==9 - "Registrar utilizador"; + "Registrar utilizador/a"; #endif const char *Txt_Register_me_in_X = // Warning: it is very important to include %s in the following sentences diff --git a/swad_user.c b/swad_user.c index cd023b162..25148f966 100644 --- a/swad_user.c +++ b/swad_user.c @@ -7451,7 +7451,7 @@ void Usr_SeeStudents (void) /***** Form to select groups *****/ if (Gbl.Scope.Current == Sco_SCOPE_CRS) - Grp_ShowFormToSelectSeveralGroups (ActLstStd,false); + Grp_ShowFormToSelectSeveralGroups (ActLstStd,Grp_ONLY_MY_GROUPS); /***** Start section with user list *****/ Lay_StartSection (Usr_USER_LIST_SECTION_ID); @@ -7626,7 +7626,7 @@ void Usr_SeeTeachers (void) /***** Form to select groups *****/ if (Gbl.Scope.Current == Sco_SCOPE_CRS) - Grp_ShowFormToSelectSeveralGroups (ActLstTch,false); + Grp_ShowFormToSelectSeveralGroups (ActLstTch,Grp_ONLY_MY_GROUPS); /***** Start section with user list *****/ Lay_StartSection (Usr_USER_LIST_SECTION_ID);