Version 22.31: Sep 28, 2022 New action to view one project.

This commit is contained in:
acanas 2022-09-28 15:19:17 +02:00
parent 0e760d7193
commit 051849f6e6
28 changed files with 552 additions and 475 deletions

View File

@ -180,7 +180,7 @@ void QR_ExamAnnnouncement (void)
if (asprintf (&URL,"https://chart.googleapis.com/chart?cht=qr&chs=%ux%u&chl=%s/?crs=%ld%%26act=%ld", if (asprintf (&URL,"https://chart.googleapis.com/chart?cht=qr&chs=%ux%u&chl=%s/?crs=%ld%%26act=%ld",
300,300, 300,300,
Cfg_URL_SWAD_CGI,Gbl.Hierarchy.Crs.CrsCod, Cfg_URL_SWAD_CGI,Gbl.Hierarchy.Crs.CrsCod,
Act_GetActCod (ActSeeAllExaAnn)) < 0) Act_GetActCod (ActSeeAllCfe)) < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
HTM_IMG (URL,NULL,Txt_Link_to_call_for_exam, HTM_IMG (URL,NULL,Txt_Link_to_call_for_exam,
"style=\"width:250px;height:250px;\""); "style=\"width:250px;height:250px;\"");

View File

@ -585,7 +585,7 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
[ActSeeAss ] = { 15, 0,TabAss,ActSeeAss ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_ShowInfo ,"info" }, [ActSeeAss ] = { 15, 0,TabAss,ActSeeAss ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_ShowInfo ,"info" },
[ActSeeAsg ] = { 801, 1,TabAss,ActSeeAsg ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Asg_SeeAssignments ,"edit" }, [ActSeeAsg ] = { 801, 1,TabAss,ActSeeAsg ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Asg_SeeAssignments ,"edit" },
[ActSeePrj ] = {1674, 2,TabAss,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_SeeProjects ,"file-invoice" }, [ActSeePrj ] = {1674, 2,TabAss,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_SeeProjects ,"file-invoice" },
[ActSeeAllExaAnn ] = { 85, 3,TabAss,ActSeeAllExaAnn ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cfe_ListCallsForExamsSee ,"bullhorn" }, [ActSeeAllCfe ] = { 85, 3,TabAss,ActSeeAllCfe ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cfe_ListCallsForExamsSee ,"bullhorn" },
[ActEdiTstQst ] = { 104, 4,TabAss,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDates ,Qst_RequestEditQsts ,"tasks" }, [ActEdiTstQst ] = { 104, 4,TabAss,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDates ,Qst_RequestEditQsts ,"tasks" },
[ActReqTst ] = { 103, 5,TabAss,ActReqTst ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_RequestTest ,"check" }, [ActReqTst ] = { 103, 5,TabAss,ActReqTst ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_RequestTest ,"check" },
[ActSeeAllExa ] = {1848, 6,TabAss,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Exa_SeeAllExams ,"file-signature" }, [ActSeeAllExa ] = {1848, 6,TabAss,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Exa_SeeAllExams ,"file-signature" },
@ -627,6 +627,7 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
[ActUnlAllPrj ] = {1778,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_UnloSelectedPrjsEdition ,NULL}, [ActUnlAllPrj ] = {1778,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_UnloSelectedPrjsEdition ,NULL},
[ActFrmNewPrj ] = {1675,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_RequestCreatePrj ,NULL}, [ActFrmNewPrj ] = {1675,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_RequestCreatePrj ,NULL},
[ActEdiOnePrj ] = {1676,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_RequestEditPrj ,NULL}, [ActEdiOnePrj ] = {1676,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_RequestEditPrj ,NULL},
[ActSeeOnePrj ] = {1949,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ShowProjectWithFileBrowser ,NULL},
[ActPrnOnePrj ] = {1677,-1,TabUnk,ActSeePrj ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,NULL ,Prj_PrintOneProject ,NULL}, [ActPrnOnePrj ] = {1677,-1,TabUnk,ActSeePrj ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,NULL ,Prj_PrintOneProject ,NULL},
[ActNewPrj ] = {1678,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReceiveFormProject ,NULL}, [ActNewPrj ] = {1678,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReceiveFormProject ,NULL},
[ActChgPrj ] = {1679,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReceiveFormProject ,NULL}, [ActChgPrj ] = {1679,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReceiveFormProject ,NULL},
@ -690,16 +691,16 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
[ActChgDatAssPrj ] = {1733,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_ChgFileMetadata ,NULL}, [ActChgDatAssPrj ] = {1733,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_ChgFileMetadata ,NULL},
[ActDowAssPrj ] = {1734,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_DOWNLD_FILE,Brw_DownloadFile ,NULL ,NULL}, [ActDowAssPrj ] = {1734,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_DOWNLD_FILE,Brw_DownloadFile ,NULL ,NULL},
[ActSeeOneCfe ] = {1572,-1,TabUnk,ActSeeAllExaAnn ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cfe_ListCallsForExamsCod ,NULL}, [ActSeeOneCfe ] = {1572,-1,TabUnk,ActSeeAllCfe ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cfe_ListCallsForExamsCod ,NULL},
[ActSeeDatCfe ] = {1571,-1,TabUnk,ActSeeAllExaAnn ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cfe_ListCallsForExamsDay ,NULL}, [ActSeeDatCfe ] = {1571,-1,TabUnk,ActSeeAllCfe ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cfe_ListCallsForExamsDay ,NULL},
[ActEdiCfe ] = { 91,-1,TabUnk,ActSeeAllExaAnn ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cfe_PutFrmEditACallForExam ,NULL}, [ActEdiCfe ] = { 91,-1,TabUnk,ActSeeAllCfe ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cfe_PutFrmEditACallForExam ,NULL},
[ActRcvCfe ] = { 110,-1,TabUnk,ActSeeAllExaAnn ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Cfe_ReceiveCallForExam1 ,Cfe_ReceiveCallForExam2 ,NULL}, [ActRcvCfe ] = { 110,-1,TabUnk,ActSeeAllCfe ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Cfe_ReceiveCallForExam1 ,Cfe_ReceiveCallForExam2 ,NULL},
[ActPrnCfe ] = { 179,-1,TabUnk,ActSeeAllExaAnn ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,NULL ,Cfe_PrintCallForExam ,NULL}, [ActPrnCfe ] = { 179,-1,TabUnk,ActSeeAllCfe ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,NULL ,Cfe_PrintCallForExam ,NULL},
[ActReqRemCfe ] = {1619,-1,TabUnk,ActSeeAllExaAnn ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cfe_ReqRemoveCallForExam ,NULL}, [ActReqRemCfe ] = {1619,-1,TabUnk,ActSeeAllCfe ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cfe_ReqRemoveCallForExam ,NULL},
[ActRemCfe ] = { 187,-1,TabUnk,ActSeeAllExaAnn ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Cfe_RemoveCallForExam1 ,Cfe_RemoveCallForExam2 ,NULL}, [ActRemCfe ] = { 187,-1,TabUnk,ActSeeAllCfe ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Cfe_RemoveCallForExam1 ,Cfe_RemoveCallForExam2 ,NULL},
[ActHidCfe ] = {1620,-1,TabUnk,ActSeeAllExaAnn ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Cfe_HideCallForExam ,Cfe_ListCallsForExamsEdit ,NULL}, [ActHidCfe ] = {1620,-1,TabUnk,ActSeeAllCfe ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Cfe_HideCallForExam ,Cfe_ListCallsForExamsEdit ,NULL},
[ActUnhCfe ] = {1621,-1,TabUnk,ActSeeAllExaAnn ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Cfe_UnhideCallForExam ,Cfe_ListCallsForExamsEdit ,NULL}, [ActUnhCfe ] = {1621,-1,TabUnk,ActSeeAllCfe ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Cfe_UnhideCallForExam ,Cfe_ListCallsForExamsEdit ,NULL},
[ActReqLnkCfe ] = {1934,-1,TabUnk,ActSeeAllExaAnn ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cfe_GetLinkToCallForExam ,NULL}, [ActReqLnkCfe ] = {1934,-1,TabUnk,ActSeeAllCfe ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cfe_GetLinkToCallForExam ,NULL},
[ActEdiOneTstQst ] = { 105,-1,TabUnk,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Qst_ShowFormEditOneQst ,NULL}, [ActEdiOneTstQst ] = { 105,-1,TabUnk,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Qst_ShowFormEditOneQst ,NULL},
[ActReqImpTstQst ] = {1007,-1,TabUnk,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,QstImp_ShowFormImpQstsFromXML ,NULL}, [ActReqImpTstQst ] = {1007,-1,TabUnk,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,QstImp_ShowFormImpQstsFromXML ,NULL},
@ -1953,7 +1954,7 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
-1, // #82 (obsolete action) -1, // #82 (obsolete action)
-1, // #83 (obsolete action) -1, // #83 (obsolete action)
ActSeeUseGbl, // #84 ActSeeUseGbl, // #84
ActSeeAllExaAnn, // #85 ActSeeAllCfe, // #85
-1, // #86 (obsolete action) -1, // #86 (obsolete action)
ActRemAllStdCrs, // #87 ActRemAllStdCrs, // #87
ActReqRemAllStdCrs, // #88 ActReqRemAllStdCrs, // #88
@ -3817,6 +3818,7 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
ActExpEdiPrgItm, // #1946 ActExpEdiPrgItm, // #1946
ActConEdiPrgItm, // #1947 ActConEdiPrgItm, // #1947
ActReqLnkPrj, // #1948 ActReqLnkPrj, // #1948
ActSeeOnePrj, // #1949
}; };
/*****************************************************************************/ /*****************************************************************************/

View File

@ -65,7 +65,7 @@ typedef enum
typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action
#define Act_MAX_ACTION_COD 1948 #define Act_MAX_ACTION_COD 1949
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 13 #define Act_MAX_OPTIONS_IN_MENU_PER_TAB 13
@ -535,7 +535,7 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to
#define ActSeeAss (ActChgCrsTT1stDay + 1) #define ActSeeAss (ActChgCrsTT1stDay + 1)
#define ActSeeAsg (ActChgCrsTT1stDay + 2) #define ActSeeAsg (ActChgCrsTT1stDay + 2)
#define ActSeePrj (ActChgCrsTT1stDay + 3) #define ActSeePrj (ActChgCrsTT1stDay + 3)
#define ActSeeAllExaAnn (ActChgCrsTT1stDay + 4) #define ActSeeAllCfe (ActChgCrsTT1stDay + 4)
#define ActEdiTstQst (ActChgCrsTT1stDay + 5) #define ActEdiTstQst (ActChgCrsTT1stDay + 5)
#define ActReqTst (ActChgCrsTT1stDay + 6) #define ActReqTst (ActChgCrsTT1stDay + 6)
#define ActSeeAllExa (ActChgCrsTT1stDay + 7) #define ActSeeAllExa (ActChgCrsTT1stDay + 7)
@ -577,234 +577,235 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to
#define ActUnlAllPrj (ActChgCrsTT1stDay + 39) #define ActUnlAllPrj (ActChgCrsTT1stDay + 39)
#define ActFrmNewPrj (ActChgCrsTT1stDay + 40) #define ActFrmNewPrj (ActChgCrsTT1stDay + 40)
#define ActEdiOnePrj (ActChgCrsTT1stDay + 41) #define ActEdiOnePrj (ActChgCrsTT1stDay + 41)
#define ActPrnOnePrj (ActChgCrsTT1stDay + 42) #define ActSeeOnePrj (ActChgCrsTT1stDay + 42)
#define ActNewPrj (ActChgCrsTT1stDay + 43) #define ActPrnOnePrj (ActChgCrsTT1stDay + 43)
#define ActChgPrj (ActChgCrsTT1stDay + 44) #define ActNewPrj (ActChgCrsTT1stDay + 44)
#define ActReqRemPrj (ActChgCrsTT1stDay + 45) #define ActChgPrj (ActChgCrsTT1stDay + 45)
#define ActRemPrj (ActChgCrsTT1stDay + 46) #define ActReqRemPrj (ActChgCrsTT1stDay + 46)
#define ActHidPrj (ActChgCrsTT1stDay + 47) #define ActRemPrj (ActChgCrsTT1stDay + 47)
#define ActUnhPrj (ActChgCrsTT1stDay + 48) #define ActHidPrj (ActChgCrsTT1stDay + 48)
#define ActLckPrj (ActChgCrsTT1stDay + 49) #define ActUnhPrj (ActChgCrsTT1stDay + 49)
#define ActUnlPrj (ActChgCrsTT1stDay + 50) #define ActLckPrj (ActChgCrsTT1stDay + 50)
#define ActReqAddStdPrj (ActChgCrsTT1stDay + 51) #define ActUnlPrj (ActChgCrsTT1stDay + 51)
#define ActReqAddTutPrj (ActChgCrsTT1stDay + 52) #define ActReqAddStdPrj (ActChgCrsTT1stDay + 52)
#define ActReqAddEvlPrj (ActChgCrsTT1stDay + 53) #define ActReqAddTutPrj (ActChgCrsTT1stDay + 53)
#define ActAddStdPrj (ActChgCrsTT1stDay + 54) #define ActReqAddEvlPrj (ActChgCrsTT1stDay + 54)
#define ActAddTutPrj (ActChgCrsTT1stDay + 55) #define ActAddStdPrj (ActChgCrsTT1stDay + 55)
#define ActAddEvlPrj (ActChgCrsTT1stDay + 56) #define ActAddTutPrj (ActChgCrsTT1stDay + 56)
#define ActReqRemStdPrj (ActChgCrsTT1stDay + 57) #define ActAddEvlPrj (ActChgCrsTT1stDay + 57)
#define ActReqRemTutPrj (ActChgCrsTT1stDay + 58) #define ActReqRemStdPrj (ActChgCrsTT1stDay + 58)
#define ActReqRemEvlPrj (ActChgCrsTT1stDay + 59) #define ActReqRemTutPrj (ActChgCrsTT1stDay + 59)
#define ActRemStdPrj (ActChgCrsTT1stDay + 60) #define ActReqRemEvlPrj (ActChgCrsTT1stDay + 60)
#define ActRemTutPrj (ActChgCrsTT1stDay + 61) #define ActRemStdPrj (ActChgCrsTT1stDay + 61)
#define ActRemEvlPrj (ActChgCrsTT1stDay + 62) #define ActRemTutPrj (ActChgCrsTT1stDay + 62)
#define ActReqLnkPrj (ActChgCrsTT1stDay + 63) #define ActRemEvlPrj (ActChgCrsTT1stDay + 63)
#define ActReqLnkPrj (ActChgCrsTT1stDay + 64)
#define ActAdmDocPrj (ActChgCrsTT1stDay + 64) #define ActAdmDocPrj (ActChgCrsTT1stDay + 65)
#define ActReqRemFilDocPrj (ActChgCrsTT1stDay + 65) #define ActReqRemFilDocPrj (ActChgCrsTT1stDay + 66)
#define ActRemFilDocPrj (ActChgCrsTT1stDay + 66) #define ActRemFilDocPrj (ActChgCrsTT1stDay + 67)
#define ActRemFolDocPrj (ActChgCrsTT1stDay + 67) #define ActRemFolDocPrj (ActChgCrsTT1stDay + 68)
#define ActCopDocPrj (ActChgCrsTT1stDay + 68) #define ActCopDocPrj (ActChgCrsTT1stDay + 69)
#define ActPasDocPrj (ActChgCrsTT1stDay + 69) #define ActPasDocPrj (ActChgCrsTT1stDay + 70)
#define ActRemTreDocPrj (ActChgCrsTT1stDay + 70) #define ActRemTreDocPrj (ActChgCrsTT1stDay + 71)
#define ActFrmCreDocPrj (ActChgCrsTT1stDay + 71) #define ActFrmCreDocPrj (ActChgCrsTT1stDay + 72)
#define ActCreFolDocPrj (ActChgCrsTT1stDay + 72) #define ActCreFolDocPrj (ActChgCrsTT1stDay + 73)
#define ActCreLnkDocPrj (ActChgCrsTT1stDay + 73) #define ActCreLnkDocPrj (ActChgCrsTT1stDay + 74)
#define ActRenFolDocPrj (ActChgCrsTT1stDay + 74) #define ActRenFolDocPrj (ActChgCrsTT1stDay + 75)
#define ActRcvFilDocPrjDZ (ActChgCrsTT1stDay + 75) #define ActRcvFilDocPrjDZ (ActChgCrsTT1stDay + 76)
#define ActRcvFilDocPrjCla (ActChgCrsTT1stDay + 76) #define ActRcvFilDocPrjCla (ActChgCrsTT1stDay + 77)
#define ActExpDocPrj (ActChgCrsTT1stDay + 77) #define ActExpDocPrj (ActChgCrsTT1stDay + 78)
#define ActConDocPrj (ActChgCrsTT1stDay + 78) #define ActConDocPrj (ActChgCrsTT1stDay + 79)
#define ActZIPDocPrj (ActChgCrsTT1stDay + 79) #define ActZIPDocPrj (ActChgCrsTT1stDay + 80)
#define ActReqDatDocPrj (ActChgCrsTT1stDay + 80) #define ActReqDatDocPrj (ActChgCrsTT1stDay + 81)
#define ActChgDatDocPrj (ActChgCrsTT1stDay + 81) #define ActChgDatDocPrj (ActChgCrsTT1stDay + 82)
#define ActDowDocPrj (ActChgCrsTT1stDay + 82) #define ActDowDocPrj (ActChgCrsTT1stDay + 83)
#define ActAdmAssPrj (ActChgCrsTT1stDay + 83) #define ActAdmAssPrj (ActChgCrsTT1stDay + 84)
#define ActReqRemFilAssPrj (ActChgCrsTT1stDay + 84) #define ActReqRemFilAssPrj (ActChgCrsTT1stDay + 85)
#define ActRemFilAssPrj (ActChgCrsTT1stDay + 85) #define ActRemFilAssPrj (ActChgCrsTT1stDay + 86)
#define ActRemFolAssPrj (ActChgCrsTT1stDay + 86) #define ActRemFolAssPrj (ActChgCrsTT1stDay + 87)
#define ActCopAssPrj (ActChgCrsTT1stDay + 87) #define ActCopAssPrj (ActChgCrsTT1stDay + 88)
#define ActPasAssPrj (ActChgCrsTT1stDay + 88) #define ActPasAssPrj (ActChgCrsTT1stDay + 89)
#define ActRemTreAssPrj (ActChgCrsTT1stDay + 89) #define ActRemTreAssPrj (ActChgCrsTT1stDay + 90)
#define ActFrmCreAssPrj (ActChgCrsTT1stDay + 90) #define ActFrmCreAssPrj (ActChgCrsTT1stDay + 91)
#define ActCreFolAssPrj (ActChgCrsTT1stDay + 91) #define ActCreFolAssPrj (ActChgCrsTT1stDay + 92)
#define ActCreLnkAssPrj (ActChgCrsTT1stDay + 92) #define ActCreLnkAssPrj (ActChgCrsTT1stDay + 93)
#define ActRenFolAssPrj (ActChgCrsTT1stDay + 93) #define ActRenFolAssPrj (ActChgCrsTT1stDay + 94)
#define ActRcvFilAssPrjDZ (ActChgCrsTT1stDay + 94) #define ActRcvFilAssPrjDZ (ActChgCrsTT1stDay + 95)
#define ActRcvFilAssPrjCla (ActChgCrsTT1stDay + 95) #define ActRcvFilAssPrjCla (ActChgCrsTT1stDay + 96)
#define ActExpAssPrj (ActChgCrsTT1stDay + 96) #define ActExpAssPrj (ActChgCrsTT1stDay + 97)
#define ActConAssPrj (ActChgCrsTT1stDay + 97) #define ActConAssPrj (ActChgCrsTT1stDay + 98)
#define ActZIPAssPrj (ActChgCrsTT1stDay + 98) #define ActZIPAssPrj (ActChgCrsTT1stDay + 99)
#define ActReqDatAssPrj (ActChgCrsTT1stDay + 99) #define ActReqDatAssPrj (ActChgCrsTT1stDay + 100)
#define ActChgDatAssPrj (ActChgCrsTT1stDay + 100) #define ActChgDatAssPrj (ActChgCrsTT1stDay + 101)
#define ActDowAssPrj (ActChgCrsTT1stDay + 101) #define ActDowAssPrj (ActChgCrsTT1stDay + 102)
#define ActSeeOneCfe (ActChgCrsTT1stDay + 102) #define ActSeeOneCfe (ActChgCrsTT1stDay + 103)
#define ActSeeDatCfe (ActChgCrsTT1stDay + 103) #define ActSeeDatCfe (ActChgCrsTT1stDay + 104)
#define ActEdiCfe (ActChgCrsTT1stDay + 104) #define ActEdiCfe (ActChgCrsTT1stDay + 105)
#define ActRcvCfe (ActChgCrsTT1stDay + 105) #define ActRcvCfe (ActChgCrsTT1stDay + 106)
#define ActPrnCfe (ActChgCrsTT1stDay + 106) #define ActPrnCfe (ActChgCrsTT1stDay + 107)
#define ActReqRemCfe (ActChgCrsTT1stDay + 107) #define ActReqRemCfe (ActChgCrsTT1stDay + 108)
#define ActRemCfe (ActChgCrsTT1stDay + 108) #define ActRemCfe (ActChgCrsTT1stDay + 109)
#define ActHidCfe (ActChgCrsTT1stDay + 109) #define ActHidCfe (ActChgCrsTT1stDay + 110)
#define ActUnhCfe (ActChgCrsTT1stDay + 110) #define ActUnhCfe (ActChgCrsTT1stDay + 111)
#define ActReqLnkCfe (ActChgCrsTT1stDay + 111) #define ActReqLnkCfe (ActChgCrsTT1stDay + 112)
#define ActEdiOneTstQst (ActChgCrsTT1stDay + 112) #define ActEdiOneTstQst (ActChgCrsTT1stDay + 113)
#define ActReqImpTstQst (ActChgCrsTT1stDay + 113) #define ActReqImpTstQst (ActChgCrsTT1stDay + 114)
#define ActImpTstQst (ActChgCrsTT1stDay + 114) #define ActImpTstQst (ActChgCrsTT1stDay + 115)
#define ActLstTstQst (ActChgCrsTT1stDay + 115) #define ActLstTstQst (ActChgCrsTT1stDay + 116)
#define ActRcvTstQst (ActChgCrsTT1stDay + 116) #define ActRcvTstQst (ActChgCrsTT1stDay + 117)
#define ActReqRemSevTstQst (ActChgCrsTT1stDay + 117) #define ActReqRemSevTstQst (ActChgCrsTT1stDay + 118)
#define ActRemSevTstQst (ActChgCrsTT1stDay + 118) #define ActRemSevTstQst (ActChgCrsTT1stDay + 119)
#define ActReqRemOneTstQst (ActChgCrsTT1stDay + 119) #define ActReqRemOneTstQst (ActChgCrsTT1stDay + 120)
#define ActRemOneTstQst (ActChgCrsTT1stDay + 120) #define ActRemOneTstQst (ActChgCrsTT1stDay + 121)
#define ActChgShfTstQst (ActChgCrsTT1stDay + 121) #define ActChgShfTstQst (ActChgCrsTT1stDay + 122)
#define ActEdiTag (ActChgCrsTT1stDay + 122) #define ActEdiTag (ActChgCrsTT1stDay + 123)
#define ActEnaTag (ActChgCrsTT1stDay + 123) #define ActEnaTag (ActChgCrsTT1stDay + 124)
#define ActDisTag (ActChgCrsTT1stDay + 124) #define ActDisTag (ActChgCrsTT1stDay + 125)
#define ActRenTag (ActChgCrsTT1stDay + 125) #define ActRenTag (ActChgCrsTT1stDay + 126)
#define ActSeeTst (ActChgCrsTT1stDay + 126) #define ActSeeTst (ActChgCrsTT1stDay + 127)
#define ActReqAssTst (ActChgCrsTT1stDay + 127) #define ActReqAssTst (ActChgCrsTT1stDay + 128)
#define ActAssTst (ActChgCrsTT1stDay + 128) #define ActAssTst (ActChgCrsTT1stDay + 129)
#define ActCfgTst (ActChgCrsTT1stDay + 129) #define ActCfgTst (ActChgCrsTT1stDay + 130)
#define ActRcvCfgTst (ActChgCrsTT1stDay + 130) #define ActRcvCfgTst (ActChgCrsTT1stDay + 131)
#define ActReqSeeMyTstRes (ActChgCrsTT1stDay + 131) #define ActReqSeeMyTstRes (ActChgCrsTT1stDay + 132)
#define ActSeeMyTstResCrs (ActChgCrsTT1stDay + 132) #define ActSeeMyTstResCrs (ActChgCrsTT1stDay + 133)
#define ActSeeOneTstResMe (ActChgCrsTT1stDay + 133) #define ActSeeOneTstResMe (ActChgCrsTT1stDay + 134)
#define ActReqSeeUsrTstRes (ActChgCrsTT1stDay + 134) #define ActReqSeeUsrTstRes (ActChgCrsTT1stDay + 135)
#define ActSeeUsrTstResCrs (ActChgCrsTT1stDay + 135) #define ActSeeUsrTstResCrs (ActChgCrsTT1stDay + 136)
#define ActSeeOneTstResOth (ActChgCrsTT1stDay + 136) #define ActSeeOneTstResOth (ActChgCrsTT1stDay + 137)
#define ActSeeExa (ActChgCrsTT1stDay + 137) #define ActSeeExa (ActChgCrsTT1stDay + 138)
#define ActFrmNewExa (ActChgCrsTT1stDay + 138) #define ActFrmNewExa (ActChgCrsTT1stDay + 139)
#define ActEdiOneExa (ActChgCrsTT1stDay + 139) #define ActEdiOneExa (ActChgCrsTT1stDay + 140)
#define ActNewExa (ActChgCrsTT1stDay + 140) #define ActNewExa (ActChgCrsTT1stDay + 141)
#define ActChgExa (ActChgCrsTT1stDay + 141) #define ActChgExa (ActChgCrsTT1stDay + 142)
#define ActReqRemExa (ActChgCrsTT1stDay + 142) #define ActReqRemExa (ActChgCrsTT1stDay + 143)
#define ActRemExa (ActChgCrsTT1stDay + 143) #define ActRemExa (ActChgCrsTT1stDay + 144)
#define ActHidExa (ActChgCrsTT1stDay + 144) #define ActHidExa (ActChgCrsTT1stDay + 145)
#define ActUnhExa (ActChgCrsTT1stDay + 145) #define ActUnhExa (ActChgCrsTT1stDay + 146)
#define ActReqLnkExa (ActChgCrsTT1stDay + 146) #define ActReqLnkExa (ActChgCrsTT1stDay + 147)
#define ActFrmNewExaSet (ActChgCrsTT1stDay + 147) #define ActFrmNewExaSet (ActChgCrsTT1stDay + 148)
#define ActNewExaSet (ActChgCrsTT1stDay + 148) #define ActNewExaSet (ActChgCrsTT1stDay + 149)
#define ActReqRemExaSet (ActChgCrsTT1stDay + 149) #define ActReqRemExaSet (ActChgCrsTT1stDay + 150)
#define ActRemExaSet (ActChgCrsTT1stDay + 150) #define ActRemExaSet (ActChgCrsTT1stDay + 151)
#define ActUp_ExaSet (ActChgCrsTT1stDay + 151) #define ActUp_ExaSet (ActChgCrsTT1stDay + 152)
#define ActDwnExaSet (ActChgCrsTT1stDay + 152) #define ActDwnExaSet (ActChgCrsTT1stDay + 153)
#define ActChgTitExaSet (ActChgCrsTT1stDay + 153) #define ActChgTitExaSet (ActChgCrsTT1stDay + 154)
#define ActChgNumQstExaSet (ActChgCrsTT1stDay + 154) #define ActChgNumQstExaSet (ActChgCrsTT1stDay + 155)
#define ActReqAddQstExaSet (ActChgCrsTT1stDay + 155) #define ActReqAddQstExaSet (ActChgCrsTT1stDay + 156)
#define ActLstTstQstForSet (ActChgCrsTT1stDay + 156) #define ActLstTstQstForSet (ActChgCrsTT1stDay + 157)
#define ActAddQstToExa (ActChgCrsTT1stDay + 157) #define ActAddQstToExa (ActChgCrsTT1stDay + 158)
#define ActReqRemSetQst (ActChgCrsTT1stDay + 158) #define ActReqRemSetQst (ActChgCrsTT1stDay + 159)
#define ActRemExaQst (ActChgCrsTT1stDay + 159) #define ActRemExaQst (ActChgCrsTT1stDay + 160)
#define ActValSetQst (ActChgCrsTT1stDay + 160) #define ActValSetQst (ActChgCrsTT1stDay + 161)
#define ActInvSetQst (ActChgCrsTT1stDay + 161) #define ActInvSetQst (ActChgCrsTT1stDay + 162)
#define ActReqNewExaSes (ActChgCrsTT1stDay + 162) #define ActReqNewExaSes (ActChgCrsTT1stDay + 163)
#define ActEdiOneExaSes (ActChgCrsTT1stDay + 163) #define ActEdiOneExaSes (ActChgCrsTT1stDay + 164)
#define ActNewExaSes (ActChgCrsTT1stDay + 164) #define ActNewExaSes (ActChgCrsTT1stDay + 165)
#define ActChgExaSes (ActChgCrsTT1stDay + 165) #define ActChgExaSes (ActChgCrsTT1stDay + 166)
#define ActReqRemExaSes (ActChgCrsTT1stDay + 166) #define ActReqRemExaSes (ActChgCrsTT1stDay + 167)
#define ActRemExaSes (ActChgCrsTT1stDay + 167) #define ActRemExaSes (ActChgCrsTT1stDay + 168)
#define ActHidExaSes (ActChgCrsTT1stDay + 168) #define ActHidExaSes (ActChgCrsTT1stDay + 169)
#define ActUnhExaSes (ActChgCrsTT1stDay + 169) #define ActUnhExaSes (ActChgCrsTT1stDay + 170)
#define ActSeeExaPrn (ActChgCrsTT1stDay + 170) #define ActSeeExaPrn (ActChgCrsTT1stDay + 171)
#define ActAnsExaPrn (ActChgCrsTT1stDay + 171) #define ActAnsExaPrn (ActChgCrsTT1stDay + 172)
#define ActEndExaPrn (ActChgCrsTT1stDay + 172) #define ActEndExaPrn (ActChgCrsTT1stDay + 173)
#define ActSeeMyExaResCrs (ActChgCrsTT1stDay + 173) #define ActSeeMyExaResCrs (ActChgCrsTT1stDay + 174)
#define ActSeeMyExaResExa (ActChgCrsTT1stDay + 174) #define ActSeeMyExaResExa (ActChgCrsTT1stDay + 175)
#define ActSeeMyExaResSes (ActChgCrsTT1stDay + 175) #define ActSeeMyExaResSes (ActChgCrsTT1stDay + 176)
#define ActSeeOneExaResMe (ActChgCrsTT1stDay + 176) #define ActSeeOneExaResMe (ActChgCrsTT1stDay + 177)
#define ActReqSeeUsrExaRes (ActChgCrsTT1stDay + 177) #define ActReqSeeUsrExaRes (ActChgCrsTT1stDay + 178)
#define ActSeeUsrExaResCrs (ActChgCrsTT1stDay + 178) #define ActSeeUsrExaResCrs (ActChgCrsTT1stDay + 179)
#define ActSeeUsrExaResExa (ActChgCrsTT1stDay + 179) #define ActSeeUsrExaResExa (ActChgCrsTT1stDay + 180)
#define ActSeeUsrExaResSes (ActChgCrsTT1stDay + 180) #define ActSeeUsrExaResSes (ActChgCrsTT1stDay + 181)
#define ActSeeOneExaResOth (ActChgCrsTT1stDay + 181) #define ActSeeOneExaResOth (ActChgCrsTT1stDay + 182)
#define ActChgVisExaRes (ActChgCrsTT1stDay + 182) #define ActChgVisExaRes (ActChgCrsTT1stDay + 183)
#define ActSeeGam (ActChgCrsTT1stDay + 183) #define ActSeeGam (ActChgCrsTT1stDay + 184)
#define ActReqRemMch (ActChgCrsTT1stDay + 184) #define ActReqRemMch (ActChgCrsTT1stDay + 185)
#define ActRemMch (ActChgCrsTT1stDay + 185) #define ActRemMch (ActChgCrsTT1stDay + 186)
#define ActEdiMch (ActChgCrsTT1stDay + 186) #define ActEdiMch (ActChgCrsTT1stDay + 187)
#define ActChgMch (ActChgCrsTT1stDay + 187) #define ActChgMch (ActChgCrsTT1stDay + 188)
#define ActReqNewMch (ActChgCrsTT1stDay + 188) #define ActReqNewMch (ActChgCrsTT1stDay + 189)
#define ActNewMch (ActChgCrsTT1stDay + 189) #define ActNewMch (ActChgCrsTT1stDay + 190)
#define ActResMch (ActChgCrsTT1stDay + 190) #define ActResMch (ActChgCrsTT1stDay + 191)
#define ActBckMch (ActChgCrsTT1stDay + 191) #define ActBckMch (ActChgCrsTT1stDay + 192)
#define ActPlyPauMch (ActChgCrsTT1stDay + 192) #define ActPlyPauMch (ActChgCrsTT1stDay + 193)
#define ActFwdMch (ActChgCrsTT1stDay + 193) #define ActFwdMch (ActChgCrsTT1stDay + 194)
#define ActChgNumColMch (ActChgCrsTT1stDay + 194) #define ActChgNumColMch (ActChgCrsTT1stDay + 195)
#define ActChgVisResMchQst (ActChgCrsTT1stDay + 195) #define ActChgVisResMchQst (ActChgCrsTT1stDay + 196)
#define ActMchCntDwn (ActChgCrsTT1stDay + 196) #define ActMchCntDwn (ActChgCrsTT1stDay + 197)
#define ActRefMchTch (ActChgCrsTT1stDay + 197) #define ActRefMchTch (ActChgCrsTT1stDay + 198)
#define ActJoiMch (ActChgCrsTT1stDay + 198) #define ActJoiMch (ActChgCrsTT1stDay + 199)
#define ActSeeMchAnsQstStd (ActChgCrsTT1stDay + 199) #define ActSeeMchAnsQstStd (ActChgCrsTT1stDay + 200)
#define ActRemMchAnsQstStd (ActChgCrsTT1stDay + 200) #define ActRemMchAnsQstStd (ActChgCrsTT1stDay + 201)
#define ActAnsMchQstStd (ActChgCrsTT1stDay + 201) #define ActAnsMchQstStd (ActChgCrsTT1stDay + 202)
#define ActRefMchStd (ActChgCrsTT1stDay + 202) #define ActRefMchStd (ActChgCrsTT1stDay + 203)
#define ActSeeMyMchResCrs (ActChgCrsTT1stDay + 203) #define ActSeeMyMchResCrs (ActChgCrsTT1stDay + 204)
#define ActSeeMyMchResGam (ActChgCrsTT1stDay + 204) #define ActSeeMyMchResGam (ActChgCrsTT1stDay + 205)
#define ActSeeMyMchResMch (ActChgCrsTT1stDay + 205) #define ActSeeMyMchResMch (ActChgCrsTT1stDay + 206)
#define ActSeeOneMchResMe (ActChgCrsTT1stDay + 206) #define ActSeeOneMchResMe (ActChgCrsTT1stDay + 207)
#define ActReqSeeUsrMchRes (ActChgCrsTT1stDay + 207) #define ActReqSeeUsrMchRes (ActChgCrsTT1stDay + 208)
#define ActSeeUsrMchResCrs (ActChgCrsTT1stDay + 208) #define ActSeeUsrMchResCrs (ActChgCrsTT1stDay + 209)
#define ActSeeUsrMchResGam (ActChgCrsTT1stDay + 209) #define ActSeeUsrMchResGam (ActChgCrsTT1stDay + 210)
#define ActSeeUsrMchResMch (ActChgCrsTT1stDay + 210) #define ActSeeUsrMchResMch (ActChgCrsTT1stDay + 211)
#define ActSeeOneMchResOth (ActChgCrsTT1stDay + 211) #define ActSeeOneMchResOth (ActChgCrsTT1stDay + 212)
#define ActChgVisResMchUsr (ActChgCrsTT1stDay + 212) #define ActChgVisResMchUsr (ActChgCrsTT1stDay + 213)
#define ActLstOneGam (ActChgCrsTT1stDay + 213) #define ActLstOneGam (ActChgCrsTT1stDay + 214)
#define ActFrmNewGam (ActChgCrsTT1stDay + 214) #define ActFrmNewGam (ActChgCrsTT1stDay + 215)
#define ActEdiOneGam (ActChgCrsTT1stDay + 215) #define ActEdiOneGam (ActChgCrsTT1stDay + 216)
#define ActNewGam (ActChgCrsTT1stDay + 216) #define ActNewGam (ActChgCrsTT1stDay + 217)
#define ActChgGam (ActChgCrsTT1stDay + 217) #define ActChgGam (ActChgCrsTT1stDay + 218)
#define ActReqRemGam (ActChgCrsTT1stDay + 218) #define ActReqRemGam (ActChgCrsTT1stDay + 219)
#define ActRemGam (ActChgCrsTT1stDay + 219) #define ActRemGam (ActChgCrsTT1stDay + 220)
#define ActHidGam (ActChgCrsTT1stDay + 220) #define ActHidGam (ActChgCrsTT1stDay + 221)
#define ActUnhGam (ActChgCrsTT1stDay + 221) #define ActUnhGam (ActChgCrsTT1stDay + 222)
#define ActAddOneGamQst (ActChgCrsTT1stDay + 222) #define ActAddOneGamQst (ActChgCrsTT1stDay + 223)
#define ActGamLstTstQst (ActChgCrsTT1stDay + 223) #define ActGamLstTstQst (ActChgCrsTT1stDay + 224)
#define ActAddTstQstToGam (ActChgCrsTT1stDay + 224) #define ActAddTstQstToGam (ActChgCrsTT1stDay + 225)
#define ActReqRemGamQst (ActChgCrsTT1stDay + 225) #define ActReqRemGamQst (ActChgCrsTT1stDay + 226)
#define ActRemGamQst (ActChgCrsTT1stDay + 226) #define ActRemGamQst (ActChgCrsTT1stDay + 227)
#define ActUp_GamQst (ActChgCrsTT1stDay + 227) #define ActUp_GamQst (ActChgCrsTT1stDay + 228)
#define ActDwnGamQst (ActChgCrsTT1stDay + 228) #define ActDwnGamQst (ActChgCrsTT1stDay + 229)
#define ActReqLnkGam (ActChgCrsTT1stDay + 229) #define ActReqLnkGam (ActChgCrsTT1stDay + 230)
#define ActSeeSvy (ActChgCrsTT1stDay + 230) #define ActSeeSvy (ActChgCrsTT1stDay + 231)
#define ActAnsSvy (ActChgCrsTT1stDay + 231) #define ActAnsSvy (ActChgCrsTT1stDay + 232)
#define ActFrmNewSvy (ActChgCrsTT1stDay + 232) #define ActFrmNewSvy (ActChgCrsTT1stDay + 233)
#define ActEdiOneSvy (ActChgCrsTT1stDay + 233) #define ActEdiOneSvy (ActChgCrsTT1stDay + 234)
#define ActNewSvy (ActChgCrsTT1stDay + 234) #define ActNewSvy (ActChgCrsTT1stDay + 235)
#define ActChgSvy (ActChgCrsTT1stDay + 235) #define ActChgSvy (ActChgCrsTT1stDay + 236)
#define ActReqRemSvy (ActChgCrsTT1stDay + 236) #define ActReqRemSvy (ActChgCrsTT1stDay + 237)
#define ActRemSvy (ActChgCrsTT1stDay + 237) #define ActRemSvy (ActChgCrsTT1stDay + 238)
#define ActReqRstSvy (ActChgCrsTT1stDay + 238) #define ActReqRstSvy (ActChgCrsTT1stDay + 239)
#define ActRstSvy (ActChgCrsTT1stDay + 239) #define ActRstSvy (ActChgCrsTT1stDay + 240)
#define ActHidSvy (ActChgCrsTT1stDay + 240) #define ActHidSvy (ActChgCrsTT1stDay + 241)
#define ActUnhSvy (ActChgCrsTT1stDay + 241) #define ActUnhSvy (ActChgCrsTT1stDay + 242)
#define ActReqLnkSvy (ActChgCrsTT1stDay + 242) #define ActReqLnkSvy (ActChgCrsTT1stDay + 243)
#define ActEdiOneSvyQst (ActChgCrsTT1stDay + 243) #define ActEdiOneSvyQst (ActChgCrsTT1stDay + 244)
#define ActRcvSvyQst (ActChgCrsTT1stDay + 244) #define ActRcvSvyQst (ActChgCrsTT1stDay + 245)
#define ActReqRemSvyQst (ActChgCrsTT1stDay + 245) #define ActReqRemSvyQst (ActChgCrsTT1stDay + 246)
#define ActRemSvyQst (ActChgCrsTT1stDay + 246) #define ActRemSvyQst (ActChgCrsTT1stDay + 247)
/*****************************************************************************/ /*****************************************************************************/
/******************************** Files tab **********************************/ /******************************** Files tab **********************************/

View File

@ -981,7 +981,8 @@ void Asg_GetNotifAssignment (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
void Asg_PutParamAsgCod (long AsgCod) void Asg_PutParamAsgCod (long AsgCod)
{ {
Par_PutHiddenParamLong (NULL,"AsgCod",AsgCod); if (AsgCod > 0)
Par_PutHiddenParamLong (NULL,"AsgCod",AsgCod);
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -28,6 +28,7 @@
#include "swad_alert.h" #include "swad_alert.h"
#include "swad_assignment.h" #include "swad_assignment.h"
#include "swad_assignment_database.h" #include "swad_assignment_database.h"
#include "swad_assignment_resource.h"
#include "swad_error.h" #include "swad_error.h"
#include "swad_form.h" #include "swad_form.h"
#include "swad_pagination.h" #include "swad_pagination.h"
@ -56,7 +57,7 @@ void AsgRsc_GetLinkToAssignment (void)
Err_WrongAssignmentExit (); Err_WrongAssignmentExit ();
/***** Get assignment title *****/ /***** Get assignment title *****/
Asg_DB_GetAssignmentTitleByCod (Assignments.AsgCod,Title); AsgRsc_GetTitleFromAsgCod (Assignments.AsgCod,Title,sizeof (Title) - 1);
/***** Copy link to assignment into resource clipboard *****/ /***** Copy link to assignment into resource clipboard *****/
Prg_DB_CopyToClipboard (PrgRsc_ASSIGNMENT,Assignments.AsgCod); Prg_DB_CopyToClipboard (PrgRsc_ASSIGNMENT,Assignments.AsgCod);
@ -80,26 +81,29 @@ void AsgRsc_WriteAssignmentInCrsProgram (long AsgCod,bool PutFormToGo,
const char *Icon,const char *IconTitle) const char *Icon,const char *IconTitle)
{ {
extern const char *Txt_Actions[Act_NUM_ACTIONS]; extern const char *Txt_Actions[Act_NUM_ACTIONS];
Act_Action_t NextAction;
char Title[Asg_MAX_BYTES_ASSIGNMENT_TITLE + 1]; char Title[Asg_MAX_BYTES_ASSIGNMENT_TITLE + 1];
/***** Get assignment title *****/ /***** Get assignment title *****/
Asg_DB_GetAssignmentTitleByCod (AsgCod,Title); AsgRsc_GetTitleFromAsgCod (AsgCod,Title,sizeof (Title) - 1);
/***** Begin form to go to assignment *****/ /***** Begin form to go to assignment *****/
if (PutFormToGo) if (PutFormToGo)
{ {
Frm_BeginForm (ActSeeOneAsg); NextAction = (AsgCod > 0) ? ActSeeOneAsg : // Assignment specified
ActSeeAsg; // All assignments
Frm_BeginForm (NextAction);
Asg_PutParamAsgCod (AsgCod); Asg_PutParamAsgCod (AsgCod);
// TODO: In the listing of assignments, the page is always the first. // TODO: In the listing of assignments, the page is always the first.
// The page should be that corresponding to the selected assignment. // The page should be that corresponding to the selected assignment.
HTM_BUTTON_Submit_Begin (Txt_Actions[ActSeeOneAsg], HTM_BUTTON_Submit_Begin (Txt_Actions[NextAction],
"class=\"LM BT_LINK PRG_LNK_%s\"", "class=\"LM BT_LINK PRG_LNK_%s\"",
The_GetSuffix ()); The_GetSuffix ());
} }
/***** Icon depending on type ******/ /***** Icon depending on type ******/
if (PutFormToGo) if (PutFormToGo)
Ico_PutIconLink (Icon,Ico_BLACK,ActSeeOneAsg); Ico_PutIconLink (Icon,Ico_BLACK,NextAction);
else else
Ico_PutIconOn (Icon,Ico_BLACK,IconTitle); Ico_PutIconOn (Icon,Ico_BLACK,IconTitle);
@ -124,7 +128,12 @@ void AsgRsc_GetTitleFromAsgCod (long AsgCod,char *Title,size_t TitleSize)
{ {
char TitleFromDB[Asg_MAX_BYTES_ASSIGNMENT_TITLE + 1]; char TitleFromDB[Asg_MAX_BYTES_ASSIGNMENT_TITLE + 1];
/***** Get assignment title *****/ if (AsgCod > 0)
Asg_DB_GetAssignmentTitleByCod (AsgCod,TitleFromDB); {
Str_Copy (Title,TitleFromDB,TitleSize); /***** Get assignment title *****/
Asg_DB_GetAssignmentTitleByCod (AsgCod,TitleFromDB);
Str_Copy (Title,TitleFromDB,TitleSize);
}
else
Str_Copy (Title,"?",TitleSize);
} }

View File

@ -809,7 +809,8 @@ static void Att_PutParamSelectedAttCod (void *Events)
void Att_PutParamAttCod (long AttCod) void Att_PutParamAttCod (long AttCod)
{ {
Par_PutHiddenParamLong (NULL,"AttCod",AttCod); if (AttCod > 0)
Par_PutHiddenParamLong (NULL,"AttCod",AttCod);
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -27,6 +27,7 @@
#include "swad_alert.h" #include "swad_alert.h"
#include "swad_attendance.h" #include "swad_attendance.h"
#include "swad_attendance_database.h" #include "swad_attendance_database.h"
#include "swad_attendance_resource.h"
#include "swad_error.h" #include "swad_error.h"
#include "swad_form.h" #include "swad_form.h"
#include "swad_program_database.h" #include "swad_program_database.h"
@ -46,7 +47,7 @@ void AttRsc_GetLinkToEvent (void)
Err_WrongEventExit (); Err_WrongEventExit ();
/***** Get attendance event title *****/ /***** Get attendance event title *****/
Att_DB_GetAttEventTitle (AttCod,Title); AttRsc_GetTitleFromAttCod (AttCod,Title,sizeof (Title) - 1);
/***** Copy link to attendance event into resource clipboard *****/ /***** Copy link to attendance event into resource clipboard *****/
Prg_DB_CopyToClipboard (PrgRsc_ATTENDANCE_EVENT,AttCod); Prg_DB_CopyToClipboard (PrgRsc_ATTENDANCE_EVENT,AttCod);
@ -67,25 +68,28 @@ void AttRsc_WriteAttEventInCrsProgram (long AttCod,bool PutFormToGo,
const char *Icon,const char *IconTitle) const char *Icon,const char *IconTitle)
{ {
extern const char *Txt_Actions[Act_NUM_ACTIONS]; extern const char *Txt_Actions[Act_NUM_ACTIONS];
Act_Action_t NextAction;
char Title[Att_MAX_BYTES_ATTENDANCE_EVENT_TITLE + 1]; char Title[Att_MAX_BYTES_ATTENDANCE_EVENT_TITLE + 1];
/***** Get game title *****/ /***** Get game title *****/
Att_DB_GetAttEventTitle (AttCod,Title); AttRsc_GetTitleFromAttCod (AttCod,Title,sizeof (Title) - 1);
/***** Begin form to go to game *****/ /***** Begin form to go to game *****/
if (PutFormToGo) if (PutFormToGo)
{ {
Frm_BeginForm (ActSeeOneAtt); NextAction = (AttCod > 0) ? ActSeeOneAtt : // Attendance events specified
ActSeeAtt; // All attendance events
Frm_BeginForm (NextAction);
Att_PutParamAttCod (AttCod); Att_PutParamAttCod (AttCod);
Att_PutParamsCodGrps (AttCod); Att_PutParamsCodGrps (AttCod);
HTM_BUTTON_Submit_Begin (Txt_Actions[ActSeeOneAtt], HTM_BUTTON_Submit_Begin (Txt_Actions[NextAction],
"class=\"LM BT_LINK PRG_LNK_%s\"", "class=\"LM BT_LINK PRG_LNK_%s\"",
The_GetSuffix ()); The_GetSuffix ());
} }
/***** Icon depending on type ******/ /***** Icon depending on type ******/
if (PutFormToGo) if (PutFormToGo)
Ico_PutIconLink (Icon,Ico_BLACK,ActSeeOneAtt); Ico_PutIconLink (Icon,Ico_BLACK,NextAction);
else else
Ico_PutIconOn (Icon,Ico_BLACK,IconTitle); Ico_PutIconOn (Icon,Ico_BLACK,IconTitle);
@ -110,7 +114,12 @@ void AttRsc_GetTitleFromAttCod (long AttCod,char *Title,size_t TitleSize)
{ {
char TitleFromDB[Att_MAX_BYTES_ATTENDANCE_EVENT_TITLE + 1]; char TitleFromDB[Att_MAX_BYTES_ATTENDANCE_EVENT_TITLE + 1];
/***** Get attendance event title *****/ if (AttCod > 0)
Att_DB_GetAttEventTitle (AttCod,TitleFromDB); {
Str_Copy (Title,TitleFromDB,TitleSize); /***** Get attendance event title *****/
Att_DB_GetAttEventTitle (AttCod,TitleFromDB);
Str_Copy (Title,TitleFromDB,TitleSize);
}
else
Str_Copy (Title,"?",TitleSize);
} }

View File

@ -1316,8 +1316,8 @@ static bool Brw_CheckIfICanEditFileOrFolder (unsigned Level);
static bool Brw_CheckIfICanCreateIntoFolder (unsigned Level); static bool Brw_CheckIfICanCreateIntoFolder (unsigned Level);
static bool Brw_CheckIfICanModifySharedFileOrFolder (void); static bool Brw_CheckIfICanModifySharedFileOrFolder (void);
static bool Brw_CheckIfICanModifyPrivateFileOrFolder (void); static bool Brw_CheckIfICanModifyPrivateFileOrFolder (void);
static bool Brw_CheckIfICanViewProjectDocuments (long PrjCod); static bool Prj_CheckIfICanViewProjectDocuments (long PrjCod);
static bool Brw_CheckIfICanViewProjectAssessment (long PrjCod); static bool Prj_CheckIfICanViewProjectAssessment (long PrjCod);
static bool Brw_CheckIfICanModifyPrjDocFileOrFolder (void); static bool Brw_CheckIfICanModifyPrjDocFileOrFolder (void);
static bool Brw_CheckIfICanModifyPrjAssFileOrFolder (void); static bool Brw_CheckIfICanModifyPrjAssFileOrFolder (void);
@ -1986,10 +1986,7 @@ void Brw_GetParAndInitFileBrowser (void)
Brw_SetFullPathInTree (); Brw_SetFullPathInTree ();
/***** Get other parameters *****/ /***** Get other parameters *****/
if (Brw_GetIfProjectFileBrowser ()) if (Brw_GetIfCrsAssigWorksFileBrowser ())
/* Get project code */
Prj_SetPrjCod (Prj_GetParamPrjCod ());
else if (Brw_GetIfCrsAssigWorksFileBrowser ())
{ {
/* Get lists of the selected users if not already got */ /* Get lists of the selected users if not already got */
Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected); Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
@ -2204,7 +2201,8 @@ static void Brw_GetDataCurrentGrp (void)
void Brw_PutHiddenParamFilCod (long FilCod) void Brw_PutHiddenParamFilCod (long FilCod)
{ {
Par_PutHiddenParamLong (NULL,"FilCod",FilCod); if (FilCod > 0)
Par_PutHiddenParamLong (NULL,"FilCod",FilCod);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2254,8 +2252,7 @@ void Brw_PutParamsFileBrowser (const char *PathInTree,const char *FilFolLnkName,
Par_PutHiddenParamString (NULL,"Path",PathInTree); Par_PutHiddenParamString (NULL,"Path",PathInTree);
if (FilFolLnkName) if (FilFolLnkName)
Par_PutHiddenParamString (NULL,Brw_FileTypeParamName[FileType],FilFolLnkName); Par_PutHiddenParamString (NULL,Brw_FileTypeParamName[FileType],FilFolLnkName);
if (FilCod > 0) Brw_PutHiddenParamFilCod (FilCod);
Brw_PutHiddenParamFilCod (FilCod);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2989,55 +2986,25 @@ static void Brw_ShowFileBrowserNormal (void)
/************* Show file browser with the documents of a project *************/ /************* Show file browser with the documents of a project *************/
/*****************************************************************************/ /*****************************************************************************/
static void Brw_ShowFileBrowserProject (void) void Brw_ShowFileBrowserProject (long PrjCod)
{ {
extern const char *Hlp_ASSESSMENT_Projects; Brw_WriteTopBeforeShowingFileBrowser ();
struct Prj_Project Prj;
/***** Allocate memory for the project *****/ if (Prj_CheckIfICanViewProjectDocuments (PrjCod))
Prj_AllocMemProject (&Prj); {
/***** Show the tree with the project documents *****/
Gbl.FileBrowser.Type = Brw_ADMI_DOC_PRJ;
Brw_InitializeFileBrowser ();
Brw_ShowFileBrowser ();
}
/***** Get project data *****/ if (Prj_CheckIfICanViewProjectAssessment (PrjCod))
Prj.PrjCod = Prj_GetPrjCod (); {
Prj_GetDataOfProjectByCod (&Prj); /***** Show the tree with the project assessment *****/
Gbl.FileBrowser.Type = Brw_ADMI_ASS_PRJ;
/***** Begin box *****/ Brw_InitializeFileBrowser ();
Box_BoxBegin (NULL,Prj.Title, Brw_ShowFileBrowser ();
NULL,NULL, }
Hlp_ASSESSMENT_Projects,Box_NOT_CLOSABLE);
/***** Show the project *****/
Prj_ShowOneUniqueProject (&Prj);
/***** Show project file browsers *****/
if (Brw_CheckIfICanViewProjectFiles (Prj.PrjCod))
{
Brw_WriteTopBeforeShowingFileBrowser ();
if (Brw_CheckIfICanViewProjectDocuments (Prj.PrjCod))
{
/***** Show the tree with the project documents *****/
Gbl.FileBrowser.Type = Brw_ADMI_DOC_PRJ;
Brw_InitializeFileBrowser ();
Brw_ShowFileBrowser ();
}
if (Brw_CheckIfICanViewProjectAssessment (Prj.PrjCod))
{
/***** Show the tree with the project assessment *****/
Gbl.FileBrowser.Type = Brw_ADMI_ASS_PRJ;
Brw_InitializeFileBrowser ();
Brw_ShowFileBrowser ();
}
}
else
Ale_ShowAlert (Ale_WARNING,"You have no access to project files.");
/***** End box *****/
Box_BoxEnd ();
/***** Free memory of the project *****/
Prj_FreeMemProject (&Prj);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -3353,7 +3320,7 @@ void Brw_ShowAgainFileBrowserOrWorks (void)
else if (Brw_GetIfCrsAssigWorksFileBrowser ()) else if (Brw_GetIfCrsAssigWorksFileBrowser ())
Brw_ShowFileBrowsersAsgWrkCrs (); Brw_ShowFileBrowsersAsgWrkCrs ();
else if (Brw_GetIfProjectFileBrowser ()) else if (Brw_GetIfProjectFileBrowser ())
Brw_ShowFileBrowserProject (); Prj_ShowProjectWithFileBrowser ();
else else
Brw_ShowFileBrowserNormal (); Brw_ShowFileBrowserNormal ();
@ -9605,7 +9572,7 @@ static bool Brw_CheckIfICanModifyPrivateFileOrFolder (void)
/******************** Can I view files of a given project? *******************/ /******************** Can I view files of a given project? *******************/
/*****************************************************************************/ /*****************************************************************************/
bool Brw_CheckIfICanViewProjectFiles (long PrjCod) bool Prj_CheckIfICanViewProjectFiles (long PrjCod)
{ {
switch (Gbl.Usrs.Me.Role.Logged) switch (Gbl.Usrs.Me.Role.Logged)
{ {
@ -9624,7 +9591,7 @@ bool Brw_CheckIfICanViewProjectFiles (long PrjCod)
/******** Check if I have permission to view project documents zone **********/ /******** Check if I have permission to view project documents zone **********/
/*****************************************************************************/ /*****************************************************************************/
static bool Brw_CheckIfICanViewProjectDocuments (long PrjCod) static bool Prj_CheckIfICanViewProjectDocuments (long PrjCod)
{ {
switch (Gbl.Usrs.Me.Role.Logged) switch (Gbl.Usrs.Me.Role.Logged)
{ {
@ -9644,7 +9611,7 @@ static bool Brw_CheckIfICanViewProjectDocuments (long PrjCod)
/******** Check if I have permission to view project assessment zone *********/ /******** Check if I have permission to view project assessment zone *********/
/*****************************************************************************/ /*****************************************************************************/
static bool Brw_CheckIfICanViewProjectAssessment (long PrjCod) static bool Prj_CheckIfICanViewProjectAssessment (long PrjCod)
{ {
switch (Gbl.Usrs.Me.Role.Logged) switch (Gbl.Usrs.Me.Role.Logged)
{ {

View File

@ -207,6 +207,9 @@ void Brw_PutHiddenParamFullTreeIfSelected (void *FullTree);
void Brw_CreateDirDownloadTmp (void); void Brw_CreateDirDownloadTmp (void);
void Brw_AskEditWorksCrs (void); void Brw_AskEditWorksCrs (void);
void Brw_ShowFileBrowserProject (long PrjCod);
void Brw_AskRemFileFromTree (void); void Brw_AskRemFileFromTree (void);
void Brw_RemFileFromTree (void); void Brw_RemFileFromTree (void);
void Brw_RemFolderFromTree (void); void Brw_RemFolderFromTree (void);
@ -244,7 +247,7 @@ void Brw_GetCrsGrpFromFileMetadata (Brw_FileBrowser_t FileBrowser,long Cod,
long *CrsCod, long *CrsCod,
long *GrpCod); long *GrpCod);
bool Brw_CheckIfICanViewProjectFiles (long PrjCod); bool Prj_CheckIfICanViewProjectFiles (long PrjCod);
long Brw_GetCodForFileBrowser (void); long Brw_GetCodForFileBrowser (void);
long Brw_GetZoneUsrCodForFileBrowser (void); long Brw_GetZoneUsrCodForFileBrowser (void);

View File

@ -95,6 +95,7 @@ void BrwRsc_WriteDocFileNameInCrsProgram (long FilCod,bool PutFormToGo,
const char *Icon,const char *IconTitle) const char *Icon,const char *IconTitle)
{ {
extern const char *Txt_Actions[Act_NUM_ACTIONS]; extern const char *Txt_Actions[Act_NUM_ACTIONS];
Act_Action_t NextAction;
struct Brw_FileMetadata FileMetadata; struct Brw_FileMetadata FileMetadata;
/***** Get file metadata *****/ /***** Get file metadata *****/
@ -104,12 +105,14 @@ void BrwRsc_WriteDocFileNameInCrsProgram (long FilCod,bool PutFormToGo,
/***** Begin form to go to file data *****/ /***** Begin form to go to file data *****/
if (PutFormToGo) if (PutFormToGo)
{ {
Frm_BeginForm (ActReqDatSeeDocCrs); NextAction = (FileMetadata.FilCod > 0) ? ActReqDatSeeDocCrs : // Document specified
ActSeeAdmDocCrsGrp; // All documents
Frm_BeginForm (NextAction);
Brw_PutParamsFileBrowser (NULL, // Not used Brw_PutParamsFileBrowser (NULL, // Not used
NULL, // Not used NULL, // Not used
Brw_IS_UNKNOWN, // Not used Brw_IS_UNKNOWN, // Not used
FileMetadata.FilCod); FileMetadata.FilCod);
HTM_BUTTON_Submit_Begin (Txt_Actions[ActReqDatSeeDocCrs], HTM_BUTTON_Submit_Begin (Txt_Actions[NextAction],
"class=\"LM BT_LINK PRG_LNK_%s\"", "class=\"LM BT_LINK PRG_LNK_%s\"",
The_GetSuffix ()); The_GetSuffix ());
} }
@ -124,7 +127,7 @@ void BrwRsc_WriteDocFileNameInCrsProgram (long FilCod,bool PutFormToGo,
break; break;
case Brw_IS_LINK: case Brw_IS_LINK:
if (PutFormToGo) if (PutFormToGo)
Ico_PutIconLink (Icon,Ico_BLACK,ActReqDatSeeDocCrs); Ico_PutIconLink (Icon,Ico_BLACK,NextAction);
else else
Ico_PutIconOn (Icon,Ico_BLACK,IconTitle); Ico_PutIconOn (Icon,Ico_BLACK,IconTitle);
break; break;
@ -152,6 +155,7 @@ void BrwRsc_WriteMrkFileNameInCrsProgram (long FilCod,bool PutFormToGo,
const char *Icon,const char *IconTitle) const char *Icon,const char *IconTitle)
{ {
extern const char *Txt_Actions[Act_NUM_ACTIONS]; extern const char *Txt_Actions[Act_NUM_ACTIONS];
Act_Action_t NextAction;
struct Brw_FileMetadata FileMetadata; struct Brw_FileMetadata FileMetadata;
/***** Get file metadata *****/ /***** Get file metadata *****/
@ -161,19 +165,21 @@ void BrwRsc_WriteMrkFileNameInCrsProgram (long FilCod,bool PutFormToGo,
/***** Begin form to go to file data *****/ /***** Begin form to go to file data *****/
if (PutFormToGo) if (PutFormToGo)
{ {
Frm_BeginForm (ActReqDatSeeMrkCrs); NextAction = (FileMetadata.FilCod > 0) ? ActReqDatSeeMrkCrs : // Marks file specified
ActSeeAdmMrk; // All marks files
Frm_BeginForm (NextAction);
Brw_PutParamsFileBrowser (NULL, // Not used Brw_PutParamsFileBrowser (NULL, // Not used
NULL, // Not used NULL, // Not used
Brw_IS_UNKNOWN, // Not used Brw_IS_UNKNOWN, // Not used
FileMetadata.FilCod); FileMetadata.FilCod);
HTM_BUTTON_Submit_Begin (Txt_Actions[ActReqDatSeeMrkCrs], HTM_BUTTON_Submit_Begin (Txt_Actions[NextAction],
"class=\"LM BT_LINK PRG_LNK_%s\"", "class=\"LM BT_LINK PRG_LNK_%s\"",
The_GetSuffix ()); The_GetSuffix ());
} }
/***** Icon depending on type ******/ /***** Icon depending on type ******/
if (PutFormToGo) if (PutFormToGo)
Ico_PutIconLink (Icon,Ico_BLACK,ActReqDatSeeMrkCrs); Ico_PutIconLink (Icon,Ico_BLACK,NextAction);
else else
Ico_PutIconOn (Icon,Ico_BLACK,IconTitle); Ico_PutIconOn (Icon,Ico_BLACK,IconTitle);
@ -197,13 +203,18 @@ void BrwRsc_GetFileNameFromFilCod (long FilCod,char *FileName,size_t FileNameSiz
{ {
struct Brw_FileMetadata FileMetadata; struct Brw_FileMetadata FileMetadata;
/***** Return nothing on error *****/ if (FilCod > 0)
FileName[0] = '\0'; // Return nothing on error {
/***** Return nothing on error *****/
FileName[0] = '\0'; // Return nothing on error
/***** Get file metadata *****/ /***** Get file metadata *****/
FileMetadata.FilCod = FilCod; FileMetadata.FilCod = FilCod;
Brw_GetFileMetadataByCod (&FileMetadata); Brw_GetFileMetadataByCod (&FileMetadata);
/***** Copy file name into summary string *****/ /***** Copy file name into summary string *****/
Str_Copy (FileName,FileMetadata.FilFolLnk.Name,FileNameSize); Str_Copy (FileName,FileMetadata.FilFolLnk.Name,FileNameSize);
}
else
Str_Copy (FileName,"?",FileNameSize);
} }

View File

@ -1541,7 +1541,8 @@ static void Cfe_PutParamExaCodToEdit (void *ExaCod)
void Cfe_PutHiddenParamExaCod (long ExaCod) void Cfe_PutHiddenParamExaCod (long ExaCod)
{ {
Par_PutHiddenParamLong (NULL,"ExaCod",ExaCod); if (ExaCod > 0)
Par_PutHiddenParamLong (NULL,"ExaCod",ExaCod);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1676,7 +1677,7 @@ static void Cfe_GetNotifContentCallForExam (const struct Cfe_CallsForExams *Call
/*****************************************************************************/ /*****************************************************************************/
void Cfe_BuildSessionAndDate (const struct Cfe_CallsForExams *CallsForExams, void Cfe_BuildSessionAndDate (const struct Cfe_CallsForExams *CallsForExams,
char SessionAndDate[Cfe_MAX_BYTES_SESSION_AND_DATE]) char SessionAndDate[Cfe_MAX_BYTES_SESSION_AND_DATE])
{ {
char StrExamDate[Cns_MAX_BYTES_DATE + 1]; char StrExamDate[Cns_MAX_BYTES_DATE + 1];

View File

@ -41,33 +41,24 @@ void Cfe_GetLinkToCallForExam (void)
extern const char *Txt_Link_to_resource_X_copied_into_clipboard; extern const char *Txt_Link_to_resource_X_copied_into_clipboard;
struct Cfe_CallsForExams *CallsForExams = Cfe_GetGlobalCallsForExams (); struct Cfe_CallsForExams *CallsForExams = Cfe_GetGlobalCallsForExams ();
long ExaCod; long ExaCod;
char SessionAndDate[Cfe_MAX_BYTES_SESSION_AND_DATE]; char Title[Cfe_MAX_BYTES_SESSION_AND_DATE];
/***** Reset calls for exams context *****/
Cfe_ResetCallsForExams (CallsForExams);
/***** Get the code of the call for exam *****/ /***** Get the code of the call for exam *****/
if ((ExaCod = Cfe_GetParamExaCod ()) <= 0) if ((ExaCod = Cfe_GetParamExaCod ()) <= 0)
Err_WrongCallForExamExit (); Err_WrongCallForExamExit ();
/***** Get data of call for exam *****/ /***** Get session and date of the exam *****/
Cfe_AllocMemCallForExam (CallsForExams); CfeRsc_GetTitleFromExaCod (ExaCod,Title,sizeof (Title) - 1);
Cfe_GetDataCallForExamFromDB (CallsForExams,ExaCod);
/***** Session and date of the exam *****/
Cfe_BuildSessionAndDate (CallsForExams,SessionAndDate);
/***** Copy link to call for exam into resource clipboard *****/ /***** Copy link to call for exam into resource clipboard *****/
Prg_DB_CopyToClipboard (PrgRsc_CALL_FOR_EXAM,ExaCod); Prg_DB_CopyToClipboard (PrgRsc_CALL_FOR_EXAM,ExaCod);
/***** Write sucess message *****/ /***** Write sucess message *****/
Ale_ShowAlert (Ale_SUCCESS,Txt_Link_to_resource_X_copied_into_clipboard, Ale_ShowAlert (Ale_SUCCESS,Txt_Link_to_resource_X_copied_into_clipboard,
SessionAndDate); Title);
/***** Free memory of the call for exam *****/
Cfe_FreeMemCallForExam (CallsForExams);
/***** Set exam to be highlighted *****/ /***** Set exam to be highlighted *****/
Cfe_ResetCallsForExams (CallsForExams);
CallsForExams->HighlightExaCod = ExaCod; CallsForExams->HighlightExaCod = ExaCod;
/***** Show again the list of calls for exams *****/ /***** Show again the list of calls for exams *****/
@ -82,16 +73,12 @@ void CfeRsc_WriteCallForExamInCrsProgram (long ExaCod,bool PutFormToGo,
const char *Icon,const char *IconTitle) const char *Icon,const char *IconTitle)
{ {
extern const char *Txt_Actions[Act_NUM_ACTIONS]; extern const char *Txt_Actions[Act_NUM_ACTIONS];
struct Cfe_CallsForExams CallsForExams; Act_Action_t NextAction;
char SessionAndDate[Cfe_MAX_BYTES_SESSION_AND_DATE]; char Title[Cfe_MAX_BYTES_SESSION_AND_DATE];
char *Anchor = NULL; char *Anchor = NULL;
/***** Get session and date of the exam *****/ /***** Get session and date of the exam *****/
Cfe_ResetCallsForExams (&CallsForExams); CfeRsc_GetTitleFromExaCod (ExaCod,Title,sizeof (Title) - 1);
Cfe_AllocMemCallForExam (&CallsForExams);
Cfe_GetDataCallForExamFromDB (&CallsForExams,ExaCod);
Cfe_BuildSessionAndDate (&CallsForExams,SessionAndDate);
Cfe_FreeMemCallForExam (&CallsForExams);
/***** Begin form to download file *****/ /***** Begin form to download file *****/
if (PutFormToGo) if (PutFormToGo)
@ -100,9 +87,11 @@ void CfeRsc_WriteCallForExamInCrsProgram (long ExaCod,bool PutFormToGo,
Frm_SetAnchorStr (ExaCod,&Anchor); Frm_SetAnchorStr (ExaCod,&Anchor);
/* Begin form */ /* Begin form */
Frm_BeginFormAnchor (ActSeeOneCfe,Anchor); NextAction = (ExaCod > 0) ? ActSeeOneCfe : // Call for exam specified
ActSeeAllCfe; // All calls for exams
Frm_BeginFormAnchor (NextAction,Anchor);
Cfe_PutHiddenParamExaCod (ExaCod); Cfe_PutHiddenParamExaCod (ExaCod);
HTM_BUTTON_Submit_Begin (Txt_Actions[ActSeeOneCfe], HTM_BUTTON_Submit_Begin (Txt_Actions[NextAction],
"class=\"LM BT_LINK PRG_LNK_%s\"", "class=\"LM BT_LINK PRG_LNK_%s\"",
The_GetSuffix ()); The_GetSuffix ());
@ -112,12 +101,12 @@ void CfeRsc_WriteCallForExamInCrsProgram (long ExaCod,bool PutFormToGo,
/***** Icon depending on type ******/ /***** Icon depending on type ******/
if (PutFormToGo) if (PutFormToGo)
Ico_PutIconLink (Icon,Ico_BLACK,ActSeeOneCfe); Ico_PutIconLink (Icon,Ico_BLACK,NextAction);
else else
Ico_PutIconOn (Icon,Ico_BLACK,IconTitle); Ico_PutIconOn (Icon,Ico_BLACK,IconTitle);
/***** Write Name of the course and date of exam *****/ /***** Write Name of the course and date of exam *****/
HTM_Txt (SessionAndDate); HTM_Txt (Title);
/***** End form to download file *****/ /***** End form to download file *****/
if (PutFormToGo) if (PutFormToGo)
@ -139,17 +128,22 @@ void CfeRsc_GetTitleFromExaCod (long ExaCod,char *Title,size_t TitleSize)
struct Cfe_CallsForExams CallsForExams; struct Cfe_CallsForExams CallsForExams;
char SessionAndDate[Cfe_MAX_BYTES_SESSION_AND_DATE]; char SessionAndDate[Cfe_MAX_BYTES_SESSION_AND_DATE];
/***** Reset calls for exams context *****/ if (ExaCod > 0)
Cfe_ResetCallsForExams (&CallsForExams); {
/***** Reset calls for exams context *****/
Cfe_ResetCallsForExams (&CallsForExams);
/***** Get data of call for exam *****/ /***** Get data of call for exam *****/
Cfe_AllocMemCallForExam (&CallsForExams); Cfe_AllocMemCallForExam (&CallsForExams);
Cfe_GetDataCallForExamFromDB (&CallsForExams,ExaCod); Cfe_GetDataCallForExamFromDB (&CallsForExams,ExaCod);
/***** Session and date of the exam *****/ /***** Session and date of the exam *****/
Cfe_BuildSessionAndDate (&CallsForExams,SessionAndDate); Cfe_BuildSessionAndDate (&CallsForExams,SessionAndDate);
snprintf (Title,TitleSize,"%s: %s",Txt_Call_for_exam,SessionAndDate); snprintf (Title,TitleSize,"%s: %s",Txt_Call_for_exam,SessionAndDate);
/***** Free memory of the call for exam *****/ /***** Free memory of the call for exam *****/
Cfe_FreeMemCallForExam (&CallsForExams); Cfe_FreeMemCallForExam (&CallsForExams);
}
else
Str_Copy (Title,"?",TitleSize);
} }

View File

@ -606,11 +606,12 @@ TODO: Fix bug: error al enviar un mensaje a dos recipientes, error on duplicate
TODO: Attach pdf files in multimedia. TODO: Attach pdf files in multimedia.
*/ */
#define Log_PLATFORM_VERSION "SWAD 22.30 (2022-09-28)" #define Log_PLATFORM_VERSION "SWAD 22.31 (2022-09-28)"
#define CSS_FILE "swad22.22.1.css" #define CSS_FILE "swad22.22.1.css"
#define JS_FILE "swad21.100.js" #define JS_FILE "swad21.100.js"
/* /*
Version 22.31: Sep 28, 2022 TODO: New action to view one project (similar to view project files, but accesible to students). (? lines) Version 22.31: Sep 28, 2022 New action to view one project.
Code refactoring in program resources. (332570 lines)
Version 22.30: Sep 28, 2022 New module swad_project_resource. (332490 lines) Version 22.30: Sep 28, 2022 New module swad_project_resource. (332490 lines)
2 changes necessary in database: 2 changes necessary in database:
ALTER TABLE prg_clipboards CHANGE COLUMN Type Type ENUM('non','asg','prj','cfe','exa','gam','svy','doc','mrk','att','for') NOT NULL DEFAULT 'non'; ALTER TABLE prg_clipboards CHANGE COLUMN Type Type ENUM('non','asg','prj','cfe','exa','gam','svy','doc','mrk','att','for') NOT NULL DEFAULT 'non';

View File

@ -739,7 +739,8 @@ void Exa_PutParams (void *Exams)
void Exa_PutParamExamCod (long ExaCod) void Exa_PutParamExamCod (long ExaCod)
{ {
Par_PutHiddenParamLong (NULL,"ExaCod",ExaCod); if (ExaCod > 0)
Par_PutHiddenParamLong (NULL,"ExaCod",ExaCod);
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -29,6 +29,7 @@
#include "swad_error.h" #include "swad_error.h"
#include "swad_exam.h" #include "swad_exam.h"
#include "swad_exam_database.h" #include "swad_exam_database.h"
#include "swad_exam_resource.h"
#include "swad_form.h" #include "swad_form.h"
#include "swad_program_database.h" #include "swad_program_database.h"
@ -53,7 +54,7 @@ void ExaRsc_GetLinkToExam (void)
ExaCod = Exams.ExaCod; ExaCod = Exams.ExaCod;
/***** Get exam title *****/ /***** Get exam title *****/
Exa_DB_GetExamTitle (ExaCod,Title); ExaRsc_GetTitleFromExaCod (ExaCod,Title,sizeof (Title) - 1);
/***** Copy link to exam into resource clipboard *****/ /***** Copy link to exam into resource clipboard *****/
Prg_DB_CopyToClipboard (PrgRsc_EXAM,ExaCod); Prg_DB_CopyToClipboard (PrgRsc_EXAM,ExaCod);
@ -74,24 +75,27 @@ void ExaRsc_WriteExamInCrsProgram (long ExaCod,bool PutFormToGo,
const char *Icon,const char *IconTitle) const char *Icon,const char *IconTitle)
{ {
extern const char *Txt_Actions[Act_NUM_ACTIONS]; extern const char *Txt_Actions[Act_NUM_ACTIONS];
Act_Action_t NextAction;
char Title[Exa_MAX_BYTES_TITLE + 1]; char Title[Exa_MAX_BYTES_TITLE + 1];
/***** Get exam title *****/ /***** Get exam title *****/
Exa_DB_GetExamTitle (ExaCod,Title); ExaRsc_GetTitleFromExaCod (ExaCod,Title,sizeof (Title) - 1);
/***** Begin form to go to exam *****/ /***** Begin form to go to exam *****/
if (PutFormToGo) if (PutFormToGo)
{ {
Frm_BeginForm (ActSeeExa); NextAction = (ExaCod > 0) ? ActSeeExa : // Exam specified
ActSeeAllExa; // All exams
Frm_BeginForm (NextAction);
Exa_PutParamExamCod (ExaCod); Exa_PutParamExamCod (ExaCod);
HTM_BUTTON_Submit_Begin (Txt_Actions[ActSeeExa], HTM_BUTTON_Submit_Begin (Txt_Actions[NextAction],
"class=\"LM BT_LINK PRG_LNK_%s\"", "class=\"LM BT_LINK PRG_LNK_%s\"",
The_GetSuffix ()); The_GetSuffix ());
} }
/***** Icon depending on type ******/ /***** Icon depending on type ******/
if (PutFormToGo) if (PutFormToGo)
Ico_PutIconLink (Icon,Ico_BLACK,ActSeeExa); Ico_PutIconLink (Icon,Ico_BLACK,NextAction);
else else
Ico_PutIconOn (Icon,Ico_BLACK,IconTitle); Ico_PutIconOn (Icon,Ico_BLACK,IconTitle);
@ -116,7 +120,12 @@ void ExaRsc_GetTitleFromExaCod (long ExaCod,char *Title,size_t TitleSize)
{ {
char TitleFromDB[Exa_MAX_BYTES_TITLE + 1]; char TitleFromDB[Exa_MAX_BYTES_TITLE + 1];
/***** Get exam title *****/ if (ExaCod > 0)
Exa_DB_GetExamTitle (ExaCod,TitleFromDB); {
Str_Copy (Title,TitleFromDB,TitleSize); /***** Get exam title *****/
Exa_DB_GetExamTitle (ExaCod,TitleFromDB);
Str_Copy (Title,TitleFromDB,TitleSize);
}
else
Str_Copy (Title,"?",TitleSize);
} }

View File

@ -28,6 +28,7 @@
#include "swad_form.h" #include "swad_form.h"
#include "swad_forum.h" #include "swad_forum.h"
#include "swad_forum_database.h" #include "swad_forum_database.h"
#include "swad_forum_resource.h"
#include "swad_global.h" #include "swad_global.h"
#include "swad_program_database.h" #include "swad_program_database.h"
@ -54,7 +55,7 @@ void ForRsc_GetLinkToThread (void)
For_GetParamsForums (&Forums); For_GetParamsForums (&Forums);
/***** Get thread subject *****/ /***** Get thread subject *****/
For_DB_GetThreadSubject (Forums.Thread.Current,Subject); ForRsc_GetTitleFromThrCod (Forums.Thread.Current,Subject,sizeof (Subject) - 1);
/***** Copy link to thread into resource clipboard *****/ /***** Copy link to thread into resource clipboard *****/
Prg_DB_CopyToClipboard (PrgRsc_FORUM_THREAD,Forums.Thread.Current); Prg_DB_CopyToClipboard (PrgRsc_FORUM_THREAD,Forums.Thread.Current);
@ -81,11 +82,12 @@ void ForRsc_WriteThreadInCrsProgram (long ThrCod,bool PutFormToGo,
const char *Icon,const char *IconTitle) const char *Icon,const char *IconTitle)
{ {
extern const char *Txt_Actions[Act_NUM_ACTIONS]; extern const char *Txt_Actions[Act_NUM_ACTIONS];
Act_Action_t NextAction;
struct For_Forums Forums; struct For_Forums Forums;
char Subject[Cns_MAX_BYTES_SUBJECT + 1]; char Subject[Cns_MAX_BYTES_SUBJECT + 1];
/***** Get thread subject *****/ /***** Get thread subject *****/
For_DB_GetThreadSubject (ThrCod,Subject); ForRsc_GetTitleFromThrCod (ThrCod,Subject,sizeof (Subject) - 1);
/***** Begin form to go to survey *****/ /***** Begin form to go to survey *****/
if (PutFormToGo) if (PutFormToGo)
@ -98,17 +100,18 @@ void ForRsc_WriteThreadInCrsProgram (long ThrCod,bool PutFormToGo,
Forums.Thread.Selected = ThrCod; Forums.Thread.Selected = ThrCod;
// TODO: In the listing of threads, the page is always the first. // TODO: In the listing of threads, the page is always the first.
// The page should be that corresponding to the selected thread. // The page should be that corresponding to the selected thread.
NextAction = (ThrCod > 0) ? ActSeePstForCrsUsr : // Thread specified
Frm_BeginFormAnchor (ActSeePstForCrsUsr,For_FORUM_POSTS_SECTION_ID); ActSeeForCrsUsr; // All threads
Frm_BeginFormAnchor (NextAction,For_FORUM_POSTS_SECTION_ID);
For_PutAllHiddenParamsNewPost (&Forums); For_PutAllHiddenParamsNewPost (&Forums);
HTM_BUTTON_Submit_Begin (Txt_Actions[ActSeePstForCrsUsr], HTM_BUTTON_Submit_Begin (Txt_Actions[NextAction],
"class=\"LM BT_LINK PRG_LNK_%s\"", "class=\"LM BT_LINK PRG_LNK_%s\"",
The_GetSuffix ()); The_GetSuffix ());
} }
/***** Icon depending on type ******/ /***** Icon depending on type ******/
if (PutFormToGo) if (PutFormToGo)
Ico_PutIconLink (Icon,Ico_BLACK,ActSeePstForCrsUsr); Ico_PutIconLink (Icon,Ico_BLACK,NextAction);
else else
Ico_PutIconOn (Icon,Ico_BLACK,IconTitle); Ico_PutIconOn (Icon,Ico_BLACK,IconTitle);
@ -133,8 +136,12 @@ void ForRsc_GetTitleFromThrCod (long ThrCod,char *Title,size_t TitleSize)
{ {
char Subject[Cns_MAX_BYTES_SUBJECT + 1]; char Subject[Cns_MAX_BYTES_SUBJECT + 1];
/***** Get thread subject *****/ if (ThrCod > 0)
For_DB_GetThreadSubject (ThrCod,Subject); {
/***** Get thread subject *****/
Str_Copy (Title,Subject,TitleSize); For_DB_GetThreadSubject (ThrCod,Subject);
Str_Copy (Title,Subject,TitleSize);
}
else
Str_Copy (Title,"?",TitleSize);
} }

View File

@ -800,7 +800,8 @@ void Gam_PutParams (void *Games)
void Gam_PutParamGameCod (long GamCod) void Gam_PutParamGameCod (long GamCod)
{ {
Par_PutHiddenParamLong (NULL,"GamCod",GamCod); if (GamCod > 0)
Par_PutHiddenParamLong (NULL,"GamCod",GamCod);
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -51,7 +51,7 @@ void GamRsc_GetLinkToGame (void)
Err_WrongGameExit (); Err_WrongGameExit ();
/***** Get game title *****/ /***** Get game title *****/
Gam_DB_GetGameTitle (GamCod,Title); GamRsc_GetTitleFromGamCod (GamCod,Title,sizeof (Title) - 1);
/***** Copy link to game into resource clipboard *****/ /***** Copy link to game into resource clipboard *****/
Prg_DB_CopyToClipboard (PrgRsc_GAME,GamCod); Prg_DB_CopyToClipboard (PrgRsc_GAME,GamCod);
@ -72,24 +72,27 @@ void GamRsc_WriteGameInCrsProgram (long GamCod,bool PutFormToGo,
const char *Icon,const char *IconTitle) const char *Icon,const char *IconTitle)
{ {
extern const char *Txt_Actions[Act_NUM_ACTIONS]; extern const char *Txt_Actions[Act_NUM_ACTIONS];
Act_Action_t NextAction;
char Title[Gam_MAX_BYTES_TITLE + 1]; char Title[Gam_MAX_BYTES_TITLE + 1];
/***** Get game title *****/ /***** Get game title *****/
Gam_DB_GetGameTitle (GamCod,Title); GamRsc_GetTitleFromGamCod (GamCod,Title,sizeof (Title) - 1);
/***** Begin form to go to game *****/ /***** Begin form to go to game *****/
if (PutFormToGo) if (PutFormToGo)
{ {
Frm_BeginForm (ActSeeGam); NextAction = (GamCod > 0) ? ActSeeGam : // Game specified
ActSeeAllGam; // All games
Frm_BeginForm (NextAction);
Gam_PutParamGameCod (GamCod); Gam_PutParamGameCod (GamCod);
HTM_BUTTON_Submit_Begin (Txt_Actions[ActSeeGam], HTM_BUTTON_Submit_Begin (Txt_Actions[NextAction],
"class=\"LM BT_LINK PRG_LNK_%s\"", "class=\"LM BT_LINK PRG_LNK_%s\"",
The_GetSuffix ()); The_GetSuffix ());
} }
/***** Icon depending on type ******/ /***** Icon depending on type ******/
if (PutFormToGo) if (PutFormToGo)
Ico_PutIconLink (Icon,Ico_BLACK,ActSeeGam); Ico_PutIconLink (Icon,Ico_BLACK,NextAction);
else else
Ico_PutIconOn (Icon,Ico_BLACK,IconTitle); Ico_PutIconOn (Icon,Ico_BLACK,IconTitle);
@ -114,7 +117,12 @@ void GamRsc_GetTitleFromGamCod (long GamCod,char *Title,size_t TitleSize)
{ {
char TitleFromDB[Gam_MAX_BYTES_TITLE + 1]; char TitleFromDB[Gam_MAX_BYTES_TITLE + 1];
/***** Get game title *****/ if (GamCod > 0)
Gam_DB_GetGameTitle (GamCod,TitleFromDB); {
Str_Copy (Title,TitleFromDB,TitleSize); /***** Get game title *****/
Gam_DB_GetGameTitle (GamCod,TitleFromDB);
Str_Copy (Title,TitleFromDB,TitleSize);
}
else
Str_Copy (Title,"?",TitleSize);
} }

View File

@ -122,7 +122,7 @@ static const Act_Action_t Mnu_MenuActions[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_
[ 0] = ActSeeAss, [ 0] = ActSeeAss,
[ 1] = ActSeeAsg, [ 1] = ActSeeAsg,
[ 2] = ActSeePrj, [ 2] = ActSeePrj,
[ 3] = ActSeeAllExaAnn, [ 3] = ActSeeAllCfe,
[ 4] = ActEdiTstQst, [ 4] = ActEdiTstQst,
[ 5] = ActReqTst, [ 5] = ActReqTst,
[ 6] = ActSeeAllExa, [ 6] = ActSeeAllExa,

View File

@ -140,7 +140,7 @@ static const Act_Action_t Ntf_DefaultActions[Ntf_NUM_NOTIFY_EVENTS] =
/* Assessment tab */ /* Assessment tab */
[Ntf_EVENT_ASSIGNMENT ] = ActSeeAsg, [Ntf_EVENT_ASSIGNMENT ] = ActSeeAsg,
[Ntf_EVENT_SURVEY ] = ActSeeAllSvy, [Ntf_EVENT_SURVEY ] = ActSeeAllSvy,
[Ntf_EVENT_CALL_FOR_EXAM ] = ActSeeAllExaAnn, [Ntf_EVENT_CALL_FOR_EXAM ] = ActSeeAllCfe,
/* Files tab */ /* Files tab */
[Ntf_EVENT_DOCUMENT_FILE ] = ActSeeAdmDocCrsGrp, [Ntf_EVENT_DOCUMENT_FILE ] = ActSeeAdmDocCrsGrp,
[Ntf_EVENT_TEACHERS_FILE ] = ActAdmTchCrsGrp, [Ntf_EVENT_TEACHERS_FILE ] = ActAdmTchCrsGrp,

View File

@ -126,6 +126,7 @@ static void PrgRsc_WriteLinkName (const struct Prg_Link *Link,bool PutFormToGo,
static void PrgRsc_WriteEmptyLinkInCrsProgram (__attribute__((unused)) long Cod, static void PrgRsc_WriteEmptyLinkInCrsProgram (__attribute__((unused)) long Cod,
__attribute__((unused)) bool PutFormToGo, __attribute__((unused)) bool PutFormToGo,
const char *Icon,const char *IconTitle); const char *Icon,const char *IconTitle);
static void PrgRsc_GetResourceTitleFromLink (struct Prg_Item *Item);
static void PrgRsc_GetDataOfLinkFromClipboard (struct Prg_Link *Link, static void PrgRsc_GetDataOfLinkFromClipboard (struct Prg_Link *Link,
MYSQL_RES **mysql_res); MYSQL_RES **mysql_res);
@ -996,11 +997,6 @@ static void PrgRsc_WriteLinkName (const struct Prg_Link *Link,bool PutFormToGo,
[PrgRsc_FORUM_THREAD ] = ForRsc_WriteThreadInCrsProgram, [PrgRsc_FORUM_THREAD ] = ForRsc_WriteThreadInCrsProgram,
}; };
/***** Trivial check: code should be > 0 *****/
if (Link->Type != PrgRsc_NONE &&
Link->Cod <= 0)
return;
/***** Write link name *****/ /***** Write link name *****/
if (WriteLinkName[Link->Type]) if (WriteLinkName[Link->Type])
WriteLinkName[Link->Type] (Link->Cod,PutFormToGo,Icon,IconTitle); WriteLinkName[Link->Type] (Link->Cod,PutFormToGo,Icon,IconTitle);
@ -1049,10 +1045,6 @@ static void PrgRsc_GetResourceTitleFromLink (struct Prg_Item *Item)
/***** Reset title *****/ /***** Reset title *****/
Item->Resource.Title[0] = '\0'; Item->Resource.Title[0] = '\0';
/***** Trivial check: code should be > 0 *****/
if (Item->Resource.Link.Cod <= 0)
return;
/***** Get title *****/ /***** Get title *****/
if (GetTitle[Item->Resource.Link.Type]) if (GetTitle[Item->Resource.Link.Type])
GetTitle[Item->Resource.Link.Type] (Item->Resource.Link.Cod, GetTitle[Item->Resource.Link.Type] (Item->Resource.Link.Cod,

View File

@ -150,6 +150,8 @@ static long Prj_PrjCod = -1L;
/***************************** Private prototypes ****************************/ /***************************** Private prototypes ****************************/
/*****************************************************************************/ /*****************************************************************************/
static void Prj_SetPrjCod (long PrjCod);
static void Prj_ReqUsrsToSelect (void *Projects); static void Prj_ReqUsrsToSelect (void *Projects);
static void Prj_GetSelectedUsrsAndShowTheirPrjs (struct Prj_Projects *Projects); static void Prj_GetSelectedUsrsAndShowTheirPrjs (struct Prj_Projects *Projects);
static void Prj_ShowPrjsInCurrentPage (void *Projects); static void Prj_ShowPrjsInCurrentPage (void *Projects);
@ -265,7 +267,7 @@ static void Prj_PutIconOffLockedUnlocked (const struct Prj_Project *Prj);
/******* Set/get project code (used to pass parameter to file browser) *******/ /******* Set/get project code (used to pass parameter to file browser) *******/
/*****************************************************************************/ /*****************************************************************************/
void Prj_SetPrjCod (long PrjCod) static void Prj_SetPrjCod (long PrjCod)
{ {
Prj_PrjCod = PrjCod; Prj_PrjCod = PrjCod;
} }
@ -1093,6 +1095,12 @@ static void Prj_PutIconsListProjects (void *Projects)
Ico_PutContextualIconToConfigure (ActCfgPrj, Ico_PutContextualIconToConfigure (ActCfgPrj,
NULL,NULL); NULL,NULL);
/***** Link to get resource link *****/
if (Gbl.Usrs.Me.Role.Logged == Rol_TCH || // Only if I am a teacher
Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM) // or a superuser
Ico_PutContextualIconToGetLink (ActReqLnkPrj,NULL,
Prj_PutCurrentParams,Projects);
/***** Put icon to show a figure *****/ /***** Put icon to show a figure *****/
Fig_PutIconToShowFigure (Fig_PROJECTS); Fig_PutIconToShowFigure (Fig_PROJECTS);
} }
@ -1134,6 +1142,41 @@ static void Prj_PutIconToShowAllData (struct Prj_Projects *Projects)
"table.svg",Ico_BLACK); "table.svg",Ico_BLACK);
} }
/*****************************************************************************/
/***** Show a project and (if possible) a file browser with its documents ****/
/*****************************************************************************/
void Prj_ShowProjectWithFileBrowser (void)
{
extern const char *Hlp_ASSESSMENT_Projects;
struct Prj_Project Prj;
/***** Allocate memory for the project *****/
Prj_AllocMemProject (&Prj);
/***** Get project data *****/
Prj_SetPrjCod (Prj.PrjCod = Prj_GetParamPrjCod ());
Prj_GetDataOfProjectByCod (&Prj);
/***** Begin box *****/
Box_BoxBegin (NULL,Prj.Title,
NULL,NULL,
Hlp_ASSESSMENT_Projects,Box_NOT_CLOSABLE);
/***** Show the project *****/
Prj_ShowOneUniqueProject (&Prj);
/***** Show project file browsers *****/
if (Prj_CheckIfICanViewProjectFiles (Prj.PrjCod))
Brw_ShowFileBrowserProject (Prj.PrjCod);
/***** End box *****/
Box_BoxEnd ();
/***** Free memory of the project *****/
Prj_FreeMemProject (&Prj);
}
/*****************************************************************************/ /*****************************************************************************/
/***************** View / edit file browser of one project *******************/ /***************** View / edit file browser of one project *******************/
/*****************************************************************************/ /*****************************************************************************/
@ -1208,7 +1251,7 @@ static void Prj_ShowOneProject (struct Prj_Projects *Projects,
struct Prj_Project *Prj, struct Prj_Project *Prj,
Prj_ProjectView_t ProjectView) Prj_ProjectView_t ProjectView)
{ {
extern const char *Txt_Project_files; extern const char *Txt_Actions[Act_NUM_ACTIONS];
extern const char *Txt_Assigned_QUESTION; extern const char *Txt_Assigned_QUESTION;
extern const char *Txt_Yes; extern const char *Txt_Yes;
extern const char *Txt_No; extern const char *Txt_No;
@ -1221,8 +1264,9 @@ static void Prj_ShowOneProject (struct Prj_Projects *Projects,
extern const char *Txt_Description; extern const char *Txt_Description;
extern const char *Txt_Required_knowledge; extern const char *Txt_Required_knowledge;
extern const char *Txt_Required_materials; extern const char *Txt_Required_materials;
Act_Action_t NextAction;
char *Anchor = NULL; char *Anchor = NULL;
bool ICanViewProjectFiles = Brw_CheckIfICanViewProjectFiles (Prj->PrjCod); bool ICanViewProjectFiles = Prj_CheckIfICanViewProjectFiles (Prj->PrjCod);
const char *ClassLabel; const char *ClassLabel;
const char *ClassDate; const char *ClassDate;
const char *ClassData; const char *ClassData;
@ -1352,21 +1396,18 @@ static void Prj_ShowOneProject (struct Prj_Projects *Projects,
HTM_ARTICLE_Begin (Anchor); HTM_ARTICLE_Begin (Anchor);
if (Prj->Title[0]) if (Prj->Title[0])
{ {
if (ICanViewProjectFiles) NextAction = ICanViewProjectFiles ? ActAdmDocPrj :
{ ActSeeOnePrj;
Frm_BeginForm (ActAdmDocPrj); Frm_BeginForm (NextAction);
Prj_PutCurrentParams (Projects); Prj_PutCurrentParams (Projects);
HTM_BUTTON_Submit_Begin (Txt_Project_files, HTM_BUTTON_Submit_Begin (Txt_Actions[NextAction],
"class=\"LT BT_LINK %s_%s\"", "class=\"LT BT_LINK %s_%s\"",
Prj->Hidden == Prj_HIDDEN ? "ASG_TITLE_LIGHT" : Prj->Hidden == Prj_HIDDEN ? "ASG_TITLE_LIGHT" :
"ASG_TITLE", "ASG_TITLE",
The_GetSuffix ()); The_GetSuffix ());
HTM_Txt (Prj->Title); HTM_Txt (Prj->Title);
HTM_BUTTON_End (); HTM_BUTTON_End ();
Frm_EndForm (); Frm_EndForm ();
}
else
HTM_Txt (Prj->Title);
} }
if (Faults.WrongTitle) if (Faults.WrongTitle)
Prj_PutWarningIcon (); Prj_PutWarningIcon ();
@ -3004,7 +3045,8 @@ void Prj_FreeListProjects (struct Prj_Projects *Projects)
void Prj_PutParamPrjCod (long PrjCod) void Prj_PutParamPrjCod (long PrjCod)
{ {
Par_PutHiddenParamLong (NULL,"PrjCod",PrjCod); if (PrjCod > 0)
Par_PutHiddenParamLong (NULL,"PrjCod",PrjCod);
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -172,7 +172,6 @@ struct Prj_Project
/***************************** Public prototypes *****************************/ /***************************** Public prototypes *****************************/
/*****************************************************************************/ /*****************************************************************************/
void Prj_SetPrjCod (long PrjCod);
long Prj_GetPrjCod (void); long Prj_GetPrjCod (void);
void Prj_ResetProjects (struct Prj_Projects *Projects); void Prj_ResetProjects (struct Prj_Projects *Projects);
@ -188,6 +187,7 @@ void Prj_PutParams (struct Prj_Filter *Filter,
long PrjCod); long PrjCod);
void Prj_GetParams (struct Prj_Projects *Projects); void Prj_GetParams (struct Prj_Projects *Projects);
void Prj_ShowProjectWithFileBrowser (void);
void Prj_ShowOneUniqueProject (struct Prj_Project *Prj); void Prj_ShowOneUniqueProject (struct Prj_Project *Prj);
void Prj_PrintOneProject (void); void Prj_PrintOneProject (void);

View File

@ -31,6 +31,7 @@
#include "swad_program_database.h" #include "swad_program_database.h"
#include "swad_project.h" #include "swad_project.h"
#include "swad_project_database.h" #include "swad_project_database.h"
#include "swad_project_resource.h"
/*****************************************************************************/ /*****************************************************************************/
/***************************** Get link to game ******************************/ /***************************** Get link to game ******************************/
@ -38,7 +39,6 @@
void PrjRsc_GetLinkToProject (void) void PrjRsc_GetLinkToProject (void)
{ {
extern const char *Txt_Projects;
extern const char *Txt_Link_to_resource_X_copied_into_clipboard; extern const char *Txt_Link_to_resource_X_copied_into_clipboard;
struct Prj_Projects Projects; struct Prj_Projects Projects;
char Title[Prj_MAX_BYTES_TITLE + 1]; char Title[Prj_MAX_BYTES_TITLE + 1];
@ -51,10 +51,7 @@ void PrjRsc_GetLinkToProject (void)
Projects.PrjCod = Prj_GetParamPrjCod (); Projects.PrjCod = Prj_GetParamPrjCod ();
/***** Get project title *****/ /***** Get project title *****/
if (Projects.PrjCod > 0) PrjRsc_GetTitleFromPrjCod (Projects.PrjCod,Title,sizeof (Title) - 1);
Prj_DB_GetProjectTitle (Projects.PrjCod,Title);
else
Str_Copy (Title,Txt_Projects,sizeof (Title) - 1);
/***** Copy link to PROJECT into resource clipboard *****/ /***** Copy link to PROJECT into resource clipboard *****/
Prg_DB_CopyToClipboard (PrgRsc_PROJECT,Projects.PrjCod); Prg_DB_CopyToClipboard (PrgRsc_PROJECT,Projects.PrjCod);
@ -75,24 +72,27 @@ void PrjRsc_WriteProjectInCrsProgram (long PrjCod,bool PutFormToGo,
const char *Icon,const char *IconTitle) const char *Icon,const char *IconTitle)
{ {
extern const char *Txt_Actions[Act_NUM_ACTIONS]; extern const char *Txt_Actions[Act_NUM_ACTIONS];
Act_Action_t NextAction;
char Title[Prj_MAX_BYTES_TITLE + 1]; char Title[Prj_MAX_BYTES_TITLE + 1];
/***** Get project title *****/ /***** Get project title *****/
Prj_DB_GetProjectTitle (PrjCod,Title); PrjRsc_GetTitleFromPrjCod (PrjCod,Title,sizeof (Title) - 1);
/***** Begin form to go to project *****/ /***** Begin form to go to project *****/
if (PutFormToGo) if (PutFormToGo)
{ {
Frm_BeginForm (ActPrnOnePrj); NextAction = (PrjCod > 0) ? ActSeeOnePrj : // Project specified
Prj_PutParamPrjCod (PrjCod); ActSeePrj; // All projects
HTM_BUTTON_Submit_Begin (Txt_Actions[ActPrnOnePrj], Frm_BeginForm (NextAction);
"class=\"LM BT_LINK PRG_LNK_%s\"", Prj_PutParamPrjCod (PrjCod);
The_GetSuffix ()); HTM_BUTTON_Submit_Begin (Txt_Actions[NextAction],
"class=\"LM BT_LINK PRG_LNK_%s\"",
The_GetSuffix ());
} }
/***** Icon depending on type ******/ /***** Icon depending on type ******/
if (PutFormToGo) if (PutFormToGo)
Ico_PutIconLink (Icon,Ico_BLACK,ActSeePrj); Ico_PutIconLink (Icon,Ico_BLACK,NextAction);
else else
Ico_PutIconOn (Icon,Ico_BLACK,IconTitle); Ico_PutIconOn (Icon,Ico_BLACK,IconTitle);
@ -115,9 +115,16 @@ void PrjRsc_WriteProjectInCrsProgram (long PrjCod,bool PutFormToGo,
void PrjRsc_GetTitleFromPrjCod (long PrjCod,char *Title,size_t TitleSize) void PrjRsc_GetTitleFromPrjCod (long PrjCod,char *Title,size_t TitleSize)
{ {
extern const char *Txt_Projects;
char TitleFromDB[Prj_MAX_BYTES_TITLE + 1]; char TitleFromDB[Prj_MAX_BYTES_TITLE + 1];
/***** Get project title *****/ if (PrjCod > 0)
Prj_DB_GetProjectTitle (PrjCod,TitleFromDB); {
Str_Copy (Title,TitleFromDB,TitleSize); /***** Get project title *****/
Prj_DB_GetProjectTitle (PrjCod,TitleFromDB);
Str_Copy (Title,TitleFromDB,TitleSize);
}
else
/***** Generic title for all projects *****/
Str_Copy (Title,Txt_Projects,TitleSize);
} }

View File

@ -1396,7 +1396,8 @@ void Svy_GetNotifSurvey (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
void Svy_PutParamSvyCod (long SvyCod) void Svy_PutParamSvyCod (long SvyCod)
{ {
Par_PutHiddenParamLong (NULL,"SvyCod",SvyCod); if (SvyCod > 0)
Par_PutHiddenParamLong (NULL,"SvyCod",SvyCod);
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -31,6 +31,7 @@
#include "swad_program_database.h" #include "swad_program_database.h"
#include "swad_survey.h" #include "swad_survey.h"
#include "swad_survey_database.h" #include "swad_survey_database.h"
#include "swad_survey_resource.h"
/*****************************************************************************/ /*****************************************************************************/
/**************************** Get link to survey *****************************/ /**************************** Get link to survey *****************************/
@ -51,7 +52,7 @@ void SvyRsc_GetLinkToSurvey (void)
Err_WrongSurveyExit (); Err_WrongSurveyExit ();
/***** Get survey title *****/ /***** Get survey title *****/
Svy_DB_GetSurveyTitle (SvyCod,Title); SvyRsc_GetTitleFromSvyCod (SvyCod,Title,sizeof (Title) - 1);
/***** Copy link to survey into resource clipboard *****/ /***** Copy link to survey into resource clipboard *****/
Prg_DB_CopyToClipboard (PrgRsc_SURVEY,SvyCod); Prg_DB_CopyToClipboard (PrgRsc_SURVEY,SvyCod);
@ -72,24 +73,27 @@ void SvyRsc_WriteSurveyInCrsProgram (long SvyCod,bool PutFormToGo,
const char *Icon,const char *IconTitle) const char *Icon,const char *IconTitle)
{ {
extern const char *Txt_Actions[Act_NUM_ACTIONS]; extern const char *Txt_Actions[Act_NUM_ACTIONS];
Act_Action_t NextAction;
char Title[Svy_MAX_BYTES_SURVEY_TITLE + 1]; char Title[Svy_MAX_BYTES_SURVEY_TITLE + 1];
/***** Get survey title *****/ /***** Get survey title *****/
Svy_DB_GetSurveyTitle (SvyCod,Title); SvyRsc_GetTitleFromSvyCod (SvyCod,Title,sizeof (Title) - 1);
/***** Begin form to go to survey *****/ /***** Begin form to go to survey *****/
if (PutFormToGo) if (PutFormToGo)
{ {
Frm_BeginForm (ActSeeSvy); NextAction = (SvyCod > 0) ? ActSeeSvy : // Survey specified
ActSeeAllSvy; // All surveys
Frm_BeginForm (NextAction);
Svy_PutParamSvyCod (SvyCod); Svy_PutParamSvyCod (SvyCod);
HTM_BUTTON_Submit_Begin (Txt_Actions[ActSeeSvy], HTM_BUTTON_Submit_Begin (Txt_Actions[NextAction],
"class=\"LM BT_LINK PRG_LNK_%s\"", "class=\"LM BT_LINK PRG_LNK_%s\"",
The_GetSuffix ()); The_GetSuffix ());
} }
/***** Icon depending on type ******/ /***** Icon depending on type ******/
if (PutFormToGo) if (PutFormToGo)
Ico_PutIconLink (Icon,Ico_BLACK,ActSeeSvy); Ico_PutIconLink (Icon,Ico_BLACK,NextAction);
else else
Ico_PutIconOn (Icon,Ico_BLACK,IconTitle); Ico_PutIconOn (Icon,Ico_BLACK,IconTitle);
@ -114,7 +118,12 @@ void SvyRsc_GetTitleFromSvyCod (long SvyCod,char *Title,size_t TitleSize)
{ {
char TitleFromDB[Svy_MAX_BYTES_SURVEY_TITLE + 1]; char TitleFromDB[Svy_MAX_BYTES_SURVEY_TITLE + 1];
/***** Get survey title *****/ if (SvyCod > 0)
Svy_DB_GetSurveyTitle (SvyCod,TitleFromDB); {
Str_Copy (Title,TitleFromDB,TitleSize); /***** Get survey title *****/
Svy_DB_GetSurveyTitle (SvyCod,TitleFromDB);
Str_Copy (Title,TitleFromDB,TitleSize);
}
else
Str_Copy (Title,"?",TitleSize);
} }

View File

@ -31981,29 +31981,6 @@ const char *Txt_project_documents =
"project documents"; // Çeviri lazim! "project documents"; // Çeviri lazim!
#endif #endif
const char *Txt_Project_files =
#if L==1 // ca
"Fitxers del projecte";
#elif L==2 // de
"Projektdateien";
#elif L==3 // en
"Project files";
#elif L==4 // es
"Archivos del proyecto";
#elif L==5 // fr
"Fichiers du project";
#elif L==6 // gn
"Archivos del proyecto"; // Okoteve traducción
#elif L==7 // it
"File di progetto";
#elif L==8 // pl
"Pliki projektowe";
#elif L==9 // pt
"Arquivos do projeto";
#elif L==10 // tr
"Project files"; // Çeviri lazim!
#endif
const char *Txt_PROJECT_ORDER[Prj_NUM_ORDERS] = const char *Txt_PROJECT_ORDER[Prj_NUM_ORDERS] =
{ {
[Prj_ORDER_START_TIME] = [Prj_ORDER_START_TIME] =

View File

@ -8687,7 +8687,7 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"See projects" // Çeviri lazim! "See projects" // Çeviri lazim!
#endif #endif
, ,
[ActSeeAllExaAnn] = [ActSeeAllCfe] =
#if L==1 // ca #if L==1 // ca
"See exam announcements" // Necessita traducció "See exam announcements" // Necessita traducció
#elif L==2 // de #elif L==2 // de
@ -9559,29 +9559,52 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"Edit a project" // Precisa de tradução "Edit a project" // Precisa de tradução
#elif L==10 // tr #elif L==10 // tr
"Edit a project" // Çeviri lazim! "Edit a project" // Çeviri lazim!
#endif
,
[ActSeeOnePrj] =
#if L==1 // ca
"Ver projecte"
#elif L==2 // de
"Projekt anzeigen"
#elif L==3 // en
"Show project"
#elif L==4 // es
"Ver proyecto"
#elif L==5 // fr
"Voir projet"
#elif L==6 // gn
"Ver proyecto" // Okoteve traducción
#elif L==7 // it
"Ver progetto"
#elif L==8 // pl
"Poka&zdot; projekt"
#elif L==9 // pt
"Mostrar projeto"
#elif L==10 // tr
"Projeyi g&ouml;ster"
#endif #endif
, ,
[ActPrnOnePrj] = [ActPrnOnePrj] =
#if L==1 // ca #if L==1 // ca
"Show primt view of a project" // Necessita traducció "Show print view of a project" // Necessita traducció
#elif L==2 // de #elif L==2 // de
"Show primt view of a project" // Need Übersetzung "Show print view of a project" // Need Übersetzung
#elif L==3 // en #elif L==3 // en
"Show primt view of a project" "Show print view of a project"
#elif L==4 // es #elif L==4 // es
"Mostrar vista de impresi&oacute;n de un proyecto" "Mostrar vista de impresi&oacute;n de un proyecto"
#elif L==5 // fr #elif L==5 // fr
"Show primt view of a project" // Besoin de traduction "Show print view of a project" // Besoin de traduction
#elif L==6 // gn #elif L==6 // gn
"Mostrar vista de impresi&oacute;n de un proyecto" // Okoteve traducción "Mostrar vista de impresi&oacute;n de un proyecto" // Okoteve traducción
#elif L==7 // it #elif L==7 // it
"Show primt view of a project" // Bisogno di traduzione "Show print view of a project" // Bisogno di traduzione
#elif L==8 // pl #elif L==8 // pl
"Show primt view of a project" // Potrzebujesz tlumaczenie "Show print view of a project" // Potrzebujesz tlumaczenie
#elif L==9 // pt #elif L==9 // pt
"Show primt view of a project" // Precisa de tradução "Show print view of a project" // Precisa de tradução
#elif L==10 // tr #elif L==10 // tr
"Show primt view of a project" // Çeviri lazim! "Show print view of a project" // Çeviri lazim!
#endif #endif
, ,
[ActNewPrj] = [ActNewPrj] =
@ -10069,25 +10092,25 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
, ,
[ActAdmDocPrj] = [ActAdmDocPrj] =
#if L==1 // ca #if L==1 // ca
"Manage the documents of a project" // Necessita traducció "Administrar zona de documents de projecte"
#elif L==2 // de #elif L==2 // de
"Manage the documents of a project" // Need Übersetzung "Bereich Projektdokumente verwalten"
#elif L==3 // en #elif L==3 // en
"Manage the documents of a project" "Manage project documents zone"
#elif L==4 // es #elif L==4 // es
"Administrar zona de documentos de un proyecto" "Administrar zona de documentos de proyecto"
#elif L==5 // fr #elif L==5 // fr
"Manage the documents of a project" // Besoin de traduction "G&eacute;rer la zone des documents du projet"
#elif L==6 // gn #elif L==6 // gn
"Administrar zona de documentos de un proyecto" // Okoteve traducción "Administrar zona de documentos de proyecto" // Okoteve traducción
#elif L==7 // it #elif L==7 // it
"Manage the documents of a project" // Bisogno di traduzione "Gestisci la zona dei documenti di progetto"
#elif L==8 // pl #elif L==8 // pl
"Manage the documents of a project" // Potrzebujesz tlumaczenie "Zarz&oaogon;dzaj stref&aogon; dokument&oacute;w projektu"
#elif L==9 // pt #elif L==9 // pt
"Manage the documents of a project" // Precisa de tradução "Gerenciar zona de documentos do projeto"
#elif L==10 // tr #elif L==10 // tr
"Manage the documents of a project" // Çeviri lazim! "Proje belgeleri b&ouml;lgesini y&ouml;net"
#endif #endif
, ,
[ActReqRemFilDocPrj] = [ActReqRemFilDocPrj] =