Version 16.22

This commit is contained in:
Antonio Cañas Vargas 2016-10-19 01:46:40 +02:00
parent 66a3eb9642
commit 218ff36c1d
10 changed files with 472 additions and 356 deletions

View File

@ -448,6 +448,7 @@ Course:
316. ActCrsSch Search for courses, teachers, documents... 316. ActCrsSch Search for courses, teachers, documents...
317. ActPrnCrsInf Print information on the course 317. ActPrnCrsInf Print information on the course
NEW. ActChgCrsDegCfg Request change of degree in course configuration
318. ActChgInsCrsCodCfg Change institutional code in course configuration 318. ActChgInsCrsCodCfg Change institutional code in course configuration
319. ActChgCrsYeaCfg Change year/semester in course configuration 319. ActChgCrsYeaCfg Change year/semester in course configuration
320. ActEdiCrsInf Edit general information about the course 320. ActEdiCrsInf Edit general information about the course
@ -1800,9 +1801,11 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActDegSch */{1185,-1,TabCrs,ActCrsReqSch ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Sch_GetParamsSearch ,Sch_CrsSearch ,NULL}, /* ActDegSch */{1185,-1,TabCrs,ActCrsReqSch ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Sch_GetParamsSearch ,Sch_CrsSearch ,NULL},
/* ActPrnCrsInf */{1028,-1,TabCrs,ActSeeCrsInf ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_NEW_WINDOW ,NULL ,Crs_PrintConfiguration ,NULL}, /* ActPrnCrsInf */{1028,-1,TabCrs,ActSeeCrsInf ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_NEW_WINDOW ,NULL ,Crs_PrintConfiguration ,NULL},
/* ActChgCrsDegCfg */{1587,-1,TabCrs,ActSeeCrsInf ,0x1E0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,Crs_ChangeCrsDegreeInConfig ,Crs_ContEditAfterChgCrsInConfig,NULL},
/* ActChgInsCrsCodCfg*/{1024,-1,TabCrs,ActSeeCrsInf ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Crs_ChangeInsCrsCodInConfig ,Crs_ContEditAfterChgCrsInConfig,NULL}, /* ActChgInsCrsCodCfg*/{1024,-1,TabCrs,ActSeeCrsInf ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Crs_ChangeInsCrsCodInConfig ,Crs_ContEditAfterChgCrsInConfig,NULL},
/* ActChgCrsYeaCfg */{1573,-1,TabCrs,ActSeeCrsInf ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Crs_ChangeCrsYearInConfig ,Crs_ContEditAfterChgCrsInConfig,NULL}, /* ActChgCrsYeaCfg */{1573,-1,TabCrs,ActSeeCrsInf ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Crs_ChangeCrsYearInConfig ,Crs_ContEditAfterChgCrsInConfig,NULL},
/* ActEdiCrsInf */{ 848,-1,TabCrs,ActSeeCrsInf ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Inf_FormsToSelSendInfo ,NULL}, /* ActEdiCrsInf */{ 848,-1,TabCrs,ActSeeCrsInf ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Inf_FormsToSelSendInfo ,NULL},
/* ActEdiTchGui */{ 785,-1,TabCrs,ActSeeTchGui ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Inf_FormsToSelSendInfo ,NULL}, /* ActEdiTchGui */{ 785,-1,TabCrs,ActSeeTchGui ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Inf_FormsToSelSendInfo ,NULL},
/* ActPrnCrsTT */{ 152,-1,TabCrs,ActSeeCrsTT ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_NEW_WINDOW ,NULL ,TT_ShowClassTimeTable ,NULL}, /* ActPrnCrsTT */{ 152,-1,TabCrs,ActSeeCrsTT ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_NEW_WINDOW ,NULL ,TT_ShowClassTimeTable ,NULL},
@ -4437,6 +4440,7 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
ActChkUsrAcc, // #1584 ActChkUsrAcc, // #1584
ActAutUsrNew, // #1585 ActAutUsrNew, // #1585
ActReqMyUsgRep, // #1586 ActReqMyUsgRep, // #1586
ActChgCrsDegCfg, // #1587
}; };
/*****************************************************************************/ /*****************************************************************************/

View File

@ -55,9 +55,9 @@ typedef enum
typedef int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action typedef int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action
#define Act_NUM_ACTIONS (1+9+51+15+90+70+67+246+186+155+172+36+30+86) #define Act_NUM_ACTIONS (1+9+51+15+90+70+67+247+186+155+172+36+30+86)
#define Act_MAX_ACTION_COD 1586 #define Act_MAX_ACTION_COD 1587
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 20 #define Act_MAX_OPTIONS_IN_MENU_PER_TAB 20
@ -444,253 +444,254 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica
// Secondary actions // Secondary actions
#define ActCrsSch (ActDowShaDeg+ 12) #define ActCrsSch (ActDowShaDeg+ 12)
#define ActPrnCrsInf (ActDowShaDeg+ 13) #define ActPrnCrsInf (ActDowShaDeg+ 13)
#define ActChgInsCrsCodCfg (ActDowShaDeg+ 14) #define ActChgCrsDegCfg (ActDowShaDeg+ 14)
#define ActChgCrsYeaCfg (ActDowShaDeg+ 15) #define ActChgInsCrsCodCfg (ActDowShaDeg+ 15)
#define ActEdiCrsInf (ActDowShaDeg+ 16) #define ActChgCrsYeaCfg (ActDowShaDeg+ 16)
#define ActEdiTchGui (ActDowShaDeg+ 17) #define ActEdiCrsInf (ActDowShaDeg+ 17)
#define ActPrnCrsTT (ActDowShaDeg+ 18) #define ActEdiTchGui (ActDowShaDeg+ 18)
#define ActEdiCrsTT (ActDowShaDeg+ 19) #define ActPrnCrsTT (ActDowShaDeg+ 19)
#define ActChgCrsTT (ActDowShaDeg+ 20) #define ActEdiCrsTT (ActDowShaDeg+ 20)
#define ActChgCrsTT1stDay (ActDowShaDeg+ 21) #define ActChgCrsTT (ActDowShaDeg+ 21)
#define ActSeeSylLec (ActDowShaDeg+ 22) #define ActChgCrsTT1stDay (ActDowShaDeg+ 22)
#define ActSeeSylPra (ActDowShaDeg+ 23) #define ActSeeSylLec (ActDowShaDeg+ 23)
#define ActEdiSylLec (ActDowShaDeg+ 24) #define ActSeeSylPra (ActDowShaDeg+ 24)
#define ActEdiSylPra (ActDowShaDeg+ 25) #define ActEdiSylLec (ActDowShaDeg+ 25)
#define ActDelItmSylLec (ActDowShaDeg+ 26) #define ActEdiSylPra (ActDowShaDeg+ 26)
#define ActDelItmSylPra (ActDowShaDeg+ 27) #define ActDelItmSylLec (ActDowShaDeg+ 27)
#define ActUp_IteSylLec (ActDowShaDeg+ 28) #define ActDelItmSylPra (ActDowShaDeg+ 28)
#define ActUp_IteSylPra (ActDowShaDeg+ 29) #define ActUp_IteSylLec (ActDowShaDeg+ 29)
#define ActDwnIteSylLec (ActDowShaDeg+ 30) #define ActUp_IteSylPra (ActDowShaDeg+ 30)
#define ActDwnIteSylPra (ActDowShaDeg+ 31) #define ActDwnIteSylLec (ActDowShaDeg+ 31)
#define ActRgtIteSylLec (ActDowShaDeg+ 32) #define ActDwnIteSylPra (ActDowShaDeg+ 32)
#define ActRgtIteSylPra (ActDowShaDeg+ 33) #define ActRgtIteSylLec (ActDowShaDeg+ 33)
#define ActLftIteSylLec (ActDowShaDeg+ 34) #define ActRgtIteSylPra (ActDowShaDeg+ 34)
#define ActLftIteSylPra (ActDowShaDeg+ 35) #define ActLftIteSylLec (ActDowShaDeg+ 35)
#define ActInsIteSylLec (ActDowShaDeg+ 36) #define ActLftIteSylPra (ActDowShaDeg+ 36)
#define ActInsIteSylPra (ActDowShaDeg+ 37) #define ActInsIteSylLec (ActDowShaDeg+ 37)
#define ActModIteSylLec (ActDowShaDeg+ 38) #define ActInsIteSylPra (ActDowShaDeg+ 38)
#define ActModIteSylPra (ActDowShaDeg+ 39) #define ActModIteSylLec (ActDowShaDeg+ 39)
#define ActModIteSylPra (ActDowShaDeg+ 40)
#define ActChgToSeeDocCrs (ActDowShaDeg+ 40) #define ActChgToSeeDocCrs (ActDowShaDeg+ 41)
#define ActSeeDocCrs (ActDowShaDeg+ 41) #define ActSeeDocCrs (ActDowShaDeg+ 42)
#define ActExpSeeDocCrs (ActDowShaDeg+ 42) #define ActExpSeeDocCrs (ActDowShaDeg+ 43)
#define ActConSeeDocCrs (ActDowShaDeg+ 43) #define ActConSeeDocCrs (ActDowShaDeg+ 44)
#define ActZIPSeeDocCrs (ActDowShaDeg+ 44) #define ActZIPSeeDocCrs (ActDowShaDeg+ 45)
#define ActReqDatSeeDocCrs (ActDowShaDeg+ 45) #define ActReqDatSeeDocCrs (ActDowShaDeg+ 46)
#define ActDowSeeDocCrs (ActDowShaDeg+ 46) #define ActDowSeeDocCrs (ActDowShaDeg+ 47)
#define ActSeeDocGrp (ActDowShaDeg+ 47) #define ActSeeDocGrp (ActDowShaDeg+ 48)
#define ActExpSeeDocGrp (ActDowShaDeg+ 48) #define ActExpSeeDocGrp (ActDowShaDeg+ 49)
#define ActConSeeDocGrp (ActDowShaDeg+ 49) #define ActConSeeDocGrp (ActDowShaDeg+ 50)
#define ActZIPSeeDocGrp (ActDowShaDeg+ 50) #define ActZIPSeeDocGrp (ActDowShaDeg+ 51)
#define ActReqDatSeeDocGrp (ActDowShaDeg+ 51) #define ActReqDatSeeDocGrp (ActDowShaDeg+ 52)
#define ActDowSeeDocGrp (ActDowShaDeg+ 52) #define ActDowSeeDocGrp (ActDowShaDeg+ 53)
#define ActChgToAdmDocCrs (ActDowShaDeg+ 53) #define ActChgToAdmDocCrs (ActDowShaDeg+ 54)
#define ActAdmDocCrs (ActDowShaDeg+ 54) #define ActAdmDocCrs (ActDowShaDeg+ 55)
#define ActReqRemFilDocCrs (ActDowShaDeg+ 55) #define ActReqRemFilDocCrs (ActDowShaDeg+ 56)
#define ActRemFilDocCrs (ActDowShaDeg+ 56) #define ActRemFilDocCrs (ActDowShaDeg+ 57)
#define ActRemFolDocCrs (ActDowShaDeg+ 57) #define ActRemFolDocCrs (ActDowShaDeg+ 58)
#define ActCopDocCrs (ActDowShaDeg+ 58) #define ActCopDocCrs (ActDowShaDeg+ 59)
#define ActPasDocCrs (ActDowShaDeg+ 59) #define ActPasDocCrs (ActDowShaDeg+ 60)
#define ActRemTreDocCrs (ActDowShaDeg+ 60) #define ActRemTreDocCrs (ActDowShaDeg+ 61)
#define ActFrmCreDocCrs (ActDowShaDeg+ 61) #define ActFrmCreDocCrs (ActDowShaDeg+ 62)
#define ActCreFolDocCrs (ActDowShaDeg+ 62) #define ActCreFolDocCrs (ActDowShaDeg+ 63)
#define ActCreLnkDocCrs (ActDowShaDeg+ 63) #define ActCreLnkDocCrs (ActDowShaDeg+ 64)
#define ActRenFolDocCrs (ActDowShaDeg+ 64) #define ActRenFolDocCrs (ActDowShaDeg+ 65)
#define ActRcvFilDocCrsDZ (ActDowShaDeg+ 65) #define ActRcvFilDocCrsDZ (ActDowShaDeg+ 66)
#define ActRcvFilDocCrsCla (ActDowShaDeg+ 66) #define ActRcvFilDocCrsCla (ActDowShaDeg+ 67)
#define ActExpAdmDocCrs (ActDowShaDeg+ 67) #define ActExpAdmDocCrs (ActDowShaDeg+ 68)
#define ActConAdmDocCrs (ActDowShaDeg+ 68) #define ActConAdmDocCrs (ActDowShaDeg+ 69)
#define ActZIPAdmDocCrs (ActDowShaDeg+ 69) #define ActZIPAdmDocCrs (ActDowShaDeg+ 70)
#define ActShoDocCrs (ActDowShaDeg+ 70) #define ActShoDocCrs (ActDowShaDeg+ 71)
#define ActHidDocCrs (ActDowShaDeg+ 71) #define ActHidDocCrs (ActDowShaDeg+ 72)
#define ActReqDatAdmDocCrs (ActDowShaDeg+ 72) #define ActReqDatAdmDocCrs (ActDowShaDeg+ 73)
#define ActChgDatAdmDocCrs (ActDowShaDeg+ 73) #define ActChgDatAdmDocCrs (ActDowShaDeg+ 74)
#define ActDowAdmDocCrs (ActDowShaDeg+ 74) #define ActDowAdmDocCrs (ActDowShaDeg+ 75)
#define ActAdmDocGrp (ActDowShaDeg+ 75) #define ActAdmDocGrp (ActDowShaDeg+ 76)
#define ActReqRemFilDocGrp (ActDowShaDeg+ 76) #define ActReqRemFilDocGrp (ActDowShaDeg+ 77)
#define ActRemFilDocGrp (ActDowShaDeg+ 77) #define ActRemFilDocGrp (ActDowShaDeg+ 78)
#define ActRemFolDocGrp (ActDowShaDeg+ 78) #define ActRemFolDocGrp (ActDowShaDeg+ 79)
#define ActCopDocGrp (ActDowShaDeg+ 79) #define ActCopDocGrp (ActDowShaDeg+ 80)
#define ActPasDocGrp (ActDowShaDeg+ 80) #define ActPasDocGrp (ActDowShaDeg+ 81)
#define ActRemTreDocGrp (ActDowShaDeg+ 81) #define ActRemTreDocGrp (ActDowShaDeg+ 82)
#define ActFrmCreDocGrp (ActDowShaDeg+ 82) #define ActFrmCreDocGrp (ActDowShaDeg+ 83)
#define ActCreFolDocGrp (ActDowShaDeg+ 83) #define ActCreFolDocGrp (ActDowShaDeg+ 84)
#define ActCreLnkDocGrp (ActDowShaDeg+ 84) #define ActCreLnkDocGrp (ActDowShaDeg+ 85)
#define ActRenFolDocGrp (ActDowShaDeg+ 85) #define ActRenFolDocGrp (ActDowShaDeg+ 86)
#define ActRcvFilDocGrpDZ (ActDowShaDeg+ 86) #define ActRcvFilDocGrpDZ (ActDowShaDeg+ 87)
#define ActRcvFilDocGrpCla (ActDowShaDeg+ 87) #define ActRcvFilDocGrpCla (ActDowShaDeg+ 88)
#define ActExpAdmDocGrp (ActDowShaDeg+ 88) #define ActExpAdmDocGrp (ActDowShaDeg+ 89)
#define ActConAdmDocGrp (ActDowShaDeg+ 89) #define ActConAdmDocGrp (ActDowShaDeg+ 90)
#define ActZIPAdmDocGrp (ActDowShaDeg+ 90) #define ActZIPAdmDocGrp (ActDowShaDeg+ 91)
#define ActShoDocGrp (ActDowShaDeg+ 91) #define ActShoDocGrp (ActDowShaDeg+ 92)
#define ActHidDocGrp (ActDowShaDeg+ 92) #define ActHidDocGrp (ActDowShaDeg+ 93)
#define ActReqDatAdmDocGrp (ActDowShaDeg+ 93) #define ActReqDatAdmDocGrp (ActDowShaDeg+ 94)
#define ActChgDatAdmDocGrp (ActDowShaDeg+ 94) #define ActChgDatAdmDocGrp (ActDowShaDeg+ 95)
#define ActDowAdmDocGrp (ActDowShaDeg+ 95) #define ActDowAdmDocGrp (ActDowShaDeg+ 96)
#define ActChgToAdmTch (ActDowShaDeg+ 96) #define ActChgToAdmTch (ActDowShaDeg+ 97)
#define ActAdmTchCrs (ActDowShaDeg+ 97) #define ActAdmTchCrs (ActDowShaDeg+ 98)
#define ActReqRemFilTchCrs (ActDowShaDeg+ 98) #define ActReqRemFilTchCrs (ActDowShaDeg+ 99)
#define ActRemFilTchCrs (ActDowShaDeg+ 99) #define ActRemFilTchCrs (ActDowShaDeg+100)
#define ActRemFolTchCrs (ActDowShaDeg+100) #define ActRemFolTchCrs (ActDowShaDeg+101)
#define ActCopTchCrs (ActDowShaDeg+101) #define ActCopTchCrs (ActDowShaDeg+102)
#define ActPasTchCrs (ActDowShaDeg+102) #define ActPasTchCrs (ActDowShaDeg+103)
#define ActRemTreTchCrs (ActDowShaDeg+103) #define ActRemTreTchCrs (ActDowShaDeg+104)
#define ActFrmCreTchCrs (ActDowShaDeg+104) #define ActFrmCreTchCrs (ActDowShaDeg+105)
#define ActCreFolTchCrs (ActDowShaDeg+105) #define ActCreFolTchCrs (ActDowShaDeg+106)
#define ActCreLnkTchCrs (ActDowShaDeg+106) #define ActCreLnkTchCrs (ActDowShaDeg+107)
#define ActRenFolTchCrs (ActDowShaDeg+107) #define ActRenFolTchCrs (ActDowShaDeg+108)
#define ActRcvFilTchCrsDZ (ActDowShaDeg+108) #define ActRcvFilTchCrsDZ (ActDowShaDeg+109)
#define ActRcvFilTchCrsCla (ActDowShaDeg+109) #define ActRcvFilTchCrsCla (ActDowShaDeg+110)
#define ActExpTchCrs (ActDowShaDeg+110) #define ActExpTchCrs (ActDowShaDeg+111)
#define ActConTchCrs (ActDowShaDeg+111) #define ActConTchCrs (ActDowShaDeg+112)
#define ActZIPTchCrs (ActDowShaDeg+112) #define ActZIPTchCrs (ActDowShaDeg+113)
#define ActReqDatTchCrs (ActDowShaDeg+113) #define ActReqDatTchCrs (ActDowShaDeg+114)
#define ActChgDatTchCrs (ActDowShaDeg+114) #define ActChgDatTchCrs (ActDowShaDeg+115)
#define ActDowTchCrs (ActDowShaDeg+115) #define ActDowTchCrs (ActDowShaDeg+116)
#define ActAdmTchGrp (ActDowShaDeg+116) #define ActAdmTchGrp (ActDowShaDeg+117)
#define ActReqRemFilTchGrp (ActDowShaDeg+117) #define ActReqRemFilTchGrp (ActDowShaDeg+118)
#define ActRemFilTchGrp (ActDowShaDeg+118) #define ActRemFilTchGrp (ActDowShaDeg+119)
#define ActRemFolTchGrp (ActDowShaDeg+119) #define ActRemFolTchGrp (ActDowShaDeg+120)
#define ActCopTchGrp (ActDowShaDeg+120) #define ActCopTchGrp (ActDowShaDeg+121)
#define ActPasTchGrp (ActDowShaDeg+121) #define ActPasTchGrp (ActDowShaDeg+122)
#define ActRemTreTchGrp (ActDowShaDeg+122) #define ActRemTreTchGrp (ActDowShaDeg+123)
#define ActFrmCreTchGrp (ActDowShaDeg+123) #define ActFrmCreTchGrp (ActDowShaDeg+124)
#define ActCreFolTchGrp (ActDowShaDeg+124) #define ActCreFolTchGrp (ActDowShaDeg+125)
#define ActCreLnkTchGrp (ActDowShaDeg+125) #define ActCreLnkTchGrp (ActDowShaDeg+126)
#define ActRenFolTchGrp (ActDowShaDeg+126) #define ActRenFolTchGrp (ActDowShaDeg+127)
#define ActRcvFilTchGrpDZ (ActDowShaDeg+127) #define ActRcvFilTchGrpDZ (ActDowShaDeg+128)
#define ActRcvFilTchGrpCla (ActDowShaDeg+128) #define ActRcvFilTchGrpCla (ActDowShaDeg+129)
#define ActExpTchGrp (ActDowShaDeg+129) #define ActExpTchGrp (ActDowShaDeg+130)
#define ActConTchGrp (ActDowShaDeg+130) #define ActConTchGrp (ActDowShaDeg+131)
#define ActZIPTchGrp (ActDowShaDeg+131) #define ActZIPTchGrp (ActDowShaDeg+132)
#define ActReqDatTchGrp (ActDowShaDeg+132) #define ActReqDatTchGrp (ActDowShaDeg+133)
#define ActChgDatTchGrp (ActDowShaDeg+133) #define ActChgDatTchGrp (ActDowShaDeg+134)
#define ActDowTchGrp (ActDowShaDeg+134) #define ActDowTchGrp (ActDowShaDeg+135)
#define ActChgToAdmSha (ActDowShaDeg+135) #define ActChgToAdmSha (ActDowShaDeg+136)
#define ActAdmShaCrs (ActDowShaDeg+136) #define ActAdmShaCrs (ActDowShaDeg+137)
#define ActReqRemFilShaCrs (ActDowShaDeg+137) #define ActReqRemFilShaCrs (ActDowShaDeg+138)
#define ActRemFilShaCrs (ActDowShaDeg+138) #define ActRemFilShaCrs (ActDowShaDeg+139)
#define ActRemFolShaCrs (ActDowShaDeg+139) #define ActRemFolShaCrs (ActDowShaDeg+140)
#define ActCopShaCrs (ActDowShaDeg+140) #define ActCopShaCrs (ActDowShaDeg+141)
#define ActPasShaCrs (ActDowShaDeg+141) #define ActPasShaCrs (ActDowShaDeg+142)
#define ActRemTreShaCrs (ActDowShaDeg+142) #define ActRemTreShaCrs (ActDowShaDeg+143)
#define ActFrmCreShaCrs (ActDowShaDeg+143) #define ActFrmCreShaCrs (ActDowShaDeg+144)
#define ActCreFolShaCrs (ActDowShaDeg+144) #define ActCreFolShaCrs (ActDowShaDeg+145)
#define ActCreLnkShaCrs (ActDowShaDeg+145) #define ActCreLnkShaCrs (ActDowShaDeg+146)
#define ActRenFolShaCrs (ActDowShaDeg+146) #define ActRenFolShaCrs (ActDowShaDeg+147)
#define ActRcvFilShaCrsDZ (ActDowShaDeg+147) #define ActRcvFilShaCrsDZ (ActDowShaDeg+148)
#define ActRcvFilShaCrsCla (ActDowShaDeg+148) #define ActRcvFilShaCrsCla (ActDowShaDeg+149)
#define ActExpShaCrs (ActDowShaDeg+149) #define ActExpShaCrs (ActDowShaDeg+150)
#define ActConShaCrs (ActDowShaDeg+150) #define ActConShaCrs (ActDowShaDeg+151)
#define ActZIPShaCrs (ActDowShaDeg+151) #define ActZIPShaCrs (ActDowShaDeg+152)
#define ActReqDatShaCrs (ActDowShaDeg+152) #define ActReqDatShaCrs (ActDowShaDeg+153)
#define ActChgDatShaCrs (ActDowShaDeg+153) #define ActChgDatShaCrs (ActDowShaDeg+154)
#define ActDowShaCrs (ActDowShaDeg+154) #define ActDowShaCrs (ActDowShaDeg+155)
#define ActAdmShaGrp (ActDowShaDeg+155) #define ActAdmShaGrp (ActDowShaDeg+156)
#define ActReqRemFilShaGrp (ActDowShaDeg+156) #define ActReqRemFilShaGrp (ActDowShaDeg+157)
#define ActRemFilShaGrp (ActDowShaDeg+157) #define ActRemFilShaGrp (ActDowShaDeg+158)
#define ActRemFolShaGrp (ActDowShaDeg+158) #define ActRemFolShaGrp (ActDowShaDeg+159)
#define ActCopShaGrp (ActDowShaDeg+159) #define ActCopShaGrp (ActDowShaDeg+160)
#define ActPasShaGrp (ActDowShaDeg+160) #define ActPasShaGrp (ActDowShaDeg+161)
#define ActRemTreShaGrp (ActDowShaDeg+161) #define ActRemTreShaGrp (ActDowShaDeg+162)
#define ActFrmCreShaGrp (ActDowShaDeg+162) #define ActFrmCreShaGrp (ActDowShaDeg+163)
#define ActCreFolShaGrp (ActDowShaDeg+163) #define ActCreFolShaGrp (ActDowShaDeg+164)
#define ActCreLnkShaGrp (ActDowShaDeg+164) #define ActCreLnkShaGrp (ActDowShaDeg+165)
#define ActRenFolShaGrp (ActDowShaDeg+165) #define ActRenFolShaGrp (ActDowShaDeg+166)
#define ActRcvFilShaGrpDZ (ActDowShaDeg+166) #define ActRcvFilShaGrpDZ (ActDowShaDeg+167)
#define ActRcvFilShaGrpCla (ActDowShaDeg+167) #define ActRcvFilShaGrpCla (ActDowShaDeg+168)
#define ActExpShaGrp (ActDowShaDeg+168) #define ActExpShaGrp (ActDowShaDeg+169)
#define ActConShaGrp (ActDowShaDeg+169) #define ActConShaGrp (ActDowShaDeg+170)
#define ActZIPShaGrp (ActDowShaDeg+170) #define ActZIPShaGrp (ActDowShaDeg+171)
#define ActReqDatShaGrp (ActDowShaDeg+171) #define ActReqDatShaGrp (ActDowShaDeg+172)
#define ActChgDatShaGrp (ActDowShaDeg+172) #define ActChgDatShaGrp (ActDowShaDeg+173)
#define ActDowShaGrp (ActDowShaDeg+173) #define ActDowShaGrp (ActDowShaDeg+174)
#define ActEdiBib (ActDowShaDeg+174) #define ActEdiBib (ActDowShaDeg+175)
#define ActEdiFAQ (ActDowShaDeg+175) #define ActEdiFAQ (ActDowShaDeg+176)
#define ActEdiCrsLnk (ActDowShaDeg+176) #define ActEdiCrsLnk (ActDowShaDeg+177)
#define ActChgFrcReaCrsInf (ActDowShaDeg+177) #define ActChgFrcReaCrsInf (ActDowShaDeg+178)
#define ActChgFrcReaTchGui (ActDowShaDeg+178) #define ActChgFrcReaTchGui (ActDowShaDeg+179)
#define ActChgFrcReaSylLec (ActDowShaDeg+179) #define ActChgFrcReaSylLec (ActDowShaDeg+180)
#define ActChgFrcReaSylPra (ActDowShaDeg+180) #define ActChgFrcReaSylPra (ActDowShaDeg+181)
#define ActChgFrcReaBib (ActDowShaDeg+181) #define ActChgFrcReaBib (ActDowShaDeg+182)
#define ActChgFrcReaFAQ (ActDowShaDeg+182) #define ActChgFrcReaFAQ (ActDowShaDeg+183)
#define ActChgFrcReaCrsLnk (ActDowShaDeg+183) #define ActChgFrcReaCrsLnk (ActDowShaDeg+184)
#define ActChgHavReaCrsInf (ActDowShaDeg+184) #define ActChgHavReaCrsInf (ActDowShaDeg+185)
#define ActChgHavReaTchGui (ActDowShaDeg+185) #define ActChgHavReaTchGui (ActDowShaDeg+186)
#define ActChgHavReaSylLec (ActDowShaDeg+186) #define ActChgHavReaSylLec (ActDowShaDeg+187)
#define ActChgHavReaSylPra (ActDowShaDeg+187) #define ActChgHavReaSylPra (ActDowShaDeg+188)
#define ActChgHavReaBib (ActDowShaDeg+188) #define ActChgHavReaBib (ActDowShaDeg+189)
#define ActChgHavReaFAQ (ActDowShaDeg+189) #define ActChgHavReaFAQ (ActDowShaDeg+190)
#define ActChgHavReaCrsLnk (ActDowShaDeg+190) #define ActChgHavReaCrsLnk (ActDowShaDeg+191)
#define ActSelInfSrcCrsInf (ActDowShaDeg+191) #define ActSelInfSrcCrsInf (ActDowShaDeg+192)
#define ActSelInfSrcTchGui (ActDowShaDeg+192) #define ActSelInfSrcTchGui (ActDowShaDeg+193)
#define ActSelInfSrcSylLec (ActDowShaDeg+193) #define ActSelInfSrcSylLec (ActDowShaDeg+194)
#define ActSelInfSrcSylPra (ActDowShaDeg+194) #define ActSelInfSrcSylPra (ActDowShaDeg+195)
#define ActSelInfSrcBib (ActDowShaDeg+195) #define ActSelInfSrcBib (ActDowShaDeg+196)
#define ActSelInfSrcFAQ (ActDowShaDeg+196) #define ActSelInfSrcFAQ (ActDowShaDeg+197)
#define ActSelInfSrcCrsLnk (ActDowShaDeg+197) #define ActSelInfSrcCrsLnk (ActDowShaDeg+198)
#define ActRcvURLCrsInf (ActDowShaDeg+198) #define ActRcvURLCrsInf (ActDowShaDeg+199)
#define ActRcvURLTchGui (ActDowShaDeg+199) #define ActRcvURLTchGui (ActDowShaDeg+200)
#define ActRcvURLSylLec (ActDowShaDeg+200) #define ActRcvURLSylLec (ActDowShaDeg+201)
#define ActRcvURLSylPra (ActDowShaDeg+201) #define ActRcvURLSylPra (ActDowShaDeg+202)
#define ActRcvURLBib (ActDowShaDeg+202) #define ActRcvURLBib (ActDowShaDeg+203)
#define ActRcvURLFAQ (ActDowShaDeg+203) #define ActRcvURLFAQ (ActDowShaDeg+204)
#define ActRcvURLCrsLnk (ActDowShaDeg+204) #define ActRcvURLCrsLnk (ActDowShaDeg+205)
#define ActRcvPagCrsInf (ActDowShaDeg+205) #define ActRcvPagCrsInf (ActDowShaDeg+206)
#define ActRcvPagTchGui (ActDowShaDeg+206) #define ActRcvPagTchGui (ActDowShaDeg+207)
#define ActRcvPagSylLec (ActDowShaDeg+207) #define ActRcvPagSylLec (ActDowShaDeg+208)
#define ActRcvPagSylPra (ActDowShaDeg+208) #define ActRcvPagSylPra (ActDowShaDeg+209)
#define ActRcvPagBib (ActDowShaDeg+209) #define ActRcvPagBib (ActDowShaDeg+210)
#define ActRcvPagFAQ (ActDowShaDeg+210) #define ActRcvPagFAQ (ActDowShaDeg+211)
#define ActRcvPagCrsLnk (ActDowShaDeg+211) #define ActRcvPagCrsLnk (ActDowShaDeg+212)
#define ActEditorCrsInf (ActDowShaDeg+212) #define ActEditorCrsInf (ActDowShaDeg+213)
#define ActEditorTchGui (ActDowShaDeg+213) #define ActEditorTchGui (ActDowShaDeg+214)
#define ActEditorSylLec (ActDowShaDeg+214) #define ActEditorSylLec (ActDowShaDeg+215)
#define ActEditorSylPra (ActDowShaDeg+215) #define ActEditorSylPra (ActDowShaDeg+216)
#define ActEditorBib (ActDowShaDeg+216) #define ActEditorBib (ActDowShaDeg+217)
#define ActEditorFAQ (ActDowShaDeg+217) #define ActEditorFAQ (ActDowShaDeg+218)
#define ActEditorCrsLnk (ActDowShaDeg+218) #define ActEditorCrsLnk (ActDowShaDeg+219)
#define ActPlaTxtEdiCrsInf (ActDowShaDeg+219) #define ActPlaTxtEdiCrsInf (ActDowShaDeg+220)
#define ActPlaTxtEdiTchGui (ActDowShaDeg+220) #define ActPlaTxtEdiTchGui (ActDowShaDeg+221)
#define ActPlaTxtEdiSylLec (ActDowShaDeg+221) #define ActPlaTxtEdiSylLec (ActDowShaDeg+222)
#define ActPlaTxtEdiSylPra (ActDowShaDeg+222) #define ActPlaTxtEdiSylPra (ActDowShaDeg+223)
#define ActPlaTxtEdiBib (ActDowShaDeg+223) #define ActPlaTxtEdiBib (ActDowShaDeg+224)
#define ActPlaTxtEdiFAQ (ActDowShaDeg+224) #define ActPlaTxtEdiFAQ (ActDowShaDeg+225)
#define ActPlaTxtEdiCrsLnk (ActDowShaDeg+225) #define ActPlaTxtEdiCrsLnk (ActDowShaDeg+226)
#define ActRchTxtEdiCrsInf (ActDowShaDeg+226) #define ActRchTxtEdiCrsInf (ActDowShaDeg+227)
#define ActRchTxtEdiTchGui (ActDowShaDeg+227) #define ActRchTxtEdiTchGui (ActDowShaDeg+228)
#define ActRchTxtEdiSylLec (ActDowShaDeg+228) #define ActRchTxtEdiSylLec (ActDowShaDeg+229)
#define ActRchTxtEdiSylPra (ActDowShaDeg+229) #define ActRchTxtEdiSylPra (ActDowShaDeg+230)
#define ActRchTxtEdiBib (ActDowShaDeg+230) #define ActRchTxtEdiBib (ActDowShaDeg+231)
#define ActRchTxtEdiFAQ (ActDowShaDeg+231) #define ActRchTxtEdiFAQ (ActDowShaDeg+232)
#define ActRchTxtEdiCrsLnk (ActDowShaDeg+232) #define ActRchTxtEdiCrsLnk (ActDowShaDeg+233)
#define ActRcvPlaTxtCrsInf (ActDowShaDeg+233) #define ActRcvPlaTxtCrsInf (ActDowShaDeg+234)
#define ActRcvPlaTxtTchGui (ActDowShaDeg+234) #define ActRcvPlaTxtTchGui (ActDowShaDeg+235)
#define ActRcvPlaTxtSylLec (ActDowShaDeg+235) #define ActRcvPlaTxtSylLec (ActDowShaDeg+236)
#define ActRcvPlaTxtSylPra (ActDowShaDeg+236) #define ActRcvPlaTxtSylPra (ActDowShaDeg+237)
#define ActRcvPlaTxtBib (ActDowShaDeg+237) #define ActRcvPlaTxtBib (ActDowShaDeg+238)
#define ActRcvPlaTxtFAQ (ActDowShaDeg+238) #define ActRcvPlaTxtFAQ (ActDowShaDeg+239)
#define ActRcvPlaTxtCrsLnk (ActDowShaDeg+239) #define ActRcvPlaTxtCrsLnk (ActDowShaDeg+240)
#define ActRcvRchTxtCrsInf (ActDowShaDeg+240) #define ActRcvRchTxtCrsInf (ActDowShaDeg+241)
#define ActRcvRchTxtTchGui (ActDowShaDeg+241) #define ActRcvRchTxtTchGui (ActDowShaDeg+242)
#define ActRcvRchTxtSylLec (ActDowShaDeg+242) #define ActRcvRchTxtSylLec (ActDowShaDeg+243)
#define ActRcvRchTxtSylPra (ActDowShaDeg+243) #define ActRcvRchTxtSylPra (ActDowShaDeg+244)
#define ActRcvRchTxtBib (ActDowShaDeg+244) #define ActRcvRchTxtBib (ActDowShaDeg+245)
#define ActRcvRchTxtFAQ (ActDowShaDeg+245) #define ActRcvRchTxtFAQ (ActDowShaDeg+246)
#define ActRcvRchTxtCrsLnk (ActDowShaDeg+246) #define ActRcvRchTxtCrsLnk (ActDowShaDeg+247)
/*****************************************************************************/ /*****************************************************************************/
/***************************** Assessment tab ********************************/ /***************************** Assessment tab ********************************/

View File

@ -148,13 +148,15 @@
/****************************** Public constants *****************************/ /****************************** Public constants *****************************/
/*****************************************************************************/ /*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 16.21.3 (2016-10-12)" #define Log_PLATFORM_VERSION "SWAD 16.22 (2016-10-19)"
#define CSS_FILE "swad15.229.css" #define CSS_FILE "swad15.229.css"
#define JS_FILE "swad15.238.1.js" #define JS_FILE "swad15.238.1.js"
// Number of lines (includes comments but not blank lines) has been got with the following command: // 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 // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
/* /*
Version 16.22: Oct 19, 2016 New form in course configuration to change course degree.
Code refactorization related with courses and degrees. (205367 lines)
Version 16.21.3: Oct 12, 2016 Changes in layout of file browser. (205266 lines) Version 16.21.3: Oct 12, 2016 Changes in layout of file browser. (205266 lines)
Version 16.21.2: Oct 12, 2016 Unused code removed from actions. (205263 lines) Version 16.21.2: Oct 12, 2016 Unused code removed from actions. (205263 lines)
Version 16.21.1: Oct 12, 2016 Code refactoring in actions. (205280 lines) Version 16.21.1: Oct 12, 2016 Code refactoring in actions. (205280 lines)

View File

@ -146,8 +146,8 @@ void Crs_PrintConfiguration (void)
static void Crs_Configuration (bool PrintView) static void Crs_Configuration (bool PrintView)
{ {
// extern struct Act_Actions Act_Actions[Act_NUM_ACTIONS];
extern const char *The_ClassForm[The_NUM_THEMES]; extern const char *The_ClassForm[The_NUM_THEMES];
extern const char *Txt_Degree;
extern const char *Txt_Course; extern const char *Txt_Course;
extern const char *Txt_Short_name; extern const char *Txt_Short_name;
extern const char *Txt_Year_OF_A_DEGREE; extern const char *Txt_Year_OF_A_DEGREE;
@ -161,6 +161,7 @@ static void Crs_Configuration (bool PrintView)
extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS]; extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
extern const char *Txt_Indicators; extern const char *Txt_Indicators;
extern const char *Txt_of_PART_OF_A_TOTAL; extern const char *Txt_of_PART_OF_A_TOTAL;
unsigned NumDeg;
unsigned Year; unsigned Year;
int NumIndicatorsFromDB; int NumIndicatorsFromDB;
struct Ind_IndicatorsCrs Indicators; struct Ind_IndicatorsCrs Indicators;
@ -202,6 +203,47 @@ static void Crs_Configuration (bool PrintView)
/***** Start table *****/ /***** Start table *****/
fprintf (Gbl.F.Out,"<table class=\"FRAME_TABLE CELLS_PAD_2\">"); fprintf (Gbl.F.Out,"<table class=\"FRAME_TABLE CELLS_PAD_2\">");
/***** Course degree *****/
fprintf (Gbl.F.Out,"<tr>"
"<td class=\"%s RIGHT_MIDDLE\">"
"%s:"
"</td>"
"<td class=\"DAT LEFT_MIDDLE\">",
The_ClassForm[Gbl.Prefs.Theme],
Txt_Degree);
/* Get list of degrees administrated by me */
Deg_GetListDegsAdminByMe ();
/* Put form to select degree */
if (Gbl.Usrs.Me.MyAdminDegs.Num)
{
Act_FormStart (ActChgCrsDegCfg);
fprintf (Gbl.F.Out,"<select name=\"OthDegCod\""
" class=\"INPUT_DEGREE\""
" onchange=\"document.getElementById('%s').submit();\">",
Gbl.Form.Id);
for (NumDeg = 0;
NumDeg < Gbl.Usrs.Me.MyAdminDegs.Num;
NumDeg++)
fprintf (Gbl.F.Out,"<option value=\"%ld\"%s>%s</option>",
Gbl.Usrs.Me.MyAdminDegs.Lst[NumDeg].DegCod,
Gbl.Usrs.Me.MyAdminDegs.Lst[NumDeg].DegCod == Gbl.CurrentDeg.Deg.DegCod ? " selected=\"selected\"" :
"",
Gbl.Usrs.Me.MyAdminDegs.Lst[NumDeg].ShortName);
fprintf (Gbl.F.Out,"</select>");
Act_FormEnd ();
}
else
fprintf (Gbl.F.Out,"%s",Gbl.CurrentDeg.Deg.FullName);
/* Free list of degrees administrated by me */
Deg_FreeListMyAdminDegs ();
fprintf (Gbl.F.Out,"</td>"
"</tr>");
/***** Course full name *****/ /***** Course full name *****/
fprintf (Gbl.F.Out,"<tr>" fprintf (Gbl.F.Out,"<tr>"
"<td class=\"%s RIGHT_MIDDLE\">" "<td class=\"%s RIGHT_MIDDLE\">"
@ -2381,6 +2423,100 @@ void Crs_ChangeInsCrsCod (void)
} }
} }
/*****************************************************************************/
/***************** Change the degree of the current course *******************/
/*****************************************************************************/
void Crs_ChangeCrsDegreeInConfig (void)
{
extern const char *Txt_In_the_year_X_of_the_degree_Y_already_existed_a_course_with_the_name_Z;
extern const char *Txt_YEAR_OF_DEGREE[1+Deg_MAX_YEARS_PER_DEGREE];
extern const char *Txt_The_course_X_has_been_moved_to_the_degree_Y;
extern const char *Txt_You_dont_have_permission_to_move_courses_to_the_degree_X;
bool ICanChangeCrsToNewDeg;
char Query[512];
struct Degree NewDeg;
struct Centre NewCtr;
/***** Get new degree from form *****/
/* Get new degree code */
if ((NewDeg.DegCod = Deg_GetParamOtherDegCod ()) == -1L)
Lay_ShowErrorAndExit ("Code of degree is missing.");
/* Get data of new degree */
Deg_GetDataOfDegreeByCod (&NewDeg);
/***** Check if I have permission to change course to this degree *****/
switch (Gbl.Usrs.Me.LoggedRole)
{
case Rol_DEG_ADM:
ICanChangeCrsToNewDeg = Usr_CheckIfUsrIsAdm (Gbl.Usrs.Me.UsrDat.UsrCod,
Sco_SCOPE_DEG,
NewDeg.DegCod);
break;
case Rol_CTR_ADM:
ICanChangeCrsToNewDeg = Usr_CheckIfUsrIsAdm (Gbl.Usrs.Me.UsrDat.UsrCod,
Sco_SCOPE_CTR,
NewDeg.CtrCod);
break;
case Rol_INS_ADM:
/* Get data of centre of new degree */
NewCtr.CtrCod = NewDeg.CtrCod;
Ctr_GetDataOfCentreByCod (&NewCtr);
ICanChangeCrsToNewDeg = Usr_CheckIfUsrIsAdm (Gbl.Usrs.Me.UsrDat.UsrCod,
Sco_SCOPE_INS,
NewCtr.InsCod);
break;
case Rol_SYS_ADM:
ICanChangeCrsToNewDeg = true;
break;
default:
ICanChangeCrsToNewDeg = false;
break;
}
/***** If I have permission to change course to this new degree... *****/
if (ICanChangeCrsToNewDeg)
{
/***** If name of course was in database in the new degree... *****/
if (Crs_CheckIfCourseNameExistsInCourses (NewDeg.DegCod,Gbl.CurrentCrs.Crs.Year,
"ShortName",Gbl.CurrentCrs.Crs.ShortName,-1L))
{
sprintf (Gbl.Message,Txt_In_the_year_X_of_the_degree_Y_already_existed_a_course_with_the_name_Z,
Txt_YEAR_OF_DEGREE[Gbl.CurrentCrs.Crs.Year],NewDeg.FullName,Gbl.CurrentCrs.Crs.ShortName);
Gbl.Error = true;
}
else if (Crs_CheckIfCourseNameExistsInCourses (NewDeg.DegCod,Gbl.CurrentCrs.Crs.Year,
"FullName",Gbl.CurrentCrs.Crs.FullName,-1L))
{
sprintf (Gbl.Message,Txt_In_the_year_X_of_the_degree_Y_already_existed_a_course_with_the_name_Z,
Txt_YEAR_OF_DEGREE[Gbl.CurrentCrs.Crs.Year],NewDeg.FullName,Gbl.CurrentCrs.Crs.FullName);
Gbl.Error = true;
}
else // Update degree in database
{
/***** Update degree in table of courses *****/
sprintf (Query,"UPDATE courses SET DegCod='%ld' WHERE CrsCod='%ld'",
NewDeg.DegCod,Gbl.CurrentCrs.Crs.CrsCod);
DB_QueryUPDATE (Query,"can not move course to another degree");
Gbl.CurrentCrs.Crs.DegCod = NewDeg.DegCod;
/***** Initialize again current course, degree, centre... *****/
Deg_InitCurrentCourse ();
/***** Create message to show the change made *****/
sprintf (Gbl.Message,Txt_The_course_X_has_been_moved_to_the_degree_Y,
Gbl.CurrentCrs.Crs.FullName,NewDeg.FullName);
}
}
else // I have no permission to change course to this new degree
{
sprintf (Gbl.Message,Txt_You_dont_have_permission_to_move_courses_to_the_degree_X,
NewDeg.FullName);
Gbl.Error = true;
}
}
/*****************************************************************************/ /*****************************************************************************/
/****** Change the degree of a course (move course to another degree) ********/ /****** Change the degree of a course (move course to another degree) ********/
/*****************************************************************************/ /*****************************************************************************/
@ -2390,12 +2526,12 @@ void Crs_ChangeCrsDegree (void)
extern const char *Txt_In_the_year_X_of_the_degree_Y_already_existed_a_course_with_the_name_Z; extern const char *Txt_In_the_year_X_of_the_degree_Y_already_existed_a_course_with_the_name_Z;
extern const char *Txt_YEAR_OF_DEGREE[1+Deg_MAX_YEARS_PER_DEGREE]; extern const char *Txt_YEAR_OF_DEGREE[1+Deg_MAX_YEARS_PER_DEGREE];
extern const char *Txt_The_course_X_has_been_moved_to_the_degree_Y; extern const char *Txt_The_course_X_has_been_moved_to_the_degree_Y;
extern const char *Txt_The_year_X_is_not_allowed;
extern const char *Txt_You_dont_have_permission_to_move_courses_to_the_degree_X; extern const char *Txt_You_dont_have_permission_to_move_courses_to_the_degree_X;
struct Course *Crs; struct Course *Crs;
bool ICanChangeCrsToNewDeg; bool ICanChangeCrsToNewDeg;
char Query[512]; char Query[512];
struct Degree NewDeg; struct Degree NewDeg;
struct Centre NewCtr;
Crs = &Gbl.Degs.EditingCrs; Crs = &Gbl.Degs.EditingCrs;
@ -2408,59 +2544,69 @@ void Crs_ChangeCrsDegree (void)
if ((NewDeg.DegCod = Deg_GetParamOtherDegCod ()) == -1L) if ((NewDeg.DegCod = Deg_GetParamOtherDegCod ()) == -1L)
Lay_ShowErrorAndExit ("Code of degree is missing."); Lay_ShowErrorAndExit ("Code of degree is missing.");
/* Check if I have permission to change course to this degree */
if (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM)
ICanChangeCrsToNewDeg = true;
else if (Gbl.Usrs.Me.LoggedRole == Rol_DEG_ADM)
ICanChangeCrsToNewDeg = Usr_CheckIfUsrIsAdm (Gbl.Usrs.Me.UsrDat.UsrCod,
Sco_SCOPE_DEG,
NewDeg.DegCod);
else
ICanChangeCrsToNewDeg = false;
/***** Get data of course and new degree *****/ /***** Get data of course and new degree *****/
Crs_GetDataOfCourseByCod (Crs); Crs_GetDataOfCourseByCod (Crs);
Deg_GetDataOfDegreeByCod (&NewDeg); Deg_GetDataOfDegreeByCod (&NewDeg);
switch (Gbl.Usrs.Me.LoggedRole)
{
case Rol_DEG_ADM:
ICanChangeCrsToNewDeg = Usr_CheckIfUsrIsAdm (Gbl.Usrs.Me.UsrDat.UsrCod,
Sco_SCOPE_DEG,
NewDeg.DegCod);
break;
case Rol_CTR_ADM:
ICanChangeCrsToNewDeg = Usr_CheckIfUsrIsAdm (Gbl.Usrs.Me.UsrDat.UsrCod,
Sco_SCOPE_CTR,
NewDeg.CtrCod);
break;
case Rol_INS_ADM:
/* Get data of centre of new degree */
NewCtr.CtrCod = NewDeg.CtrCod;
Ctr_GetDataOfCentreByCod (&NewCtr);
ICanChangeCrsToNewDeg = Usr_CheckIfUsrIsAdm (Gbl.Usrs.Me.UsrDat.UsrCod,
Sco_SCOPE_INS,
NewCtr.InsCod);
break;
case Rol_SYS_ADM:
ICanChangeCrsToNewDeg = true;
break;
default:
ICanChangeCrsToNewDeg = false;
break;
}
/***** If I have permission to change course to this new degree... *****/ /***** If I have permission to change course to this new degree... *****/
if (ICanChangeCrsToNewDeg) if (ICanChangeCrsToNewDeg)
{ {
/***** If new degree has current course year... *****/ /***** If name of course was in database in the new degree... *****/
if (Crs->Year <= Deg_MAX_YEARS_PER_DEGREE) if (Crs_CheckIfCourseNameExistsInCourses (NewDeg.DegCod,Crs->Year,
{ "ShortName",Crs->ShortName,-1L))
/***** If name of course was in database in the new degree... *****/ {
if (Crs_CheckIfCourseNameExistsInCourses (NewDeg.DegCod,Crs->Year, sprintf (Gbl.Message,Txt_In_the_year_X_of_the_degree_Y_already_existed_a_course_with_the_name_Z,
"ShortName",Crs->ShortName,-1L)) Txt_YEAR_OF_DEGREE[Crs->Year],NewDeg.FullName,Crs->ShortName);
{ Gbl.Error = true;
sprintf (Gbl.Message,Txt_In_the_year_X_of_the_degree_Y_already_existed_a_course_with_the_name_Z, }
Txt_YEAR_OF_DEGREE[Crs->Year],NewDeg.FullName,Crs->ShortName); else if (Crs_CheckIfCourseNameExistsInCourses (NewDeg.DegCod,Crs->Year,
Gbl.Error = true; "FullName",Crs->FullName,-1L))
} {
else if (Crs_CheckIfCourseNameExistsInCourses (NewDeg.DegCod,Crs->Year, sprintf (Gbl.Message,Txt_In_the_year_X_of_the_degree_Y_already_existed_a_course_with_the_name_Z,
"FullName",Crs->FullName,-1L)) Txt_YEAR_OF_DEGREE[Crs->Year],NewDeg.FullName,Crs->FullName);
{ Gbl.Error = true;
sprintf (Gbl.Message,Txt_In_the_year_X_of_the_degree_Y_already_existed_a_course_with_the_name_Z, }
Txt_YEAR_OF_DEGREE[Crs->Year],NewDeg.FullName,Crs->FullName); else // Update degree in database
Gbl.Error = true; {
} /***** Update degree in table of courses *****/
else // Update degree in database sprintf (Query,"UPDATE courses SET DegCod='%ld' WHERE CrsCod='%ld'",
{ NewDeg.DegCod,Crs->CrsCod);
/***** Update degree in table of courses *****/ DB_QueryUPDATE (Query,"can not move course to another degree");
sprintf (Query,"UPDATE courses SET DegCod='%ld' WHERE CrsCod='%ld'", Crs->DegCod = NewDeg.DegCod;
NewDeg.DegCod,Crs->CrsCod);
DB_QueryUPDATE (Query,"can not move course to another degree");
Crs->DegCod = NewDeg.DegCod;
/***** Create message to show the change made *****/ /***** Create message to show the change made *****/
sprintf (Gbl.Message,Txt_The_course_X_has_been_moved_to_the_degree_Y, sprintf (Gbl.Message,Txt_The_course_X_has_been_moved_to_the_degree_Y,
Crs->FullName,NewDeg.FullName); Crs->FullName,NewDeg.FullName);
} }
}
else // New degree has no current course year
{
sprintf (Gbl.Message,Txt_The_year_X_is_not_allowed,Crs->Year);
Gbl.Error = true;
}
} }
else // I have no permission to change course to this new degree else // I have no permission to change course to this new degree
{ {

View File

@ -119,6 +119,7 @@ void Crs_GetShortNamesByCod (long CrsCod,char *CrsShortName,char *DegShortName);
void Crs_RemoveCourseCompletely (long CrsCod); void Crs_RemoveCourseCompletely (long CrsCod);
void Crs_ChangeInsCrsCodInConfig (void); void Crs_ChangeInsCrsCodInConfig (void);
void Crs_ChangeInsCrsCod (void); void Crs_ChangeInsCrsCod (void);
void Crs_ChangeCrsDegreeInConfig (void);
void Crs_ChangeCrsDegree (void); void Crs_ChangeCrsDegree (void);
void Crs_ChangeCrsYearInConfig (void); void Crs_ChangeCrsYearInConfig (void);
void Crs_ChangeCrsYear (void); void Crs_ChangeCrsYear (void);

View File

@ -877,13 +877,9 @@ void Deg_InitCurrentCourse (void)
if (Gbl.CurrentCrs.Crs.CrsCod > 0) if (Gbl.CurrentCrs.Crs.CrsCod > 0)
{ {
if (Crs_GetDataOfCourseByCod (&Gbl.CurrentCrs.Crs)) // Course found if (Crs_GetDataOfCourseByCod (&Gbl.CurrentCrs.Crs)) // Course found
{
Gbl.CurrentDeg.Deg.DegCod = Gbl.CurrentCrs.Crs.DegCod; Gbl.CurrentDeg.Deg.DegCod = Gbl.CurrentCrs.Crs.DegCod;
Gbl.YearOK = true;
}
else else
{ {
Gbl.YearOK = false;
Gbl.CurrentIns.Ins.InsCod = Gbl.CurrentIns.Ins.InsCod =
Gbl.CurrentCtr.Ctr.CtrCod = Gbl.CurrentCtr.Ctr.CtrCod =
Gbl.CurrentDeg.Deg.DegCod = Gbl.CurrentDeg.Deg.DegCod =
@ -903,7 +899,6 @@ void Deg_InitCurrentCourse (void)
/***** Degree type is available, so get degree type data *****/ /***** Degree type is available, so get degree type data *****/
if (!DT_GetDataOfDegreeTypeByCod (&Gbl.CurrentDegTyp.DegTyp)) // Degree type not found if (!DT_GetDataOfDegreeTypeByCod (&Gbl.CurrentDegTyp.DegTyp)) // Degree type not found
{ {
Gbl.YearOK = false;
Gbl.CurrentIns.Ins.InsCod = Gbl.CurrentIns.Ins.InsCod =
Gbl.CurrentCtr.Ctr.CtrCod = Gbl.CurrentCtr.Ctr.CtrCod =
Gbl.CurrentDeg.Deg.DegTypCod = Gbl.CurrentDeg.Deg.DegTypCod =
@ -913,15 +908,12 @@ void Deg_InitCurrentCourse (void)
} }
else else
{ {
Gbl.YearOK = false;
Gbl.CurrentIns.Ins.InsCod = Gbl.CurrentIns.Ins.InsCod =
Gbl.CurrentCtr.Ctr.CtrCod = Gbl.CurrentCtr.Ctr.CtrCod =
Gbl.CurrentDeg.Deg.DegCod = Gbl.CurrentDeg.Deg.DegCod =
Gbl.CurrentCrs.Crs.CrsCod = -1L; Gbl.CurrentCrs.Crs.CrsCod = -1L;
} }
} }
else
Gbl.YearOK = false;
/***** If centre code is available, get centre data *****/ /***** If centre code is available, get centre data *****/
if (Gbl.CurrentCtr.Ctr.CtrCod > 0) if (Gbl.CurrentCtr.Ctr.CtrCod > 0)
@ -929,13 +921,8 @@ void Deg_InitCurrentCourse (void)
if (Ctr_GetDataOfCentreByCod (&Gbl.CurrentCtr.Ctr)) // Centre found if (Ctr_GetDataOfCentreByCod (&Gbl.CurrentCtr.Ctr)) // Centre found
Gbl.CurrentIns.Ins.InsCod = Gbl.CurrentCtr.Ctr.InsCod; Gbl.CurrentIns.Ins.InsCod = Gbl.CurrentCtr.Ctr.InsCod;
else else
{
Gbl.CurrentCtr.Ctr.CtrCod = -1L; Gbl.CurrentCtr.Ctr.CtrCod = -1L;
Gbl.YearOK = false;
}
} }
else
Gbl.YearOK = false;
/***** If numerical institution code is available, get institution data *****/ /***** If numerical institution code is available, get institution data *****/
if (Gbl.CurrentIns.Ins.InsCod > 0) if (Gbl.CurrentIns.Ins.InsCod > 0)
@ -944,7 +931,6 @@ void Deg_InitCurrentCourse (void)
Gbl.CurrentCty.Cty.CtyCod = Gbl.CurrentIns.Ins.CtyCod; Gbl.CurrentCty.Cty.CtyCod = Gbl.CurrentIns.Ins.CtyCod;
else else
{ {
Gbl.YearOK = false;
Gbl.CurrentCty.Cty.CtyCod = Gbl.CurrentCty.Cty.CtyCod =
Gbl.CurrentIns.Ins.InsCod = Gbl.CurrentIns.Ins.InsCod =
Gbl.CurrentCtr.Ctr.CtrCod = Gbl.CurrentCtr.Ctr.CtrCod =
@ -958,7 +944,6 @@ void Deg_InitCurrentCourse (void)
{ {
if (!Cty_GetDataOfCountryByCod (&Gbl.CurrentCty.Cty,Cty_GET_BASIC_DATA)) // Country not found if (!Cty_GetDataOfCountryByCod (&Gbl.CurrentCty.Cty,Cty_GET_BASIC_DATA)) // Country not found
{ {
Gbl.YearOK = false;
Gbl.CurrentCty.Cty.CtyCod = Gbl.CurrentCty.Cty.CtyCod =
Gbl.CurrentIns.Ins.InsCod = Gbl.CurrentIns.Ins.InsCod =
Gbl.CurrentCtr.Ctr.CtrCod = Gbl.CurrentCtr.Ctr.CtrCod =
@ -967,10 +952,6 @@ void Deg_InitCurrentCourse (void)
} }
} }
/***** Once we know course code, adjust action and tab *****/
// if (Gbl.Action.Act != ActMnu)
// Lay_SetCurrentTab (); // Use the tab associated to current action
/***** Initialize default fields for edition to current values *****/ /***** Initialize default fields for edition to current values *****/
Gbl.Inss.EditingIns.CtyCod = Gbl.CurrentCty.Cty.CtyCod; Gbl.Inss.EditingIns.CtyCod = Gbl.CurrentCty.Cty.CtyCod;
Gbl.Ctrs.EditingCtr.InsCod = Gbl.Ctrs.EditingCtr.InsCod =
@ -1913,33 +1894,48 @@ void Deg_GetListDegsAdminByMe (void)
MYSQL_ROW row; MYSQL_ROW row;
unsigned NumDeg; unsigned NumDeg;
/***** Set default list *****/
Gbl.Usrs.Me.MyAdminDegs.Num = 0;
Gbl.Usrs.Me.MyAdminDegs.Lst = NULL;
/***** Get degrees admin by me from database *****/ /***** Get degrees admin by me from database *****/
if (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM) switch (Gbl.Usrs.Me.LoggedRole)
sprintf (Query,"SELECT DegCod,CtrCod,DegTypCod,Status,RequesterUsrCod," {
"ShortName,FullName,WWW" case Rol_CTR_ADM:
" FROM degrees" case Rol_INS_ADM:
" WHERE CtrCod='%ld'" case Rol_SYS_ADM:
" ORDER BY ShortName", sprintf (Query,"SELECT DegCod,CtrCod,DegTypCod,Status,RequesterUsrCod,"
Gbl.CurrentCtr.Ctr.CtrCod); "ShortName,FullName,WWW"
// TODO: put an if to select all degrees for admins of all degrees !!!!!!!!!!!!! " FROM degrees"
else // Gbl.Usrs.Me.LoggedRole == Rol_ROLE_DEG_ADM " WHERE CtrCod='%ld'"
sprintf (Query,"SELECT degrees.DegCod,degrees.CtrCod,degrees.DegTypCod,degrees.Status,degrees.RequesterUsrCod," " ORDER BY ShortName",
"degrees.ShortName,degrees.FullName,degrees.WWW" Gbl.CurrentCtr.Ctr.CtrCod);
" FROM admin,degrees" break;
" WHERE admin.UsrCod='%ld' AND admin.Scope='Deg'" case Rol_DEG_ADM:
" AND admin.Cod=degrees.DegCod" sprintf (Query,"SELECT degrees.DegCod,degrees.CtrCod,degrees.DegTypCod,degrees.Status,degrees.RequesterUsrCod,"
" ORDER BY degrees.ShortName", "degrees.ShortName,degrees.FullName,degrees.WWW"
Gbl.Usrs.Me.UsrDat.UsrCod); " FROM admin,degrees"
" WHERE admin.UsrCod='%ld' AND admin.Scope='Deg'"
" AND admin.Cod=degrees.DegCod"
" ORDER BY degrees.ShortName",
Gbl.Usrs.Me.UsrDat.UsrCod);
break;
default:
/* I can not admin any degree */
return;
}
Gbl.Usrs.Me.MyAdminDegs.Num = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get degrees admin by you"); Gbl.Usrs.Me.MyAdminDegs.Num = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get degrees admin by you");
/***** Count number of rows in result *****/ /***** Count number of rows in result *****/
if (Gbl.Usrs.Me.MyAdminDegs.Num) // Degrees found... if (Gbl.Usrs.Me.MyAdminDegs.Num) // Degrees found...
{ {
/***** Create list with degrees of this type *****/ /***** Create list with degrees of this type *****/
if ((Gbl.Usrs.Me.MyAdminDegs.Lst = (struct Degree *) calloc (Gbl.Usrs.Me.MyAdminDegs.Num,sizeof (struct Degree))) == NULL) if ((Gbl.Usrs.Me.MyAdminDegs.Lst = (struct Degree *) calloc (Gbl.Usrs.Me.MyAdminDegs.Num,
sizeof (struct Degree))) == NULL)
Lay_ShowErrorAndExit ("Nout enough memory to store degrees admin by you."); Lay_ShowErrorAndExit ("Nout enough memory to store degrees admin by you.");
/***** Get the degrees of this type *****/ /***** Get the degrees *****/
for (NumDeg = 0; for (NumDeg = 0;
NumDeg < Gbl.Usrs.Me.MyAdminDegs.Num; NumDeg < Gbl.Usrs.Me.MyAdminDegs.Num;
NumDeg++) NumDeg++)
@ -1949,8 +1945,6 @@ void Deg_GetListDegsAdminByMe (void)
Deg_GetDataOfDegreeFromRow (&(Gbl.Usrs.Me.MyAdminDegs.Lst[NumDeg]),row); Deg_GetDataOfDegreeFromRow (&(Gbl.Usrs.Me.MyAdminDegs.Lst[NumDeg]),row);
} }
} }
else
Gbl.Usrs.Me.MyAdminDegs.Lst = NULL;
/***** Free structure that stores the query result *****/ /***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res); DB_FreeMySQLResult (&mysql_res);

View File

@ -147,8 +147,6 @@ void Gbl_InitializeGlobals (void)
Gbl.Session.IsOpen = false; Gbl.Session.IsOpen = false;
Gbl.Session.HasBeenDisconnected = false; Gbl.Session.HasBeenDisconnected = false;
Gbl.YearOK = false;
Gbl.Usrs.Me.UsrIdLogin[0] = '\0'; Gbl.Usrs.Me.UsrIdLogin[0] = '\0';
Gbl.Usrs.Me.LoginPlainPassword[0] = '\0'; Gbl.Usrs.Me.LoginPlainPassword[0] = '\0';
Gbl.Usrs.Me.UsrDat.UsrCod = -1L; Gbl.Usrs.Me.UsrDat.UsrCod = -1L;

View File

@ -165,7 +165,6 @@ struct Globals
long UsrCod; long UsrCod;
} Session; } Session;
bool YearOK;
struct struct
{ {
Tab_Tab_t Tab; Tab_Tab_t Tab;

View File

@ -647,7 +647,6 @@ void Par_GetMainParameters (void)
unsigned UnsignedNum; unsigned UnsignedNum;
char Nickname[Nck_MAX_BYTES_NICKNAME_WITH_ARROBA+1]; char Nickname[Nck_MAX_BYTES_NICKNAME_WITH_ARROBA+1];
char LongStr[1+10+1]; char LongStr[1+10+1];
char YearStr[2+1];
/***** Reset codes of country, institution, centre, degree and course *****/ /***** Reset codes of country, institution, centre, degree and course *****/
Gbl.CurrentCty.Cty.CtyCod = Gbl.CurrentCty.Cty.CtyCod =
@ -655,7 +654,6 @@ void Par_GetMainParameters (void)
Gbl.CurrentCtr.Ctr.CtrCod = Gbl.CurrentCtr.Ctr.CtrCod =
Gbl.CurrentDeg.Deg.DegCod = Gbl.CurrentDeg.Deg.DegCod =
Gbl.CurrentCrs.Crs.CrsCod = -1L; Gbl.CurrentCrs.Crs.CrsCod = -1L;
Gbl.YearOK = false;
// First of all, get action, and session identifier. // First of all, get action, and session identifier.
// So, if other parameters have been stored in the database, there will be no problems to get them. // So, if other parameters have been stored in the database, there will be no problems to get them.
@ -774,7 +772,6 @@ void Par_GetMainParameters (void)
if (LongStr[0]) // Parameter "cty" available if (LongStr[0]) // Parameter "cty" available
{ {
Gbl.CurrentCty.Cty.CtyCod = Str_ConvertStrCodToLongCod (LongStr); Gbl.CurrentCty.Cty.CtyCod = Str_ConvertStrCodToLongCod (LongStr);
Gbl.YearOK = false;
Gbl.CurrentIns.Ins.InsCod = Gbl.CurrentIns.Ins.InsCod =
Gbl.CurrentCtr.Ctr.CtrCod = Gbl.CurrentCtr.Ctr.CtrCod =
Gbl.CurrentDeg.Deg.DegCod = Gbl.CurrentDeg.Deg.DegCod =
@ -786,7 +783,6 @@ void Par_GetMainParameters (void)
if (LongStr[0]) // Parameter "ins" available if (LongStr[0]) // Parameter "ins" available
{ {
Gbl.CurrentIns.Ins.InsCod = Str_ConvertStrCodToLongCod (LongStr); Gbl.CurrentIns.Ins.InsCod = Str_ConvertStrCodToLongCod (LongStr);
Gbl.YearOK = false;
Gbl.CurrentCtr.Ctr.CtrCod = Gbl.CurrentCtr.Ctr.CtrCod =
Gbl.CurrentDeg.Deg.DegCod = Gbl.CurrentDeg.Deg.DegCod =
Gbl.CurrentCrs.Crs.CrsCod = -1L; Gbl.CurrentCrs.Crs.CrsCod = -1L;
@ -797,7 +793,6 @@ void Par_GetMainParameters (void)
if (LongStr[0]) // Parameter "ctr" available if (LongStr[0]) // Parameter "ctr" available
{ {
Gbl.CurrentCtr.Ctr.CtrCod = Str_ConvertStrCodToLongCod (LongStr); Gbl.CurrentCtr.Ctr.CtrCod = Str_ConvertStrCodToLongCod (LongStr);
Gbl.YearOK = false;
Gbl.CurrentDeg.Deg.DegCod = Gbl.CurrentDeg.Deg.DegCod =
Gbl.CurrentCrs.Crs.CrsCod = -1L; Gbl.CurrentCrs.Crs.CrsCod = -1L;
} }
@ -807,37 +802,13 @@ void Par_GetMainParameters (void)
if (LongStr[0]) // Parameter "deg" available if (LongStr[0]) // Parameter "deg" available
{ {
Gbl.CurrentDeg.Deg.DegCod = Str_ConvertStrCodToLongCod (LongStr); Gbl.CurrentDeg.Deg.DegCod = Str_ConvertStrCodToLongCod (LongStr);
if (Gbl.CurrentDeg.Deg.DegCod > 0) Gbl.CurrentCrs.Crs.CrsCod = -1L; // Reset possible course from session
{
/***** Get possible course year *****/
Par_GetParToText ("CrsYear",YearStr,2);
if (YearStr[0]) // Parameter CrsYear available
{
Gbl.CurrentCrs.Crs.Year = Deg_ConvStrToYear (YearStr);
Gbl.YearOK = true;
}
Gbl.CurrentCrs.Crs.CrsCod = -1L; // Reset possible course from session
}
else
Gbl.CurrentCty.Cty.CtyCod =
Gbl.CurrentIns.Ins.InsCod =
Gbl.CurrentCtr.Ctr.CtrCod =
Gbl.CurrentDeg.Deg.DegCod =
Gbl.CurrentCrs.Crs.CrsCod = -1L;
} }
/***** Get numerical course code if exists (from menu) *****/ /***** Get numerical course code if exists (from menu) *****/
Par_GetParToText ("crs",LongStr,1+10); Par_GetParToText ("crs",LongStr,1+10);
if (LongStr[0]) // Parameter "crs" available if (LongStr[0]) // Parameter "crs" available
Gbl.CurrentCrs.Crs.CrsCod = Str_ConvertStrCodToLongCod (LongStr); // Overwrite CrsCod from session Gbl.CurrentCrs.Crs.CrsCod = Str_ConvertStrCodToLongCod (LongStr); // Overwrite CrsCod from session
else
{
// Try old parameter "CrsCod" (allowed for compatibility with old links, to be removed in 2016)
Par_GetParToText ("CrsCod",LongStr,1+10);
if (LongStr[0]) // Parameter "CrsCod" available
Gbl.CurrentCrs.Crs.CrsCod = Str_ConvertStrCodToLongCod (LongStr); // Overwrite CrsCod from session
}
/***** Get tab to activate *****/ /***** Get tab to activate *****/
Gbl.Action.Tab = TabUnk; Gbl.Action.Tab = TabUnk;

View File

@ -748,7 +748,7 @@ void Usr_RestrictLengthAndWriteName (const struct UsrData *UsrDat,unsigned MaxCh
} }
/*****************************************************************************/ /*****************************************************************************/
/*********** Check if a user is an administrator of an institution ***********/ /***** Check if a user is an administrator of a degree/centre/institution ****/
/*****************************************************************************/ /*****************************************************************************/
bool Usr_CheckIfUsrIsAdm (long UsrCod,Sco_Scope_t Scope,long Cod) bool Usr_CheckIfUsrIsAdm (long UsrCod,Sco_Scope_t Scope,long Cod)