diff --git a/swad_QR.c b/swad_QR.c index aa8350f1..71f501c0 100644 --- a/swad_QR.c +++ b/swad_QR.c @@ -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;\""); diff --git a/swad_action.c b/swad_action.c index 8d36f46e..d4da6a0f 100644 --- a/swad_action.c +++ b/swad_action.c @@ -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 }; /*****************************************************************************/ diff --git a/swad_action.h b/swad_action.h index 4ca79e45..db2588a3 100644 --- a/swad_action.h +++ b/swad_action.h @@ -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 **********************************/ diff --git a/swad_assignment.c b/swad_assignment.c index 9e3c4602..2b43624a 100644 --- a/swad_assignment.c +++ b/swad_assignment.c @@ -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); } /*****************************************************************************/ diff --git a/swad_assignment_resource.c b/swad_assignment_resource.c index 40726f37..bbaf154a 100644 --- a/swad_assignment_resource.c +++ b/swad_assignment_resource.c @@ -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); } diff --git a/swad_attendance.c b/swad_attendance.c index 01259525..f428cb89 100644 --- a/swad_attendance.c +++ b/swad_attendance.c @@ -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); } /*****************************************************************************/ diff --git a/swad_attendance_resource.c b/swad_attendance_resource.c index fb0ef015..3996a0b3 100644 --- a/swad_attendance_resource.c +++ b/swad_attendance_resource.c @@ -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); } diff --git a/swad_browser.c b/swad_browser.c index 548ccb76..5db08447 100644 --- a/swad_browser.c +++ b/swad_browser.c @@ -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) { diff --git a/swad_browser.h b/swad_browser.h index 7faa0110..273dd3dc 100644 --- a/swad_browser.h +++ b/swad_browser.h @@ -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); diff --git a/swad_browser_resource.c b/swad_browser_resource.c index fb0e47a8..7e659ba6 100644 --- a/swad_browser_resource.c +++ b/swad_browser_resource.c @@ -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); } diff --git a/swad_call_for_exam.c b/swad_call_for_exam.c index c96c6975..01117668 100644 --- a/swad_call_for_exam.c +++ b/swad_call_for_exam.c @@ -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]; diff --git a/swad_call_for_exam_resource.c b/swad_call_for_exam_resource.c index 2e9c9a10..9be6745a 100644 --- a/swad_call_for_exam_resource.c +++ b/swad_call_for_exam_resource.c @@ -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); } diff --git a/swad_changelog.h b/swad_changelog.h index 5bd36dc9..767527e6 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -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'; diff --git a/swad_exam.c b/swad_exam.c index 843ff935..99a6bdf2 100644 --- a/swad_exam.c +++ b/swad_exam.c @@ -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); } /*****************************************************************************/ diff --git a/swad_exam_resource.c b/swad_exam_resource.c index 8a70ba42..89d24738 100644 --- a/swad_exam_resource.c +++ b/swad_exam_resource.c @@ -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); } diff --git a/swad_forum_resource.c b/swad_forum_resource.c index 9a55eba9..d57dbe6a 100644 --- a/swad_forum_resource.c +++ b/swad_forum_resource.c @@ -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); } diff --git a/swad_game.c b/swad_game.c index 017df4cf..97acb0ff 100644 --- a/swad_game.c +++ b/swad_game.c @@ -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); } /*****************************************************************************/ diff --git a/swad_game_resource.c b/swad_game_resource.c index f65f2dfb..b0432e5f 100644 --- a/swad_game_resource.c +++ b/swad_game_resource.c @@ -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); } diff --git a/swad_menu.c b/swad_menu.c index 34878b4c..dd6cfca8 100644 --- a/swad_menu.c +++ b/swad_menu.c @@ -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, diff --git a/swad_notification.c b/swad_notification.c index 2fad082c..d321fa8c 100644 --- a/swad_notification.c +++ b/swad_notification.c @@ -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, diff --git a/swad_program_resource.c b/swad_program_resource.c index f03b7232..3f5653e8 100644 --- a/swad_program_resource.c +++ b/swad_program_resource.c @@ -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, diff --git a/swad_project.c b/swad_project.c index ef33b480..d7048c13 100644 --- a/swad_project.c +++ b/swad_project.c @@ -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); } /*****************************************************************************/ diff --git a/swad_project.h b/swad_project.h index ec7c865f..048377c4 100644 --- a/swad_project.h +++ b/swad_project.h @@ -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); diff --git a/swad_project_resource.c b/swad_project_resource.c index da81585a..750c59c1 100644 --- a/swad_project_resource.c +++ b/swad_project_resource.c @@ -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); } diff --git a/swad_survey.c b/swad_survey.c index f3644d33..5cf75246 100644 --- a/swad_survey.c +++ b/swad_survey.c @@ -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); } /*****************************************************************************/ diff --git a/swad_survey_resource.c b/swad_survey_resource.c index 24e3dee1..c51f188e 100644 --- a/swad_survey_resource.c +++ b/swad_survey_resource.c @@ -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); } diff --git a/swad_text.c b/swad_text.c index d86ec455..986bc705 100644 --- a/swad_text.c +++ b/swad_text.c @@ -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] = diff --git a/swad_text_action.c b/swad_text_action.c index 439a696f..d725b42b 100644 --- a/swad_text_action.c +++ b/swad_text_action.c @@ -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ż projekt" +#elif L==9 // pt + "Mostrar projeto" +#elif L==10 // tr + "Projeyi gö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ó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ó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é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ą dokumentó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ölgesini yönet" #endif , [ActReqRemFilDocPrj] =