diff --git a/css/swad22.78.15.css b/css/swad22.78.15.css
index 60ee37ce..96904739 100644
--- a/css/swad22.78.15.css
+++ b/css/swad22.78.15.css
@@ -4972,7 +4972,7 @@ button.PAG_DARK:hover, .PAG_CUR_DARK {background-color:#707070;}
.INPUT_FLOAT
{
box-sizing:border-box;
- width:90px;
+ width:100px;
}
.INPUT_WWW_NARROW
{
diff --git a/icon/clipboard-list.svg b/icon/clipboard-list.svg
index bbf0d5b1..9f1076cd 100644
--- a/icon/clipboard-list.svg
+++ b/icon/clipboard-list.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/icon/clipboard.svg b/icon/clipboard.svg
index 628d0b7e..7d8f669f 100644
--- a/icon/clipboard.svg
+++ b/icon/clipboard.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/icon/paste.svg b/icon/paste.svg
index b7cc1a95..e6063395 100644
--- a/icon/paste.svg
+++ b/icon/paste.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/swad_action_list.c b/swad_action_list.c
index ee9b789a..86c47570 100644
--- a/swad_action_list.c
+++ b/swad_action_list.c
@@ -453,6 +453,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActConSeePrgItm ] = {1945,-1,TabUnk,ActSeePrg ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_ContractItem ,NULL},
[ActConEdiPrgItm ] = {1947,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_ContractItem ,NULL},
+ [ActSeePrgRscCli ] = {1970,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,PrgRsc_ViewResourceClipboard ,NULL},
[ActFrmSeePrgRsc ] = {1925,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,PrgRsc_ViewResourcesAfterEdit ,NULL},
[ActFrmEdiPrgRsc ] = {1918,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,PrgRsc_EditResources ,NULL},
[ActNewPrgRsc ] = {1929,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,PrgRsc_CreateResource ,NULL},
@@ -463,7 +464,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActUnhPrgRsc ] = {1922,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,PrgRsc_UnhideResource ,NULL},
[ActUp_PrgRsc ] = {1923,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,PrgRsc_MoveUpResource ,NULL},
[ActDwnPrgRsc ] = {1924,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,PrgRsc_MoveDownResource ,NULL},
- [ActSeeCliPrgRsc ] = {1932,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,PrgRsc_ShowClipboardToChgLink ,NULL},
+ [ActFrmChgLnkPrgRsc ] = {1932,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,PrgRsc_EditProgramWithClipboard,NULL},
[ActChgLnkPrgRsc ] = {1933,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,PrgRsc_ChangeLink ,NULL},
[ActEdiTchGui ] = { 785,-1,TabUnk,ActSeeTchGui ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_FormsToSelSendInfo ,NULL},
@@ -3819,7 +3820,7 @@ Act_Action_t ActLst_FromActCodToAction[1 + ActLst_MAX_ACTION_COD] = // Do not re
ActNewPrgRsc, // #1929
ActReqLnkSeeDocCrs, // #1930
ActReqLnkAdmDocCrs, // #1931
- ActSeeCliPrgRsc, // #1932
+ ActFrmChgLnkPrgRsc, // #1932
ActChgLnkPrgRsc, // #1933
ActReqLnkCfe, // #1934
ActReqLnkGam, // #1935
@@ -3857,4 +3858,5 @@ Act_Action_t ActLst_FromActCodToAction[1 + ActLst_MAX_ACTION_COD] = // Do not re
ActChgWeiRubCri, // #1967
ActChgLnkRubCri, // #1968
ActReqLnkRub, // #1969
+ ActSeePrgRscCli, // #1970
};
diff --git a/swad_action_list.h b/swad_action_list.h
index 90a5d731..f8168c90 100644
--- a/swad_action_list.h
+++ b/swad_action_list.h
@@ -379,137 +379,139 @@
#define ActConSeePrgItm (ActChgCrsSta + 32)
#define ActExpEdiPrgItm (ActChgCrsSta + 33)
#define ActConEdiPrgItm (ActChgCrsSta + 34)
-#define ActFrmSeePrgRsc (ActChgCrsSta + 35)
-#define ActFrmEdiPrgRsc (ActChgCrsSta + 36)
-#define ActNewPrgRsc (ActChgCrsSta + 37)
-#define ActRenPrgRsc (ActChgCrsSta + 38)
-#define ActReqRemPrgRsc (ActChgCrsSta + 39)
-#define ActRemPrgRsc (ActChgCrsSta + 40)
-#define ActHidPrgRsc (ActChgCrsSta + 41)
-#define ActUnhPrgRsc (ActChgCrsSta + 42)
-#define ActUp_PrgRsc (ActChgCrsSta + 43)
-#define ActDwnPrgRsc (ActChgCrsSta + 44)
-#define ActSeeCliPrgRsc (ActChgCrsSta + 45)
-#define ActChgLnkPrgRsc (ActChgCrsSta + 46)
-#define ActEdiTchGui (ActChgCrsSta + 47)
-#define ActSeeSylLec (ActChgCrsSta + 48)
-#define ActSeeSylPra (ActChgCrsSta + 49)
-#define ActEdiSylLec (ActChgCrsSta + 50)
-#define ActEdiSylPra (ActChgCrsSta + 51)
-#define ActDelItmSylLec (ActChgCrsSta + 52)
-#define ActDelItmSylPra (ActChgCrsSta + 53)
-#define ActUp_IteSylLec (ActChgCrsSta + 54)
-#define ActUp_IteSylPra (ActChgCrsSta + 55)
-#define ActDwnIteSylLec (ActChgCrsSta + 56)
-#define ActDwnIteSylPra (ActChgCrsSta + 57)
-#define ActRgtIteSylLec (ActChgCrsSta + 58)
-#define ActRgtIteSylPra (ActChgCrsSta + 59)
-#define ActLftIteSylLec (ActChgCrsSta + 60)
-#define ActLftIteSylPra (ActChgCrsSta + 61)
-#define ActInsIteSylLec (ActChgCrsSta + 62)
-#define ActInsIteSylPra (ActChgCrsSta + 63)
-#define ActModIteSylLec (ActChgCrsSta + 64)
-#define ActModIteSylPra (ActChgCrsSta + 65)
-#define ActEdiBib (ActChgCrsSta + 66)
-#define ActEdiFAQ (ActChgCrsSta + 67)
-#define ActEdiCrsLnk (ActChgCrsSta + 68)
-#define ActEdiAss (ActChgCrsSta + 69)
+#define ActSeePrgRscCli (ActChgCrsSta + 35)
+#define ActFrmSeePrgRsc (ActChgCrsSta + 36)
+#define ActFrmEdiPrgRsc (ActChgCrsSta + 37)
+#define ActNewPrgRsc (ActChgCrsSta + 38)
+#define ActRenPrgRsc (ActChgCrsSta + 39)
+#define ActReqRemPrgRsc (ActChgCrsSta + 40)
+#define ActRemPrgRsc (ActChgCrsSta + 41)
+#define ActHidPrgRsc (ActChgCrsSta + 42)
+#define ActUnhPrgRsc (ActChgCrsSta + 43)
+#define ActUp_PrgRsc (ActChgCrsSta + 44)
+#define ActDwnPrgRsc (ActChgCrsSta + 45)
+#define ActFrmChgLnkPrgRsc (ActChgCrsSta + 46)
+#define ActChgLnkPrgRsc (ActChgCrsSta + 47)
+#define ActEdiTchGui (ActChgCrsSta + 48)
+#define ActSeeSylLec (ActChgCrsSta + 49)
+#define ActSeeSylPra (ActChgCrsSta + 50)
+#define ActEdiSylLec (ActChgCrsSta + 51)
+#define ActEdiSylPra (ActChgCrsSta + 52)
+#define ActDelItmSylLec (ActChgCrsSta + 53)
+#define ActDelItmSylPra (ActChgCrsSta + 54)
+#define ActUp_IteSylLec (ActChgCrsSta + 55)
+#define ActUp_IteSylPra (ActChgCrsSta + 56)
+#define ActDwnIteSylLec (ActChgCrsSta + 57)
+#define ActDwnIteSylPra (ActChgCrsSta + 58)
+#define ActRgtIteSylLec (ActChgCrsSta + 59)
+#define ActRgtIteSylPra (ActChgCrsSta + 60)
+#define ActLftIteSylLec (ActChgCrsSta + 61)
+#define ActLftIteSylPra (ActChgCrsSta + 62)
+#define ActInsIteSylLec (ActChgCrsSta + 63)
+#define ActInsIteSylPra (ActChgCrsSta + 64)
+#define ActModIteSylLec (ActChgCrsSta + 65)
+#define ActModIteSylPra (ActChgCrsSta + 66)
-#define ActChgFrcReaCrsInf (ActChgCrsSta + 70)
-#define ActChgFrcReaTchGui (ActChgCrsSta + 71)
-#define ActChgFrcReaSylLec (ActChgCrsSta + 72)
-#define ActChgFrcReaSylPra (ActChgCrsSta + 73)
-#define ActChgFrcReaBib (ActChgCrsSta + 74)
-#define ActChgFrcReaFAQ (ActChgCrsSta + 75)
-#define ActChgFrcReaCrsLnk (ActChgCrsSta + 76)
-#define ActChgFrcReaAss (ActChgCrsSta + 77)
+#define ActEdiBib (ActChgCrsSta + 67)
+#define ActEdiFAQ (ActChgCrsSta + 68)
+#define ActEdiCrsLnk (ActChgCrsSta + 69)
+#define ActEdiAss (ActChgCrsSta + 70)
-#define ActChgHavReaCrsInf (ActChgCrsSta + 78)
-#define ActChgHavReaTchGui (ActChgCrsSta + 79)
-#define ActChgHavReaSylLec (ActChgCrsSta + 80)
-#define ActChgHavReaSylPra (ActChgCrsSta + 81)
-#define ActChgHavReaBib (ActChgCrsSta + 82)
-#define ActChgHavReaFAQ (ActChgCrsSta + 83)
-#define ActChgHavReaCrsLnk (ActChgCrsSta + 84)
-#define ActChgHavReaAss (ActChgCrsSta + 85)
+#define ActChgFrcReaCrsInf (ActChgCrsSta + 71)
+#define ActChgFrcReaTchGui (ActChgCrsSta + 72)
+#define ActChgFrcReaSylLec (ActChgCrsSta + 73)
+#define ActChgFrcReaSylPra (ActChgCrsSta + 74)
+#define ActChgFrcReaBib (ActChgCrsSta + 75)
+#define ActChgFrcReaFAQ (ActChgCrsSta + 76)
+#define ActChgFrcReaCrsLnk (ActChgCrsSta + 77)
+#define ActChgFrcReaAss (ActChgCrsSta + 78)
-#define ActSelInfSrcCrsInf (ActChgCrsSta + 86)
-#define ActSelInfSrcTchGui (ActChgCrsSta + 87)
-#define ActSelInfSrcSylLec (ActChgCrsSta + 88)
-#define ActSelInfSrcSylPra (ActChgCrsSta + 89)
-#define ActSelInfSrcBib (ActChgCrsSta + 90)
-#define ActSelInfSrcFAQ (ActChgCrsSta + 91)
-#define ActSelInfSrcCrsLnk (ActChgCrsSta + 92)
-#define ActSelInfSrcAss (ActChgCrsSta + 93)
+#define ActChgHavReaCrsInf (ActChgCrsSta + 79)
+#define ActChgHavReaTchGui (ActChgCrsSta + 80)
+#define ActChgHavReaSylLec (ActChgCrsSta + 81)
+#define ActChgHavReaSylPra (ActChgCrsSta + 82)
+#define ActChgHavReaBib (ActChgCrsSta + 83)
+#define ActChgHavReaFAQ (ActChgCrsSta + 84)
+#define ActChgHavReaCrsLnk (ActChgCrsSta + 85)
+#define ActChgHavReaAss (ActChgCrsSta + 86)
-#define ActRcvURLCrsInf (ActChgCrsSta + 94)
-#define ActRcvURLTchGui (ActChgCrsSta + 95)
-#define ActRcvURLSylLec (ActChgCrsSta + 96)
-#define ActRcvURLSylPra (ActChgCrsSta + 97)
-#define ActRcvURLBib (ActChgCrsSta + 98)
-#define ActRcvURLFAQ (ActChgCrsSta + 99)
-#define ActRcvURLCrsLnk (ActChgCrsSta + 100)
-#define ActRcvURLAss (ActChgCrsSta + 101)
+#define ActSelInfSrcCrsInf (ActChgCrsSta + 87)
+#define ActSelInfSrcTchGui (ActChgCrsSta + 88)
+#define ActSelInfSrcSylLec (ActChgCrsSta + 89)
+#define ActSelInfSrcSylPra (ActChgCrsSta + 90)
+#define ActSelInfSrcBib (ActChgCrsSta + 91)
+#define ActSelInfSrcFAQ (ActChgCrsSta + 92)
+#define ActSelInfSrcCrsLnk (ActChgCrsSta + 93)
+#define ActSelInfSrcAss (ActChgCrsSta + 94)
-#define ActRcvPagCrsInf (ActChgCrsSta + 102)
-#define ActRcvPagTchGui (ActChgCrsSta + 103)
-#define ActRcvPagSylLec (ActChgCrsSta + 104)
-#define ActRcvPagSylPra (ActChgCrsSta + 105)
-#define ActRcvPagBib (ActChgCrsSta + 106)
-#define ActRcvPagFAQ (ActChgCrsSta + 107)
-#define ActRcvPagCrsLnk (ActChgCrsSta + 108)
-#define ActRcvPagAss (ActChgCrsSta + 109)
+#define ActRcvURLCrsInf (ActChgCrsSta + 95)
+#define ActRcvURLTchGui (ActChgCrsSta + 96)
+#define ActRcvURLSylLec (ActChgCrsSta + 97)
+#define ActRcvURLSylPra (ActChgCrsSta + 98)
+#define ActRcvURLBib (ActChgCrsSta + 99)
+#define ActRcvURLFAQ (ActChgCrsSta + 100)
+#define ActRcvURLCrsLnk (ActChgCrsSta + 101)
+#define ActRcvURLAss (ActChgCrsSta + 102)
-#define ActEditorCrsInf (ActChgCrsSta + 110)
-#define ActEditorTchGui (ActChgCrsSta + 111)
-#define ActEditorSylLec (ActChgCrsSta + 112)
-#define ActEditorSylPra (ActChgCrsSta + 113)
-#define ActEditorBib (ActChgCrsSta + 114)
-#define ActEditorFAQ (ActChgCrsSta + 115)
-#define ActEditorCrsLnk (ActChgCrsSta + 116)
-#define ActEditorAss (ActChgCrsSta + 117)
+#define ActRcvPagCrsInf (ActChgCrsSta + 103)
+#define ActRcvPagTchGui (ActChgCrsSta + 104)
+#define ActRcvPagSylLec (ActChgCrsSta + 105)
+#define ActRcvPagSylPra (ActChgCrsSta + 106)
+#define ActRcvPagBib (ActChgCrsSta + 107)
+#define ActRcvPagFAQ (ActChgCrsSta + 108)
+#define ActRcvPagCrsLnk (ActChgCrsSta + 109)
+#define ActRcvPagAss (ActChgCrsSta + 110)
-#define ActPlaTxtEdiCrsInf (ActChgCrsSta + 118)
-#define ActPlaTxtEdiTchGui (ActChgCrsSta + 119)
-#define ActPlaTxtEdiSylLec (ActChgCrsSta + 120)
-#define ActPlaTxtEdiSylPra (ActChgCrsSta + 121)
-#define ActPlaTxtEdiBib (ActChgCrsSta + 122)
-#define ActPlaTxtEdiFAQ (ActChgCrsSta + 123)
-#define ActPlaTxtEdiCrsLnk (ActChgCrsSta + 124)
-#define ActPlaTxtEdiAss (ActChgCrsSta + 125)
+#define ActEditorCrsInf (ActChgCrsSta + 111)
+#define ActEditorTchGui (ActChgCrsSta + 112)
+#define ActEditorSylLec (ActChgCrsSta + 113)
+#define ActEditorSylPra (ActChgCrsSta + 114)
+#define ActEditorBib (ActChgCrsSta + 115)
+#define ActEditorFAQ (ActChgCrsSta + 116)
+#define ActEditorCrsLnk (ActChgCrsSta + 117)
+#define ActEditorAss (ActChgCrsSta + 118)
-#define ActRchTxtEdiCrsInf (ActChgCrsSta + 126)
-#define ActRchTxtEdiTchGui (ActChgCrsSta + 127)
-#define ActRchTxtEdiSylLec (ActChgCrsSta + 128)
-#define ActRchTxtEdiSylPra (ActChgCrsSta + 129)
-#define ActRchTxtEdiBib (ActChgCrsSta + 130)
-#define ActRchTxtEdiFAQ (ActChgCrsSta + 131)
-#define ActRchTxtEdiCrsLnk (ActChgCrsSta + 132)
-#define ActRchTxtEdiAss (ActChgCrsSta + 133)
+#define ActPlaTxtEdiCrsInf (ActChgCrsSta + 119)
+#define ActPlaTxtEdiTchGui (ActChgCrsSta + 120)
+#define ActPlaTxtEdiSylLec (ActChgCrsSta + 121)
+#define ActPlaTxtEdiSylPra (ActChgCrsSta + 122)
+#define ActPlaTxtEdiBib (ActChgCrsSta + 123)
+#define ActPlaTxtEdiFAQ (ActChgCrsSta + 124)
+#define ActPlaTxtEdiCrsLnk (ActChgCrsSta + 125)
+#define ActPlaTxtEdiAss (ActChgCrsSta + 126)
-#define ActRcvPlaTxtCrsInf (ActChgCrsSta + 134)
-#define ActRcvPlaTxtTchGui (ActChgCrsSta + 135)
-#define ActRcvPlaTxtSylLec (ActChgCrsSta + 136)
-#define ActRcvPlaTxtSylPra (ActChgCrsSta + 137)
-#define ActRcvPlaTxtBib (ActChgCrsSta + 138)
-#define ActRcvPlaTxtFAQ (ActChgCrsSta + 139)
-#define ActRcvPlaTxtCrsLnk (ActChgCrsSta + 140)
-#define ActRcvPlaTxtAss (ActChgCrsSta + 141)
+#define ActRchTxtEdiCrsInf (ActChgCrsSta + 127)
+#define ActRchTxtEdiTchGui (ActChgCrsSta + 128)
+#define ActRchTxtEdiSylLec (ActChgCrsSta + 129)
+#define ActRchTxtEdiSylPra (ActChgCrsSta + 130)
+#define ActRchTxtEdiBib (ActChgCrsSta + 131)
+#define ActRchTxtEdiFAQ (ActChgCrsSta + 132)
+#define ActRchTxtEdiCrsLnk (ActChgCrsSta + 133)
+#define ActRchTxtEdiAss (ActChgCrsSta + 134)
-#define ActRcvRchTxtCrsInf (ActChgCrsSta + 142)
-#define ActRcvRchTxtTchGui (ActChgCrsSta + 143)
-#define ActRcvRchTxtSylLec (ActChgCrsSta + 144)
-#define ActRcvRchTxtSylPra (ActChgCrsSta + 145)
-#define ActRcvRchTxtBib (ActChgCrsSta + 146)
-#define ActRcvRchTxtFAQ (ActChgCrsSta + 147)
-#define ActRcvRchTxtCrsLnk (ActChgCrsSta + 148)
-#define ActRcvRchTxtAss (ActChgCrsSta + 149)
+#define ActRcvPlaTxtCrsInf (ActChgCrsSta + 135)
+#define ActRcvPlaTxtTchGui (ActChgCrsSta + 136)
+#define ActRcvPlaTxtSylLec (ActChgCrsSta + 137)
+#define ActRcvPlaTxtSylPra (ActChgCrsSta + 138)
+#define ActRcvPlaTxtBib (ActChgCrsSta + 139)
+#define ActRcvPlaTxtFAQ (ActChgCrsSta + 140)
+#define ActRcvPlaTxtCrsLnk (ActChgCrsSta + 141)
+#define ActRcvPlaTxtAss (ActChgCrsSta + 142)
-#define ActPrnCrsTT (ActChgCrsSta + 150)
-#define ActEdiCrsTT (ActChgCrsSta + 151)
-#define ActChgCrsTT (ActChgCrsSta + 152)
-#define ActChgCrsTT1stDay (ActChgCrsSta + 153)
+#define ActRcvRchTxtCrsInf (ActChgCrsSta + 143)
+#define ActRcvRchTxtTchGui (ActChgCrsSta + 144)
+#define ActRcvRchTxtSylLec (ActChgCrsSta + 145)
+#define ActRcvRchTxtSylPra (ActChgCrsSta + 146)
+#define ActRcvRchTxtBib (ActChgCrsSta + 147)
+#define ActRcvRchTxtFAQ (ActChgCrsSta + 148)
+#define ActRcvRchTxtCrsLnk (ActChgCrsSta + 149)
+#define ActRcvRchTxtAss (ActChgCrsSta + 150)
+
+#define ActPrnCrsTT (ActChgCrsSta + 151)
+#define ActEdiCrsTT (ActChgCrsSta + 152)
+#define ActChgCrsTT (ActChgCrsSta + 153)
+#define ActChgCrsTT1stDay (ActChgCrsSta + 154)
/*****************************************************************************/
/***************************** Assessment tab ********************************/
@@ -1770,7 +1772,7 @@
#define ActLst_NUM_ACTIONS (ActChgMyTT1stDay + 1)
-#define ActLst_MAX_ACTION_COD 1969
+#define ActLst_MAX_ACTION_COD 1970
#define ActLst_DEFAULT_ACTION_AFTER_LOGIN ActSeeGblTL
diff --git a/swad_changelog.h b/swad_changelog.h
index 061738ed..5433e846 100644
--- a/swad_changelog.h
+++ b/swad_changelog.h
@@ -629,10 +629,12 @@ TODO: Emilce Barrera Mesa: Podr
TODO: Emilce Barrera Mesa: Mis estudiantes presentan muchas dificultades a la hora de poner la foto porque la plataforma es muy exigente respecto al fondo de la imagen.
*/
-#define Log_PLATFORM_VERSION "SWAD 22.83.4 (2023-03-28)"
+#define Log_PLATFORM_VERSION "SWAD 22.84 (2023-03-29)"
#define CSS_FILE "swad22.78.15.css"
#define JS_FILE "swad22.49.js"
/*
+ Version 22.84: Mar 29, 2023 New action to see the resource clipboard in program. (338356 lines)
+ Version 22.83.5: Mar 28, 2023 Fixed bugs in rubrics and exams. (338235 lines)
Version 22.83.4: Mar 28, 2023 Code refactoring in rubrics and exams. (338221 lines)
Version 22.83.3: Mar 27, 2023 Changes in rubric criteria. (338218 lines)
Version 22.83.2: Mar 27, 2023 Changes in rubric criteria. (338189 lines)
diff --git a/swad_exam_resource.c b/swad_exam_resource.c
index b430a1ab..2a3718b1 100644
--- a/swad_exam_resource.c
+++ b/swad_exam_resource.c
@@ -49,7 +49,7 @@ void ExaRsc_GetLinkToExam (void)
Exa_ResetExams (&Exams);
/***** Get parameters *****/
- Exa_GetPars (&Exams,true);
+ Exa_GetPars (&Exams,false);
/***** Get exam title *****/
ExaRsc_GetTitleFromExaCod (Exams.Exam.ExaCod,Title,sizeof (Title) - 1);
diff --git a/swad_icon.c b/swad_icon.c
index 7e50e2d8..dd2ad21d 100644
--- a/swad_icon.c
+++ b/swad_icon.c
@@ -340,6 +340,14 @@ void Ico_PutContextualIconToCopy (Act_Action_t NextAction,
"copy.svg",Ico_BLACK);
}
+void Ico_PutContextualIconToViewClipboard (Act_Action_t NextAction,const char *Anchor,
+ void (*FuncPars) (void *Args),void *Args)
+ {
+ Lay_PutContextualLinkOnlyIcon (NextAction,Anchor,
+ FuncPars,Args,
+ "clipboard.svg",Ico_BLACK);
+ }
+
void Ico_PutContextualIconToPaste (Act_Action_t NextAction,
void (*FuncPars) (void *Args),void *Args)
{
diff --git a/swad_icon.h b/swad_icon.h
index b5bd5cc4..ec896dcb 100644
--- a/swad_icon.h
+++ b/swad_icon.h
@@ -89,6 +89,8 @@ void Ico_PutContextualIconToGetLink (Act_Action_t NextAction,const char *Anchor,
void (*FuncPars) (void *Args),void *Args);
void Ico_PutContextualIconToCopy (Act_Action_t NextAction,
void (*FuncPars) (void *Args),void *Args);
+void Ico_PutContextualIconToViewClipboard (Act_Action_t NextAction,const char *Anchor,
+ void (*FuncPars) (void *Args),void *Args);
void Ico_PutContextualIconToPaste (Act_Action_t NextAction,
void (*FuncPars) (void *Args),void *Args);
void Ico_PutContextualIconToCreateInFolder (Act_Action_t NextAction,
diff --git a/swad_program.c b/swad_program.c
index 69293ce6..9be2269e 100644
--- a/swad_program.c
+++ b/swad_program.c
@@ -116,6 +116,7 @@ static void Prg_PutIconsEditItems (__attribute__((unused)) void *Args);
static void Prg_PutIconToEditProgram (void);
static void Prg_PutIconToViewProgram (void);
static void Prg_PutIconToCreateNewItem (void);
+static void Prg_PutIconToViewResourceClipboard (void);
static void Prg_PutButtonToCreateNewItem (void);
static void Prg_WriteRowItem (Prg_ListingType_t ListingType,
@@ -410,10 +411,15 @@ static void Prg_PutIconsEditItems (__attribute__((unused)) void *Args)
/***** Put icon to view program *****/
Prg_PutIconToViewProgram ();
- /***** Put icon to create a new program item *****/
if (Prg_CheckIfICanEditProgram ())
+ {
+ /***** Put icon to create a new program item *****/
Prg_PutIconToCreateNewItem ();
+ /***** Put icon to vew resource clipboard *****/
+ Prg_PutIconToViewResourceClipboard ();
+ }
+
/***** Put icon to show a figure *****/
Fig_PutIconToShowFigure (Fig_COURSE_PROGRAMS);
}
@@ -450,6 +456,16 @@ static void Prg_PutIconToCreateNewItem (void)
Prg_PutParItmCod,&ItmCod);
}
+/*****************************************************************************/
+/****************** Put icon to create a new program item ********************/
+/*****************************************************************************/
+
+static void Prg_PutIconToViewResourceClipboard (void)
+ {
+ Ico_PutContextualIconToViewClipboard (ActSeePrgRscCli,NULL,
+ NULL,NULL);
+ }
+
/*****************************************************************************/
/***************** Put button to create a new program item *******************/
/*****************************************************************************/
diff --git a/swad_program_resource.c b/swad_program_resource.c
index 3328a435..f52fef1f 100644
--- a/swad_program_resource.c
+++ b/swad_program_resource.c
@@ -90,7 +90,8 @@ static void PrgRsc_MoveUpDownResource (PrgRsc_MoveUpDown_t UpDown);
static bool PrgRsc_ExchangeResources (const struct Prg_ResourceHierarchy *Rsc1,
const struct Prg_ResourceHierarchy *Rsc2);
-static void PrgRsc_ShowClipboard (struct Prg_Item *Item);
+static void PrgRsc_ShowClipboard (void);
+static void PrgRsc_ShowClipboardToChangeLink (struct Prg_Item *Item);
/*****************************************************************************/
/****************************** View resources *******************************/
@@ -435,7 +436,7 @@ static void PrgRsc_WriteRowEditResource (unsigned NumRsc,unsigned NumResources,
/* Edit link showing clipboard / Show current link */
if (EditLink)
/* Show clipboard to change resource link */
- PrgRsc_ShowClipboard (Item);
+ PrgRsc_ShowClipboardToChangeLink (Item);
else
/* Show current link */
Rsc_WriteLinkName (&Item->Resource.Link,
@@ -492,7 +493,7 @@ static void PrgRsc_WriteRowNewResource (unsigned NumResources,
HTM_BR ();
/* Show clipboard to change resource link */
- PrgRsc_ShowClipboard (Item);
+ PrgRsc_ShowClipboardToChangeLink (Item);
}
HTM_TD_End ();
@@ -538,10 +539,10 @@ static void PrgRsc_PutFormsToRemEditOneResource (struct Prg_Item *Item,
/***** Put icon to edit the item resource *****/
if (NumRsc < NumResources)
- Ico_PutContextualIconToEdit (ActSeeCliPrgRsc,PrgRsc_RESOURCE_SECTION_ID,
+ Ico_PutContextualIconToEdit (ActFrmChgLnkPrgRsc,PrgRsc_RESOURCE_SECTION_ID,
PrgRsc_PutParRscCod,&Item->Resource.Hierarchy.RscCod);
else
- Ico_PutContextualIconToEdit (ActSeeCliPrgRsc,PrgRsc_RESOURCE_SECTION_ID,
+ Ico_PutContextualIconToEdit (ActFrmChgLnkPrgRsc,PrgRsc_RESOURCE_SECTION_ID,
Prg_PutParItmCod,&Item->Hierarchy.ItmCod);
/***** Icon to move up the item resource *****/
@@ -837,7 +838,20 @@ static bool PrgRsc_ExchangeResources (const struct Prg_ResourceHierarchy *Rsc1,
/***************** Show clipboard to change resource link ********************/
/*****************************************************************************/
-void PrgRsc_ShowClipboardToChgLink (void)
+void PrgRsc_ViewResourceClipboard (void)
+ {
+ /***** View resource clipboard *****/
+ PrgRsc_ShowClipboard ();
+
+ /***** Edit course program *****/
+ Prg_EditCourseProgram ();
+ }
+
+/*****************************************************************************/
+/********** Edit program showing clipboard to change resource link ***********/
+/*****************************************************************************/
+
+void PrgRsc_EditProgramWithClipboard (void)
{
struct Prg_Item Item;
@@ -856,11 +870,56 @@ void PrgRsc_ShowClipboardToChgLink (void)
Prg_FreeListItems ();
}
+/*****************************************************************************/
+/************************* Show resources clipboard **************************/
+/*****************************************************************************/
+
+static void PrgRsc_ShowClipboard (void)
+ {
+ extern const char *Hlp_COURSE_Program;
+ extern const char *Rsc_ResourceTypesIcons[Rsc_NUM_TYPES];
+ extern const char *Txt_Resource_clipboard;
+ extern const char *Txt_RESOURCE_TYPES[Rsc_NUM_TYPES];
+ MYSQL_RES *mysql_res;
+ unsigned NumLink;
+ unsigned NumLinks;
+ struct Rsc_Link Link;
+
+ Box_BoxBegin (NULL,Txt_Resource_clipboard,
+ // PrgRsc_PutIconsClipboard,NULL, // TODO: Icon to remove!!!!!!!!!!!!!
+ NULL,NULL,
+ Hlp_COURSE_Program,Box_CLOSABLE);
+
+ /***** Begin list *****/
+ HTM_UL_Begin ("class=\"PRG_CLIPBOARD\"");
+
+ /***** Get links in clipboard from database and write them *****/
+ NumLinks = Rsc_DB_GetClipboard (&mysql_res);
+ for (NumLink = 1;
+ NumLink <= NumLinks;
+ NumLink++)
+ {
+ Rsc_GetLinkDataFromRow (mysql_res,&Link);
+ HTM_LI_Begin ("class=\"PRG_RSC_%s\"",The_GetSuffix ());
+ Rsc_WriteLinkName (&Link,
+ true, // Put form to go
+ Rsc_ResourceTypesIcons[Link.Type],
+ Txt_RESOURCE_TYPES[Link.Type]);
+ HTM_LI_End ();
+ }
+ DB_FreeMySQLResult (&mysql_res);
+
+ /***** End list *****/
+ HTM_UL_End ();
+
+ Box_BoxEnd ();
+ }
+
/*****************************************************************************/
/***************** Show clipboard to change resource link ********************/
/*****************************************************************************/
-static void PrgRsc_ShowClipboard (struct Prg_Item *Item)
+static void PrgRsc_ShowClipboardToChangeLink (struct Prg_Item *Item)
{
MYSQL_RES *mysql_res;
unsigned NumLink;
diff --git a/swad_program_resource.h b/swad_program_resource.h
index 9a8a878c..8e653723 100644
--- a/swad_program_resource.h
+++ b/swad_program_resource.h
@@ -56,7 +56,9 @@ void PrgRsc_UnhideResource (void);
void PrgRsc_MoveUpResource (void);
void PrgRsc_MoveDownResource (void);
-void PrgRsc_ShowClipboardToChgLink (void);
+void PrgRsc_ViewResourceClipboard (void);
+
+void PrgRsc_EditProgramWithClipboard (void);
void PrgRsc_ChangeLink (void);
diff --git a/swad_project.c b/swad_project.c
index c6be0141..b9a58277 100644
--- a/swad_project.c
+++ b/swad_project.c
@@ -336,6 +336,9 @@ void Prj_ResetProjects (struct Prj_Projects *Projects)
Prj_FILTER_VISIBL_DEFAULT;
Projects->Filter.Faulti = Prj_FILTER_FAULTY_DEFAULT |
Prj_FILTER_FAULTLESS_DEFAULT;
+ Projects->Filter.Review = Prj_FILTER_UNREVIEWED_DEFAULT |
+ Prj_FILTER_UNAPPROVED_DEFAULT |
+ Prj_FILTER_APPROVED_DEFAULT;
Projects->Filter.DptCod = Prj_FILTER_DPT_DEFAULT;
Projects->LstIsRead = false; // List is not read
Projects->Num = 0;
@@ -913,9 +916,9 @@ static void Prj_PutCurrentPars (void *Projects)
{
if (Projects)
Prj_PutPars (&((struct Prj_Projects *) Projects)->Filter,
- ((struct Prj_Projects *) Projects)->SelectedOrder,
- ((struct Prj_Projects *) Projects)->CurrentPage,
- ((struct Prj_Projects *) Projects)->Prj.PrjCod);
+ ((struct Prj_Projects *) Projects)->SelectedOrder,
+ ((struct Prj_Projects *) Projects)->CurrentPage,
+ ((struct Prj_Projects *) Projects)->Prj.PrjCod);
}
/* The following function is called
diff --git a/swad_rubric_criteria.c b/swad_rubric_criteria.c
index e26d0ca6..2805f447 100644
--- a/swad_rubric_criteria.c
+++ b/swad_rubric_criteria.c
@@ -62,6 +62,10 @@ static const char *RubCri_ParValues[RubCri_NUM_VALUES] =
[RubCri_MAX] = "MaxVal",
};
+#define RubCri_WEIGHT_MIN 0.0
+#define RubCri_WEIGHT_MAX 1.0
+#define RubCri_WEIGHT_STEP 0.000001
+
/*****************************************************************************/
/***************************** Private prototypes ****************************/
/*****************************************************************************/
@@ -242,7 +246,10 @@ static void RubCri_PutFormNewCriterion (struct Rub_Rubrics *Rubrics,
/***** Weight *****/
HTM_TD_Begin ("class=\"RM\"");
- HTM_INPUT_FLOAT ("Weight",0.0,1.0,0.01,
+ HTM_INPUT_FLOAT ("Weight",
+ RubCri_WEIGHT_MIN,
+ RubCri_WEIGHT_MAX,
+ RubCri_WEIGHT_STEP,
Criterion->Weight,false,
" class=\"INPUT_FLOAT INPUT_%s\" required=\"required\"",
The_GetSuffix ());
@@ -711,7 +718,10 @@ static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics,
{
Frm_BeginFormAnchor (ActChgWeiRubCri,Anchor);
RubCri_PutParsOneCriterion (Rubrics);
- HTM_INPUT_FLOAT ("Weight",0.0,1.0,0.01,
+ HTM_INPUT_FLOAT ("Weight",
+ RubCri_WEIGHT_MIN,
+ RubCri_WEIGHT_MAX,
+ RubCri_WEIGHT_STEP,
Criterion.Weight,false,
" class=\"INPUT_FLOAT INPUT_%s\""
" required=\"required\"",
@@ -822,9 +832,9 @@ static void RubCri_PutTableHeadingForCriteria (void)
HTM_TH (Txt_No_INDEX ,HTM_HEAD_RIGHT);
HTM_TH (Txt_Criterion,HTM_HEAD_LEFT );
HTM_TH (Txt_Source ,HTM_HEAD_LEFT );
- HTM_TH (Txt_Minimum ,HTM_HEAD_RIGHT);
- HTM_TH (Txt_Maximum ,HTM_HEAD_RIGHT);
- HTM_TH (Txt_Weight ,HTM_HEAD_RIGHT);
+ HTM_TH (Txt_Minimum ,HTM_HEAD_LEFT );
+ HTM_TH (Txt_Maximum ,HTM_HEAD_LEFT );
+ HTM_TH (Txt_Weight ,HTM_HEAD_LEFT );
/***** End row *****/
HTM_TR_End ();
@@ -853,7 +863,7 @@ void RubCri_ResetCriterion (struct RubCri_Criterion *Criterion)
ValueRange <= (RubCri_ValueRange_t) (RubCri_NUM_VALUES - 1);
ValueRange++)
Criterion->Values[ValueRange] = RubCri_DefaultValues[ValueRange];
- Criterion->Weight = 1.0;
+ Criterion->Weight = RubCri_WEIGHT_MAX;;
Criterion->Title[0] = '\0';
}
diff --git a/swad_rubric_database.c b/swad_rubric_database.c
index ae950cf2..917f3914 100644
--- a/swad_rubric_database.c
+++ b/swad_rubric_database.c
@@ -660,12 +660,13 @@ bool Rub_DB_CheckIfSimilarCriterionExists (const struct RubCri_Criterion *Criter
"(SELECT *"
" FROM rub_criteria,"
"rub_rubrics"
- " WHERE rub_criteria.ExaCod=%ld"
+ " WHERE rub_criteria.RubCod=%ld"
" AND rub_criteria.Title='%s'"
- " AND rub_criteria.SetCod<>%ld"
- " AND rub_criteria.ExaCod=rub_rubrics.ExaCod"
+ " AND rub_criteria.CriCod<>%ld"
+ " AND rub_criteria.RubCod=rub_rubrics.RubCod"
" AND rub_rubrics.CrsCod=%ld)", // Extra check
- Criterion->RubCod,Title,
+ Criterion->RubCod,
+ Title,
Criterion->CriCod,
Gbl.Hierarchy.Crs.CrsCod);
}
diff --git a/swad_rubric_resource.c b/swad_rubric_resource.c
index 09b6ffa0..04506c35 100644
--- a/swad_rubric_resource.c
+++ b/swad_rubric_resource.c
@@ -49,7 +49,7 @@ void RubRsc_GetLinkToRubric (void)
Rub_ResetRubrics (&Rubrics);
/***** Get parameters *****/
- Rub_GetPars (&Rubrics,true);
+ Rub_GetPars (&Rubrics,false);
/***** Get rubric title *****/
RubRsc_GetTitleFromRubCod (Rubrics.Rubric.RubCod,Title,sizeof (Title) - 1);
diff --git a/swad_rubric_type.h b/swad_rubric_type.h
index 24af75ff..fb5bd949 100644
--- a/swad_rubric_type.h
+++ b/swad_rubric_type.h
@@ -41,8 +41,8 @@
#define Rub_MAX_CHARS_TITLE (128 - 1) // 127
#define Rub_MAX_BYTES_TITLE ((Rub_MAX_CHARS_TITLE + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 2047
-#define RubCri_MAX_CHARS_TITLE (128 - 1) // 127
-#define RubCri_MAX_BYTES_TITLE ((RubCri_MAX_CHARS_TITLE + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 2047
+#define RubCri_MAX_CHARS_TITLE (256 - 1) // 255
+#define RubCri_MAX_BYTES_TITLE ((RubCri_MAX_CHARS_TITLE + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 4095
struct Rub_Rubric
{
diff --git a/swad_text.c b/swad_text.c
index 8e444497..750a3720 100644
--- a/swad_text.c
+++ b/swad_text.c
@@ -5373,7 +5373,7 @@ const char *Txt_Configure_projects =
#elif L==5 // fr
"Configurer projets";
#elif L==6 // gn
- "Configurar proyectos"; // Okoteve traducción
+ "Omohenda umi proyecto";
#elif L==7 // it
"Configurare progetti";
#elif L==8 // pl
@@ -5381,7 +5381,7 @@ const char *Txt_Configure_projects =
#elif L==9 // pt
"Configurar projetos";
#elif L==10 // tr
- "Configure projects"; // Çeviri lazim!
+ "Projeleri yapılandır";
#endif
const char *Txt_Configure_tests =
@@ -36384,6 +36384,29 @@ const char *Txt_Reset_survey =
"Reset survey"; // Çeviri lazim!
#endif
+const char *Txt_Resource_clipboard = // Warning: it is very important to include %s in the following sentences
+#if L==1 // ca
+ "Portapapers de recursos";
+#elif L==2 // de
+ "Ressourcen-Zwischenablage";
+#elif L==3 // en
+ "Resource clipboard";
+#elif L==4 // es
+ "Portapapeles de recursos";
+#elif L==5 // fr
+ "Presse-papiers de ressources";
+#elif L==6 // gn
+ "Recurso portapapeles rehegua";
+#elif L==7 // it
+ "Appunti delle risorse";
+#elif L==8 // pl
+ "Schowek zasobów";
+#elif L==9 // pt
+ "Área de transferência de recursos";
+#elif L==10 // tr
+ "Kaynak panosu";
+#endif
+
const char *Txt_Resource_X_removed = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"Recurs %s eliminat.";
diff --git a/swad_text_action.c b/swad_text_action.c
index f8f86274..3630450d 100644
--- a/swad_text_action.c
+++ b/swad_text_action.c
@@ -5400,25 +5400,25 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] =
,
[ActSeePrg] =
#if L==1 // ca
- "See educational schedule of course" // Necessita traducció
+ "Veure programació didàctica de l'assignatura"
#elif L==2 // de
- "See educational schedule of course" // Need Übersetzung
+ "Siehe Ausbildungsplan des Kurses"
#elif L==3 // en
- "See educational schedule of course"
+ "See educational schedule of the course"
#elif L==4 // es
"Ver programación didáctica de la asignatura"
#elif L==5 // fr
- "See educational schedule of course" // Besoin de traduction
+ "Voir programme didactique de la matière"
#elif L==6 // gn
- "Ver programación didáctica de la asignatura" // Okoteve traducción
+ "Ehecha programa didáctico upe materia rehegua"
#elif L==7 // it
- "See educational schedule of course" // Bisogno di traduzione
+ "Vedi programma didattico della materia"
#elif L==8 // pl
- "See educational schedule of course" // Potrzebujesz tlumaczenie
+ "Zobacz program edukacyjny kursu"
#elif L==9 // pt
- "See educational schedule of course" // Precisa de tradução
+ "Ver programa didático da disciplina"
#elif L==10 // tr
- "See educational schedule of course" // Çeviri lazim!
+ "Konunun didaktik programına bakın"
#endif
,
[ActSeeTchGui] =
@@ -6155,6 +6155,29 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] =
"Contract program item when editing" // Precisa de tradução
#elif L==10 // tr
"Contract program item when editing" // Çeviri lazim!
+#endif
+ ,
+ [ActSeePrgRscCli] =
+#if L==1 // ca
+ "Veure el porta-retalls de recursos"
+#elif L==2 // de
+ "Ressourcen-Zwischenablage anzeigen"
+#elif L==3 // en
+ "See resource clipboard"
+#elif L==4 // es
+ "Ver portapapeles de recursos"
+#elif L==5 // fr
+ "Afficher le presse-papiers des ressources"
+#elif L==6 // gn
+ "Ojehechakuaa recurso portapapeles rehegua"
+#elif L==7 // it
+ "Visualizza gli appunti delle risorse"
+#elif L==8 // pl
+ "Wyświetl schowek zasobów"
+#elif L==9 // pt
+ "Exibir área de transferência de recursos"
+#elif L==10 // tr
+ "Kaynak panosunu görüntüle"
#endif
,
[ActFrmSeePrgRsc] =
@@ -6169,7 +6192,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] =
#elif L==5 // fr
"Voir ressources"
#elif L==6 // gn
- "Editar recursos" // Okoteve traducción
+ "Ehecha umi recurso"
#elif L==7 // it
"Vedi risorse"
#elif L==8 // pl
@@ -6387,7 +6410,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] =
"Move down resource" // Çeviri lazim!
#endif
,
- [ActSeeCliPrgRsc] =
+ [ActFrmChgLnkPrgRsc] =
#if L==1 // ca
"Edit resource link" // Necessita traducció
#elif L==2 // de