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

View File

@ -981,7 +981,8 @@ void Asg_GetNotifAssignment (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
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_assignment.h"
#include "swad_assignment_database.h"
#include "swad_assignment_resource.h"
#include "swad_error.h"
#include "swad_form.h"
#include "swad_pagination.h"
@ -56,7 +57,7 @@ void AsgRsc_GetLinkToAssignment (void)
Err_WrongAssignmentExit ();
/***** Get assignment title *****/
Asg_DB_GetAssignmentTitleByCod (Assignments.AsgCod,Title);
AsgRsc_GetTitleFromAsgCod (Assignments.AsgCod,Title,sizeof (Title) - 1);
/***** Copy link to assignment into resource clipboard *****/
Prg_DB_CopyToClipboard (PrgRsc_ASSIGNMENT,Assignments.AsgCod);
@ -80,26 +81,29 @@ void AsgRsc_WriteAssignmentInCrsProgram (long AsgCod,bool PutFormToGo,
const char *Icon,const char *IconTitle)
{
extern const char *Txt_Actions[Act_NUM_ACTIONS];
Act_Action_t NextAction;
char Title[Asg_MAX_BYTES_ASSIGNMENT_TITLE + 1];
/***** Get assignment title *****/
Asg_DB_GetAssignmentTitleByCod (AsgCod,Title);
AsgRsc_GetTitleFromAsgCod (AsgCod,Title,sizeof (Title) - 1);
/***** Begin form to go to assignment *****/
if (PutFormToGo)
{
Frm_BeginForm (ActSeeOneAsg);
NextAction = (AsgCod > 0) ? ActSeeOneAsg : // Assignment specified
ActSeeAsg; // All assignments
Frm_BeginForm (NextAction);
Asg_PutParamAsgCod (AsgCod);
// TODO: In the listing of assignments, the page is always the first.
// 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\"",
The_GetSuffix ());
}
/***** Icon depending on type ******/
if (PutFormToGo)
Ico_PutIconLink (Icon,Ico_BLACK,ActSeeOneAsg);
Ico_PutIconLink (Icon,Ico_BLACK,NextAction);
else
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];
/***** Get assignment title *****/
Asg_DB_GetAssignmentTitleByCod (AsgCod,TitleFromDB);
Str_Copy (Title,TitleFromDB,TitleSize);
if (AsgCod > 0)
{
/***** 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)
{
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_attendance.h"
#include "swad_attendance_database.h"
#include "swad_attendance_resource.h"
#include "swad_error.h"
#include "swad_form.h"
#include "swad_program_database.h"
@ -46,7 +47,7 @@ void AttRsc_GetLinkToEvent (void)
Err_WrongEventExit ();
/***** Get attendance event title *****/
Att_DB_GetAttEventTitle (AttCod,Title);
AttRsc_GetTitleFromAttCod (AttCod,Title,sizeof (Title) - 1);
/***** Copy link to attendance event into resource clipboard *****/
Prg_DB_CopyToClipboard (PrgRsc_ATTENDANCE_EVENT,AttCod);
@ -67,25 +68,28 @@ void AttRsc_WriteAttEventInCrsProgram (long AttCod,bool PutFormToGo,
const char *Icon,const char *IconTitle)
{
extern const char *Txt_Actions[Act_NUM_ACTIONS];
Act_Action_t NextAction;
char Title[Att_MAX_BYTES_ATTENDANCE_EVENT_TITLE + 1];
/***** Get game title *****/
Att_DB_GetAttEventTitle (AttCod,Title);
AttRsc_GetTitleFromAttCod (AttCod,Title,sizeof (Title) - 1);
/***** Begin form to go to game *****/
if (PutFormToGo)
{
Frm_BeginForm (ActSeeOneAtt);
NextAction = (AttCod > 0) ? ActSeeOneAtt : // Attendance events specified
ActSeeAtt; // All attendance events
Frm_BeginForm (NextAction);
Att_PutParamAttCod (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\"",
The_GetSuffix ());
}
/***** Icon depending on type ******/
if (PutFormToGo)
Ico_PutIconLink (Icon,Ico_BLACK,ActSeeOneAtt);
Ico_PutIconLink (Icon,Ico_BLACK,NextAction);
else
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];
/***** Get attendance event title *****/
Att_DB_GetAttEventTitle (AttCod,TitleFromDB);
Str_Copy (Title,TitleFromDB,TitleSize);
if (AttCod > 0)
{
/***** 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_CheckIfICanModifySharedFileOrFolder (void);
static bool Brw_CheckIfICanModifyPrivateFileOrFolder (void);
static bool Brw_CheckIfICanViewProjectDocuments (long PrjCod);
static bool Brw_CheckIfICanViewProjectAssessment (long PrjCod);
static bool Prj_CheckIfICanViewProjectDocuments (long PrjCod);
static bool Prj_CheckIfICanViewProjectAssessment (long PrjCod);
static bool Brw_CheckIfICanModifyPrjDocFileOrFolder (void);
static bool Brw_CheckIfICanModifyPrjAssFileOrFolder (void);
@ -1986,10 +1986,7 @@ void Brw_GetParAndInitFileBrowser (void)
Brw_SetFullPathInTree ();
/***** Get other parameters *****/
if (Brw_GetIfProjectFileBrowser ())
/* Get project code */
Prj_SetPrjCod (Prj_GetParamPrjCod ());
else if (Brw_GetIfCrsAssigWorksFileBrowser ())
if (Brw_GetIfCrsAssigWorksFileBrowser ())
{
/* Get lists of the selected users if not already got */
Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
@ -2204,7 +2201,8 @@ static void Brw_GetDataCurrentGrp (void)
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);
if (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 *************/
/*****************************************************************************/
static void Brw_ShowFileBrowserProject (void)
void Brw_ShowFileBrowserProject (long PrjCod)
{
extern const char *Hlp_ASSESSMENT_Projects;
struct Prj_Project Prj;
Brw_WriteTopBeforeShowingFileBrowser ();
/***** Allocate memory for the project *****/
Prj_AllocMemProject (&Prj);
if (Prj_CheckIfICanViewProjectDocuments (PrjCod))
{
/***** Show the tree with the project documents *****/
Gbl.FileBrowser.Type = Brw_ADMI_DOC_PRJ;
Brw_InitializeFileBrowser ();
Brw_ShowFileBrowser ();
}
/***** Get project data *****/
Prj.PrjCod = Prj_GetPrjCod ();
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 (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);
if (Prj_CheckIfICanViewProjectAssessment (PrjCod))
{
/***** Show the tree with the project assessment *****/
Gbl.FileBrowser.Type = Brw_ADMI_ASS_PRJ;
Brw_InitializeFileBrowser ();
Brw_ShowFileBrowser ();
}
}
/*****************************************************************************/
@ -3353,7 +3320,7 @@ void Brw_ShowAgainFileBrowserOrWorks (void)
else if (Brw_GetIfCrsAssigWorksFileBrowser ())
Brw_ShowFileBrowsersAsgWrkCrs ();
else if (Brw_GetIfProjectFileBrowser ())
Brw_ShowFileBrowserProject ();
Prj_ShowProjectWithFileBrowser ();
else
Brw_ShowFileBrowserNormal ();
@ -9605,7 +9572,7 @@ static bool Brw_CheckIfICanModifyPrivateFileOrFolder (void)
/******************** Can I view files of a given project? *******************/
/*****************************************************************************/
bool Brw_CheckIfICanViewProjectFiles (long PrjCod)
bool Prj_CheckIfICanViewProjectFiles (long PrjCod)
{
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 **********/
/*****************************************************************************/
static bool Brw_CheckIfICanViewProjectDocuments (long PrjCod)
static bool Prj_CheckIfICanViewProjectDocuments (long PrjCod)
{
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 *********/
/*****************************************************************************/
static bool Brw_CheckIfICanViewProjectAssessment (long PrjCod)
static bool Prj_CheckIfICanViewProjectAssessment (long PrjCod)
{
switch (Gbl.Usrs.Me.Role.Logged)
{

View File

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

View File

@ -95,6 +95,7 @@ void BrwRsc_WriteDocFileNameInCrsProgram (long FilCod,bool PutFormToGo,
const char *Icon,const char *IconTitle)
{
extern const char *Txt_Actions[Act_NUM_ACTIONS];
Act_Action_t NextAction;
struct Brw_FileMetadata FileMetadata;
/***** Get file metadata *****/
@ -104,12 +105,14 @@ void BrwRsc_WriteDocFileNameInCrsProgram (long FilCod,bool PutFormToGo,
/***** Begin form to go to file data *****/
if (PutFormToGo)
{
Frm_BeginForm (ActReqDatSeeDocCrs);
NextAction = (FileMetadata.FilCod > 0) ? ActReqDatSeeDocCrs : // Document specified
ActSeeAdmDocCrsGrp; // All documents
Frm_BeginForm (NextAction);
Brw_PutParamsFileBrowser (NULL, // Not used
NULL, // Not used
Brw_IS_UNKNOWN, // Not used
FileMetadata.FilCod);
HTM_BUTTON_Submit_Begin (Txt_Actions[ActReqDatSeeDocCrs],
HTM_BUTTON_Submit_Begin (Txt_Actions[NextAction],
"class=\"LM BT_LINK PRG_LNK_%s\"",
The_GetSuffix ());
}
@ -124,7 +127,7 @@ void BrwRsc_WriteDocFileNameInCrsProgram (long FilCod,bool PutFormToGo,
break;
case Brw_IS_LINK:
if (PutFormToGo)
Ico_PutIconLink (Icon,Ico_BLACK,ActReqDatSeeDocCrs);
Ico_PutIconLink (Icon,Ico_BLACK,NextAction);
else
Ico_PutIconOn (Icon,Ico_BLACK,IconTitle);
break;
@ -152,6 +155,7 @@ void BrwRsc_WriteMrkFileNameInCrsProgram (long FilCod,bool PutFormToGo,
const char *Icon,const char *IconTitle)
{
extern const char *Txt_Actions[Act_NUM_ACTIONS];
Act_Action_t NextAction;
struct Brw_FileMetadata FileMetadata;
/***** Get file metadata *****/
@ -161,19 +165,21 @@ void BrwRsc_WriteMrkFileNameInCrsProgram (long FilCod,bool PutFormToGo,
/***** Begin form to go to file data *****/
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
NULL, // Not used
Brw_IS_UNKNOWN, // Not used
FileMetadata.FilCod);
HTM_BUTTON_Submit_Begin (Txt_Actions[ActReqDatSeeMrkCrs],
HTM_BUTTON_Submit_Begin (Txt_Actions[NextAction],
"class=\"LM BT_LINK PRG_LNK_%s\"",
The_GetSuffix ());
}
/***** Icon depending on type ******/
if (PutFormToGo)
Ico_PutIconLink (Icon,Ico_BLACK,ActReqDatSeeMrkCrs);
Ico_PutIconLink (Icon,Ico_BLACK,NextAction);
else
Ico_PutIconOn (Icon,Ico_BLACK,IconTitle);
@ -197,13 +203,18 @@ void BrwRsc_GetFileNameFromFilCod (long FilCod,char *FileName,size_t FileNameSiz
{
struct Brw_FileMetadata FileMetadata;
/***** Return nothing on error *****/
FileName[0] = '\0'; // Return nothing on error
if (FilCod > 0)
{
/***** Return nothing on error *****/
FileName[0] = '\0'; // Return nothing on error
/***** Get file metadata *****/
FileMetadata.FilCod = FilCod;
Brw_GetFileMetadataByCod (&FileMetadata);
/***** Get file metadata *****/
FileMetadata.FilCod = FilCod;
Brw_GetFileMetadataByCod (&FileMetadata);
/***** Copy file name into summary string *****/
Str_Copy (FileName,FileMetadata.FilFolLnk.Name,FileNameSize);
/***** Copy file name into summary string *****/
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)
{
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,
char SessionAndDate[Cfe_MAX_BYTES_SESSION_AND_DATE])
char SessionAndDate[Cfe_MAX_BYTES_SESSION_AND_DATE])
{
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;
struct Cfe_CallsForExams *CallsForExams = Cfe_GetGlobalCallsForExams ();
long ExaCod;
char SessionAndDate[Cfe_MAX_BYTES_SESSION_AND_DATE];
/***** Reset calls for exams context *****/
Cfe_ResetCallsForExams (CallsForExams);
char Title[Cfe_MAX_BYTES_SESSION_AND_DATE];
/***** Get the code of the call for exam *****/
if ((ExaCod = Cfe_GetParamExaCod ()) <= 0)
Err_WrongCallForExamExit ();
/***** Get data of call for exam *****/
Cfe_AllocMemCallForExam (CallsForExams);
Cfe_GetDataCallForExamFromDB (CallsForExams,ExaCod);
/***** Session and date of the exam *****/
Cfe_BuildSessionAndDate (CallsForExams,SessionAndDate);
/***** Get session and date of the exam *****/
CfeRsc_GetTitleFromExaCod (ExaCod,Title,sizeof (Title) - 1);
/***** Copy link to call for exam into resource clipboard *****/
Prg_DB_CopyToClipboard (PrgRsc_CALL_FOR_EXAM,ExaCod);
/***** Write sucess message *****/
Ale_ShowAlert (Ale_SUCCESS,Txt_Link_to_resource_X_copied_into_clipboard,
SessionAndDate);
/***** Free memory of the call for exam *****/
Cfe_FreeMemCallForExam (CallsForExams);
Title);
/***** Set exam to be highlighted *****/
Cfe_ResetCallsForExams (CallsForExams);
CallsForExams->HighlightExaCod = ExaCod;
/***** 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)
{
extern const char *Txt_Actions[Act_NUM_ACTIONS];
struct Cfe_CallsForExams CallsForExams;
char SessionAndDate[Cfe_MAX_BYTES_SESSION_AND_DATE];
Act_Action_t NextAction;
char Title[Cfe_MAX_BYTES_SESSION_AND_DATE];
char *Anchor = NULL;
/***** Get session and date of the exam *****/
Cfe_ResetCallsForExams (&CallsForExams);
Cfe_AllocMemCallForExam (&CallsForExams);
Cfe_GetDataCallForExamFromDB (&CallsForExams,ExaCod);
Cfe_BuildSessionAndDate (&CallsForExams,SessionAndDate);
Cfe_FreeMemCallForExam (&CallsForExams);
CfeRsc_GetTitleFromExaCod (ExaCod,Title,sizeof (Title) - 1);
/***** Begin form to download file *****/
if (PutFormToGo)
@ -100,9 +87,11 @@ void CfeRsc_WriteCallForExamInCrsProgram (long ExaCod,bool PutFormToGo,
Frm_SetAnchorStr (ExaCod,&Anchor);
/* 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);
HTM_BUTTON_Submit_Begin (Txt_Actions[ActSeeOneCfe],
HTM_BUTTON_Submit_Begin (Txt_Actions[NextAction],
"class=\"LM BT_LINK PRG_LNK_%s\"",
The_GetSuffix ());
@ -112,12 +101,12 @@ void CfeRsc_WriteCallForExamInCrsProgram (long ExaCod,bool PutFormToGo,
/***** Icon depending on type ******/
if (PutFormToGo)
Ico_PutIconLink (Icon,Ico_BLACK,ActSeeOneCfe);
Ico_PutIconLink (Icon,Ico_BLACK,NextAction);
else
Ico_PutIconOn (Icon,Ico_BLACK,IconTitle);
/***** Write Name of the course and date of exam *****/
HTM_Txt (SessionAndDate);
HTM_Txt (Title);
/***** End form to download file *****/
if (PutFormToGo)
@ -139,17 +128,22 @@ void CfeRsc_GetTitleFromExaCod (long ExaCod,char *Title,size_t TitleSize)
struct Cfe_CallsForExams CallsForExams;
char SessionAndDate[Cfe_MAX_BYTES_SESSION_AND_DATE];
/***** Reset calls for exams context *****/
Cfe_ResetCallsForExams (&CallsForExams);
if (ExaCod > 0)
{
/***** Reset calls for exams context *****/
Cfe_ResetCallsForExams (&CallsForExams);
/***** Get data of call for exam *****/
Cfe_AllocMemCallForExam (&CallsForExams);
Cfe_GetDataCallForExamFromDB (&CallsForExams,ExaCod);
/***** Get data of call for exam *****/
Cfe_AllocMemCallForExam (&CallsForExams);
Cfe_GetDataCallForExamFromDB (&CallsForExams,ExaCod);
/***** Session and date of the exam *****/
Cfe_BuildSessionAndDate (&CallsForExams,SessionAndDate);
snprintf (Title,TitleSize,"%s: %s",Txt_Call_for_exam,SessionAndDate);
/***** Session and date of the exam *****/
Cfe_BuildSessionAndDate (&CallsForExams,SessionAndDate);
snprintf (Title,TitleSize,"%s: %s",Txt_Call_for_exam,SessionAndDate);
/***** Free memory of the call for exam *****/
Cfe_FreeMemCallForExam (&CallsForExams);
/***** Free memory of the call for exam *****/
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.
*/
#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 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)
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';

View File

@ -739,7 +739,8 @@ void Exa_PutParams (void *Exams)
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_exam.h"
#include "swad_exam_database.h"
#include "swad_exam_resource.h"
#include "swad_form.h"
#include "swad_program_database.h"
@ -53,7 +54,7 @@ void ExaRsc_GetLinkToExam (void)
ExaCod = Exams.ExaCod;
/***** Get exam title *****/
Exa_DB_GetExamTitle (ExaCod,Title);
ExaRsc_GetTitleFromExaCod (ExaCod,Title,sizeof (Title) - 1);
/***** Copy link to exam into resource clipboard *****/
Prg_DB_CopyToClipboard (PrgRsc_EXAM,ExaCod);
@ -74,24 +75,27 @@ void ExaRsc_WriteExamInCrsProgram (long ExaCod,bool PutFormToGo,
const char *Icon,const char *IconTitle)
{
extern const char *Txt_Actions[Act_NUM_ACTIONS];
Act_Action_t NextAction;
char Title[Exa_MAX_BYTES_TITLE + 1];
/***** Get exam title *****/
Exa_DB_GetExamTitle (ExaCod,Title);
ExaRsc_GetTitleFromExaCod (ExaCod,Title,sizeof (Title) - 1);
/***** Begin form to go to exam *****/
if (PutFormToGo)
{
Frm_BeginForm (ActSeeExa);
NextAction = (ExaCod > 0) ? ActSeeExa : // Exam specified
ActSeeAllExa; // All exams
Frm_BeginForm (NextAction);
Exa_PutParamExamCod (ExaCod);
HTM_BUTTON_Submit_Begin (Txt_Actions[ActSeeExa],
HTM_BUTTON_Submit_Begin (Txt_Actions[NextAction],
"class=\"LM BT_LINK PRG_LNK_%s\"",
The_GetSuffix ());
}
/***** Icon depending on type ******/
if (PutFormToGo)
Ico_PutIconLink (Icon,Ico_BLACK,ActSeeExa);
Ico_PutIconLink (Icon,Ico_BLACK,NextAction);
else
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];
/***** Get exam title *****/
Exa_DB_GetExamTitle (ExaCod,TitleFromDB);
Str_Copy (Title,TitleFromDB,TitleSize);
if (ExaCod > 0)
{
/***** 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_forum.h"
#include "swad_forum_database.h"
#include "swad_forum_resource.h"
#include "swad_global.h"
#include "swad_program_database.h"
@ -54,7 +55,7 @@ void ForRsc_GetLinkToThread (void)
For_GetParamsForums (&Forums);
/***** 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 *****/
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)
{
extern const char *Txt_Actions[Act_NUM_ACTIONS];
Act_Action_t NextAction;
struct For_Forums Forums;
char Subject[Cns_MAX_BYTES_SUBJECT + 1];
/***** Get thread subject *****/
For_DB_GetThreadSubject (ThrCod,Subject);
ForRsc_GetTitleFromThrCod (ThrCod,Subject,sizeof (Subject) - 1);
/***** Begin form to go to survey *****/
if (PutFormToGo)
@ -98,17 +100,18 @@ void ForRsc_WriteThreadInCrsProgram (long ThrCod,bool PutFormToGo,
Forums.Thread.Selected = ThrCod;
// TODO: In the listing of threads, the page is always the first.
// The page should be that corresponding to the selected thread.
Frm_BeginFormAnchor (ActSeePstForCrsUsr,For_FORUM_POSTS_SECTION_ID);
NextAction = (ThrCod > 0) ? ActSeePstForCrsUsr : // Thread specified
ActSeeForCrsUsr; // All threads
Frm_BeginFormAnchor (NextAction,For_FORUM_POSTS_SECTION_ID);
For_PutAllHiddenParamsNewPost (&Forums);
HTM_BUTTON_Submit_Begin (Txt_Actions[ActSeePstForCrsUsr],
HTM_BUTTON_Submit_Begin (Txt_Actions[NextAction],
"class=\"LM BT_LINK PRG_LNK_%s\"",
The_GetSuffix ());
}
/***** Icon depending on type ******/
if (PutFormToGo)
Ico_PutIconLink (Icon,Ico_BLACK,ActSeePstForCrsUsr);
Ico_PutIconLink (Icon,Ico_BLACK,NextAction);
else
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];
/***** Get thread subject *****/
For_DB_GetThreadSubject (ThrCod,Subject);
Str_Copy (Title,Subject,TitleSize);
if (ThrCod > 0)
{
/***** Get thread subject *****/
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)
{
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 ();
/***** Get game title *****/
Gam_DB_GetGameTitle (GamCod,Title);
GamRsc_GetTitleFromGamCod (GamCod,Title,sizeof (Title) - 1);
/***** Copy link to game into resource clipboard *****/
Prg_DB_CopyToClipboard (PrgRsc_GAME,GamCod);
@ -72,24 +72,27 @@ void GamRsc_WriteGameInCrsProgram (long GamCod,bool PutFormToGo,
const char *Icon,const char *IconTitle)
{
extern const char *Txt_Actions[Act_NUM_ACTIONS];
Act_Action_t NextAction;
char Title[Gam_MAX_BYTES_TITLE + 1];
/***** Get game title *****/
Gam_DB_GetGameTitle (GamCod,Title);
GamRsc_GetTitleFromGamCod (GamCod,Title,sizeof (Title) - 1);
/***** Begin form to go to game *****/
if (PutFormToGo)
{
Frm_BeginForm (ActSeeGam);
NextAction = (GamCod > 0) ? ActSeeGam : // Game specified
ActSeeAllGam; // All games
Frm_BeginForm (NextAction);
Gam_PutParamGameCod (GamCod);
HTM_BUTTON_Submit_Begin (Txt_Actions[ActSeeGam],
HTM_BUTTON_Submit_Begin (Txt_Actions[NextAction],
"class=\"LM BT_LINK PRG_LNK_%s\"",
The_GetSuffix ());
}
/***** Icon depending on type ******/
if (PutFormToGo)
Ico_PutIconLink (Icon,Ico_BLACK,ActSeeGam);
Ico_PutIconLink (Icon,Ico_BLACK,NextAction);
else
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];
/***** Get game title *****/
Gam_DB_GetGameTitle (GamCod,TitleFromDB);
Str_Copy (Title,TitleFromDB,TitleSize);
if (GamCod > 0)
{
/***** 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,
[ 1] = ActSeeAsg,
[ 2] = ActSeePrj,
[ 3] = ActSeeAllExaAnn,
[ 3] = ActSeeAllCfe,
[ 4] = ActEdiTstQst,
[ 5] = ActReqTst,
[ 6] = ActSeeAllExa,

View File

@ -140,7 +140,7 @@ static const Act_Action_t Ntf_DefaultActions[Ntf_NUM_NOTIFY_EVENTS] =
/* Assessment tab */
[Ntf_EVENT_ASSIGNMENT ] = ActSeeAsg,
[Ntf_EVENT_SURVEY ] = ActSeeAllSvy,
[Ntf_EVENT_CALL_FOR_EXAM ] = ActSeeAllExaAnn,
[Ntf_EVENT_CALL_FOR_EXAM ] = ActSeeAllCfe,
/* Files tab */
[Ntf_EVENT_DOCUMENT_FILE ] = ActSeeAdmDocCrsGrp,
[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,
__attribute__((unused)) bool PutFormToGo,
const char *Icon,const char *IconTitle);
static void PrgRsc_GetResourceTitleFromLink (struct Prg_Item *Item);
static void PrgRsc_GetDataOfLinkFromClipboard (struct Prg_Link *Link,
MYSQL_RES **mysql_res);
@ -996,11 +997,6 @@ static void PrgRsc_WriteLinkName (const struct Prg_Link *Link,bool PutFormToGo,
[PrgRsc_FORUM_THREAD ] = ForRsc_WriteThreadInCrsProgram,
};
/***** Trivial check: code should be > 0 *****/
if (Link->Type != PrgRsc_NONE &&
Link->Cod <= 0)
return;
/***** Write link name *****/
if (WriteLinkName[Link->Type])
WriteLinkName[Link->Type] (Link->Cod,PutFormToGo,Icon,IconTitle);
@ -1049,10 +1045,6 @@ static void PrgRsc_GetResourceTitleFromLink (struct Prg_Item *Item)
/***** Reset title *****/
Item->Resource.Title[0] = '\0';
/***** Trivial check: code should be > 0 *****/
if (Item->Resource.Link.Cod <= 0)
return;
/***** Get title *****/
if (GetTitle[Item->Resource.Link.Type])
GetTitle[Item->Resource.Link.Type] (Item->Resource.Link.Cod,

View File

@ -150,6 +150,8 @@ static long Prj_PrjCod = -1L;
/***************************** Private prototypes ****************************/
/*****************************************************************************/
static void Prj_SetPrjCod (long PrjCod);
static void Prj_ReqUsrsToSelect (void *Projects);
static void Prj_GetSelectedUsrsAndShowTheirPrjs (struct Prj_Projects *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) *******/
/*****************************************************************************/
void Prj_SetPrjCod (long PrjCod)
static void Prj_SetPrjCod (long PrjCod)
{
Prj_PrjCod = PrjCod;
}
@ -1093,6 +1095,12 @@ static void Prj_PutIconsListProjects (void *Projects)
Ico_PutContextualIconToConfigure (ActCfgPrj,
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 *****/
Fig_PutIconToShowFigure (Fig_PROJECTS);
}
@ -1134,6 +1142,41 @@ static void Prj_PutIconToShowAllData (struct Prj_Projects *Projects)
"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 *******************/
/*****************************************************************************/
@ -1208,7 +1251,7 @@ static void Prj_ShowOneProject (struct Prj_Projects *Projects,
struct Prj_Project *Prj,
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_Yes;
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_Required_knowledge;
extern const char *Txt_Required_materials;
Act_Action_t NextAction;
char *Anchor = NULL;
bool ICanViewProjectFiles = Brw_CheckIfICanViewProjectFiles (Prj->PrjCod);
bool ICanViewProjectFiles = Prj_CheckIfICanViewProjectFiles (Prj->PrjCod);
const char *ClassLabel;
const char *ClassDate;
const char *ClassData;
@ -1352,21 +1396,18 @@ static void Prj_ShowOneProject (struct Prj_Projects *Projects,
HTM_ARTICLE_Begin (Anchor);
if (Prj->Title[0])
{
if (ICanViewProjectFiles)
{
Frm_BeginForm (ActAdmDocPrj);
Prj_PutCurrentParams (Projects);
HTM_BUTTON_Submit_Begin (Txt_Project_files,
"class=\"LT BT_LINK %s_%s\"",
Prj->Hidden == Prj_HIDDEN ? "ASG_TITLE_LIGHT" :
"ASG_TITLE",
The_GetSuffix ());
HTM_Txt (Prj->Title);
HTM_BUTTON_End ();
Frm_EndForm ();
}
else
HTM_Txt (Prj->Title);
NextAction = ICanViewProjectFiles ? ActAdmDocPrj :
ActSeeOnePrj;
Frm_BeginForm (NextAction);
Prj_PutCurrentParams (Projects);
HTM_BUTTON_Submit_Begin (Txt_Actions[NextAction],
"class=\"LT BT_LINK %s_%s\"",
Prj->Hidden == Prj_HIDDEN ? "ASG_TITLE_LIGHT" :
"ASG_TITLE",
The_GetSuffix ());
HTM_Txt (Prj->Title);
HTM_BUTTON_End ();
Frm_EndForm ();
}
if (Faults.WrongTitle)
Prj_PutWarningIcon ();
@ -3004,7 +3045,8 @@ void Prj_FreeListProjects (struct Prj_Projects *Projects)
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 *****************************/
/*****************************************************************************/
void Prj_SetPrjCod (long PrjCod);
long Prj_GetPrjCod (void);
void Prj_ResetProjects (struct Prj_Projects *Projects);
@ -188,6 +187,7 @@ void Prj_PutParams (struct Prj_Filter *Filter,
long PrjCod);
void Prj_GetParams (struct Prj_Projects *Projects);
void Prj_ShowProjectWithFileBrowser (void);
void Prj_ShowOneUniqueProject (struct Prj_Project *Prj);
void Prj_PrintOneProject (void);

View File

@ -31,6 +31,7 @@
#include "swad_program_database.h"
#include "swad_project.h"
#include "swad_project_database.h"
#include "swad_project_resource.h"
/*****************************************************************************/
/***************************** Get link to game ******************************/
@ -38,7 +39,6 @@
void PrjRsc_GetLinkToProject (void)
{
extern const char *Txt_Projects;
extern const char *Txt_Link_to_resource_X_copied_into_clipboard;
struct Prj_Projects Projects;
char Title[Prj_MAX_BYTES_TITLE + 1];
@ -51,10 +51,7 @@ void PrjRsc_GetLinkToProject (void)
Projects.PrjCod = Prj_GetParamPrjCod ();
/***** Get project title *****/
if (Projects.PrjCod > 0)
Prj_DB_GetProjectTitle (Projects.PrjCod,Title);
else
Str_Copy (Title,Txt_Projects,sizeof (Title) - 1);
PrjRsc_GetTitleFromPrjCod (Projects.PrjCod,Title,sizeof (Title) - 1);
/***** Copy link to PROJECT into resource clipboard *****/
Prg_DB_CopyToClipboard (PrgRsc_PROJECT,Projects.PrjCod);
@ -75,24 +72,27 @@ void PrjRsc_WriteProjectInCrsProgram (long PrjCod,bool PutFormToGo,
const char *Icon,const char *IconTitle)
{
extern const char *Txt_Actions[Act_NUM_ACTIONS];
Act_Action_t NextAction;
char Title[Prj_MAX_BYTES_TITLE + 1];
/***** Get project title *****/
Prj_DB_GetProjectTitle (PrjCod,Title);
PrjRsc_GetTitleFromPrjCod (PrjCod,Title,sizeof (Title) - 1);
/***** Begin form to go to project *****/
if (PutFormToGo)
{
Frm_BeginForm (ActPrnOnePrj);
Prj_PutParamPrjCod (PrjCod);
HTM_BUTTON_Submit_Begin (Txt_Actions[ActPrnOnePrj],
"class=\"LM BT_LINK PRG_LNK_%s\"",
The_GetSuffix ());
NextAction = (PrjCod > 0) ? ActSeeOnePrj : // Project specified
ActSeePrj; // All projects
Frm_BeginForm (NextAction);
Prj_PutParamPrjCod (PrjCod);
HTM_BUTTON_Submit_Begin (Txt_Actions[NextAction],
"class=\"LM BT_LINK PRG_LNK_%s\"",
The_GetSuffix ());
}
/***** Icon depending on type ******/
if (PutFormToGo)
Ico_PutIconLink (Icon,Ico_BLACK,ActSeePrj);
Ico_PutIconLink (Icon,Ico_BLACK,NextAction);
else
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)
{
extern const char *Txt_Projects;
char TitleFromDB[Prj_MAX_BYTES_TITLE + 1];
/***** Get project title *****/
Prj_DB_GetProjectTitle (PrjCod,TitleFromDB);
Str_Copy (Title,TitleFromDB,TitleSize);
if (PrjCod > 0)
{
/***** 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)
{
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_survey.h"
#include "swad_survey_database.h"
#include "swad_survey_resource.h"
/*****************************************************************************/
/**************************** Get link to survey *****************************/
@ -51,7 +52,7 @@ void SvyRsc_GetLinkToSurvey (void)
Err_WrongSurveyExit ();
/***** Get survey title *****/
Svy_DB_GetSurveyTitle (SvyCod,Title);
SvyRsc_GetTitleFromSvyCod (SvyCod,Title,sizeof (Title) - 1);
/***** Copy link to survey into resource clipboard *****/
Prg_DB_CopyToClipboard (PrgRsc_SURVEY,SvyCod);
@ -72,24 +73,27 @@ void SvyRsc_WriteSurveyInCrsProgram (long SvyCod,bool PutFormToGo,
const char *Icon,const char *IconTitle)
{
extern const char *Txt_Actions[Act_NUM_ACTIONS];
Act_Action_t NextAction;
char Title[Svy_MAX_BYTES_SURVEY_TITLE + 1];
/***** Get survey title *****/
Svy_DB_GetSurveyTitle (SvyCod,Title);
SvyRsc_GetTitleFromSvyCod (SvyCod,Title,sizeof (Title) - 1);
/***** Begin form to go to survey *****/
if (PutFormToGo)
{
Frm_BeginForm (ActSeeSvy);
NextAction = (SvyCod > 0) ? ActSeeSvy : // Survey specified
ActSeeAllSvy; // All surveys
Frm_BeginForm (NextAction);
Svy_PutParamSvyCod (SvyCod);
HTM_BUTTON_Submit_Begin (Txt_Actions[ActSeeSvy],
HTM_BUTTON_Submit_Begin (Txt_Actions[NextAction],
"class=\"LM BT_LINK PRG_LNK_%s\"",
The_GetSuffix ());
}
/***** Icon depending on type ******/
if (PutFormToGo)
Ico_PutIconLink (Icon,Ico_BLACK,ActSeeSvy);
Ico_PutIconLink (Icon,Ico_BLACK,NextAction);
else
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];
/***** Get survey title *****/
Svy_DB_GetSurveyTitle (SvyCod,TitleFromDB);
Str_Copy (Title,TitleFromDB,TitleSize);
if (SvyCod > 0)
{
/***** 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!
#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] =
{
[Prj_ORDER_START_TIME] =

View File

@ -8687,7 +8687,7 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"See projects" // Çeviri lazim!
#endif
,
[ActSeeAllExaAnn] =
[ActSeeAllCfe] =
#if L==1 // ca
"See exam announcements" // Necessita traducció
#elif L==2 // de
@ -9559,29 +9559,52 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"Edit a project" // Precisa de tradução
#elif L==10 // tr
"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
,
[ActPrnOnePrj] =
#if L==1 // ca
"Show primt view of a project" // Necessita traducció
"Show print view of a project" // Necessita traducció
#elif L==2 // de
"Show primt view of a project" // Need Übersetzung
"Show print view of a project" // Need Übersetzung
#elif L==3 // en
"Show primt view of a project"
"Show print view of a project"
#elif L==4 // es
"Mostrar vista de impresi&oacute;n de un proyecto"
#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
"Mostrar vista de impresi&oacute;n de un proyecto" // Okoteve traducción
#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
"Show primt view of a project" // Potrzebujesz tlumaczenie
"Show print view of a project" // Potrzebujesz tlumaczenie
#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
"Show primt view of a project" // Çeviri lazim!
"Show print view of a project" // Çeviri lazim!
#endif
,
[ActNewPrj] =
@ -10069,25 +10092,25 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
,
[ActAdmDocPrj] =
#if L==1 // ca
"Manage the documents of a project" // Necessita traducció
"Administrar zona de documents de projecte"
#elif L==2 // de
"Manage the documents of a project" // Need Übersetzung
"Bereich Projektdokumente verwalten"
#elif L==3 // en
"Manage the documents of a project"
"Manage project documents zone"
#elif L==4 // es
"Administrar zona de documentos de un proyecto"
"Administrar zona de documentos de proyecto"
#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
"Administrar zona de documentos de un proyecto" // Okoteve traducción
"Administrar zona de documentos de proyecto" // Okoteve traducción
#elif L==7 // it
"Manage the documents of a project" // Bisogno di traduzione
"Gestisci la zona dei documenti di progetto"
#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
"Manage the documents of a project" // Precisa de tradução
"Gerenciar zona de documentos do projeto"
#elif L==10 // tr
"Manage the documents of a project" // Çeviri lazim!
"Proje belgeleri b&ouml;lgesini y&ouml;net"
#endif
,
[ActReqRemFilDocPrj] =