diff --git a/swad_action.c b/swad_action.c index 3b78f65c..dddca9d3 100644 --- a/swad_action.c +++ b/swad_action.c @@ -602,6 +602,7 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = [ActRemAsg ] = { 806,-1,TabUnk,ActSeeAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Asg_RemoveAssignment ,NULL}, [ActHidAsg ] = { 964,-1,TabUnk,ActSeeAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Asg_HideAssignment ,NULL}, [ActUnhAsg ] = { 965,-1,TabUnk,ActSeeAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Asg_UnhideAssignment ,NULL}, + [ActReqLnkAsg ] = {1943,-1,TabUnk,ActSeeAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Asg_GetLinkToAssignment ,NULL}, [ActReqUsrPrj ] = {1805,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ListUsrsToSelect ,NULL}, [ActSeeTblAllPrj ] = {1696,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,NULL ,Prj_ShowTableSelectedPrjs ,NULL}, @@ -3796,6 +3797,7 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un ActReqLnkAdmMrkCrs, // #1940 ActReqLnkForCrsUsr, // #1941 ActSeeOneAsg, // #1942 + ActReqLnkAsg, // #1943 }; /*****************************************************************************/ diff --git a/swad_action.h b/swad_action.h index 4d89d707..4c8367a9 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 1942 +#define Act_MAX_ACTION_COD 1943 #define Act_MAX_OPTIONS_IN_MENU_PER_TAB 13 @@ -561,244 +561,245 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to #define ActRemAsg (ActChgCrsTT1stDay + 28) #define ActHidAsg (ActChgCrsTT1stDay + 29) #define ActUnhAsg (ActChgCrsTT1stDay + 30) +#define ActReqLnkAsg (ActChgCrsTT1stDay + 31) -#define ActReqUsrPrj (ActChgCrsTT1stDay + 31) -#define ActSeeTblAllPrj (ActChgCrsTT1stDay + 32) -#define ActCfgPrj (ActChgCrsTT1stDay + 33) -#define ActRcvCfgPrj (ActChgCrsTT1stDay + 34) -#define ActReqLckAllPrj (ActChgCrsTT1stDay + 35) -#define ActReqUnlAllPrj (ActChgCrsTT1stDay + 36) -#define ActLckAllPrj (ActChgCrsTT1stDay + 37) -#define ActUnlAllPrj (ActChgCrsTT1stDay + 38) -#define ActFrmNewPrj (ActChgCrsTT1stDay + 39) -#define ActEdiOnePrj (ActChgCrsTT1stDay + 40) -#define ActPrnOnePrj (ActChgCrsTT1stDay + 41) -#define ActNewPrj (ActChgCrsTT1stDay + 42) -#define ActChgPrj (ActChgCrsTT1stDay + 43) -#define ActReqRemPrj (ActChgCrsTT1stDay + 44) -#define ActRemPrj (ActChgCrsTT1stDay + 45) -#define ActHidPrj (ActChgCrsTT1stDay + 46) -#define ActUnhPrj (ActChgCrsTT1stDay + 47) -#define ActLckPrj (ActChgCrsTT1stDay + 48) -#define ActUnlPrj (ActChgCrsTT1stDay + 49) -#define ActReqAddStdPrj (ActChgCrsTT1stDay + 50) -#define ActReqAddTutPrj (ActChgCrsTT1stDay + 51) -#define ActReqAddEvlPrj (ActChgCrsTT1stDay + 52) -#define ActAddStdPrj (ActChgCrsTT1stDay + 53) -#define ActAddTutPrj (ActChgCrsTT1stDay + 54) -#define ActAddEvlPrj (ActChgCrsTT1stDay + 55) -#define ActReqRemStdPrj (ActChgCrsTT1stDay + 56) -#define ActReqRemTutPrj (ActChgCrsTT1stDay + 57) -#define ActReqRemEvlPrj (ActChgCrsTT1stDay + 58) -#define ActRemStdPrj (ActChgCrsTT1stDay + 59) -#define ActRemTutPrj (ActChgCrsTT1stDay + 60) -#define ActRemEvlPrj (ActChgCrsTT1stDay + 61) +#define ActReqUsrPrj (ActChgCrsTT1stDay + 32) +#define ActSeeTblAllPrj (ActChgCrsTT1stDay + 33) +#define ActCfgPrj (ActChgCrsTT1stDay + 34) +#define ActRcvCfgPrj (ActChgCrsTT1stDay + 35) +#define ActReqLckAllPrj (ActChgCrsTT1stDay + 36) +#define ActReqUnlAllPrj (ActChgCrsTT1stDay + 37) +#define ActLckAllPrj (ActChgCrsTT1stDay + 38) +#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 ActAdmDocPrj (ActChgCrsTT1stDay + 62) -#define ActReqRemFilDocPrj (ActChgCrsTT1stDay + 63) -#define ActRemFilDocPrj (ActChgCrsTT1stDay + 64) -#define ActRemFolDocPrj (ActChgCrsTT1stDay + 65) -#define ActCopDocPrj (ActChgCrsTT1stDay + 66) -#define ActPasDocPrj (ActChgCrsTT1stDay + 67) -#define ActRemTreDocPrj (ActChgCrsTT1stDay + 68) -#define ActFrmCreDocPrj (ActChgCrsTT1stDay + 69) -#define ActCreFolDocPrj (ActChgCrsTT1stDay + 70) -#define ActCreLnkDocPrj (ActChgCrsTT1stDay + 71) -#define ActRenFolDocPrj (ActChgCrsTT1stDay + 72) -#define ActRcvFilDocPrjDZ (ActChgCrsTT1stDay + 73) -#define ActRcvFilDocPrjCla (ActChgCrsTT1stDay + 74) -#define ActExpDocPrj (ActChgCrsTT1stDay + 75) -#define ActConDocPrj (ActChgCrsTT1stDay + 76) -#define ActZIPDocPrj (ActChgCrsTT1stDay + 77) -#define ActReqDatDocPrj (ActChgCrsTT1stDay + 78) -#define ActChgDatDocPrj (ActChgCrsTT1stDay + 79) -#define ActDowDocPrj (ActChgCrsTT1stDay + 80) +#define ActAdmDocPrj (ActChgCrsTT1stDay + 63) +#define ActReqRemFilDocPrj (ActChgCrsTT1stDay + 64) +#define ActRemFilDocPrj (ActChgCrsTT1stDay + 65) +#define ActRemFolDocPrj (ActChgCrsTT1stDay + 66) +#define ActCopDocPrj (ActChgCrsTT1stDay + 67) +#define ActPasDocPrj (ActChgCrsTT1stDay + 68) +#define ActRemTreDocPrj (ActChgCrsTT1stDay + 69) +#define ActFrmCreDocPrj (ActChgCrsTT1stDay + 70) +#define ActCreFolDocPrj (ActChgCrsTT1stDay + 71) +#define ActCreLnkDocPrj (ActChgCrsTT1stDay + 72) +#define ActRenFolDocPrj (ActChgCrsTT1stDay + 73) +#define ActRcvFilDocPrjDZ (ActChgCrsTT1stDay + 74) +#define ActRcvFilDocPrjCla (ActChgCrsTT1stDay + 75) +#define ActExpDocPrj (ActChgCrsTT1stDay + 76) +#define ActConDocPrj (ActChgCrsTT1stDay + 77) +#define ActZIPDocPrj (ActChgCrsTT1stDay + 78) +#define ActReqDatDocPrj (ActChgCrsTT1stDay + 79) +#define ActChgDatDocPrj (ActChgCrsTT1stDay + 80) +#define ActDowDocPrj (ActChgCrsTT1stDay + 81) -#define ActAdmAssPrj (ActChgCrsTT1stDay + 81) -#define ActReqRemFilAssPrj (ActChgCrsTT1stDay + 82) -#define ActRemFilAssPrj (ActChgCrsTT1stDay + 83) -#define ActRemFolAssPrj (ActChgCrsTT1stDay + 84) -#define ActCopAssPrj (ActChgCrsTT1stDay + 85) -#define ActPasAssPrj (ActChgCrsTT1stDay + 86) -#define ActRemTreAssPrj (ActChgCrsTT1stDay + 87) -#define ActFrmCreAssPrj (ActChgCrsTT1stDay + 88) -#define ActCreFolAssPrj (ActChgCrsTT1stDay + 89) -#define ActCreLnkAssPrj (ActChgCrsTT1stDay + 90) -#define ActRenFolAssPrj (ActChgCrsTT1stDay + 91) -#define ActRcvFilAssPrjDZ (ActChgCrsTT1stDay + 92) -#define ActRcvFilAssPrjCla (ActChgCrsTT1stDay + 93) -#define ActExpAssPrj (ActChgCrsTT1stDay + 94) -#define ActConAssPrj (ActChgCrsTT1stDay + 95) -#define ActZIPAssPrj (ActChgCrsTT1stDay + 96) -#define ActReqDatAssPrj (ActChgCrsTT1stDay + 97) -#define ActChgDatAssPrj (ActChgCrsTT1stDay + 98) -#define ActDowAssPrj (ActChgCrsTT1stDay + 99) +#define ActAdmAssPrj (ActChgCrsTT1stDay + 82) +#define ActReqRemFilAssPrj (ActChgCrsTT1stDay + 83) +#define ActRemFilAssPrj (ActChgCrsTT1stDay + 84) +#define ActRemFolAssPrj (ActChgCrsTT1stDay + 85) +#define ActCopAssPrj (ActChgCrsTT1stDay + 86) +#define ActPasAssPrj (ActChgCrsTT1stDay + 87) +#define ActRemTreAssPrj (ActChgCrsTT1stDay + 88) +#define ActFrmCreAssPrj (ActChgCrsTT1stDay + 89) +#define ActCreFolAssPrj (ActChgCrsTT1stDay + 90) +#define ActCreLnkAssPrj (ActChgCrsTT1stDay + 91) +#define ActRenFolAssPrj (ActChgCrsTT1stDay + 92) +#define ActRcvFilAssPrjDZ (ActChgCrsTT1stDay + 93) +#define ActRcvFilAssPrjCla (ActChgCrsTT1stDay + 94) +#define ActExpAssPrj (ActChgCrsTT1stDay + 95) +#define ActConAssPrj (ActChgCrsTT1stDay + 96) +#define ActZIPAssPrj (ActChgCrsTT1stDay + 97) +#define ActReqDatAssPrj (ActChgCrsTT1stDay + 98) +#define ActChgDatAssPrj (ActChgCrsTT1stDay + 99) +#define ActDowAssPrj (ActChgCrsTT1stDay + 100) -#define ActSeeOneCfe (ActChgCrsTT1stDay + 100) -#define ActSeeDatCfe (ActChgCrsTT1stDay + 101) -#define ActEdiCfe (ActChgCrsTT1stDay + 102) -#define ActRcvCfe (ActChgCrsTT1stDay + 103) -#define ActPrnCfe (ActChgCrsTT1stDay + 104) -#define ActReqRemCfe (ActChgCrsTT1stDay + 105) -#define ActRemCfe (ActChgCrsTT1stDay + 106) -#define ActHidCfe (ActChgCrsTT1stDay + 107) -#define ActUnhCfe (ActChgCrsTT1stDay + 108) -#define ActReqLnkCfe (ActChgCrsTT1stDay + 109) +#define ActSeeOneCfe (ActChgCrsTT1stDay + 101) +#define ActSeeDatCfe (ActChgCrsTT1stDay + 102) +#define ActEdiCfe (ActChgCrsTT1stDay + 103) +#define ActRcvCfe (ActChgCrsTT1stDay + 104) +#define ActPrnCfe (ActChgCrsTT1stDay + 105) +#define ActReqRemCfe (ActChgCrsTT1stDay + 106) +#define ActRemCfe (ActChgCrsTT1stDay + 107) +#define ActHidCfe (ActChgCrsTT1stDay + 108) +#define ActUnhCfe (ActChgCrsTT1stDay + 109) +#define ActReqLnkCfe (ActChgCrsTT1stDay + 110) -#define ActEdiOneTstQst (ActChgCrsTT1stDay + 110) -#define ActReqImpTstQst (ActChgCrsTT1stDay + 111) -#define ActImpTstQst (ActChgCrsTT1stDay + 112) -#define ActLstTstQst (ActChgCrsTT1stDay + 113) -#define ActRcvTstQst (ActChgCrsTT1stDay + 114) -#define ActReqRemSevTstQst (ActChgCrsTT1stDay + 115) -#define ActRemSevTstQst (ActChgCrsTT1stDay + 116) -#define ActReqRemOneTstQst (ActChgCrsTT1stDay + 117) -#define ActRemOneTstQst (ActChgCrsTT1stDay + 118) -#define ActChgShfTstQst (ActChgCrsTT1stDay + 119) +#define ActEdiOneTstQst (ActChgCrsTT1stDay + 111) +#define ActReqImpTstQst (ActChgCrsTT1stDay + 112) +#define ActImpTstQst (ActChgCrsTT1stDay + 113) +#define ActLstTstQst (ActChgCrsTT1stDay + 114) +#define ActRcvTstQst (ActChgCrsTT1stDay + 115) +#define ActReqRemSevTstQst (ActChgCrsTT1stDay + 116) +#define ActRemSevTstQst (ActChgCrsTT1stDay + 117) +#define ActReqRemOneTstQst (ActChgCrsTT1stDay + 118) +#define ActRemOneTstQst (ActChgCrsTT1stDay + 119) +#define ActChgShfTstQst (ActChgCrsTT1stDay + 120) -#define ActEdiTag (ActChgCrsTT1stDay + 120) -#define ActEnaTag (ActChgCrsTT1stDay + 121) -#define ActDisTag (ActChgCrsTT1stDay + 122) -#define ActRenTag (ActChgCrsTT1stDay + 123) +#define ActEdiTag (ActChgCrsTT1stDay + 121) +#define ActEnaTag (ActChgCrsTT1stDay + 122) +#define ActDisTag (ActChgCrsTT1stDay + 123) +#define ActRenTag (ActChgCrsTT1stDay + 124) -#define ActSeeTst (ActChgCrsTT1stDay + 124) -#define ActReqAssTst (ActChgCrsTT1stDay + 125) -#define ActAssTst (ActChgCrsTT1stDay + 126) -#define ActCfgTst (ActChgCrsTT1stDay + 127) -#define ActRcvCfgTst (ActChgCrsTT1stDay + 128) +#define ActSeeTst (ActChgCrsTT1stDay + 125) +#define ActReqAssTst (ActChgCrsTT1stDay + 126) +#define ActAssTst (ActChgCrsTT1stDay + 127) +#define ActCfgTst (ActChgCrsTT1stDay + 128) +#define ActRcvCfgTst (ActChgCrsTT1stDay + 129) -#define ActReqSeeMyTstRes (ActChgCrsTT1stDay + 129) -#define ActSeeMyTstResCrs (ActChgCrsTT1stDay + 130) -#define ActSeeOneTstResMe (ActChgCrsTT1stDay + 131) -#define ActReqSeeUsrTstRes (ActChgCrsTT1stDay + 132) -#define ActSeeUsrTstResCrs (ActChgCrsTT1stDay + 133) -#define ActSeeOneTstResOth (ActChgCrsTT1stDay + 134) +#define ActReqSeeMyTstRes (ActChgCrsTT1stDay + 130) +#define ActSeeMyTstResCrs (ActChgCrsTT1stDay + 131) +#define ActSeeOneTstResMe (ActChgCrsTT1stDay + 132) +#define ActReqSeeUsrTstRes (ActChgCrsTT1stDay + 133) +#define ActSeeUsrTstResCrs (ActChgCrsTT1stDay + 134) +#define ActSeeOneTstResOth (ActChgCrsTT1stDay + 135) -#define ActSeeExa (ActChgCrsTT1stDay + 135) +#define ActSeeExa (ActChgCrsTT1stDay + 136) -#define ActFrmNewExa (ActChgCrsTT1stDay + 136) -#define ActEdiOneExa (ActChgCrsTT1stDay + 137) -#define ActNewExa (ActChgCrsTT1stDay + 138) -#define ActChgExa (ActChgCrsTT1stDay + 139) -#define ActReqRemExa (ActChgCrsTT1stDay + 140) -#define ActRemExa (ActChgCrsTT1stDay + 141) -#define ActHidExa (ActChgCrsTT1stDay + 142) -#define ActUnhExa (ActChgCrsTT1stDay + 143) -#define ActReqLnkExa (ActChgCrsTT1stDay + 144) +#define ActFrmNewExa (ActChgCrsTT1stDay + 137) +#define ActEdiOneExa (ActChgCrsTT1stDay + 138) +#define ActNewExa (ActChgCrsTT1stDay + 139) +#define ActChgExa (ActChgCrsTT1stDay + 140) +#define ActReqRemExa (ActChgCrsTT1stDay + 141) +#define ActRemExa (ActChgCrsTT1stDay + 142) +#define ActHidExa (ActChgCrsTT1stDay + 143) +#define ActUnhExa (ActChgCrsTT1stDay + 144) +#define ActReqLnkExa (ActChgCrsTT1stDay + 145) -#define ActFrmNewExaSet (ActChgCrsTT1stDay + 145) -#define ActNewExaSet (ActChgCrsTT1stDay + 146) -#define ActReqRemExaSet (ActChgCrsTT1stDay + 147) -#define ActRemExaSet (ActChgCrsTT1stDay + 148) -#define ActUp_ExaSet (ActChgCrsTT1stDay + 149) -#define ActDwnExaSet (ActChgCrsTT1stDay + 150) -#define ActChgTitExaSet (ActChgCrsTT1stDay + 151) -#define ActChgNumQstExaSet (ActChgCrsTT1stDay + 152) +#define ActFrmNewExaSet (ActChgCrsTT1stDay + 146) +#define ActNewExaSet (ActChgCrsTT1stDay + 147) +#define ActReqRemExaSet (ActChgCrsTT1stDay + 148) +#define ActRemExaSet (ActChgCrsTT1stDay + 149) +#define ActUp_ExaSet (ActChgCrsTT1stDay + 150) +#define ActDwnExaSet (ActChgCrsTT1stDay + 151) +#define ActChgTitExaSet (ActChgCrsTT1stDay + 152) +#define ActChgNumQstExaSet (ActChgCrsTT1stDay + 153) -#define ActReqAddQstExaSet (ActChgCrsTT1stDay + 153) -#define ActLstTstQstForSet (ActChgCrsTT1stDay + 154) -#define ActAddQstToExa (ActChgCrsTT1stDay + 155) -#define ActReqRemSetQst (ActChgCrsTT1stDay + 156) -#define ActRemExaQst (ActChgCrsTT1stDay + 157) -#define ActValSetQst (ActChgCrsTT1stDay + 158) -#define ActInvSetQst (ActChgCrsTT1stDay + 159) +#define ActReqAddQstExaSet (ActChgCrsTT1stDay + 154) +#define ActLstTstQstForSet (ActChgCrsTT1stDay + 155) +#define ActAddQstToExa (ActChgCrsTT1stDay + 156) +#define ActReqRemSetQst (ActChgCrsTT1stDay + 157) +#define ActRemExaQst (ActChgCrsTT1stDay + 158) +#define ActValSetQst (ActChgCrsTT1stDay + 159) +#define ActInvSetQst (ActChgCrsTT1stDay + 160) -#define ActReqNewExaSes (ActChgCrsTT1stDay + 160) -#define ActEdiOneExaSes (ActChgCrsTT1stDay + 161) -#define ActNewExaSes (ActChgCrsTT1stDay + 162) -#define ActChgExaSes (ActChgCrsTT1stDay + 163) -#define ActReqRemExaSes (ActChgCrsTT1stDay + 164) -#define ActRemExaSes (ActChgCrsTT1stDay + 165) -#define ActHidExaSes (ActChgCrsTT1stDay + 166) -#define ActUnhExaSes (ActChgCrsTT1stDay + 167) +#define ActReqNewExaSes (ActChgCrsTT1stDay + 161) +#define ActEdiOneExaSes (ActChgCrsTT1stDay + 162) +#define ActNewExaSes (ActChgCrsTT1stDay + 163) +#define ActChgExaSes (ActChgCrsTT1stDay + 164) +#define ActReqRemExaSes (ActChgCrsTT1stDay + 165) +#define ActRemExaSes (ActChgCrsTT1stDay + 166) +#define ActHidExaSes (ActChgCrsTT1stDay + 167) +#define ActUnhExaSes (ActChgCrsTT1stDay + 168) -#define ActSeeExaPrn (ActChgCrsTT1stDay + 168) -#define ActAnsExaPrn (ActChgCrsTT1stDay + 169) -#define ActEndExaPrn (ActChgCrsTT1stDay + 170) +#define ActSeeExaPrn (ActChgCrsTT1stDay + 169) +#define ActAnsExaPrn (ActChgCrsTT1stDay + 170) +#define ActEndExaPrn (ActChgCrsTT1stDay + 171) -#define ActSeeMyExaResCrs (ActChgCrsTT1stDay + 171) -#define ActSeeMyExaResExa (ActChgCrsTT1stDay + 172) -#define ActSeeMyExaResSes (ActChgCrsTT1stDay + 173) -#define ActSeeOneExaResMe (ActChgCrsTT1stDay + 174) -#define ActReqSeeUsrExaRes (ActChgCrsTT1stDay + 175) -#define ActSeeUsrExaResCrs (ActChgCrsTT1stDay + 176) -#define ActSeeUsrExaResExa (ActChgCrsTT1stDay + 177) -#define ActSeeUsrExaResSes (ActChgCrsTT1stDay + 178) -#define ActSeeOneExaResOth (ActChgCrsTT1stDay + 179) -#define ActChgVisExaRes (ActChgCrsTT1stDay + 180) +#define ActSeeMyExaResCrs (ActChgCrsTT1stDay + 172) +#define ActSeeMyExaResExa (ActChgCrsTT1stDay + 173) +#define ActSeeMyExaResSes (ActChgCrsTT1stDay + 174) +#define ActSeeOneExaResMe (ActChgCrsTT1stDay + 175) +#define ActReqSeeUsrExaRes (ActChgCrsTT1stDay + 176) +#define ActSeeUsrExaResCrs (ActChgCrsTT1stDay + 177) +#define ActSeeUsrExaResExa (ActChgCrsTT1stDay + 178) +#define ActSeeUsrExaResSes (ActChgCrsTT1stDay + 179) +#define ActSeeOneExaResOth (ActChgCrsTT1stDay + 180) +#define ActChgVisExaRes (ActChgCrsTT1stDay + 181) -#define ActSeeGam (ActChgCrsTT1stDay + 181) -#define ActReqRemMch (ActChgCrsTT1stDay + 182) -#define ActRemMch (ActChgCrsTT1stDay + 183) -#define ActEdiMch (ActChgCrsTT1stDay + 184) -#define ActChgMch (ActChgCrsTT1stDay + 185) -#define ActReqNewMch (ActChgCrsTT1stDay + 186) -#define ActNewMch (ActChgCrsTT1stDay + 187) -#define ActResMch (ActChgCrsTT1stDay + 188) -#define ActBckMch (ActChgCrsTT1stDay + 189) -#define ActPlyPauMch (ActChgCrsTT1stDay + 190) -#define ActFwdMch (ActChgCrsTT1stDay + 191) -#define ActChgNumColMch (ActChgCrsTT1stDay + 192) -#define ActChgVisResMchQst (ActChgCrsTT1stDay + 193) -#define ActMchCntDwn (ActChgCrsTT1stDay + 194) -#define ActRefMchTch (ActChgCrsTT1stDay + 195) +#define ActSeeGam (ActChgCrsTT1stDay + 182) +#define ActReqRemMch (ActChgCrsTT1stDay + 183) +#define ActRemMch (ActChgCrsTT1stDay + 184) +#define ActEdiMch (ActChgCrsTT1stDay + 185) +#define ActChgMch (ActChgCrsTT1stDay + 186) +#define ActReqNewMch (ActChgCrsTT1stDay + 187) +#define ActNewMch (ActChgCrsTT1stDay + 188) +#define ActResMch (ActChgCrsTT1stDay + 189) +#define ActBckMch (ActChgCrsTT1stDay + 190) +#define ActPlyPauMch (ActChgCrsTT1stDay + 191) +#define ActFwdMch (ActChgCrsTT1stDay + 192) +#define ActChgNumColMch (ActChgCrsTT1stDay + 193) +#define ActChgVisResMchQst (ActChgCrsTT1stDay + 194) +#define ActMchCntDwn (ActChgCrsTT1stDay + 195) +#define ActRefMchTch (ActChgCrsTT1stDay + 196) -#define ActJoiMch (ActChgCrsTT1stDay + 196) -#define ActSeeMchAnsQstStd (ActChgCrsTT1stDay + 197) -#define ActRemMchAnsQstStd (ActChgCrsTT1stDay + 198) -#define ActAnsMchQstStd (ActChgCrsTT1stDay + 199) -#define ActRefMchStd (ActChgCrsTT1stDay + 200) +#define ActJoiMch (ActChgCrsTT1stDay + 197) +#define ActSeeMchAnsQstStd (ActChgCrsTT1stDay + 198) +#define ActRemMchAnsQstStd (ActChgCrsTT1stDay + 199) +#define ActAnsMchQstStd (ActChgCrsTT1stDay + 200) +#define ActRefMchStd (ActChgCrsTT1stDay + 201) -#define ActSeeMyMchResCrs (ActChgCrsTT1stDay + 201) -#define ActSeeMyMchResGam (ActChgCrsTT1stDay + 202) -#define ActSeeMyMchResMch (ActChgCrsTT1stDay + 203) -#define ActSeeOneMchResMe (ActChgCrsTT1stDay + 204) +#define ActSeeMyMchResCrs (ActChgCrsTT1stDay + 202) +#define ActSeeMyMchResGam (ActChgCrsTT1stDay + 203) +#define ActSeeMyMchResMch (ActChgCrsTT1stDay + 204) +#define ActSeeOneMchResMe (ActChgCrsTT1stDay + 205) -#define ActReqSeeUsrMchRes (ActChgCrsTT1stDay + 205) -#define ActSeeUsrMchResCrs (ActChgCrsTT1stDay + 206) -#define ActSeeUsrMchResGam (ActChgCrsTT1stDay + 207) -#define ActSeeUsrMchResMch (ActChgCrsTT1stDay + 208) -#define ActSeeOneMchResOth (ActChgCrsTT1stDay + 209) +#define ActReqSeeUsrMchRes (ActChgCrsTT1stDay + 206) +#define ActSeeUsrMchResCrs (ActChgCrsTT1stDay + 207) +#define ActSeeUsrMchResGam (ActChgCrsTT1stDay + 208) +#define ActSeeUsrMchResMch (ActChgCrsTT1stDay + 209) +#define ActSeeOneMchResOth (ActChgCrsTT1stDay + 210) -#define ActChgVisResMchUsr (ActChgCrsTT1stDay + 210) +#define ActChgVisResMchUsr (ActChgCrsTT1stDay + 211) -#define ActLstOneGam (ActChgCrsTT1stDay + 211) +#define ActLstOneGam (ActChgCrsTT1stDay + 212) -#define ActFrmNewGam (ActChgCrsTT1stDay + 212) -#define ActEdiOneGam (ActChgCrsTT1stDay + 213) -#define ActNewGam (ActChgCrsTT1stDay + 214) -#define ActChgGam (ActChgCrsTT1stDay + 215) -#define ActReqRemGam (ActChgCrsTT1stDay + 216) -#define ActRemGam (ActChgCrsTT1stDay + 217) -#define ActHidGam (ActChgCrsTT1stDay + 218) -#define ActUnhGam (ActChgCrsTT1stDay + 219) -#define ActAddOneGamQst (ActChgCrsTT1stDay + 220) -#define ActGamLstTstQst (ActChgCrsTT1stDay + 221) -#define ActAddTstQstToGam (ActChgCrsTT1stDay + 222) -#define ActReqRemGamQst (ActChgCrsTT1stDay + 223) -#define ActRemGamQst (ActChgCrsTT1stDay + 224) -#define ActUp_GamQst (ActChgCrsTT1stDay + 225) -#define ActDwnGamQst (ActChgCrsTT1stDay + 226) -#define ActReqLnkGam (ActChgCrsTT1stDay + 227) +#define ActFrmNewGam (ActChgCrsTT1stDay + 213) +#define ActEdiOneGam (ActChgCrsTT1stDay + 214) +#define ActNewGam (ActChgCrsTT1stDay + 215) +#define ActChgGam (ActChgCrsTT1stDay + 216) +#define ActReqRemGam (ActChgCrsTT1stDay + 217) +#define ActRemGam (ActChgCrsTT1stDay + 218) +#define ActHidGam (ActChgCrsTT1stDay + 219) +#define ActUnhGam (ActChgCrsTT1stDay + 220) +#define ActAddOneGamQst (ActChgCrsTT1stDay + 221) +#define ActGamLstTstQst (ActChgCrsTT1stDay + 222) +#define ActAddTstQstToGam (ActChgCrsTT1stDay + 223) +#define ActReqRemGamQst (ActChgCrsTT1stDay + 224) +#define ActRemGamQst (ActChgCrsTT1stDay + 225) +#define ActUp_GamQst (ActChgCrsTT1stDay + 226) +#define ActDwnGamQst (ActChgCrsTT1stDay + 227) +#define ActReqLnkGam (ActChgCrsTT1stDay + 228) -#define ActSeeSvy (ActChgCrsTT1stDay + 228) -#define ActAnsSvy (ActChgCrsTT1stDay + 229) -#define ActFrmNewSvy (ActChgCrsTT1stDay + 230) -#define ActEdiOneSvy (ActChgCrsTT1stDay + 231) -#define ActNewSvy (ActChgCrsTT1stDay + 232) -#define ActChgSvy (ActChgCrsTT1stDay + 233) -#define ActReqRemSvy (ActChgCrsTT1stDay + 234) -#define ActRemSvy (ActChgCrsTT1stDay + 235) -#define ActReqRstSvy (ActChgCrsTT1stDay + 236) -#define ActRstSvy (ActChgCrsTT1stDay + 237) -#define ActHidSvy (ActChgCrsTT1stDay + 238) -#define ActUnhSvy (ActChgCrsTT1stDay + 239) -#define ActReqLnkSvy (ActChgCrsTT1stDay + 240) +#define ActSeeSvy (ActChgCrsTT1stDay + 229) +#define ActAnsSvy (ActChgCrsTT1stDay + 230) +#define ActFrmNewSvy (ActChgCrsTT1stDay + 231) +#define ActEdiOneSvy (ActChgCrsTT1stDay + 232) +#define ActNewSvy (ActChgCrsTT1stDay + 233) +#define ActChgSvy (ActChgCrsTT1stDay + 234) +#define ActReqRemSvy (ActChgCrsTT1stDay + 235) +#define ActRemSvy (ActChgCrsTT1stDay + 236) +#define ActReqRstSvy (ActChgCrsTT1stDay + 237) +#define ActRstSvy (ActChgCrsTT1stDay + 238) +#define ActHidSvy (ActChgCrsTT1stDay + 239) +#define ActUnhSvy (ActChgCrsTT1stDay + 240) +#define ActReqLnkSvy (ActChgCrsTT1stDay + 241) -#define ActEdiOneSvyQst (ActChgCrsTT1stDay + 241) -#define ActRcvSvyQst (ActChgCrsTT1stDay + 242) -#define ActReqRemSvyQst (ActChgCrsTT1stDay + 243) -#define ActRemSvyQst (ActChgCrsTT1stDay + 244) +#define ActEdiOneSvyQst (ActChgCrsTT1stDay + 242) +#define ActRcvSvyQst (ActChgCrsTT1stDay + 243) +#define ActReqRemSvyQst (ActChgCrsTT1stDay + 244) +#define ActRemSvyQst (ActChgCrsTT1stDay + 245) /*****************************************************************************/ /******************************** Files tab **********************************/ diff --git a/swad_assignment.c b/swad_assignment.c index b233ac5c..7e28390f 100644 --- a/swad_assignment.c +++ b/swad_assignment.c @@ -49,6 +49,7 @@ #include "swad_pagination.h" #include "swad_parameter.h" #include "swad_photo.h" +#include "swad_program_database.h" #include "swad_role.h" #include "swad_setting.h" #include "swad_string.h" @@ -73,6 +74,8 @@ static void Asg_PutIconsListAssignments (void *Assignments); static void Asg_PutIconToCreateNewAsg (void *Assignments); static void Asg_PutButtonToCreateNewAsg (void *Assignments); static void Asg_ParamsWhichGroupsToShow (void *Assignments); +static void Asg_ShowOneAssignmentInBox (struct Asg_Assignments *Assignments); +static void Asg_PutIconsOneAsg (void *Assignments); static void Asg_ShowOneAssignment (struct Asg_Assignments *Assignments, long AsgCod,bool PrintView); static void Asg_WriteAsgAuthor (struct Asg_Assignment *Asg); @@ -107,7 +110,7 @@ static void Asg_ResetAssignments (struct Asg_Assignments *Assignments) Assignments->Num = 0; Assignments->LstAsgCods = NULL; Assignments->SelectedOrder = Asg_ORDER_DEFAULT; - Assignments->AsgCodToEdit = -1L; // Used as parameter in contextual links + Assignments->AsgCod = -1L; // Used as parameter in contextual links Assignments->CurrentPage = 0; } @@ -157,48 +160,48 @@ static void Asg_ShowAllAssignments (struct Asg_Assignments *Assignments) Asg_PutIconsListAssignments,Assignments, Hlp_ASSESSMENT_Assignments,Box_NOT_CLOSABLE); - /***** Select whether show only my groups or all groups *****/ - if (Gbl.Crs.Grps.NumGrps) - { - Set_BeginSettingsHead (); - Grp_ShowFormToSelWhichGrps (ActSeeAsg, - Asg_ParamsWhichGroupsToShow,Assignments); - Set_EndSettingsHead (); - } + /***** Select whether show only my groups or all groups *****/ + if (Gbl.Crs.Grps.NumGrps) + { + Set_BeginSettingsHead (); + Grp_ShowFormToSelWhichGrps (ActSeeAsg, + Asg_ParamsWhichGroupsToShow,Assignments); + Set_EndSettingsHead (); + } - /***** Write links to pages *****/ - Pag_WriteLinksToPagesCentered (Pag_ASSIGNMENTS,&Pagination, - Assignments,-1L); + /***** Write links to pages *****/ + Pag_WriteLinksToPagesCentered (Pag_ASSIGNMENTS,&Pagination, + Assignments,-1L); - if (Assignments->Num) - { - /***** Begin table *****/ - HTM_TABLE_BeginWideMarginPadding (2); + if (Assignments->Num) + { + /***** Begin table *****/ + HTM_TABLE_BeginWideMarginPadding (2); - /***** Table head *****/ - Asg_PutHeadForSeeing (Assignments,false); // Not print view + /***** Table head *****/ + Asg_PutHeadForSeeing (Assignments,false); // Not print view - /***** Write all assignments *****/ - for (NumAsg = Pagination.FirstItemVisible, The_ResetRowColor (); - NumAsg <= Pagination.LastItemVisible; - NumAsg++, The_ChangeRowColor ()) - Asg_ShowOneAssignment (Assignments, - Assignments->LstAsgCods[NumAsg - 1], - false); // Not print view + /***** Write all assignments *****/ + for (NumAsg = Pagination.FirstItemVisible, The_ResetRowColor (); + NumAsg <= Pagination.LastItemVisible; + NumAsg++, The_ChangeRowColor ()) + Asg_ShowOneAssignment (Assignments, + Assignments->LstAsgCods[NumAsg - 1], + false); // Not print view - /***** End table *****/ - HTM_TABLE_End (); - } - else // No assignments created - Ale_ShowAlert (Ale_INFO,Txt_No_assignments); + /***** End table *****/ + HTM_TABLE_End (); + } + else // No assignments created + Ale_ShowAlert (Ale_INFO,Txt_No_assignments); - /***** Write again links to pages *****/ - Pag_WriteLinksToPagesCentered (Pag_ASSIGNMENTS,&Pagination, - Assignments,-1L); + /***** Write again links to pages *****/ + Pag_WriteLinksToPagesCentered (Pag_ASSIGNMENTS,&Pagination, + Assignments,-1L); - /***** Button to create a new assignment *****/ - if (Asg_CheckIfICanCreateAssignments ()) - Asg_PutButtonToCreateNewAsg (Assignments); + /***** Button to create a new assignment *****/ + if (Asg_CheckIfICanCreateAssignments ()) + Asg_PutButtonToCreateNewAsg (Assignments); /***** End box *****/ Box_BoxEnd (); @@ -303,7 +306,7 @@ static void Asg_PutIconToCreateNewAsg (void *Assignments) { if (Assignments) { - ((struct Asg_Assignments *) Assignments)->AsgCodToEdit = -1L; + ((struct Asg_Assignments *) Assignments)->AsgCod = -1L; Ico_PutContextualIconToAdd (ActFrmNewAsg,NULL,Asg_PutParams,Assignments); } } @@ -320,7 +323,7 @@ static void Asg_PutButtonToCreateNewAsg (void *Assignments) { /* Begin form */ Frm_BeginForm (ActFrmNewAsg); - ((struct Asg_Assignments *) Assignments)->AsgCodToEdit = -1L; + ((struct Asg_Assignments *) Assignments)->AsgCod = -1L; Asg_PutParams (Assignments); /* Button to create new assignment */ @@ -352,9 +355,7 @@ static void Asg_ParamsWhichGroupsToShow (void *Assignments) void Asg_SeeOneAssignment (void) { extern const char *Hlp_ASSESSMENT_Assignments; - extern const char *Txt_Assignment; struct Asg_Assignments Assignments; - long AsgCod; /***** Reset assignments *****/ Asg_ResetAssignments (&Assignments); @@ -365,24 +366,10 @@ void Asg_SeeOneAssignment (void) Assignments.CurrentPage = Pag_GetParamPagNum (Pag_ASSIGNMENTS); /***** Get the code of the assignment *****/ - AsgCod = Asg_GetParamAsgCod (); + Assignments.AsgCod = Asg_GetParamAsgCod (); - /***** Begin box and table *****/ - Box_BoxTableBegin (NULL,Txt_Assignment, - NULL,NULL, - Hlp_ASSESSMENT_Assignments,Box_NOT_CLOSABLE,2); - - /***** Table head *****/ - Asg_PutHeadForSeeing (&Assignments, - false); // Not print view - - /***** Write assignment *****/ - Asg_ShowOneAssignment (&Assignments, - AsgCod, - false); // Not print view - - /***** End table and end box *****/ - Box_BoxTableEnd (); + /***** Show selected assignment in a box *****/ + Asg_ShowOneAssignmentInBox (&Assignments); /***** Show current assignments, if any *****/ Asg_ShowAllAssignments (&Assignments); @@ -425,6 +412,45 @@ void Asg_PrintOneAssignment (void) HTM_TABLE_End (); } +/*****************************************************************************/ +/************************* Show an assignment in a box ***********************/ +/*****************************************************************************/ + +static void Asg_ShowOneAssignmentInBox (struct Asg_Assignments *Assignments) + { + extern const char *Hlp_ASSESSMENT_Assignments; + extern const char *Txt_Assignment; + + /***** Begin box and table *****/ + Box_BoxTableBegin (NULL,Txt_Assignment, + Asg_PutIconsOneAsg,Assignments, + Hlp_ASSESSMENT_Assignments,Box_NOT_CLOSABLE,2); + + /***** Table head *****/ + Asg_PutHeadForSeeing (Assignments, + false); // Not print view + + /***** Write assignment *****/ + Asg_ShowOneAssignment (Assignments, + Assignments->AsgCod, + false); // Not print view + + /***** End table and end box *****/ + Box_BoxTableEnd (); + } + +/*****************************************************************************/ +/****************** Put contextual icons in an assignment ********************/ +/*****************************************************************************/ + +static void Asg_PutIconsOneAsg (void *Assignments) + { + /***** Put icon to get resource link *****/ + if (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM) // Only if I am superuser // TODO: Include teachers + Ico_PutContextualIconToGetLink (ActReqLnkAsg,NULL, + Asg_PutParams,Assignments); + } + /*****************************************************************************/ /*************************** Show one assignment *****************************/ /*****************************************************************************/ @@ -684,7 +710,7 @@ static void Asg_PutFormsToRemEditOneAsg (struct Asg_Assignments *Assignments, /***** Set assigment to edit (used as parameter in contextual links) *****/ - Assignments->AsgCodToEdit = Asg->AsgCod; + Assignments->AsgCod = Asg->AsgCod; switch (Gbl.Usrs.Me.Role.Logged) { @@ -725,8 +751,8 @@ static void Asg_PutParams (void *Assignments) if (Assignments) { - if (((struct Asg_Assignments *) Assignments)->AsgCodToEdit > 0) - Asg_PutParamAsgCod (((struct Asg_Assignments *) Assignments)->AsgCodToEdit); + if (((struct Asg_Assignments *) Assignments)->AsgCod > 0) + Asg_PutParamAsgCod (((struct Asg_Assignments *) Assignments)->AsgCod); Dat_PutHiddenParamOrder (((struct Asg_Assignments *) Assignments)->SelectedOrder); WhichGroups = Grp_GetParamWhichGroups (); Grp_PutParamWhichGroups (&WhichGroups); @@ -1001,7 +1027,7 @@ void Asg_ReqRemAssignment (void) Asg_GetDataOfAssignmentByCod (&Asg); /***** Show question and button to remove the assignment *****/ - Assignments.AsgCodToEdit = Asg.AsgCod; + Assignments.AsgCod = Asg.AsgCod; Ale_ShowAlertAndButton (ActRemAsg,NULL,NULL, Asg_PutParams,&Assignments, Btn_REMOVE_BUTTON,Txt_Remove_assignment, @@ -1188,12 +1214,12 @@ void Asg_RequestCreatOrEditAsg (void) if (ItsANewAssignment) { Frm_BeginForm (ActNewAsg); - Assignments.AsgCodToEdit = -1L; + Assignments.AsgCod = -1L; } else { Frm_BeginForm (ActChgAsg); - Assignments.AsgCodToEdit = Asg.AsgCod; + Assignments.AsgCod = Asg.AsgCod; } Asg_PutParams (&Assignments); @@ -1745,3 +1771,99 @@ void Asg_GetAndShowAssignmentsStats (void) /***** End table and box *****/ Box_BoxTableEnd (); } + +/*****************************************************************************/ +/***************************** Get link to assignment ******************************/ +/*****************************************************************************/ + +void Asg_GetLinkToAssignment (void) + { + extern const char *Txt_Link_to_resource_X_copied_into_clipboard; + struct Asg_Assignments Assignments; + char Title[Asg_MAX_BYTES_ASSIGNMENT_TITLE + 1]; + + /***** Reset assignments *****/ + Asg_ResetAssignments (&Assignments); + + /***** Get parameters *****/ + Assignments.SelectedOrder = Asg_GetParamAsgOrder (); + Grp_GetParamWhichGroups (); + Assignments.CurrentPage = Pag_GetParamPagNum (Pag_ASSIGNMENTS); + + /***** Get assignment code *****/ + if ((Assignments.AsgCod = Asg_GetParamAsgCod ()) <= 0) + Err_WrongAssignmentExit (); + + /***** Get assignment title *****/ + Asg_DB_GetAssignmentTitleByCod (Assignments.AsgCod,Title); + + /***** Copy link to assignment into resource clipboard *****/ + Prg_DB_CopyToClipboard (PrgRsc_ASSIGNMENT,Assignments.AsgCod); + + /***** Write sucess message *****/ + Ale_ShowAlert (Ale_SUCCESS,Txt_Link_to_resource_X_copied_into_clipboard, + Title); + + /***** Show selected assignment in a box *****/ + Asg_ShowOneAssignmentInBox (&Assignments); + + /***** Show current assignments, if any *****/ + Asg_ShowAllAssignments (&Assignments); + } + +/*****************************************************************************/ +/*********************** Write assignment in course program ************************/ +/*****************************************************************************/ + +void Asg_WriteAssignmentInCrsProgram (long AsgCod,bool PutFormToGo, + const char *Icon,const char *IconTitle) + { + extern const char *Txt_Actions[Act_NUM_ACTIONS]; + char Title[Asg_MAX_BYTES_ASSIGNMENT_TITLE + 1]; + + /***** Get assignment title *****/ + Asg_DB_GetAssignmentTitleByCod (AsgCod,Title); + + /***** Begin form to go to assignment *****/ + if (PutFormToGo) + { + Frm_BeginForm (ActSeeOneAsg); + 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], + "class=\"LM BT_LINK PRG_RSC_%s\"", + The_GetSuffix ()); + } + + /***** Icon depending on type ******/ + if (PutFormToGo) + Ico_PutIconLink (Icon,Ico_BLACK,ActSeeGam); + else + Ico_PutIconOn (Icon,Ico_BLACK,IconTitle); + + /***** Write assignment title of exam *****/ + HTM_Txt (Title); + + /***** End form to download file *****/ + if (PutFormToGo) + { + /* End form */ + HTM_BUTTON_End (); + + Frm_EndForm (); + } + } + +/*****************************************************************************/ +/**************** Get assignment title from assignment code ******************/ +/*****************************************************************************/ + +void Asg_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); + } diff --git a/swad_assignment.h b/swad_assignment.h index bb589256..eb3c0a61 100644 --- a/swad_assignment.h +++ b/swad_assignment.h @@ -53,7 +53,7 @@ struct Asg_Assignments unsigned Num; // Number of assignments long *LstAsgCods; // List of assigment codes Dat_StartEndTime_t SelectedOrder; - long AsgCodToEdit; // Used as parameter in contextual links + long AsgCod; // Used as parameter in contextual links unsigned CurrentPage; }; @@ -104,4 +104,10 @@ unsigned Asg_GetNumAssignments (HieLvl_Level_t Scope,unsigned *NumNotif); //-------------------------------- Figures ------------------------------------ void Asg_GetAndShowAssignmentsStats (void); +//--------------------------- Program resources ------------------------------- +void Asg_GetLinkToAssignment (void); +void Asg_WriteAssignmentInCrsProgram (long AsgCod,bool PutFormToGo, + const char *Icon,const char *IconTitle); +void Asg_GetTitleFromAsgCod (long AsgCod,char *Title,size_t TitleSize); + #endif diff --git a/swad_assignment_database.c b/swad_assignment_database.c index fa72c095..6359bd0f 100644 --- a/swad_assignment_database.c +++ b/swad_assignment_database.c @@ -194,6 +194,21 @@ unsigned Asg_DB_GetAssignmentTitleAndTxtByCod (MYSQL_RES **mysql_res,long AsgCod AsgCod); } +/*****************************************************************************/ +/******************** Get assignment title from database *********************/ +/*****************************************************************************/ + +void Asg_DB_GetAssignmentTitleByCod (long AsgCod,char Title[Asg_MAX_BYTES_ASSIGNMENT_TITLE + 1]) + { + DB_QuerySELECTString (Title,Asg_MAX_BYTES_ASSIGNMENT_TITLE,"can not get assignment title", + "SELECT Title" + " FROM asg_assignments" + " WHERE AsgCod=%ld" + " AND CrsCod=%ld", // Extra check + AsgCod, + Gbl.Hierarchy.Crs.CrsCod); + } + /*****************************************************************************/ /******************** Get assignment text from database **********************/ /*****************************************************************************/ diff --git a/swad_assignment_database.h b/swad_assignment_database.h index 1186a60f..ca4a0f9a 100644 --- a/swad_assignment_database.h +++ b/swad_assignment_database.h @@ -46,6 +46,7 @@ unsigned Asg_DB_GetDataOfAssignmentByCod (MYSQL_RES **mysql_res,long AsgCod); unsigned Asg_DB_GetDataOfAssignmentByFolder (MYSQL_RES **mysql_res, const char Folder[Brw_MAX_BYTES_FOLDER + 1]); unsigned Asg_DB_GetAssignmentTitleAndTxtByCod (MYSQL_RES **mysql_res,long AsgCod); +void Asg_DB_GetAssignmentTitleByCod (long AsgCod,char Title[Asg_MAX_BYTES_ASSIGNMENT_TITLE + 1]); void Asg_DB_GetAssignmentTxtByCod (long AsgCod,char Txt[Cns_MAX_BYTES_TEXT + 1]); bool Asg_DB_CheckIfSimilarAssignmentExists (const char *Field,const char *Value, diff --git a/swad_changelog.h b/swad_changelog.h index 3b63ee3d..e7492315 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -606,10 +606,11 @@ 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.14 (2022-09-21)" +#define Log_PLATFORM_VERSION "SWAD 22.15 (2022-09-21)" #define CSS_FILE "swad22.7.css" #define JS_FILE "swad21.100.js" /* + Version 22.15: Sep 21, 2022 Links to assignments in program. (331442 lines) Version 22.14: Sep 21, 2022 An assignment is shown when clicking on its title. (331300 lines) Version 22.13: Sep 20, 2022 Links to course forum threads in program. (331234 lines) Version 22.12.3: Sep 20, 2022 Fixed bug in JavaScript related to dates. (331098 lines) diff --git a/swad_program_resource.c b/swad_program_resource.c index 349a40a9..cbbd1baf 100644 --- a/swad_program_resource.c +++ b/swad_program_resource.c @@ -1010,7 +1010,7 @@ static void PrgRsc_WriteLinkName (const struct Prg_Link *Link,bool PutFormToGo, const char *IconTitle) = { [PrgRsc_NONE ] = PrgRsc_WriteEmptyLinkInCrsProgram, - [PrgRsc_ASSIGNMENT ] = NULL, + [PrgRsc_ASSIGNMENT ] = Asg_WriteAssignmentInCrsProgram, [PrgRsc_CALL_FOR_EXAM ] = Cfe_WriteCallForExamInCrsProgram, [PrgRsc_EXAM ] = Exa_WriteExamInCrsProgram, [PrgRsc_GAME ] = Gam_WriteGameInCrsProgram, @@ -1056,7 +1056,7 @@ static void PrgRsc_GetResourceTitleFromLink (struct Prg_Item *Item) static void (*GetTitle[PrgRsc_NUM_TYPES]) (long Cod,char *Title,size_t TitleSize) = { [PrgRsc_NONE ] = NULL, - [PrgRsc_ASSIGNMENT ] = NULL, + [PrgRsc_ASSIGNMENT ] = Asg_GetTitleFromAsgCod, [PrgRsc_CALL_FOR_EXAM ] = Cfe_GetTitleFromExaCod, [PrgRsc_EXAM ] = Exa_GetTitleFromExaCod, [PrgRsc_GAME ] = Gam_GetTitleFromGamCod, diff --git a/swad_text_action.c b/swad_text_action.c index 3b50b622..1d2b5841 100644 --- a/swad_text_action.c +++ b/swad_text_action.c @@ -9214,6 +9214,29 @@ const char *Txt_Actions[Act_NUM_ACTIONS] = "Unhide assignment" // Precisa de tradução #elif L==10 // tr "Unhide assignment" // Çeviri lazim! +#endif + , + [ActReqLnkAsg] = +#if L==1 // ca + "Copy link to assignment" // Necessita traducció +#elif L==2 // de + "Copy link to assignment" // Need Übersetzung +#elif L==3 // en + "Copy link to assignment" +#elif L==4 // es + "Copiar enlace a actividad" +#elif L==5 // fr + "Copy link to assignment" // Besoin de traduction +#elif L==6 // gn + "Copiar enlace a actividad" // Okoteve traducción +#elif L==7 // it + "Copy link to assignment" // Bisogno di traduzione +#elif L==8 // pl + "Copy link to assignment" // Potrzebujesz tlumaczenie +#elif L==9 // pt + "Copy link to assignment" // Precisa de tradução +#elif L==10 // tr + "Copy link to assignment" // Çeviri lazim! #endif , [ActReqUsrPrj] =