mirror of
https://github.com/acanas/swad-core.git
synced 2024-06-10 10:45:23 +02:00
Version 16.22
This commit is contained in:
parent
66a3eb9642
commit
218ff36c1d
|
@ -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
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
471
swad_action.h
471
swad_action.h
|
@ -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 ********************************/
|
||||
|
|
|
@ -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)
|
||||
|
|
188
swad_course.c
188
swad_course.c
|
@ -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,25 +2544,41 @@ 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,
|
||||
|
@ -2456,12 +2608,6 @@ void Crs_ChangeCrsDegree (void)
|
|||
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
|
||||
{
|
||||
sprintf (Gbl.Message,Txt_You_dont_have_permission_to_move_courses_to_the_degree_X,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,16 +1894,24 @@ 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)
|
||||
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);
|
||||
// TODO: put an if to select all degrees for admins of all degrees !!!!!!!!!!!!!
|
||||
else // Gbl.Usrs.Me.LoggedRole == Rol_ROLE_DEG_ADM
|
||||
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"
|
||||
|
@ -1930,16 +1919,23 @@ void Deg_GetListDegsAdminByMe (void)
|
|||
" 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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -165,7 +165,6 @@ struct Globals
|
|||
long UsrCod;
|
||||
} Session;
|
||||
|
||||
bool YearOK;
|
||||
struct
|
||||
{
|
||||
Tab_Tab_t Tab;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
/***** 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;
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue
Block a user