diff --git a/swad_action.c b/swad_action.c index 63a94b55f..00b0a1148 100644 --- a/swad_action.c +++ b/swad_action.c @@ -1083,23 +1083,24 @@ Users: 891. ActChgGrp Change my groups 892. ActReqEdiGrp Request the edition of groups - 893. ActNewGrpTyp Request the creation of a type of group of students - 894. ActReqRemGrpTyp Request the removal of a type of group of students + 893. ActNewGrpTyp Request the creation of a type of group + 894. ActReqRemGrpTyp Request the removal of a type of group 895. ActRemGrpTyp Remove a type of group of students 896. ActRenGrpTyp Request renaming of a type of group of students 897. ActChgMdtGrpTyp Request change if it is mandatory to register in groups of a type 898. ActChgMulGrpTyp Request change if it is possible to register in multiple groups of a type 899. ActChgTimGrpTyp Request change when the groups of a type will be open - 900. ActNewGrp Request the creation of a group of students - 901. ActReqRemGrp Request the removal of a group of students - 902. ActRemGrp Remove a group of students - 903. ActOpeGrp Abrir a group of students - 904. ActCloGrp Cerrar a group of students - 905. ActEnaFilZonGrp Enable zonas of files of a group - 906. ActDisFilZonGrp Disable zonas of files of a group - 907. ActChgGrpTyp Request change in the type of group of students - 908. ActRenGrp Request renaming of a group of students - 909. ActChgMaxStdGrp Request change in the number máximo of students of a group + 900. ActNewGrp Request the creation of a group + 901. ActReqRemGrp Request the removal of a group + 902. ActRemGrp Remove a group + 903. ActOpeGrp Open a group + 904. ActCloGrp Close a group + 905. ActEnaFilZonGrp Enable filezones of a group + 906. ActDisFilZonGrp Disable filezones of a group + 907. ActChgGrpTyp Change the type of group of a group + 908. ActRenGrp Rename a group + NEW. ActChgGrpCla Change the classroom of a group + 909. ActChgMaxStdGrp Change the maximum number of students in a group 910. ActLstGst List main data of administrators @@ -2669,6 +2670,7 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = /* ActDisFilZonGrp */{ 496,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Grp_DisableFileZonesGrp ,NULL}, /* ActChgGrpTyp */{ 167,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Grp_ChangeGroupType ,NULL}, /* ActRenGrp */{ 121,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Grp_RenameGroup ,NULL}, + /* ActChgGrpCla */{1752,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Grp_ChangeGroupClassroom ,NULL}, /* ActChgMaxStdGrp */{ 106,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Grp_ChangeMaxStdsGrp ,NULL}, /* ActLstGst */{ 587,-1,TabUnk,ActLstOth ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Usr_SeeGuests ,NULL}, @@ -4958,6 +4960,7 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un ActRenClaFul, // #1749 ActChgClaMaxStd, // #1750 ActRenClaLoc, // #1751 + ActChgGrpCla, // #1752 }; /*****************************************************************************/ diff --git a/swad_action.h b/swad_action.h index bd3713f96..b10b2a2b9 100644 --- a/swad_action.h +++ b/swad_action.h @@ -61,9 +61,9 @@ typedef enum typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action -#define Act_NUM_ACTIONS (1 + 9 + 43 + 17 + 47 + 41 + 24 + 115 + 157 + 437 + 165 + 172 + 42 + 14 + 76) +#define Act_NUM_ACTIONS (1 + 9 + 43 + 17 + 47 + 41 + 24 + 115 + 157 + 437 + 166 + 172 + 42 + 14 + 76) -#define Act_MAX_ACTION_COD 1751 +#define Act_MAX_ACTION_COD 1752 #define Act_MAX_OPTIONS_IN_MENU_PER_TAB 13 @@ -1113,167 +1113,168 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to #define ActDisFilZonGrp (ActRemOldBrf + 24) #define ActChgGrpTyp (ActRemOldBrf + 25) #define ActRenGrp (ActRemOldBrf + 26) -#define ActChgMaxStdGrp (ActRemOldBrf + 27) +#define ActChgGrpCla (ActRemOldBrf + 27) +#define ActChgMaxStdGrp (ActRemOldBrf + 28) -#define ActLstGst (ActRemOldBrf + 28) +#define ActLstGst (ActRemOldBrf + 29) -#define ActPrnGstPho (ActRemOldBrf + 29) -#define ActPrnStdPho (ActRemOldBrf + 30) -#define ActPrnTchPho (ActRemOldBrf + 31) -#define ActLstGstAll (ActRemOldBrf + 32) -#define ActLstStdAll (ActRemOldBrf + 33) -#define ActLstTchAll (ActRemOldBrf + 34) +#define ActPrnGstPho (ActRemOldBrf + 30) +#define ActPrnStdPho (ActRemOldBrf + 31) +#define ActPrnTchPho (ActRemOldBrf + 32) +#define ActLstGstAll (ActRemOldBrf + 33) +#define ActLstStdAll (ActRemOldBrf + 34) +#define ActLstTchAll (ActRemOldBrf + 35) -#define ActSeeRecOneStd (ActRemOldBrf + 35) -#define ActSeeRecOneTch (ActRemOldBrf + 36) -#define ActSeeRecSevGst (ActRemOldBrf + 37) -#define ActSeeRecSevStd (ActRemOldBrf + 38) -#define ActSeeRecSevTch (ActRemOldBrf + 39) -#define ActPrnRecSevGst (ActRemOldBrf + 40) -#define ActPrnRecSevStd (ActRemOldBrf + 41) -#define ActPrnRecSevTch (ActRemOldBrf + 42) -#define ActRcvRecOthUsr (ActRemOldBrf + 43) -#define ActEdiRecFie (ActRemOldBrf + 44) -#define ActNewFie (ActRemOldBrf + 45) -#define ActReqRemFie (ActRemOldBrf + 46) -#define ActRemFie (ActRemOldBrf + 47) -#define ActRenFie (ActRemOldBrf + 48) -#define ActChgRowFie (ActRemOldBrf + 49) -#define ActChgVisFie (ActRemOldBrf + 50) -#define ActRcvRecCrs (ActRemOldBrf + 51) +#define ActSeeRecOneStd (ActRemOldBrf + 36) +#define ActSeeRecOneTch (ActRemOldBrf + 37) +#define ActSeeRecSevGst (ActRemOldBrf + 38) +#define ActSeeRecSevStd (ActRemOldBrf + 39) +#define ActSeeRecSevTch (ActRemOldBrf + 40) +#define ActPrnRecSevGst (ActRemOldBrf + 41) +#define ActPrnRecSevStd (ActRemOldBrf + 42) +#define ActPrnRecSevTch (ActRemOldBrf + 43) +#define ActRcvRecOthUsr (ActRemOldBrf + 44) +#define ActEdiRecFie (ActRemOldBrf + 45) +#define ActNewFie (ActRemOldBrf + 46) +#define ActReqRemFie (ActRemOldBrf + 47) +#define ActRemFie (ActRemOldBrf + 48) +#define ActRenFie (ActRemOldBrf + 49) +#define ActChgRowFie (ActRemOldBrf + 50) +#define ActChgVisFie (ActRemOldBrf + 51) +#define ActRcvRecCrs (ActRemOldBrf + 52) -#define ActFrmLogInUsrAgd (ActRemOldBrf + 52) -#define ActLogInUsrAgd (ActRemOldBrf + 53) -#define ActLogInUsrAgdLan (ActRemOldBrf + 54) -#define ActSeeUsrAgd (ActRemOldBrf + 55) +#define ActFrmLogInUsrAgd (ActRemOldBrf + 53) +#define ActLogInUsrAgd (ActRemOldBrf + 54) +#define ActLogInUsrAgdLan (ActRemOldBrf + 55) +#define ActSeeUsrAgd (ActRemOldBrf + 56) -#define ActReqEnrSevStd (ActRemOldBrf + 56) -#define ActReqEnrSevNET (ActRemOldBrf + 57) -#define ActReqEnrSevTch (ActRemOldBrf + 58) +#define ActReqEnrSevStd (ActRemOldBrf + 57) +#define ActReqEnrSevNET (ActRemOldBrf + 58) +#define ActReqEnrSevTch (ActRemOldBrf + 59) -#define ActReqLstStdAtt (ActRemOldBrf + 59) -#define ActSeeLstMyAtt (ActRemOldBrf + 60) -#define ActPrnLstMyAtt (ActRemOldBrf + 61) -#define ActSeeLstStdAtt (ActRemOldBrf + 62) -#define ActPrnLstStdAtt (ActRemOldBrf + 63) -#define ActFrmNewAtt (ActRemOldBrf + 64) -#define ActEdiOneAtt (ActRemOldBrf + 65) -#define ActNewAtt (ActRemOldBrf + 66) -#define ActChgAtt (ActRemOldBrf + 67) -#define ActReqRemAtt (ActRemOldBrf + 68) -#define ActRemAtt (ActRemOldBrf + 69) -#define ActHidAtt (ActRemOldBrf + 70) -#define ActShoAtt (ActRemOldBrf + 71) -#define ActSeeOneAtt (ActRemOldBrf + 72) -#define ActRecAttStd (ActRemOldBrf + 73) -#define ActRecAttMe (ActRemOldBrf + 74) +#define ActReqLstStdAtt (ActRemOldBrf + 60) +#define ActSeeLstMyAtt (ActRemOldBrf + 61) +#define ActPrnLstMyAtt (ActRemOldBrf + 62) +#define ActSeeLstStdAtt (ActRemOldBrf + 63) +#define ActPrnLstStdAtt (ActRemOldBrf + 64) +#define ActFrmNewAtt (ActRemOldBrf + 65) +#define ActEdiOneAtt (ActRemOldBrf + 66) +#define ActNewAtt (ActRemOldBrf + 67) +#define ActChgAtt (ActRemOldBrf + 68) +#define ActReqRemAtt (ActRemOldBrf + 69) +#define ActRemAtt (ActRemOldBrf + 70) +#define ActHidAtt (ActRemOldBrf + 71) +#define ActShoAtt (ActRemOldBrf + 72) +#define ActSeeOneAtt (ActRemOldBrf + 73) +#define ActRecAttStd (ActRemOldBrf + 74) +#define ActRecAttMe (ActRemOldBrf + 75) -#define ActSignUp (ActRemOldBrf + 75) -#define ActUpdSignUpReq (ActRemOldBrf + 76) -#define ActReqRejSignUp (ActRemOldBrf + 77) -#define ActRejSignUp (ActRemOldBrf + 78) +#define ActSignUp (ActRemOldBrf + 76) +#define ActUpdSignUpReq (ActRemOldBrf + 77) +#define ActReqRejSignUp (ActRemOldBrf + 78) +#define ActRejSignUp (ActRemOldBrf + 79) -#define ActReqMdfOneOth (ActRemOldBrf + 79) -#define ActReqMdfOneStd (ActRemOldBrf + 80) -#define ActReqMdfOneTch (ActRemOldBrf + 81) +#define ActReqMdfOneOth (ActRemOldBrf + 80) +#define ActReqMdfOneStd (ActRemOldBrf + 81) +#define ActReqMdfOneTch (ActRemOldBrf + 82) -#define ActReqMdfOth (ActRemOldBrf + 82) -#define ActReqMdfStd (ActRemOldBrf + 83) -#define ActReqMdfNET (ActRemOldBrf + 84) -#define ActReqMdfTch (ActRemOldBrf + 85) +#define ActReqMdfOth (ActRemOldBrf + 83) +#define ActReqMdfStd (ActRemOldBrf + 84) +#define ActReqMdfNET (ActRemOldBrf + 85) +#define ActReqMdfTch (ActRemOldBrf + 86) -#define ActReqOthPho (ActRemOldBrf + 86) -#define ActReqStdPho (ActRemOldBrf + 87) -#define ActReqTchPho (ActRemOldBrf + 88) -#define ActDetOthPho (ActRemOldBrf + 89) -#define ActDetStdPho (ActRemOldBrf + 90) -#define ActDetTchPho (ActRemOldBrf + 91) -#define ActUpdOthPho (ActRemOldBrf + 92) -#define ActUpdStdPho (ActRemOldBrf + 93) -#define ActUpdTchPho (ActRemOldBrf + 94) -#define ActReqRemOthPho (ActRemOldBrf + 95) -#define ActReqRemStdPho (ActRemOldBrf + 96) -#define ActReqRemTchPho (ActRemOldBrf + 97) -#define ActRemOthPho (ActRemOldBrf + 98) -#define ActRemStdPho (ActRemOldBrf + 99) -#define ActRemTchPho (ActRemOldBrf + 100) -#define ActCreOth (ActRemOldBrf + 101) -#define ActCreStd (ActRemOldBrf + 102) -#define ActCreNET (ActRemOldBrf + 103) -#define ActCreTch (ActRemOldBrf + 104) -#define ActUpdOth (ActRemOldBrf + 105) -#define ActUpdStd (ActRemOldBrf + 106) -#define ActUpdNET (ActRemOldBrf + 107) -#define ActUpdTch (ActRemOldBrf + 108) +#define ActReqOthPho (ActRemOldBrf + 87) +#define ActReqStdPho (ActRemOldBrf + 88) +#define ActReqTchPho (ActRemOldBrf + 89) +#define ActDetOthPho (ActRemOldBrf + 90) +#define ActDetStdPho (ActRemOldBrf + 91) +#define ActDetTchPho (ActRemOldBrf + 92) +#define ActUpdOthPho (ActRemOldBrf + 93) +#define ActUpdStdPho (ActRemOldBrf + 94) +#define ActUpdTchPho (ActRemOldBrf + 95) +#define ActReqRemOthPho (ActRemOldBrf + 96) +#define ActReqRemStdPho (ActRemOldBrf + 97) +#define ActReqRemTchPho (ActRemOldBrf + 98) +#define ActRemOthPho (ActRemOldBrf + 99) +#define ActRemStdPho (ActRemOldBrf + 100) +#define ActRemTchPho (ActRemOldBrf + 101) +#define ActCreOth (ActRemOldBrf + 102) +#define ActCreStd (ActRemOldBrf + 103) +#define ActCreNET (ActRemOldBrf + 104) +#define ActCreTch (ActRemOldBrf + 105) +#define ActUpdOth (ActRemOldBrf + 106) +#define ActUpdStd (ActRemOldBrf + 107) +#define ActUpdNET (ActRemOldBrf + 108) +#define ActUpdTch (ActRemOldBrf + 109) -#define ActReqAccEnrStd (ActRemOldBrf + 109) -#define ActReqAccEnrNET (ActRemOldBrf + 110) -#define ActReqAccEnrTch (ActRemOldBrf + 111) -#define ActAccEnrStd (ActRemOldBrf + 112) -#define ActAccEnrNET (ActRemOldBrf + 113) -#define ActAccEnrTch (ActRemOldBrf + 114) -#define ActRemMe_Std (ActRemOldBrf + 115) -#define ActRemMe_NET (ActRemOldBrf + 116) -#define ActRemMe_Tch (ActRemOldBrf + 117) +#define ActReqAccEnrStd (ActRemOldBrf + 110) +#define ActReqAccEnrNET (ActRemOldBrf + 111) +#define ActReqAccEnrTch (ActRemOldBrf + 112) +#define ActAccEnrStd (ActRemOldBrf + 113) +#define ActAccEnrNET (ActRemOldBrf + 114) +#define ActAccEnrTch (ActRemOldBrf + 115) +#define ActRemMe_Std (ActRemOldBrf + 116) +#define ActRemMe_NET (ActRemOldBrf + 117) +#define ActRemMe_Tch (ActRemOldBrf + 118) -#define ActNewAdmIns (ActRemOldBrf + 118) -#define ActRemAdmIns (ActRemOldBrf + 119) -#define ActNewAdmCtr (ActRemOldBrf + 120) -#define ActRemAdmCtr (ActRemOldBrf + 121) -#define ActNewAdmDeg (ActRemOldBrf + 122) -#define ActRemAdmDeg (ActRemOldBrf + 123) +#define ActNewAdmIns (ActRemOldBrf + 119) +#define ActRemAdmIns (ActRemOldBrf + 120) +#define ActNewAdmCtr (ActRemOldBrf + 121) +#define ActRemAdmCtr (ActRemOldBrf + 122) +#define ActNewAdmDeg (ActRemOldBrf + 123) +#define ActRemAdmDeg (ActRemOldBrf + 124) -#define ActRcvFrmEnrSevStd (ActRemOldBrf + 124) -#define ActRcvFrmEnrSevNET (ActRemOldBrf + 125) -#define ActRcvFrmEnrSevTch (ActRemOldBrf + 126) +#define ActRcvFrmEnrSevStd (ActRemOldBrf + 125) +#define ActRcvFrmEnrSevNET (ActRemOldBrf + 126) +#define ActRcvFrmEnrSevTch (ActRemOldBrf + 127) -#define ActCnfID_Oth (ActRemOldBrf + 127) -#define ActCnfID_Std (ActRemOldBrf + 128) -#define ActCnfID_Tch (ActRemOldBrf + 129) +#define ActCnfID_Oth (ActRemOldBrf + 128) +#define ActCnfID_Std (ActRemOldBrf + 129) +#define ActCnfID_Tch (ActRemOldBrf + 130) -#define ActFrmAccOth (ActRemOldBrf + 130) -#define ActFrmAccStd (ActRemOldBrf + 131) -#define ActFrmAccTch (ActRemOldBrf + 132) +#define ActFrmAccOth (ActRemOldBrf + 131) +#define ActFrmAccStd (ActRemOldBrf + 132) +#define ActFrmAccTch (ActRemOldBrf + 133) -#define ActRemOldNicOth (ActRemOldBrf + 133) -#define ActRemOldNicStd (ActRemOldBrf + 134) -#define ActRemOldNicTch (ActRemOldBrf + 135) -#define ActChgNicOth (ActRemOldBrf + 136) -#define ActChgNicStd (ActRemOldBrf + 137) -#define ActChgNicTch (ActRemOldBrf + 138) +#define ActRemOldNicOth (ActRemOldBrf + 134) +#define ActRemOldNicStd (ActRemOldBrf + 135) +#define ActRemOldNicTch (ActRemOldBrf + 136) +#define ActChgNicOth (ActRemOldBrf + 137) +#define ActChgNicStd (ActRemOldBrf + 138) +#define ActChgNicTch (ActRemOldBrf + 139) -#define ActRemID_Oth (ActRemOldBrf + 139) -#define ActRemID_Std (ActRemOldBrf + 140) -#define ActRemID_Tch (ActRemOldBrf + 141) -#define ActNewID_Oth (ActRemOldBrf + 142) -#define ActNewID_Std (ActRemOldBrf + 143) -#define ActNewID_Tch (ActRemOldBrf + 144) -#define ActChgPwdOth (ActRemOldBrf + 145) -#define ActChgPwdStd (ActRemOldBrf + 146) -#define ActChgPwdTch (ActRemOldBrf + 147) -#define ActRemMaiOth (ActRemOldBrf + 148) -#define ActRemMaiStd (ActRemOldBrf + 149) -#define ActRemMaiTch (ActRemOldBrf + 150) -#define ActNewMaiOth (ActRemOldBrf + 151) -#define ActNewMaiStd (ActRemOldBrf + 152) -#define ActNewMaiTch (ActRemOldBrf + 153) +#define ActRemID_Oth (ActRemOldBrf + 140) +#define ActRemID_Std (ActRemOldBrf + 141) +#define ActRemID_Tch (ActRemOldBrf + 142) +#define ActNewID_Oth (ActRemOldBrf + 143) +#define ActNewID_Std (ActRemOldBrf + 144) +#define ActNewID_Tch (ActRemOldBrf + 145) +#define ActChgPwdOth (ActRemOldBrf + 146) +#define ActChgPwdStd (ActRemOldBrf + 147) +#define ActChgPwdTch (ActRemOldBrf + 148) +#define ActRemMaiOth (ActRemOldBrf + 149) +#define ActRemMaiStd (ActRemOldBrf + 150) +#define ActRemMaiTch (ActRemOldBrf + 151) +#define ActNewMaiOth (ActRemOldBrf + 152) +#define ActNewMaiStd (ActRemOldBrf + 153) +#define ActNewMaiTch (ActRemOldBrf + 154) -#define ActRemStdCrs (ActRemOldBrf + 154) -#define ActRemNETCrs (ActRemOldBrf + 155) -#define ActRemTchCrs (ActRemOldBrf + 156) -#define ActRemUsrGbl (ActRemOldBrf + 157) +#define ActRemStdCrs (ActRemOldBrf + 155) +#define ActRemNETCrs (ActRemOldBrf + 156) +#define ActRemTchCrs (ActRemOldBrf + 157) +#define ActRemUsrGbl (ActRemOldBrf + 158) -#define ActReqRemAllStdCrs (ActRemOldBrf + 158) -#define ActRemAllStdCrs (ActRemOldBrf + 159) +#define ActReqRemAllStdCrs (ActRemOldBrf + 159) +#define ActRemAllStdCrs (ActRemOldBrf + 160) -#define ActReqRemOldUsr (ActRemOldBrf + 160) -#define ActRemOldUsr (ActRemOldBrf + 161) +#define ActReqRemOldUsr (ActRemOldBrf + 161) +#define ActRemOldUsr (ActRemOldBrf + 162) -#define ActLstDupUsr (ActRemOldBrf + 162) -#define ActLstSimUsr (ActRemOldBrf + 163) -#define ActRemDupUsr (ActRemOldBrf + 164) +#define ActLstDupUsr (ActRemOldBrf + 163) +#define ActLstSimUsr (ActRemOldBrf + 164) +#define ActRemDupUsr (ActRemOldBrf + 165) -#define ActLstClk (ActRemOldBrf + 165) +#define ActLstClk (ActRemOldBrf + 166) /*****************************************************************************/ /******************************** Social tab *********************************/ diff --git a/swad_changelog.h b/swad_changelog.h index 04483edd0..42861a84f 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -343,7 +343,7 @@ Buenos d // TODO: No se puede pulsar sobre la foto de un remitente de un mensaje recibido. -// TODO: Que un grupo tenga asociado un lugar, como un aula, así al hacer un evento de asistencia, podría tener por defecto el lugar asignado al grupo elegido. +// TODO: Al crear un evento de asistencia, podría tener por defecto el aula asignada al grupo elegido. /*****************************************************************************/ /****************************** Public constants *****************************/ @@ -364,10 +364,11 @@ En OpenSWAD: ps2pdf source.ps destination.pdf */ -#define Log_PLATFORM_VERSION "SWAD 18.27.5 (2019-01-04)" +#define Log_PLATFORM_VERSION "SWAD 18.27.6 (2019-01-04)" #define CSS_FILE "swad18.22.css" #define JS_FILE "swad17.17.1.js" /* + Version 18.27.6: Jan 04, 2019 Selection of classroom in form to edit group. (239099 lines) Version 18.27.5: Jan 04, 2019 Selection of classroom in form to create group. (238964 lines) Version 18.27.4: Jan 04, 2019 New field in groups table to select a classroom. (238881 lines) 1 change necessary in database: diff --git a/swad_global.c b/swad_global.c index daec191c2..75b11eb6d 100644 --- a/swad_global.c +++ b/swad_global.c @@ -329,6 +329,7 @@ void Gbl_InitializeGlobals (void) Gbl.CurrentCrs.Grps.GrpTyp.OpenTimeUTC = (time_t) 0; Gbl.CurrentCrs.Grps.GrpCod = -1L; // -1L stands for the whole course Gbl.CurrentCrs.Grps.GrpName[0] = '\0'; + Gbl.CurrentCrs.Grps.ClaCod = -1L; // -1L stands for no classroom assigned Gbl.CurrentCrs.Grps.MaxStudents = Grp_NUM_STUDENTS_NOT_LIMITED; Gbl.CurrentCrs.Grps.Open = false; Gbl.CurrentCrs.Grps.LstGrpsSel.GrpCods = NULL; diff --git a/swad_group.c b/swad_group.c index eff9459c9..1a1ad1e2e 100644 --- a/swad_group.c +++ b/swad_group.c @@ -1499,9 +1499,12 @@ static void Grp_ListGroupsForEdition (void) extern const char *Txt_Group_X_closed_click_to_open_it; extern const char *Txt_File_zones_of_the_group_X_enabled_click_to_disable_them; extern const char *Txt_File_zones_of_the_group_X_disabled_click_to_enable_them; + extern const char *Txt_No_assigned_classroom; + extern const char *Txt_Another_classroom; unsigned NumGrpTyp; unsigned NumTipGrpAux; unsigned NumGrpThisType; + unsigned NumCla; struct GroupType *GrpTyp; struct GroupType *GrpTypAux; struct Group *Grp; @@ -1523,7 +1526,7 @@ static void Grp_ListGroupsForEdition (void) { Grp = &(GrpTyp->LstGrps[NumGrpThisType]); - /* Write icon to remove group */ + /***** Icon to remove group *****/ fprintf (Gbl.F.Out,"" ""); Frm_StartFormAnchor (ActReqRemGrp,Grp_GROUPS_SECTION_ID); @@ -1532,7 +1535,7 @@ static void Grp_ListGroupsForEdition (void) Frm_EndForm (); fprintf (Gbl.F.Out,""); - /* Write icon to open/close group */ + /***** Icon to open/close group *****/ fprintf (Gbl.F.Out,""); Frm_StartFormAnchor (Grp->Open ? ActCloGrp : ActOpeGrp, @@ -1553,7 +1556,7 @@ static void Grp_ListGroupsForEdition (void) Frm_EndForm (); fprintf (Gbl.F.Out,""); - /* Write icon to activate file zones for this group */ + /***** Icon to activate file zones for this group *****/ fprintf (Gbl.F.Out,""); Frm_StartFormAnchor (Grp->FileZones ? ActDisFilZonGrp : ActEnaFilZonGrp, @@ -1574,13 +1577,16 @@ static void Grp_ListGroupsForEdition (void) Frm_EndForm (); fprintf (Gbl.F.Out,""); - /* Group type */ + /***** Group type *****/ + /* Start selector */ fprintf (Gbl.F.Out,""); Frm_StartFormAnchor (ActChgGrpTyp,Grp_GROUPS_SECTION_ID); Grp_PutParamGrpCod (Grp->GrpCod); fprintf (Gbl.F.Out,""); Frm_EndForm (); fprintf (Gbl.F.Out,""); - /* Group name */ + /***** Group name *****/ fprintf (Gbl.F.Out,""); Frm_StartFormAnchor (ActRenGrp,Grp_GROUPS_SECTION_ID); Grp_PutParamGrpCod (Grp->GrpCod); @@ -1606,7 +1614,48 @@ static void Grp_ListGroupsForEdition (void) Frm_EndForm (); fprintf (Gbl.F.Out,""); - /* Current number of users in this group */ + /***** Classroom *****/ + /* Start selector */ + fprintf (Gbl.F.Out,""); + Frm_StartFormAnchor (ActChgGrpCla,Grp_GROUPS_SECTION_ID); + Grp_PutParamGrpCod (Grp->GrpCod); + fprintf (Gbl.F.Out,""); + Frm_EndForm (); + fprintf (Gbl.F.Out,""); + + /***** Current number of users in this group *****/ for (Role = Rol_TCH; Role >= Rol_STD; Role--) @@ -1615,7 +1664,7 @@ static void Grp_ListGroupsForEdition (void) "", Grp->NumUsrs[Role]); - /* Maximum number of students of the group (row[3]) */ + /***** Maximum number of students of the group (row[3]) *****/ fprintf (Gbl.F.Out,""); Frm_StartFormAnchor (ActChgMaxStdGrp,Grp_GROUPS_SECTION_ID); Grp_PutParamGrpCod (Grp->GrpCod); @@ -2594,6 +2643,7 @@ static void Grp_PutFormToCreateGroup (void) extern const char *Txt_New_group; extern const char *Txt_Group_closed; extern const char *Txt_File_zones_disabled; + extern const char *Txt_No_assigned_classroom; extern const char *Txt_Another_classroom; extern const char *Txt_Create_group; unsigned NumGrpTyp; @@ -2632,19 +2682,25 @@ static void Grp_PutFormToCreateGroup (void) Txt_File_zones_disabled); /***** Group type *****/ + /* Start selector */ fprintf (Gbl.F.Out,"" "" ""); @@ -2657,17 +2713,25 @@ static void Grp_PutFormToCreateGroup (void) Grp_MAX_CHARS_GROUP_NAME,Gbl.CurrentCrs.Grps.GrpName); /***** Classroom *****/ + /* Start selector */ fprintf (Gbl.F.Out,"" - "" - ""); + ""); /***** Current number of users in this group *****/ for (Role = Rol_TCH; @@ -3030,8 +3096,8 @@ unsigned long Grp_GetGrpsOfType (long GrpTypCod,MYSQL_RES **mysql_res) return DB_QuerySELECT (mysql_res,"can not get groups of a type", "SELECT GrpCod," "GrpName," - "MaxStudents," "ClaCod," + "MaxStudents," "Open," "FileZones" " FROM crs_grp" @@ -3805,6 +3871,9 @@ void Grp_RecFormNewGrp (void) Par_GetParToText ("GrpName",Gbl.CurrentCrs.Grps.GrpName, Grp_MAX_BYTES_GROUP_NAME); + /* Get classroom */ + Gbl.CurrentCrs.Grps.ClaCod = Cla_GetParamClaCod (); + /* Get maximum number of students */ Gbl.CurrentCrs.Grps.MaxStudents = (unsigned) Par_GetParToUnsignedLong ("MaxStudents", @@ -3914,11 +3983,12 @@ static void Grp_CreateGroup (void) /***** Create a new group *****/ DB_QueryINSERT ("can not create group", "INSERT INTO crs_grp" - " (GrpTypCod,GrpName,MaxStudents,Open,FileZones)" + " (GrpTypCod,GrpName,ClaCod,MaxStudents,Open,FileZones)" " VALUES" - " (%ld,'%s',%u,'N','N')", + " (%ld,'%s',%ld,%u,'N','N')", Gbl.CurrentCrs.Grps.GrpTyp.GrpTypCod, Gbl.CurrentCrs.Grps.GrpName, + Gbl.CurrentCrs.Grps.ClaCod, Gbl.CurrentCrs.Grps.MaxStudents); } @@ -4373,6 +4443,46 @@ void Grp_ChangeGroupType (void) AlertType,Gbl.Alert.Txt); } +/*****************************************************************************/ +/*********************** Change the classroom of a group *********************/ +/*****************************************************************************/ + +void Grp_ChangeGroupClassroom (void) + { + extern const char *Txt_The_classroom_assigned_to_the_group_X_has_changed; + long NewClaCod; + struct GroupData GrpDat; + Ale_AlertType_t AlertType; + + /***** Get parameters from form *****/ + /* Get group code */ + if ((Gbl.CurrentCrs.Grps.GrpCod = Grp_GetParamGrpCod ()) == -1L) + Lay_ShowErrorAndExit ("Code of group is missing."); + + /* Get the new classroom */ + NewClaCod = Cla_GetParamClaCod (); + + /* Get from the database the name of the group */ + GrpDat.GrpCod = Gbl.CurrentCrs.Grps.GrpCod; + Grp_GetDataOfGroupByCod (&GrpDat); + + /***** Update the table of groups changing old classroom by new classroom *****/ + DB_QueryUPDATE ("can not update the classroom of a group", + "UPDATE crs_grp SET ClaCod=%ld WHERE GrpCod=%ld", + NewClaCod,Gbl.CurrentCrs.Grps.GrpCod); + + /* Create message to show the change made */ + AlertType = Ale_SUCCESS; + snprintf (Gbl.Alert.Txt,sizeof (Gbl.Alert.Txt), + Txt_The_classroom_assigned_to_the_group_X_has_changed, + GrpDat.GrpName); + + /***** Show the form again *****/ + Gbl.CurrentCrs.Grps.ClaCod = NewClaCod; + Grp_ReqEditGroupsInternal (Ale_INFO,NULL, + AlertType,Gbl.Alert.Txt); + } + /*****************************************************************************/ /************ Change mandatory registration to a group of a type *************/ /*****************************************************************************/ diff --git a/swad_group.h b/swad_group.h index 58291f24d..0e6b7d781 100644 --- a/swad_group.h +++ b/swad_group.h @@ -190,7 +190,10 @@ void Grp_OpenGroup (void); void Grp_CloseGroup (void); void Grp_EnableFileZonesGrp (void); void Grp_DisableFileZonesGrp (void); + void Grp_ChangeGroupType (void); +void Grp_ChangeGroupClassroom (void); + void Grp_ChangeMandatGrpTyp (void); void Grp_ChangeMultiGrpTyp (void); void Grp_ChangeOpenTimeGrpTyp (void); diff --git a/swad_text.c b/swad_text.c index ac86a7aac..ee759bc3d 100644 --- a/swad_text.c +++ b/swad_text.c @@ -24413,6 +24413,27 @@ const char *Txt_No_announcements_of_exams_of_X = // Warning: it is very importan "Não chamadas para exame de %s."; #endif +const char *Txt_No_assigned_classroom = +#if L==1 // ca + "Sense aula assignada"; +#elif L==2 // de + "Kein zugewiesenes Klassenzimmer"; +#elif L==3 // en + "No assigned classroom"; +#elif L==4 // es + "Sin aula asignada"; +#elif L==5 // fr + "Aucune classe assignée"; +#elif L==6 // gn + "Sin aula asignada"; // Okoteve traducción +#elif L==7 // it + "Nessuna aula assegnata"; +#elif L==8 // pl + "Brak przydzielonej sali lekcyjnej"; +#elif L==9 // pt + "Nenhuma sala de aula atribuída"; +#endif + const char *Txt_No_assignments = #if L==1 // ca "No hi ha activitats."; @@ -43818,6 +43839,27 @@ const char *Txt_The_classroom_X_has_been_renamed_as_Y = // Warning: it is very i "A sala de clase %s foi renomeada como %s."; #endif +const char *Txt_The_classroom_assigned_to_the_group_X_has_changed = +#if L==1 // ca + "L'aula assignada al grup %s ha canviat."; +#elif L==2 // de + "Das der Gruppe %s zugeordnete Klassenzimmer hat sich geändert."; +#elif L==3 // en + "The classroom assigned to the group %s has changed."; +#elif L==4 // es + "El aula asignada al grupo %s ha cambiado."; +#elif L==5 // fr + "La salle de classe affectée au groupe %s a changé."; +#elif L==6 // gn + "El aula asignada al grupo %s ha cambiado."; // Okoteve traducción +#elif L==7 // it + "L'aula assegnata al gruppo %s è cambiata."; +#elif L==8 // pl + "Klasa przypisana do grupy %s uległa zmianie."; +#elif L==9 // pt + "A sala de aula atribuída ao grupo %s mudou."; +#endif + const char *Txt_The_comment_no_longer_exists = #if L==1 // ca "El comentari ja no existeix.";