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

View File

@ -148,13 +148,15 @@
/****************************** 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 JS_FILE "swad15.238.1.js"
// Number of lines (includes comments but not blank lines) has been got with the following command:
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
/*
Version 16.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.2: Oct 12, 2016 Unused code removed from actions. (205263 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)
{
// extern struct Act_Actions Act_Actions[Act_NUM_ACTIONS];
extern const char *The_ClassForm[The_NUM_THEMES];
extern const char *Txt_Degree;
extern const char *Txt_Course;
extern const char *Txt_Short_name;
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_Indicators;
extern const char *Txt_of_PART_OF_A_TOTAL;
unsigned NumDeg;
unsigned Year;
int NumIndicatorsFromDB;
struct Ind_IndicatorsCrs Indicators;
@ -202,6 +203,47 @@ static void Crs_Configuration (bool PrintView)
/***** Start table *****/
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 *****/
fprintf (Gbl.F.Out,"<tr>"
"<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) ********/
/*****************************************************************************/
@ -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_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_year_X_is_not_allowed;
extern const char *Txt_You_dont_have_permission_to_move_courses_to_the_degree_X;
struct Course *Crs;
bool ICanChangeCrsToNewDeg;
char Query[512];
struct Degree NewDeg;
struct Centre NewCtr;
Crs = &Gbl.Degs.EditingCrs;
@ -2408,59 +2544,69 @@ void Crs_ChangeCrsDegree (void)
if ((NewDeg.DegCod = Deg_GetParamOtherDegCod ()) == -1L)
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 *****/
Crs_GetDataOfCourseByCod (Crs);
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 (ICanChangeCrsToNewDeg)
{
/***** If new degree has current course year... *****/
if (Crs->Year <= Deg_MAX_YEARS_PER_DEGREE)
{
/***** If name of course was in database in the new degree... *****/
if (Crs_CheckIfCourseNameExistsInCourses (NewDeg.DegCod,Crs->Year,
"ShortName",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[Crs->Year],NewDeg.FullName,Crs->ShortName);
Gbl.Error = true;
}
else if (Crs_CheckIfCourseNameExistsInCourses (NewDeg.DegCod,Crs->Year,
"FullName",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[Crs->Year],NewDeg.FullName,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,Crs->CrsCod);
DB_QueryUPDATE (Query,"can not move course to another degree");
Crs->DegCod = NewDeg.DegCod;
/***** If name of course was in database in the new degree... *****/
if (Crs_CheckIfCourseNameExistsInCourses (NewDeg.DegCod,Crs->Year,
"ShortName",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[Crs->Year],NewDeg.FullName,Crs->ShortName);
Gbl.Error = true;
}
else if (Crs_CheckIfCourseNameExistsInCourses (NewDeg.DegCod,Crs->Year,
"FullName",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[Crs->Year],NewDeg.FullName,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,Crs->CrsCod);
DB_QueryUPDATE (Query,"can not move course to another degree");
Crs->DegCod = NewDeg.DegCod;
/***** Create message to show the change made *****/
sprintf (Gbl.Message,Txt_The_course_X_has_been_moved_to_the_degree_Y,
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;
}
/***** Create message to show the change made *****/
sprintf (Gbl.Message,Txt_The_course_X_has_been_moved_to_the_degree_Y,
Crs->FullName,NewDeg.FullName);
}
}
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_ChangeInsCrsCodInConfig (void);
void Crs_ChangeInsCrsCod (void);
void Crs_ChangeCrsDegreeInConfig (void);
void Crs_ChangeCrsDegree (void);
void Crs_ChangeCrsYearInConfig (void);
void Crs_ChangeCrsYear (void);

View File

@ -877,13 +877,9 @@ void Deg_InitCurrentCourse (void)
if (Gbl.CurrentCrs.Crs.CrsCod > 0)
{
if (Crs_GetDataOfCourseByCod (&Gbl.CurrentCrs.Crs)) // Course found
{
Gbl.CurrentDeg.Deg.DegCod = Gbl.CurrentCrs.Crs.DegCod;
Gbl.YearOK = true;
}
else
{
Gbl.YearOK = false;
Gbl.CurrentIns.Ins.InsCod =
Gbl.CurrentCtr.Ctr.CtrCod =
Gbl.CurrentDeg.Deg.DegCod =
@ -903,7 +899,6 @@ void Deg_InitCurrentCourse (void)
/***** Degree type is available, so get degree type data *****/
if (!DT_GetDataOfDegreeTypeByCod (&Gbl.CurrentDegTyp.DegTyp)) // Degree type not found
{
Gbl.YearOK = false;
Gbl.CurrentIns.Ins.InsCod =
Gbl.CurrentCtr.Ctr.CtrCod =
Gbl.CurrentDeg.Deg.DegTypCod =
@ -913,15 +908,12 @@ void Deg_InitCurrentCourse (void)
}
else
{
Gbl.YearOK = false;
Gbl.CurrentIns.Ins.InsCod =
Gbl.CurrentCtr.Ctr.CtrCod =
Gbl.CurrentDeg.Deg.DegCod =
Gbl.CurrentCrs.Crs.CrsCod = -1L;
}
}
else
Gbl.YearOK = false;
/***** If centre code is available, get centre data *****/
if (Gbl.CurrentCtr.Ctr.CtrCod > 0)
@ -929,13 +921,8 @@ void Deg_InitCurrentCourse (void)
if (Ctr_GetDataOfCentreByCod (&Gbl.CurrentCtr.Ctr)) // Centre found
Gbl.CurrentIns.Ins.InsCod = Gbl.CurrentCtr.Ctr.InsCod;
else
{
Gbl.CurrentCtr.Ctr.CtrCod = -1L;
Gbl.YearOK = false;
}
}
else
Gbl.YearOK = false;
/***** If numerical institution code is available, get institution data *****/
if (Gbl.CurrentIns.Ins.InsCod > 0)
@ -944,7 +931,6 @@ void Deg_InitCurrentCourse (void)
Gbl.CurrentCty.Cty.CtyCod = Gbl.CurrentIns.Ins.CtyCod;
else
{
Gbl.YearOK = false;
Gbl.CurrentCty.Cty.CtyCod =
Gbl.CurrentIns.Ins.InsCod =
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
{
Gbl.YearOK = false;
Gbl.CurrentCty.Cty.CtyCod =
Gbl.CurrentIns.Ins.InsCod =
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 *****/
Gbl.Inss.EditingIns.CtyCod = Gbl.CurrentCty.Cty.CtyCod;
Gbl.Ctrs.EditingCtr.InsCod =
@ -1913,33 +1894,48 @@ void Deg_GetListDegsAdminByMe (void)
MYSQL_ROW row;
unsigned NumDeg;
/***** Set default list *****/
Gbl.Usrs.Me.MyAdminDegs.Num = 0;
Gbl.Usrs.Me.MyAdminDegs.Lst = NULL;
/***** Get degrees admin by me from database *****/
if (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM)
sprintf (Query,"SELECT DegCod,CtrCod,DegTypCod,Status,RequesterUsrCod,"
"ShortName,FullName,WWW"
" FROM degrees"
" WHERE CtrCod='%ld'"
" ORDER BY ShortName",
Gbl.CurrentCtr.Ctr.CtrCod);
// TODO: put an if to select all degrees for admins of all degrees !!!!!!!!!!!!!
else // Gbl.Usrs.Me.LoggedRole == Rol_ROLE_DEG_ADM
sprintf (Query,"SELECT degrees.DegCod,degrees.CtrCod,degrees.DegTypCod,degrees.Status,degrees.RequesterUsrCod,"
"degrees.ShortName,degrees.FullName,degrees.WWW"
" 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);
switch (Gbl.Usrs.Me.LoggedRole)
{
case Rol_CTR_ADM:
case Rol_INS_ADM:
case Rol_SYS_ADM:
sprintf (Query,"SELECT DegCod,CtrCod,DegTypCod,Status,RequesterUsrCod,"
"ShortName,FullName,WWW"
" FROM degrees"
" WHERE CtrCod='%ld'"
" ORDER BY ShortName",
Gbl.CurrentCtr.Ctr.CtrCod);
break;
case Rol_DEG_ADM:
sprintf (Query,"SELECT degrees.DegCod,degrees.CtrCod,degrees.DegTypCod,degrees.Status,degrees.RequesterUsrCod,"
"degrees.ShortName,degrees.FullName,degrees.WWW"
" 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");
/***** Count number of rows in result *****/
if (Gbl.Usrs.Me.MyAdminDegs.Num) // Degrees found...
{
/***** 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.");
/***** Get the degrees of this type *****/
/***** Get the degrees *****/
for (NumDeg = 0;
NumDeg < Gbl.Usrs.Me.MyAdminDegs.Num;
NumDeg++)
@ -1949,8 +1945,6 @@ void Deg_GetListDegsAdminByMe (void)
Deg_GetDataOfDegreeFromRow (&(Gbl.Usrs.Me.MyAdminDegs.Lst[NumDeg]),row);
}
}
else
Gbl.Usrs.Me.MyAdminDegs.Lst = NULL;
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);

View File

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

View File

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

View File

@ -647,7 +647,6 @@ void Par_GetMainParameters (void)
unsigned UnsignedNum;
char Nickname[Nck_MAX_BYTES_NICKNAME_WITH_ARROBA+1];
char LongStr[1+10+1];
char YearStr[2+1];
/***** Reset codes of country, institution, centre, degree and course *****/
Gbl.CurrentCty.Cty.CtyCod =
@ -655,7 +654,6 @@ void Par_GetMainParameters (void)
Gbl.CurrentCtr.Ctr.CtrCod =
Gbl.CurrentDeg.Deg.DegCod =
Gbl.CurrentCrs.Crs.CrsCod = -1L;
Gbl.YearOK = false;
// 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.
@ -774,7 +772,6 @@ void Par_GetMainParameters (void)
if (LongStr[0]) // Parameter "cty" available
{
Gbl.CurrentCty.Cty.CtyCod = Str_ConvertStrCodToLongCod (LongStr);
Gbl.YearOK = false;
Gbl.CurrentIns.Ins.InsCod =
Gbl.CurrentCtr.Ctr.CtrCod =
Gbl.CurrentDeg.Deg.DegCod =
@ -786,7 +783,6 @@ void Par_GetMainParameters (void)
if (LongStr[0]) // Parameter "ins" available
{
Gbl.CurrentIns.Ins.InsCod = Str_ConvertStrCodToLongCod (LongStr);
Gbl.YearOK = false;
Gbl.CurrentCtr.Ctr.CtrCod =
Gbl.CurrentDeg.Deg.DegCod =
Gbl.CurrentCrs.Crs.CrsCod = -1L;
@ -797,7 +793,6 @@ void Par_GetMainParameters (void)
if (LongStr[0]) // Parameter "ctr" available
{
Gbl.CurrentCtr.Ctr.CtrCod = Str_ConvertStrCodToLongCod (LongStr);
Gbl.YearOK = false;
Gbl.CurrentDeg.Deg.DegCod =
Gbl.CurrentCrs.Crs.CrsCod = -1L;
}
@ -807,37 +802,13 @@ void Par_GetMainParameters (void)
if (LongStr[0]) // Parameter "deg" available
{
Gbl.CurrentDeg.Deg.DegCod = Str_ConvertStrCodToLongCod (LongStr);
if (Gbl.CurrentDeg.Deg.DegCod > 0)
{
/***** 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;
Gbl.CurrentCrs.Crs.CrsCod = -1L; // Reset possible course from session
}
/***** Get numerical course code if exists (from menu) *****/
Par_GetParToText ("crs",LongStr,1+10);
if (LongStr[0]) // Parameter "crs" available
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 *****/
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)