Version 18.27.6

This commit is contained in:
Antonio Cañas Vargas 2019-01-04 22:46:46 +01:00
parent 3cb1af22de
commit 263cba3b88
7 changed files with 333 additions and 172 deletions

View File

@ -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
};
/*****************************************************************************/

View File

@ -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 *********************************/

View File

@ -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:

View File

@ -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;

View File

@ -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,"<tr>"
"<td class=\"BM\">");
Frm_StartFormAnchor (ActReqRemGrp,Grp_GROUPS_SECTION_ID);
@ -1532,7 +1535,7 @@ static void Grp_ListGroupsForEdition (void)
Frm_EndForm ();
fprintf (Gbl.F.Out,"</td>");
/* Write icon to open/close group */
/***** Icon to open/close group *****/
fprintf (Gbl.F.Out,"<td class=\"BM\">");
Frm_StartFormAnchor (Grp->Open ? ActCloGrp :
ActOpeGrp,
@ -1553,7 +1556,7 @@ static void Grp_ListGroupsForEdition (void)
Frm_EndForm ();
fprintf (Gbl.F.Out,"</td>");
/* Write icon to activate file zones for this group */
/***** Icon to activate file zones for this group *****/
fprintf (Gbl.F.Out,"<td class=\"BM\">");
Frm_StartFormAnchor (Grp->FileZones ? ActDisFilZonGrp :
ActEnaFilZonGrp,
@ -1574,13 +1577,16 @@ static void Grp_ListGroupsForEdition (void)
Frm_EndForm ();
fprintf (Gbl.F.Out,"</td>");
/* Group type */
/***** Group type *****/
/* Start selector */
fprintf (Gbl.F.Out,"<td class=\"CENTER_MIDDLE\">");
Frm_StartFormAnchor (ActChgGrpTyp,Grp_GROUPS_SECTION_ID);
Grp_PutParamGrpCod (Grp->GrpCod);
fprintf (Gbl.F.Out,"<select name=\"GrpTypCod\" style=\"width:100px;\""
" onchange=\"document.getElementById('%s').submit();\">",
Gbl.Form.Id);
/* Options for group types */
for (NumTipGrpAux = 0;
NumTipGrpAux < Gbl.CurrentCrs.Grps.GrpTypes.Num;
NumTipGrpAux++)
@ -1591,11 +1597,13 @@ static void Grp_ListGroupsForEdition (void)
fprintf (Gbl.F.Out," selected=\"selected\"");
fprintf (Gbl.F.Out,">%s</option>",GrpTypAux->GrpTypName);
}
/* End selector */
fprintf (Gbl.F.Out,"</select>");
Frm_EndForm ();
fprintf (Gbl.F.Out,"</td>");
/* Group name */
/***** Group name *****/
fprintf (Gbl.F.Out,"<td class=\"CENTER_MIDDLE\">");
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,"</td>");
/* Current number of users in this group */
/***** Classroom *****/
/* Start selector */
fprintf (Gbl.F.Out,"<td class=\"CENTER_MIDDLE\">");
Frm_StartFormAnchor (ActChgGrpCla,Grp_GROUPS_SECTION_ID);
Grp_PutParamGrpCod (Grp->GrpCod);
fprintf (Gbl.F.Out,"<select name=\"ClaCod\" style=\"width:100px;\""
" onchange=\"document.getElementById('%s').submit();\">",
Gbl.Form.Id);
/* Option for no assigned classroom */
fprintf (Gbl.F.Out,"<option value=\"-1\"");
if (Grp->ClaCod < 0)
fprintf (Gbl.F.Out," selected=\"selected\"");
fprintf (Gbl.F.Out,">%s</option>",
Txt_No_assigned_classroom);
/* Option for another classroom */
fprintf (Gbl.F.Out,"<option value=\"0\"");
if (Grp->ClaCod == 0)
fprintf (Gbl.F.Out," selected=\"selected\"");
fprintf (Gbl.F.Out,">%s</option>",
Txt_Another_classroom);
/* Options for classrooms */
for (NumCla = 0;
NumCla < Gbl.Classrooms.Num;
NumCla++)
{
fprintf (Gbl.F.Out,"<option value=\"%ld\"",
Gbl.Classrooms.Lst[NumCla].ClaCod);
if (Gbl.Classrooms.Lst[NumCla].ClaCod == Grp->ClaCod)
fprintf (Gbl.F.Out," selected=\"selected\"");
fprintf (Gbl.F.Out,">%s</option>",
Gbl.Classrooms.Lst[NumCla].ShrtName);
}
/* End selector */
fprintf (Gbl.F.Out,"</select>");
Frm_EndForm ();
fprintf (Gbl.F.Out,"</td>");
/***** Current number of users in this group *****/
for (Role = Rol_TCH;
Role >= Rol_STD;
Role--)
@ -1615,7 +1664,7 @@ static void Grp_ListGroupsForEdition (void)
"</td>",
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,"<td class=\"CENTER_MIDDLE\">");
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,"<td class=\"CENTER_MIDDLE\">"
"<select name=\"GrpTypCod\" style=\"width:100px;\">");
/* Options for group types */
for (NumGrpTyp = 0;
NumGrpTyp < Gbl.CurrentCrs.Grps.GrpTypes.Num;
NumGrpTyp++)
{
fprintf (Gbl.F.Out,"<option value=\"%ld\"",
Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].GrpTypCod);
if (Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].GrpTypCod == Gbl.CurrentCrs.Grps.GrpTyp.GrpTypCod)
if (Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].GrpTypCod ==
Gbl.CurrentCrs.Grps.GrpTyp.GrpTypCod)
fprintf (Gbl.F.Out," selected=\"selected\"");
fprintf (Gbl.F.Out,">%s</option>",
Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].GrpTypName);
}
/* End selector */
fprintf (Gbl.F.Out,"</select>"
"</td>");
@ -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,"<td class=\"CENTER_MIDDLE\">"
"<select name=\"ClaCod\" style=\"width:100px;\">"
"<option value=\"-1\"");
"<select name=\"ClaCod\" style=\"width:100px;\">");
/* Option for no assigned classroom */
fprintf (Gbl.F.Out,"<option value=\"-1\"");
if (Gbl.CurrentCrs.Grps.ClaCod < 0)
fprintf (Gbl.F.Out," selected=\"selected\"");
fprintf (Gbl.F.Out," disabled=\"disabled\"></option>"
"<option value=\"0\"");
fprintf (Gbl.F.Out,">%s</option>",
Txt_No_assigned_classroom);
/* Option for another classroom */
fprintf (Gbl.F.Out,"<option value=\"0\"");
if (Gbl.CurrentCrs.Grps.ClaCod == 0)
fprintf (Gbl.F.Out," selected=\"selected\"");
fprintf (Gbl.F.Out,">%s</option>",
Txt_Another_classroom);
/* Options for classrooms */
for (NumCla = 0;
NumCla < Gbl.Classrooms.Num;
NumCla++)
@ -2675,12 +2739,14 @@ static void Grp_PutFormToCreateGroup (void)
fprintf (Gbl.F.Out,"<option value=\"%ld\"",
Gbl.Classrooms.Lst[NumCla].ClaCod);
if (Gbl.Classrooms.Lst[NumCla].ClaCod == Gbl.CurrentCrs.Grps.ClaCod)
fprintf (Gbl.F.Out," selected=\"selected\"");
fprintf (Gbl.F.Out," selected=\"selected\"");
fprintf (Gbl.F.Out,">%s</option>",
Gbl.Classrooms.Lst[NumCla].ShrtName);
}
/* End selector */
fprintf (Gbl.F.Out,"</select>"
"</td>");
"</td>");
/***** 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 *************/
/*****************************************************************************/

View File

@ -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);

View File

@ -24413,6 +24413,27 @@ const char *Txt_No_announcements_of_exams_of_X = // Warning: it is very importan
"N&atilde;o chamadas para exame de <strong>%s</strong>.";
#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&eacute;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&iacute;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 <strong>%s</strong> foi renomeada como <strong>%s</strong>.";
#endif
const char *Txt_The_classroom_assigned_to_the_group_X_has_changed =
#if L==1 // ca
"L'aula assignada al grup <strong>%s</strong> ha canviat.";
#elif L==2 // de
"Das der Gruppe <strong>%s</strong> zugeordnete Klassenzimmer hat sich ge&auml;ndert.";
#elif L==3 // en
"The classroom assigned to the group <strong>%s</strong> has changed.";
#elif L==4 // es
"El aula asignada al grupo <strong>%s</strong> ha cambiado.";
#elif L==5 // fr
"La salle de classe affect&eacute;e au groupe <strong>%s</strong> a chang&eacute;.";
#elif L==6 // gn
"El aula asignada al grupo <strong>%s</strong> ha cambiado."; // Okoteve traducción
#elif L==7 // it
"L'aula assegnata al gruppo <strong>%s</strong> &egrave; cambiata.";
#elif L==8 // pl
"Klasa przypisana do grupy <strong>%s</strong> uleg&lstrok;a zmianie.";
#elif L==9 // pt
"A sala de aula atribu&iacute;da ao grupo <strong>%s</strong> mudou.";
#endif
const char *Txt_The_comment_no_longer_exists =
#if L==1 // ca
"El comentari ja no existeix.";