mirror of
https://github.com/acanas/swad-core.git
synced 2024-05-29 04:53:26 +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...
|
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
|
||||||
};
|
};
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
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
|
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 ********************************/
|
||||||
|
|
|
@ -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)
|
||||||
|
|
240
swad_course.c
240
swad_course.c
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -165,7 +165,6 @@ struct Globals
|
||||||
long UsrCod;
|
long UsrCod;
|
||||||
} Session;
|
} Session;
|
||||||
|
|
||||||
bool YearOK;
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
Tab_Tab_t Tab;
|
Tab_Tab_t Tab;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user