Version 22.3: Sep 14, 2022 Listing program resource clipboard.

This commit is contained in:
acanas 2022-09-14 23:16:03 +02:00
parent d25716a0a4
commit 30516d43da
13 changed files with 471 additions and 327 deletions

View File

@ -1781,6 +1781,27 @@ a:hover img.CENTER_PHOTO_SHOW
.PRG_RSC_PINK {color:#202020; font-size:14pt; font-weight:bold;} .PRG_RSC_PINK {color:#202020; font-size:14pt; font-weight:bold;}
.PRG_RSC_DARK {color:#e0e0e0; font-size:14pt; font-weight:bold;} .PRG_RSC_DARK {color:#e0e0e0; font-size:14pt; font-weight:bold;}
/************************* Program resource clipboard ************************/
.PRG_CLIPBOARD
{
box-sizing:border-box;
list-style-type:none;
padding:0;
margin:0;
text-align:left;
vertical-align:middle;
}
/*
.PRG_CLIPBOARD li
{
text-align:left;
vertical-align:middle;
}
.PRG_CLIPBOARD label
{
font-size:13pt;
}
*/
/********************************** Notice ***********************************/ /********************************** Notice ***********************************/
.NOTICE_CONT .NOTICE_CONT
{ {

View File

@ -454,7 +454,8 @@ const struct Act_Actions Act_Actions[Act_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}, [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}, [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}, [ActDwnPrgRsc ] = {1924,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,PrgRsc_MoveDownResource ,NULL},
[ActChgLnkPrgRsc ] = {1932,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,PrgRsc_ShowClipboardToChgLink ,NULL}, [ActSeeCliPrgRsc ] = {1932,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,PrgRsc_ShowClipboardToChgLink ,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}, [ActEdiTchGui ] = { 785,-1,TabUnk,ActSeeTchGui ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_FormsToSelSendInfo ,NULL},
@ -3774,7 +3775,8 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
ActNewPrgRsc, // #1929 ActNewPrgRsc, // #1929
ActReqLnkSeeDocCrs, // #1930 ActReqLnkSeeDocCrs, // #1930
ActReqLnkAdmDocCrs, // #1931 ActReqLnkAdmDocCrs, // #1931
ActChgLnkPrgRsc, // #1932 ActSeeCliPrgRsc, // #1932
ActChgLnkPrgRsc, // #1933
}; };
/*****************************************************************************/ /*****************************************************************************/

View File

@ -65,7 +65,7 @@ typedef enum
typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action
#define Act_MAX_ACTION_COD 1932 #define Act_MAX_ACTION_COD 1933
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 13 #define Act_MAX_OPTIONS_IN_MENU_PER_TAB 13
@ -420,108 +420,109 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to
#define ActUnhPrgRsc (ActChgCrsSta + 37) #define ActUnhPrgRsc (ActChgCrsSta + 37)
#define ActUp_PrgRsc (ActChgCrsSta + 38) #define ActUp_PrgRsc (ActChgCrsSta + 38)
#define ActDwnPrgRsc (ActChgCrsSta + 39) #define ActDwnPrgRsc (ActChgCrsSta + 39)
#define ActChgLnkPrgRsc (ActChgCrsSta + 40) #define ActSeeCliPrgRsc (ActChgCrsSta + 40)
#define ActEdiTchGui (ActChgCrsSta + 41) #define ActChgLnkPrgRsc (ActChgCrsSta + 41)
#define ActSeeSylLec (ActChgCrsSta + 42) #define ActEdiTchGui (ActChgCrsSta + 42)
#define ActSeeSylPra (ActChgCrsSta + 43) #define ActSeeSylLec (ActChgCrsSta + 43)
#define ActEdiSylLec (ActChgCrsSta + 44) #define ActSeeSylPra (ActChgCrsSta + 44)
#define ActEdiSylPra (ActChgCrsSta + 45) #define ActEdiSylLec (ActChgCrsSta + 45)
#define ActDelItmSylLec (ActChgCrsSta + 46) #define ActEdiSylPra (ActChgCrsSta + 46)
#define ActDelItmSylPra (ActChgCrsSta + 47) #define ActDelItmSylLec (ActChgCrsSta + 47)
#define ActUp_IteSylLec (ActChgCrsSta + 48) #define ActDelItmSylPra (ActChgCrsSta + 48)
#define ActUp_IteSylPra (ActChgCrsSta + 49) #define ActUp_IteSylLec (ActChgCrsSta + 49)
#define ActDwnIteSylLec (ActChgCrsSta + 50) #define ActUp_IteSylPra (ActChgCrsSta + 50)
#define ActDwnIteSylPra (ActChgCrsSta + 51) #define ActDwnIteSylLec (ActChgCrsSta + 51)
#define ActRgtIteSylLec (ActChgCrsSta + 52) #define ActDwnIteSylPra (ActChgCrsSta + 52)
#define ActRgtIteSylPra (ActChgCrsSta + 53) #define ActRgtIteSylLec (ActChgCrsSta + 53)
#define ActLftIteSylLec (ActChgCrsSta + 54) #define ActRgtIteSylPra (ActChgCrsSta + 54)
#define ActLftIteSylPra (ActChgCrsSta + 55) #define ActLftIteSylLec (ActChgCrsSta + 55)
#define ActInsIteSylLec (ActChgCrsSta + 56) #define ActLftIteSylPra (ActChgCrsSta + 56)
#define ActInsIteSylPra (ActChgCrsSta + 57) #define ActInsIteSylLec (ActChgCrsSta + 57)
#define ActModIteSylLec (ActChgCrsSta + 58) #define ActInsIteSylPra (ActChgCrsSta + 58)
#define ActModIteSylPra (ActChgCrsSta + 59) #define ActModIteSylLec (ActChgCrsSta + 59)
#define ActModIteSylPra (ActChgCrsSta + 60)
#define ActEdiBib (ActChgCrsSta + 60) #define ActEdiBib (ActChgCrsSta + 61)
#define ActEdiFAQ (ActChgCrsSta + 61) #define ActEdiFAQ (ActChgCrsSta + 62)
#define ActEdiCrsLnk (ActChgCrsSta + 62) #define ActEdiCrsLnk (ActChgCrsSta + 63)
#define ActChgFrcReaCrsInf (ActChgCrsSta + 63) #define ActChgFrcReaCrsInf (ActChgCrsSta + 64)
#define ActChgFrcReaTchGui (ActChgCrsSta + 64) #define ActChgFrcReaTchGui (ActChgCrsSta + 65)
#define ActChgFrcReaSylLec (ActChgCrsSta + 65) #define ActChgFrcReaSylLec (ActChgCrsSta + 66)
#define ActChgFrcReaSylPra (ActChgCrsSta + 66) #define ActChgFrcReaSylPra (ActChgCrsSta + 67)
#define ActChgFrcReaBib (ActChgCrsSta + 67) #define ActChgFrcReaBib (ActChgCrsSta + 68)
#define ActChgFrcReaFAQ (ActChgCrsSta + 68) #define ActChgFrcReaFAQ (ActChgCrsSta + 69)
#define ActChgFrcReaCrsLnk (ActChgCrsSta + 69) #define ActChgFrcReaCrsLnk (ActChgCrsSta + 70)
#define ActChgHavReaCrsInf (ActChgCrsSta + 70) #define ActChgHavReaCrsInf (ActChgCrsSta + 71)
#define ActChgHavReaTchGui (ActChgCrsSta + 71) #define ActChgHavReaTchGui (ActChgCrsSta + 72)
#define ActChgHavReaSylLec (ActChgCrsSta + 72) #define ActChgHavReaSylLec (ActChgCrsSta + 73)
#define ActChgHavReaSylPra (ActChgCrsSta + 73) #define ActChgHavReaSylPra (ActChgCrsSta + 74)
#define ActChgHavReaBib (ActChgCrsSta + 74) #define ActChgHavReaBib (ActChgCrsSta + 75)
#define ActChgHavReaFAQ (ActChgCrsSta + 75) #define ActChgHavReaFAQ (ActChgCrsSta + 76)
#define ActChgHavReaCrsLnk (ActChgCrsSta + 76) #define ActChgHavReaCrsLnk (ActChgCrsSta + 77)
#define ActSelInfSrcCrsInf (ActChgCrsSta + 77) #define ActSelInfSrcCrsInf (ActChgCrsSta + 78)
#define ActSelInfSrcTchGui (ActChgCrsSta + 78) #define ActSelInfSrcTchGui (ActChgCrsSta + 79)
#define ActSelInfSrcSylLec (ActChgCrsSta + 79) #define ActSelInfSrcSylLec (ActChgCrsSta + 80)
#define ActSelInfSrcSylPra (ActChgCrsSta + 80) #define ActSelInfSrcSylPra (ActChgCrsSta + 81)
#define ActSelInfSrcBib (ActChgCrsSta + 81) #define ActSelInfSrcBib (ActChgCrsSta + 82)
#define ActSelInfSrcFAQ (ActChgCrsSta + 82) #define ActSelInfSrcFAQ (ActChgCrsSta + 83)
#define ActSelInfSrcCrsLnk (ActChgCrsSta + 83) #define ActSelInfSrcCrsLnk (ActChgCrsSta + 84)
#define ActRcvURLCrsInf (ActChgCrsSta + 84) #define ActRcvURLCrsInf (ActChgCrsSta + 85)
#define ActRcvURLTchGui (ActChgCrsSta + 85) #define ActRcvURLTchGui (ActChgCrsSta + 86)
#define ActRcvURLSylLec (ActChgCrsSta + 86) #define ActRcvURLSylLec (ActChgCrsSta + 87)
#define ActRcvURLSylPra (ActChgCrsSta + 87) #define ActRcvURLSylPra (ActChgCrsSta + 88)
#define ActRcvURLBib (ActChgCrsSta + 88) #define ActRcvURLBib (ActChgCrsSta + 89)
#define ActRcvURLFAQ (ActChgCrsSta + 89) #define ActRcvURLFAQ (ActChgCrsSta + 90)
#define ActRcvURLCrsLnk (ActChgCrsSta + 90) #define ActRcvURLCrsLnk (ActChgCrsSta + 91)
#define ActRcvPagCrsInf (ActChgCrsSta + 91) #define ActRcvPagCrsInf (ActChgCrsSta + 92)
#define ActRcvPagTchGui (ActChgCrsSta + 92) #define ActRcvPagTchGui (ActChgCrsSta + 93)
#define ActRcvPagSylLec (ActChgCrsSta + 93) #define ActRcvPagSylLec (ActChgCrsSta + 94)
#define ActRcvPagSylPra (ActChgCrsSta + 94) #define ActRcvPagSylPra (ActChgCrsSta + 95)
#define ActRcvPagBib (ActChgCrsSta + 95) #define ActRcvPagBib (ActChgCrsSta + 96)
#define ActRcvPagFAQ (ActChgCrsSta + 96) #define ActRcvPagFAQ (ActChgCrsSta + 97)
#define ActRcvPagCrsLnk (ActChgCrsSta + 97) #define ActRcvPagCrsLnk (ActChgCrsSta + 98)
#define ActEditorCrsInf (ActChgCrsSta + 98) #define ActEditorCrsInf (ActChgCrsSta + 99)
#define ActEditorTchGui (ActChgCrsSta + 99) #define ActEditorTchGui (ActChgCrsSta + 100)
#define ActEditorSylLec (ActChgCrsSta + 100) #define ActEditorSylLec (ActChgCrsSta + 101)
#define ActEditorSylPra (ActChgCrsSta + 101) #define ActEditorSylPra (ActChgCrsSta + 102)
#define ActEditorBib (ActChgCrsSta + 102) #define ActEditorBib (ActChgCrsSta + 103)
#define ActEditorFAQ (ActChgCrsSta + 103) #define ActEditorFAQ (ActChgCrsSta + 104)
#define ActEditorCrsLnk (ActChgCrsSta + 104) #define ActEditorCrsLnk (ActChgCrsSta + 105)
#define ActPlaTxtEdiCrsInf (ActChgCrsSta + 105) #define ActPlaTxtEdiCrsInf (ActChgCrsSta + 106)
#define ActPlaTxtEdiTchGui (ActChgCrsSta + 106) #define ActPlaTxtEdiTchGui (ActChgCrsSta + 107)
#define ActPlaTxtEdiSylLec (ActChgCrsSta + 107) #define ActPlaTxtEdiSylLec (ActChgCrsSta + 108)
#define ActPlaTxtEdiSylPra (ActChgCrsSta + 108) #define ActPlaTxtEdiSylPra (ActChgCrsSta + 109)
#define ActPlaTxtEdiBib (ActChgCrsSta + 109) #define ActPlaTxtEdiBib (ActChgCrsSta + 110)
#define ActPlaTxtEdiFAQ (ActChgCrsSta + 110) #define ActPlaTxtEdiFAQ (ActChgCrsSta + 111)
#define ActPlaTxtEdiCrsLnk (ActChgCrsSta + 111) #define ActPlaTxtEdiCrsLnk (ActChgCrsSta + 112)
#define ActRchTxtEdiCrsInf (ActChgCrsSta + 112) #define ActRchTxtEdiCrsInf (ActChgCrsSta + 113)
#define ActRchTxtEdiTchGui (ActChgCrsSta + 113) #define ActRchTxtEdiTchGui (ActChgCrsSta + 114)
#define ActRchTxtEdiSylLec (ActChgCrsSta + 114) #define ActRchTxtEdiSylLec (ActChgCrsSta + 115)
#define ActRchTxtEdiSylPra (ActChgCrsSta + 115) #define ActRchTxtEdiSylPra (ActChgCrsSta + 116)
#define ActRchTxtEdiBib (ActChgCrsSta + 116) #define ActRchTxtEdiBib (ActChgCrsSta + 117)
#define ActRchTxtEdiFAQ (ActChgCrsSta + 117) #define ActRchTxtEdiFAQ (ActChgCrsSta + 118)
#define ActRchTxtEdiCrsLnk (ActChgCrsSta + 118) #define ActRchTxtEdiCrsLnk (ActChgCrsSta + 119)
#define ActRcvPlaTxtCrsInf (ActChgCrsSta + 119) #define ActRcvPlaTxtCrsInf (ActChgCrsSta + 120)
#define ActRcvPlaTxtTchGui (ActChgCrsSta + 120) #define ActRcvPlaTxtTchGui (ActChgCrsSta + 121)
#define ActRcvPlaTxtSylLec (ActChgCrsSta + 121) #define ActRcvPlaTxtSylLec (ActChgCrsSta + 122)
#define ActRcvPlaTxtSylPra (ActChgCrsSta + 122) #define ActRcvPlaTxtSylPra (ActChgCrsSta + 123)
#define ActRcvPlaTxtBib (ActChgCrsSta + 123) #define ActRcvPlaTxtBib (ActChgCrsSta + 124)
#define ActRcvPlaTxtFAQ (ActChgCrsSta + 124) #define ActRcvPlaTxtFAQ (ActChgCrsSta + 125)
#define ActRcvPlaTxtCrsLnk (ActChgCrsSta + 125) #define ActRcvPlaTxtCrsLnk (ActChgCrsSta + 126)
#define ActRcvRchTxtCrsInf (ActChgCrsSta + 126) #define ActRcvRchTxtCrsInf (ActChgCrsSta + 127)
#define ActRcvRchTxtTchGui (ActChgCrsSta + 127) #define ActRcvRchTxtTchGui (ActChgCrsSta + 128)
#define ActRcvRchTxtSylLec (ActChgCrsSta + 128) #define ActRcvRchTxtSylLec (ActChgCrsSta + 129)
#define ActRcvRchTxtSylPra (ActChgCrsSta + 129) #define ActRcvRchTxtSylPra (ActChgCrsSta + 130)
#define ActRcvRchTxtBib (ActChgCrsSta + 130) #define ActRcvRchTxtBib (ActChgCrsSta + 131)
#define ActRcvRchTxtFAQ (ActChgCrsSta + 131) #define ActRcvRchTxtFAQ (ActChgCrsSta + 132)
#define ActRcvRchTxtCrsLnk (ActChgCrsSta + 132) #define ActRcvRchTxtCrsLnk (ActChgCrsSta + 133)
#define ActPrnCrsTT (ActChgCrsSta + 133) #define ActPrnCrsTT (ActChgCrsSta + 134)
#define ActEdiCrsTT (ActChgCrsSta + 134) #define ActEdiCrsTT (ActChgCrsSta + 135)
#define ActChgCrsTT (ActChgCrsSta + 135) #define ActChgCrsTT (ActChgCrsSta + 136)
#define ActChgCrsTT1stDay (ActChgCrsSta + 136) #define ActChgCrsTT1stDay (ActChgCrsSta + 137)
/*****************************************************************************/ /*****************************************************************************/
/***************************** Assessment tab ********************************/ /***************************** Assessment tab ********************************/

View File

@ -606,17 +606,27 @@ TODO: Fix bug: error al enviar un mensaje a dos recipientes, error on duplicate
TODO: Attach pdf files in multimedia. TODO: Attach pdf files in multimedia.
*/ */
#define Log_PLATFORM_VERSION "SWAD 22.2 (2022-09-13)" #define Log_PLATFORM_VERSION "SWAD 22.3 (2022-09-14)"
#define CSS_FILE "swad21.107.1.css" #define CSS_FILE "swad22.3.css"
#define JS_FILE "swad21.100.js" #define JS_FILE "swad21.100.js"
/* /*
Version 22.3: Sep 14, 2022 Listing program resource clipboard. (? lines)
4 changes necessary in database:
ALTER TABLE prg_clipboards CHANGE COLUMN Type Type ENUM('non','asg','cfe','exa','gam','svy','doc','mrk','att','for') NOT NULL DEFAULT 'non';
ALTER TABLE prg_resources DROP COLUMN Type;
ALTER TABLE prg_resources ADD COLUMN Type ENUM('non','asg','cfe','exa','gam','svy','doc','mrk','att','for') NOT NULL DEFAULT 'non' AFTER Hidden;
ALTER TABLE prg_resources ADD COLUMN Cod INT NOT NULL DEFAULT -1 AFTER Type;
Copy the following icons to icon public directory:
sudo cp icon/link-slash.svg /var/www/html/swad/icon/
Version 22.2: Sep 13, 2022 Code refactoring in program resources. (329795 lines) Version 22.2: Sep 13, 2022 Code refactoring in program resources. (329795 lines)
Version 22.1: Sep 13, 2022 Code refactoring in program resources. (329693 lines) Version 22.1: Sep 13, 2022 Code refactoring in program resources. (329693 lines)
Version 22.0: Sep 12, 2022 New action to change resource link. Not implemented. (329606 lines) Version 22.0: Sep 12, 2022 New action to change resource link. Not implemented. (329606 lines)
Version 21.117.1: Sep 12, 2022 Copy link to file into resource clipboard. (329561 lines) Version 21.117.1: Sep 12, 2022 Copy link to file into resource clipboard. (329561 lines)
Version 21.117: Sep 12, 2022 New database table with clipboards for program resources. Version 21.117: Sep 12, 2022 New database table with clipboards for program resources.
New actions to get link to file in course document area. (329514 lines) New actions to get link to file in course document area. (329514 lines)
1 change necessary in database: 2 changes necessary in database:
ALTER TABLE prg_resources ADD COLUMN Type ENUM('none','asg','cfe','exa','gam','svy','doc','mrk','att','for') NOT NULL DEFAULT 'none' AFTER Hidden; ALTER TABLE prg_resources ADD COLUMN Type ENUM('none','asg','cfe','exa','gam','svy','doc','mrk','att','for') NOT NULL DEFAULT 'none' AFTER Hidden;
CREATE TABLE IF NOT EXISTS prg_clipboards (UsrCod INT NOT NULL,CrsCod INT NOT NULL,Type ENUM('none','asg','cfe','exa','gam','svy','doc','mrk','att','for') NOT NULL DEFAULT 'none',Cod INT NOT NULL DEFAULT -1,CopyTime TIMESTAMP,UNIQUE INDEX(UsrCod,CrsCod,Type,Cod),INDEX(CrsCod,Type,Cod),INDEX(CopyTime)); CREATE TABLE IF NOT EXISTS prg_clipboards (UsrCod INT NOT NULL,CrsCod INT NOT NULL,Type ENUM('none','asg','cfe','exa','gam','svy','doc','mrk','att','for') NOT NULL DEFAULT 'none',Cod INT NOT NULL DEFAULT -1,CopyTime TIMESTAMP,UNIQUE INDEX(UsrCod,CrsCod,Type,Cod),INDEX(CrsCod,Type,Cod),INDEX(CopyTime));
If you want to use MyISAM: If you want to use MyISAM:

View File

@ -2453,22 +2453,22 @@ mysql> DESCRIBE plg_plugins;
/***** Table prg_clipboards *****/ /***** Table prg_clipboards *****/
/* /*
mysql> DESCRIBE prg_clipboards; mysql> DESCRIBE prg_clipboards;
+----------+--------------------------------------------------------------------+------+-----+---------+-------+ +----------+-------------------------------------------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra | | Field | Type | Null | Key | Default | Extra |
+----------+--------------------------------------------------------------------+------+-----+---------+-------+ +----------+-------------------------------------------------------------------+------+-----+---------+-------+
| UsrCod | int | NO | PRI | NULL | | | UsrCod | int | NO | PRI | NULL | |
| CrsCod | int | NO | PRI | NULL | | | CrsCod | int | NO | PRI | NULL | |
| Type | enum('none','asg','cfe','exa','gam','svy','doc','mrk','att','for') | NO | PRI | none | | | Type | enum('non','asg','cfe','exa','gam','svy','doc','mrk','att','for') | NO | PRI | non | |
| Cod | int | NO | PRI | -1 | | | Cod | int | NO | PRI | -1 | |
| CopyTime | timestamp | YES | MUL | NULL | | | CopyTime | timestamp | YES | MUL | NULL | |
+----------+--------------------------------------------------------------------+------+-----+---------+-------+ +----------+-------------------------------------------------------------------+------+-----+---------+-------+
5 rows in set (0,00 sec) 5 rows in set (0,00 sec)
*/ */
DB_CreateTable ("CREATE TABLE IF NOT EXISTS prg_clipboards (" DB_CreateTable ("CREATE TABLE IF NOT EXISTS prg_clipboards ("
"UsrCod INT NOT NULL," "UsrCod INT NOT NULL,"
"CrsCod INT NOT NULL," "CrsCod INT NOT NULL,"
"Type ENUM(" "Type ENUM("
"'none'," "'non',"
"'asg'," "'asg',"
"'cfe'," "'cfe',"
"'exa'," "'exa',"
@ -2477,7 +2477,7 @@ mysql> DESCRIBE prg_clipboards;
"'doc'," "'doc',"
"'mrk'," "'mrk',"
"'att'," "'att',"
"'for') NOT NULL DEFAULT 'none'," "'for') NOT NULL DEFAULT 'non',"
"Cod INT NOT NULL DEFAULT -1," "Cod INT NOT NULL DEFAULT -1,"
"CopyTime TIMESTAMP," "CopyTime TIMESTAMP,"
"UNIQUE INDEX(UsrCod,CrsCod,Type,Cod)," "UNIQUE INDEX(UsrCod,CrsCod,Type,Cod),"
@ -2520,17 +2520,18 @@ mysql> DESCRIBE prg_items;
/***** Table prg_resources *****/ /***** Table prg_resources *****/
/* /*
mysql> DESCRIBE prg_resources; mysql> DESCRIBE prg_resources;
+--------+--------------------------------------------------------------------+------+-----+---------+----------------+ +--------+-------------------------------------------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra | | Field | Type | Null | Key | Default | Extra |
+--------+--------------------------------------------------------------------+------+-----+---------+----------------+ +--------+-------------------------------------------------------------------+------+-----+---------+----------------+
| RscCod | int | NO | PRI | NULL | auto_increment | | RscCod | int | NO | PRI | NULL | auto_increment |
| ItmCod | int | NO | MUL | -1 | | | ItmCod | int | NO | MUL | -1 | |
| RscInd | int | NO | | 0 | | | RscInd | int | NO | | 0 | |
| Hidden | enum('N','Y') | NO | | N | | | Hidden | enum('N','Y') | NO | | N | |
| Type | enum('none','asg','cfe','exa','gam','svy','doc','mrk','att','for') | NO | | none | | | Type | enum('non','asg','cfe','exa','gam','svy','doc','mrk','att','for') | NO | | non | |
| Title | varchar(2047) | NO | | NULL | | | Cod | int | NO | | -1 | |
+--------+--------------------------------------------------------------------+------+-----+---------+----------------+ | Title | varchar(2047) | NO | | NULL | |
6 rows in set (0,00 sec) +--------+-------------------------------------------------------------------+------+-----+---------+----------------+
7 rows in set (0,00 sec)
*/ */
DB_CreateTable ("CREATE TABLE IF NOT EXISTS prg_resources (" DB_CreateTable ("CREATE TABLE IF NOT EXISTS prg_resources ("
"RscCod INT NOT NULL AUTO_INCREMENT," "RscCod INT NOT NULL AUTO_INCREMENT,"
@ -2538,7 +2539,7 @@ mysql> DESCRIBE prg_resources;
"RscInd INT NOT NULL DEFAULT 0," "RscInd INT NOT NULL DEFAULT 0,"
"Hidden ENUM('N','Y') NOT NULL DEFAULT 'N'," "Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',"
"Type ENUM(" "Type ENUM("
"'none'," "'non',"
"'asg'," "'asg',"
"'cfe'," "'cfe',"
"'exa'," "'exa',"
@ -2547,7 +2548,7 @@ mysql> DESCRIBE prg_resources;
"'doc'," "'doc',"
"'mrk'," "'mrk',"
"'att'," "'att',"
"'for') NOT NULL DEFAULT 'none'," "'for') NOT NULL DEFAULT 'non',"
"Title VARCHAR(2047) NOT NULL," // PrgRsc_MAX_BYTES_PROGRAM_RESOURCE_TITLE "Title VARCHAR(2047) NOT NULL," // PrgRsc_MAX_BYTES_PROGRAM_RESOURCE_TITLE
"UNIQUE INDEX(RscCod)," "UNIQUE INDEX(RscCod),"
"UNIQUE INDEX(ItmCod,RscInd))"); "UNIQUE INDEX(ItmCod,RscInd))");

View File

@ -1232,6 +1232,9 @@ void Prg_ResetItem (struct Prg_Item *Item)
Item->Resource.Hierarchy.RscCod = -1L; Item->Resource.Hierarchy.RscCod = -1L;
Item->Resource.Hierarchy.RscInd = 0; Item->Resource.Hierarchy.RscInd = 0;
Item->Resource.Hierarchy.Hidden = false; Item->Resource.Hierarchy.Hidden = false;
Item->Resource.Type = PrgRsc_NONE;
Item->Resource.Cod = -1L;
Item->Resource.Title[0] = '\0';
Item->Resource.Title[0] = '\0'; Item->Resource.Title[0] = '\0';
} }
@ -1300,7 +1303,7 @@ void Prg_ReqRemItem (void)
/***** Get list of program items *****/ /***** Get list of program items *****/
Prg_GetListItems (); Prg_GetListItems ();
/***** Get data of the program item from database *****/ /***** Get program item *****/
Prg_GetParams (&Item); Prg_GetParams (&Item);
if (Item.Hierarchy.ItmCod <= 0) if (Item.Hierarchy.ItmCod <= 0)
Err_WrongItemExit (); Err_WrongItemExit ();
@ -1334,7 +1337,7 @@ void Prg_RemoveItem (void)
/***** Get list of program items *****/ /***** Get list of program items *****/
Prg_GetListItems (); Prg_GetListItems ();
/***** Get data of the program item from database *****/ /***** Get program item *****/
Prg_GetParams (&Item); Prg_GetParams (&Item);
if (Item.Hierarchy.ItmCod <= 0) if (Item.Hierarchy.ItmCod <= 0)
Err_WrongItemExit (); Err_WrongItemExit ();
@ -1381,7 +1384,7 @@ static void Prg_HideOrUnhideItem (bool Hide)
/***** Get list of program items *****/ /***** Get list of program items *****/
Prg_GetListItems (); Prg_GetListItems ();
/***** Get data of the item from database *****/ /***** Get program item *****/
Prg_GetParams (&Item); Prg_GetParams (&Item);
if (Item.Hierarchy.ItmCod <= 0) if (Item.Hierarchy.ItmCod <= 0)
Err_WrongItemExit (); Err_WrongItemExit ();
@ -1425,7 +1428,7 @@ static void Prg_MoveUpDownItem (Prg_MoveUpDown_t UpDown)
/***** Get list of program items *****/ /***** Get list of program items *****/
Prg_GetListItems (); Prg_GetListItems ();
/***** Get data of the item from database *****/ /***** Get program item *****/
Prg_GetParams (&Item); Prg_GetParams (&Item);
if (Item.Hierarchy.ItmCod <= 0) if (Item.Hierarchy.ItmCod <= 0)
Err_WrongItemExit (); Err_WrongItemExit ();
@ -1626,7 +1629,7 @@ static void Prg_MoveLeftRightItem (Prg_MoveLeftRight_t LeftRight)
/***** Get list of program items *****/ /***** Get list of program items *****/
Prg_GetListItems (); Prg_GetListItems ();
/***** Get data of the item from database *****/ /***** Get program item *****/
Prg_GetParams (&Item); Prg_GetParams (&Item);
if (Item.Hierarchy.ItmCod <= 0) if (Item.Hierarchy.ItmCod <= 0)
Err_WrongItemExit (); Err_WrongItemExit ();
@ -1731,7 +1734,7 @@ void Prg_ViewItemAfterEdit (void)
/***** Get list of program items *****/ /***** Get list of program items *****/
Prg_GetListItems (); Prg_GetListItems ();
/***** Get the code of the program item *****/ /***** Get program item *****/
Prg_GetParams (&Item); Prg_GetParams (&Item);
/***** Show current program items, if any *****/ /***** Show current program items, if any *****/
@ -1752,7 +1755,7 @@ void Prg_RequestChangeItem (void)
/***** Get list of program items *****/ /***** Get list of program items *****/
Prg_GetListItems (); Prg_GetListItems ();
/***** Get the code of the program item *****/ /***** Get program item *****/
Prg_GetParams (&Item); Prg_GetParams (&Item);
/***** Show current program items, if any *****/ /***** Show current program items, if any *****/
@ -1773,7 +1776,7 @@ void Prg_RequestCreateItem (void)
/***** Get list of program items *****/ /***** Get list of program items *****/
Prg_GetListItems (); Prg_GetListItems ();
/***** Get the code of the parent program item *****/ /***** Get program item *****/
Prg_GetParams (&Item); Prg_GetParams (&Item);
/***** Show current program items, if any *****/ /***** Show current program items, if any *****/
@ -1946,7 +1949,7 @@ void Prg_ReceiveFormChgItem (void)
/***** Get list of program items *****/ /***** Get list of program items *****/
Prg_GetListItems (); Prg_GetListItems ();
/***** Get data of the item from database *****/ /***** Get program item *****/
Prg_GetParams (&Item); Prg_GetParams (&Item);
if (Item.Hierarchy.ItmCod <= 0) if (Item.Hierarchy.ItmCod <= 0)
Err_WrongItemExit (); Err_WrongItemExit ();
@ -1990,7 +1993,7 @@ void Prg_ReceiveFormNewItem (void)
/***** Get list of program items *****/ /***** Get list of program items *****/
Prg_GetListItems (); Prg_GetListItems ();
/***** Get data of the program item from database *****/ /***** Get program item *****/
Prg_GetParams (&Item); Prg_GetParams (&Item);
// If item code <= 0 ==> this is the first item in the program // If item code <= 0 ==> this is the first item in the program

View File

@ -47,11 +47,28 @@ struct Prg_ResourceHierarchy
bool Hidden; bool Hidden;
}; };
struct Prg_Resource #define PrgRsc_NUM_TYPES 10
typedef enum
{ {
struct Prg_ResourceHierarchy Hierarchy; PrgRsc_NONE,
char Title[PrgRsc_MAX_BYTES_PROGRAM_RESOURCE_TITLE + 1]; // gui TEACHING_GUIDE // Link to teaching guide
}; // bib BIBLIOGRAPHY // Link to bibliography
// faq FAQ // Link to FAQ
// lnk LINKS // Link to links
// tmt TIMETABLE // Link to timetable
PrgRsc_ASSIGNMENT,
// prj PROJECT // A project is only for some students
PrgRsc_CALL_FOR_EXAM,
// tst TEST // User selects tags, teacher should select
PrgRsc_EXAM,
PrgRsc_GAME,
PrgRsc_SURVEY,
PrgRsc_DOCUMENT,
PrgRsc_MARKS,
// grp GROUPS // ??? User select groups
PrgRsc_ATTENDANCE_EVENT,
PrgRsc_FORUM_THREAD,
} PrgRsc_Type_t;
#define Prg_MAX_CHARS_PROGRAM_ITEM_TITLE (128 - 1) // 127 #define Prg_MAX_CHARS_PROGRAM_ITEM_TITLE (128 - 1) // 127
#define Prg_MAX_BYTES_PROGRAM_ITEM_TITLE ((Prg_MAX_CHARS_PROGRAM_ITEM_TITLE + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 2047 #define Prg_MAX_BYTES_PROGRAM_ITEM_TITLE ((Prg_MAX_CHARS_PROGRAM_ITEM_TITLE + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 2047
@ -72,7 +89,13 @@ struct Prg_Item
time_t TimeUTC[Dat_NUM_START_END_TIME]; time_t TimeUTC[Dat_NUM_START_END_TIME];
bool Open; bool Open;
char Title[Prg_MAX_BYTES_PROGRAM_ITEM_TITLE + 1]; char Title[Prg_MAX_BYTES_PROGRAM_ITEM_TITLE + 1];
struct Prg_Resource Resource; struct
{
struct Prg_ResourceHierarchy Hierarchy;
PrgRsc_Type_t Type;
long Cod;
char Title[PrgRsc_MAX_BYTES_PROGRAM_RESOURCE_TITLE + 1];
} Resource;
}; };
struct Prg_ItemRange struct Prg_ItemRange

View File

@ -509,7 +509,9 @@ unsigned Prg_DB_GetListResources (MYSQL_RES **mysql_res,long ItmCod,
"prg_resources.RscCod," // row[1] "prg_resources.RscCod," // row[1]
"prg_resources.RscInd," // row[2] "prg_resources.RscInd," // row[2]
"prg_resources.Hidden," // row[3] "prg_resources.Hidden," // row[3]
"prg_resources.Title" // row[4] "prg_resources.Type," // row[4]
"prg_resources.Cod," // row[5]
"prg_resources.Title" // row[6]
" FROM prg_resources," " FROM prg_resources,"
"prg_items" "prg_items"
" WHERE prg_resources.ItmCod=%ld" " WHERE prg_resources.ItmCod=%ld"
@ -534,7 +536,9 @@ unsigned Prg_DB_GetDataOfResourceByCod (MYSQL_RES **mysql_res,long RscCod)
"prg_resources.RscCod," // row[1] "prg_resources.RscCod," // row[1]
"prg_resources.RscInd," // row[2] "prg_resources.RscInd," // row[2]
"prg_resources.Hidden," // row[3] "prg_resources.Hidden," // row[3]
"prg_resources.Title" // row[4] "prg_resources.Type," // row[4]
"prg_resources.Cod," // row[5]
"prg_resources.Title" // row[6]
" FROM prg_resources," " FROM prg_resources,"
"prg_items" "prg_items"
" WHERE prg_resources.RscCod=%ld" " WHERE prg_resources.RscCod=%ld"
@ -544,30 +548,6 @@ unsigned Prg_DB_GetDataOfResourceByCod (MYSQL_RES **mysql_res,long RscCod)
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
} }
/*****************************************************************************/
/****************** Get item resource data using its code ********************/
/*****************************************************************************/
unsigned Prg_DB_GetDataOfResourceByInd (MYSQL_RES **mysql_res,
long ItmCod,unsigned RscInd)
{
return (unsigned)
DB_QuerySELECT (mysql_res,"can not get item resource data",
"SELECT prg_resources.ItmCod," // row[0]
"prg_resources.RscCod," // row[1]
"prg_resources.RscInd," // row[2]
"prg_resources.Hidden," // row[3]
"prg_resources.Title" // row[4]
" FROM prg_resources,"
"prg_items"
" WHERE prg_resources.ItmCod=%ld"
" AND prg_resources.RscInd=%u"
" AND prg_resources.ItmCod=prg_items.ItmCod"
" AND prg_items.CrsCod=%ld", // Extra check
ItmCod,RscInd,
Gbl.Hierarchy.Crs.CrsCod);
}
/*****************************************************************************/ /*****************************************************************************/
/************* Get the resource index before/after a given one ***************/ /************* Get the resource index before/after a given one ***************/
/*****************************************************************************/ /*****************************************************************************/
@ -672,22 +652,26 @@ void Prg_DB_UpdateRscInd (long RscCod,int RscInd)
RscCod); RscCod);
} }
/*****************************************************************************/
/************* Update the link of a resource given its code *****************/
/*****************************************************************************/
void Prg_DB_UpdateRscLink (long RscCod,PrgRsc_Type_t Type,long Cod)
{
DB_QueryUPDATE ("can not update link of resource",
"UPDATE prg_resources"
" SET Type='%s',"
"Cod=%ld"
" WHERE RscCod=%ld",
Prg_ResourceTypesDB[Type],
Cod,
RscCod);
}
/*****************************************************************************/ /*****************************************************************************/
/********************** Copy link to resource into clipboard *****************/ /********************** Copy link to resource into clipboard *****************/
/*****************************************************************************/ /*****************************************************************************/
/*
mysql> DESCRIBE prg_clipboards;
+----------+--------------------------------------------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------------------------------------------------------------+------+-----+---------+-------+
| UsrCod | int | NO | PRI | NULL | |
| CrsCod | int | NO | PRI | NULL | |
| Type | enum('none','asg','cfe','exa','gam','svy','doc','mrk','att','for') | NO | PRI | none | |
| Cod | int | NO | PRI | -1 | |
| CopyTime | timestamp | YES | MUL | NULL | |
+----------+--------------------------------------------------------------------+------+-----+---------+-------+
5 rows in set (0,00 sec)
*/
void Prg_DB_CopyToClipboard (PrgRsc_Type_t Type,long Cod) void Prg_DB_CopyToClipboard (PrgRsc_Type_t Type,long Cod)
{ {
DB_QueryREPLACE ("can not copy link to resource clipboard", DB_QueryREPLACE ("can not copy link to resource clipboard",
@ -704,16 +688,6 @@ void Prg_DB_CopyToClipboard (PrgRsc_Type_t Type,long Cod)
/*****************************************************************************/ /*****************************************************************************/
/**************** Get resources in the current course clipboard **************/ /**************** Get resources in the current course clipboard **************/
/*****************************************************************************/ /*****************************************************************************/
/*
mysql> SELECT * FROM prg_clipboards;
+--------+--------+------+-----+---------------------+
| UsrCod | CrsCod | Type | Cod | CopyTime |
+--------+--------+------+-----+---------------------+
| 1 | 1 | doc | 33 | 2022-09-12 12:08:25 |
| 1 | 1 | doc | 28 | 2022-09-12 12:08:31 |
+--------+--------+------+-----+---------------------+
2 rows in set (0,00 sec)
*/
unsigned Prg_DB_GetClipboard (MYSQL_RES **mysql_res) unsigned Prg_DB_GetClipboard (MYSQL_RES **mysql_res)
{ {
@ -730,24 +704,19 @@ unsigned Prg_DB_GetClipboard (MYSQL_RES **mysql_res)
} }
/*****************************************************************************/ /*****************************************************************************/
/********************** Get resource data from clipboard *********************/ /*************************** Remove link from clipboard **********************/
/*****************************************************************************/ /*****************************************************************************/
void PrgRsc_GetDataOfLinkFromClipboard (struct PrgRsc_Link *Link, void Prg_DB_RemoveLinkFromClipboard (PrgRsc_Type_t Type,long Cod)
MYSQL_RES **mysql_res)
{ {
MYSQL_ROW row; DB_QueryDELETE ("can not remove link from clipboard",
"DELETE FROM prg_clipboards"
/***** Get data of item resource from database *****/ " WHERE UsrCod=%ld"
/* Get row */ " AND CrsCod=%ld"
row = mysql_fetch_row (*mysql_res); " AND Type='%s'"
/* " AND Cod=%ld",
Type row[0] Gbl.Usrs.Me.UsrDat.UsrCod,
Cod row[1] Gbl.Hierarchy.Crs.CrsCod,
*/ Prg_ResourceTypesDB[Type],
/* Get type (row[0]) */ Cod);
Link->Type = PrgRsc_GetTypeFromString (row[0]);
/* Get code (row[1]) */
Link->Cod = Str_ConvertStrCodToLongCod (row[1]);
} }

View File

@ -64,8 +64,7 @@ void Prg_DB_UpdateResourceTitle (long ItmCod,long RscCod,
unsigned Prg_DB_GetListResources (MYSQL_RES **mysql_res,long ItmCod, unsigned Prg_DB_GetListResources (MYSQL_RES **mysql_res,long ItmCod,
bool ShowHiddenResources); bool ShowHiddenResources);
unsigned Prg_DB_GetDataOfResourceByCod (MYSQL_RES **mysql_res,long RscCod); unsigned Prg_DB_GetDataOfResourceByCod (MYSQL_RES **mysql_res,long RscCod);
unsigned Prg_DB_GetDataOfResourceByInd (MYSQL_RES **mysql_res,
long ItmCod,unsigned RscInd);
unsigned Prg_DB_GetRscIndBefore (long ItmCod,unsigned RscInd); unsigned Prg_DB_GetRscIndBefore (long ItmCod,unsigned RscInd);
unsigned Prg_DB_GetRscIndAfter (long ItmCod,unsigned RscInd); unsigned Prg_DB_GetRscIndAfter (long ItmCod,unsigned RscInd);
long Prg_DB_GetRscCodFromRscInd (long ItmCod,unsigned RscInd); long Prg_DB_GetRscCodFromRscInd (long ItmCod,unsigned RscInd);
@ -76,11 +75,10 @@ void Prg_DB_HideOrUnhideResource (long RscCod,bool Hide);
void Prg_DB_LockTableResources (void); void Prg_DB_LockTableResources (void);
void Prg_DB_UpdateRscInd (long RscCod,int RscInd); void Prg_DB_UpdateRscInd (long RscCod,int RscInd);
void Prg_DB_UpdateRscLink (long RscCod,PrgRsc_Type_t Type,long Cod);
void Prg_DB_CopyToClipboard (PrgRsc_Type_t Type,long Cod); void Prg_DB_CopyToClipboard (PrgRsc_Type_t Type,long Cod);
unsigned Prg_DB_GetClipboard (MYSQL_RES **mysql_res); unsigned Prg_DB_GetClipboard (MYSQL_RES **mysql_res);
void PrgRsc_GetDataOfLinkFromClipboard (struct PrgRsc_Link *Link, void Prg_DB_RemoveLinkFromClipboard (PrgRsc_Type_t Type,long Cod);
MYSQL_RES **mysql_res);
#endif #endif

View File

@ -34,6 +34,32 @@
#include "swad_program_database.h" #include "swad_program_database.h"
#include "swad_program_resource.h" #include "swad_program_resource.h"
/*****************************************************************************/
/**************************** Private constants ******************************/
/*****************************************************************************/
const char *Prg_ResourceTypesLogos[PrgRsc_NUM_TYPES] =
{
[PrgRsc_NONE ] = "link-slash.svg",
// gui TEACHING_GUIDE // Link to teaching guide
// bib BIBLIOGRAPHY // Link to bibliography
// faq FAQ // Link to FAQ
// lnk LINKS // Link to links
// tmt TIMETABLE // Link to timetable
[PrgRsc_ASSIGNMENT ] = "edit.svg",
// prj PROJECT // A project is only for some students
[PrgRsc_CALL_FOR_EXAM ] = "bullhorn.svg",
// tst TEST // User selects tags, teacher should select
[PrgRsc_EXAM ] = "file-signature.svg",
[PrgRsc_GAME ] = "gamepad.svg",
[PrgRsc_SURVEY ] = "poll.svg",
[PrgRsc_DOCUMENT ] = "file.svg",
[PrgRsc_MARKS ] = "list-alt.svg",
// grp GROUPS // ??? User select groups
[PrgRsc_ATTENDANCE_EVENT] = "calendar-check.svg",
[PrgRsc_FORUM_THREAD ] = "comments.svg",
};
/*****************************************************************************/ /*****************************************************************************/
/************** External global variables from others modules ****************/ /************** External global variables from others modules ****************/
/*****************************************************************************/ /*****************************************************************************/
@ -85,9 +111,11 @@ static void PrgRsc_MoveUpDownResource (PrgRsc_MoveUpDown_t UpDown);
static bool PrgRsc_ExchangeResources (const struct Prg_ResourceHierarchy *Rsc1, static bool PrgRsc_ExchangeResources (const struct Prg_ResourceHierarchy *Rsc1,
const struct Prg_ResourceHierarchy *Rsc2); const struct Prg_ResourceHierarchy *Rsc2);
static void PrgRsc_ShowClipboard (void); static void PrgRsc_ShowClipboard (const struct Prg_Item *Item);
static void PrgRsc_WriteRowViewLink (unsigned NumLink, static void PrgRsc_WriteRowClipboard (unsigned NumLink,
const struct PrgRsc_Link *Link); const struct PrgRsc_Link *Link);
static void PrgRsc_GetDataOfLinkFromClipboard (struct PrgRsc_Link *Link,
MYSQL_RES **mysql_res);
/*****************************************************************************/ /*****************************************************************************/
/****************************** View resources *******************************/ /****************************** View resources *******************************/
@ -100,7 +128,7 @@ void PrgRsc_ViewResourcesAfterEdit (void)
/***** Get list of program items *****/ /***** Get list of program items *****/
Prg_GetListItems (); Prg_GetListItems ();
/***** Get the code of the program item *****/ /***** Get program item *****/
Prg_GetParams (&Item); Prg_GetParams (&Item);
/***** Show current program items, if any *****/ /***** Show current program items, if any *****/
@ -121,7 +149,7 @@ void PrgRsc_EditResources (void)
/***** Get list of program items *****/ /***** Get list of program items *****/
Prg_GetListItems (); Prg_GetListItems ();
/***** Get the code of the program item *****/ /***** Get program item *****/
Prg_GetParams (&Item); Prg_GetParams (&Item);
/***** Show current program items, if any *****/ /***** Show current program items, if any *****/
@ -362,7 +390,9 @@ static void PrgRsc_GetDataOfResource (struct Prg_Item *Item,
RscCod row[1] RscCod row[1]
RscInd row[2] RscInd row[2]
Hidden row[3] Hidden row[3]
Title row[4] Type row[4]
Cod row[5]
Title row[6]
*/ */
/* Get code of the program item (row[0]) */ /* Get code of the program item (row[0]) */
Item->Hierarchy.ItmCod = Str_ConvertStrCodToLongCod (row[0]); Item->Hierarchy.ItmCod = Str_ConvertStrCodToLongCod (row[0]);
@ -374,8 +404,12 @@ static void PrgRsc_GetDataOfResource (struct Prg_Item *Item,
/* Get whether the program item is hidden (row(3)) */ /* Get whether the program item is hidden (row(3)) */
Item->Resource.Hierarchy.Hidden = (row[3][0] == 'Y'); Item->Resource.Hierarchy.Hidden = (row[3][0] == 'Y');
/* Get the title of the item resource (row[4]) */ /* Get link type and code (row[4], row[5]) */
Str_Copy (Item->Resource.Title,row[4],sizeof (Item->Resource.Title) - 1); Item->Resource.Type = PrgRsc_GetTypeFromString (row[4]);
Item->Resource.Cod = Str_ConvertStrCodToLongCod (row[5]);
/* Get the title of the item resource (row[6]) */
Str_Copy (Item->Resource.Title,row[6],sizeof (Item->Resource.Title) - 1);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -445,8 +479,8 @@ static void PrgRsc_WriteRowEditResource (Prg_ListingType_t ListingType,
HTM_TD_End (); HTM_TD_End ();
/***** Icon to edit link *****/ /***** Icon to edit link *****/
HTM_TD_Begin ("class=\"PRG_MAIN LT %s\"",The_GetColorRows1 (1)); HTM_TD_Begin ("class=\"PRG_MAIN RT %s\"",The_GetColorRows1 (1));
Ico_PutContextualIconToGetLink (ActChgLnkPrgRsc,PrgRsc_RESOURCE_SECTION_ID, Ico_PutContextualIconToGetLink (ActSeeCliPrgRsc,PrgRsc_RESOURCE_SECTION_ID,
Prg_PutParams,&ItmRscCodes); Prg_PutParams,&ItmRscCodes);
HTM_TD_End (); HTM_TD_End ();
@ -459,7 +493,7 @@ static void PrgRsc_WriteRowEditResource (Prg_ListingType_t ListingType,
/* Show clipboard to change resource link */ /* Show clipboard to change resource link */
if (ListingType == Prg_SHOW_CLIPBOARD && if (ListingType == Prg_SHOW_CLIPBOARD &&
Item->Resource.Hierarchy.RscCod == SelectedItmRscCodes->RscCod) Item->Resource.Hierarchy.RscCod == SelectedItmRscCodes->RscCod)
PrgRsc_ShowClipboard (); PrgRsc_ShowClipboard (Item);
HTM_TD_End (); HTM_TD_End ();
@ -475,10 +509,13 @@ static void PrgRsc_WriteRowNewResource (Prg_ListingType_t ListingType,
unsigned NumResources, unsigned NumResources,
struct Prg_ItmRscCodes *SelectedItmRscCodes) struct Prg_ItmRscCodes *SelectedItmRscCodes)
{ {
struct Prg_Item Item;
struct Prg_ItmRscCodes ItmRscCodes; struct Prg_ItmRscCodes ItmRscCodes;
ItmRscCodes.ItmCod = SelectedItmRscCodes->ItmCod; Prg_ResetItem (&Item);
ItmRscCodes.RscCod = -1L; Item.Hierarchy.ItmCod = SelectedItmRscCodes->ItmCod;
ItmRscCodes.ItmCod = Item.Hierarchy.ItmCod;
ItmRscCodes.RscCod = Item.Resource.Hierarchy.RscCod;
/***** Begin row *****/ /***** Begin row *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
@ -501,14 +538,14 @@ static void PrgRsc_WriteRowNewResource (Prg_ListingType_t ListingType,
HTM_SUBMIT_ON_CHANGE, HTM_SUBMIT_ON_CHANGE,
"placeholder=\"%s\"" "placeholder=\"%s\""
" class=\"INPUT_FULL_NAME INPUT_%s\"", " class=\"INPUT_FULL_NAME INPUT_%s\"",
"Nuevo recurso", "Nuevo recurso", // TODO: Need translation!!!!!!!!!!!!!!!!!!!
The_GetSuffix ()); The_GetSuffix ());
Frm_EndForm (); Frm_EndForm ();
HTM_TD_End (); HTM_TD_End ();
/***** Icon to edit link *****/ /***** Icon to edit link *****/
HTM_TD_Begin ("class=\"PRG_MAIN LT %s\"",The_GetColorRows1 (1)); HTM_TD_Begin ("class=\"PRG_MAIN RT %s\"",The_GetColorRows1 (1));
Ico_PutContextualIconToGetLink (ActChgLnkPrgRsc,PrgRsc_RESOURCE_SECTION_ID, Ico_PutContextualIconToGetLink (ActSeeCliPrgRsc,PrgRsc_RESOURCE_SECTION_ID,
Prg_PutParams,&ItmRscCodes); Prg_PutParams,&ItmRscCodes);
HTM_TD_End (); HTM_TD_End ();
@ -518,7 +555,7 @@ static void PrgRsc_WriteRowNewResource (Prg_ListingType_t ListingType,
/* Show clipboard to change resource link */ /* Show clipboard to change resource link */
if (ListingType == Prg_SHOW_CLIPBOARD && if (ListingType == Prg_SHOW_CLIPBOARD &&
SelectedItmRscCodes->RscCod <= 0) // No resource selected SelectedItmRscCodes->RscCod <= 0) // No resource selected
PrgRsc_ShowClipboard (); PrgRsc_ShowClipboard (&Item);
HTM_TD_End (); HTM_TD_End ();
@ -557,17 +594,17 @@ static void PrgRsc_PutFormsToRemEditOneResource (unsigned NumRsc,
/***** Icon to move up the item *****/ /***** Icon to move up the item *****/
if (NumRsc > 0) if (NumRsc > 0)
Lay_PutContextualLinkOnlyIcon (ActUp_PrgRsc,PrgRsc_RESOURCE_SECTION_ID, Lay_PutContextualLinkOnlyIcon (ActUp_PrgRsc,PrgRsc_RESOURCE_SECTION_ID,
Prg_PutParams,ItmRscCodes, Prg_PutParams,ItmRscCodes,
"arrow-up.svg",Ico_BLACK); "arrow-up.svg",Ico_BLACK);
else else
Ico_PutIconOff ("arrow-up.svg",Ico_BLACK,Txt_Movement_not_allowed); Ico_PutIconOff ("arrow-up.svg",Ico_BLACK,Txt_Movement_not_allowed);
/***** Put icon to move down the item *****/ /***** Put icon to move down the item *****/
if (NumRsc < NumResources - 1) if (NumRsc < NumResources - 1)
Lay_PutContextualLinkOnlyIcon (ActDwnPrgRsc,PrgRsc_RESOURCE_SECTION_ID, Lay_PutContextualLinkOnlyIcon (ActDwnPrgRsc,PrgRsc_RESOURCE_SECTION_ID,
Prg_PutParams,ItmRscCodes, Prg_PutParams,ItmRscCodes,
"arrow-down.svg",Ico_BLACK); "arrow-down.svg",Ico_BLACK);
else else
Ico_PutIconOff ("arrow-down.svg",Ico_BLACK,Txt_Movement_not_allowed); Ico_PutIconOff ("arrow-down.svg",Ico_BLACK,Txt_Movement_not_allowed);
break; break;
@ -609,7 +646,7 @@ void PrgRsc_CreateResource (void)
Prg_GetListItems (); Prg_GetListItems ();
/***** Get parameters *****/ /***** Get parameters *****/
/* Get the code of the program item */ /* Get program item */
Prg_GetParams (&Item); Prg_GetParams (&Item);
/* Get the new title for the new resource */ /* Get the new title for the new resource */
@ -637,7 +674,7 @@ void PrgRsc_RenameResource (void)
/***** Get list of program items *****/ /***** Get list of program items *****/
Prg_GetListItems (); Prg_GetListItems ();
/***** Get data of the item resource from database *****/ /***** Get program item and resource *****/
Prg_GetParams (&Item); Prg_GetParams (&Item);
if (Item.Hierarchy.ItmCod <= 0) if (Item.Hierarchy.ItmCod <= 0)
Err_WrongResourceExit (); Err_WrongResourceExit ();
@ -668,7 +705,7 @@ void PrgRsc_ReqRemResource (void)
/***** Get list of program items *****/ /***** Get list of program items *****/
Prg_GetListItems (); Prg_GetListItems ();
/***** Get data of the item resource from database *****/ /***** Get program item and resource *****/
Prg_GetParams (&Item); Prg_GetParams (&Item);
if (Item.Hierarchy.ItmCod <= 0) if (Item.Hierarchy.ItmCod <= 0)
Err_WrongResourceExit (); Err_WrongResourceExit ();
@ -737,7 +774,7 @@ static void PrgRsc_HideOrUnhideResource (bool Hide)
/***** Get list of program items *****/ /***** Get list of program items *****/
Prg_GetListItems (); Prg_GetListItems ();
/***** Get data of the item resource from database *****/ /***** Get program item and resource *****/
Prg_GetParams (&Item); Prg_GetParams (&Item);
if (Item.Hierarchy.ItmCod <= 0) if (Item.Hierarchy.ItmCod <= 0)
Err_WrongResourceExit (); Err_WrongResourceExit ();
@ -781,7 +818,7 @@ static void PrgRsc_MoveUpDownResource (PrgRsc_MoveUpDown_t UpDown)
/***** Get list of program items *****/ /***** Get list of program items *****/
Prg_GetListItems (); Prg_GetListItems ();
/***** Get data of the item resource from database *****/ /***** Get program item and resource *****/
Prg_GetParams (&Item); Prg_GetParams (&Item);
if (Item.Hierarchy.ItmCod <= 0) if (Item.Hierarchy.ItmCod <= 0)
Err_WrongResourceExit (); Err_WrongResourceExit ();
@ -863,7 +900,7 @@ void PrgRsc_ShowClipboardToChgLink (void)
/***** Get list of program items *****/ /***** Get list of program items *****/
Prg_GetListItems (); Prg_GetListItems ();
/***** Get data of the item resource from database *****/ /***** Get program item and resource *****/
Prg_GetParams (&Item); Prg_GetParams (&Item);
if (Item.Hierarchy.ItmCod <= 0) if (Item.Hierarchy.ItmCod <= 0)
Err_WrongResourceExit (); Err_WrongResourceExit ();
@ -875,42 +912,154 @@ void PrgRsc_ShowClipboardToChgLink (void)
Prg_FreeListItems (); Prg_FreeListItems ();
} }
static void PrgRsc_ShowClipboard (void) /*****************************************************************************/
/***************** Show clipboard to change resource link ********************/
/*****************************************************************************/
static void PrgRsc_ShowClipboard (const struct Prg_Item *Item)
{ {
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
unsigned NumLink; unsigned NumLink;
unsigned NumLinks; unsigned NumLinks;
struct PrgRsc_Link Link; struct PrgRsc_Link Link;
struct Prg_ItmRscCodes ItmRscCodes;
/***** Get list of item resources from database *****/ ItmRscCodes.ItmCod = Item->Hierarchy.ItmCod;
NumLinks = Prg_DB_GetClipboard (&mysql_res); ItmRscCodes.RscCod = Item->Resource.Hierarchy.RscCod;
if (NumLinks)
/***** Begin form *****/
Frm_BeginFormAnchor (ActChgLnkPrgRsc,PrgRsc_RESOURCE_SECTION_ID);
Prg_PutParams (&ItmRscCodes);
/***** Begin list *****/
HTM_UL_Begin ("class=\"PRG_CLIPBOARD\"");
/***** Current link *****/
Link.Type = Item->Resource.Type;
Link.Cod = Item->Resource.Cod;
PrgRsc_WriteRowClipboard (0,&Link);
/***** Get list of item resources from database *****/
NumLinks = Prg_DB_GetClipboard (&mysql_res);
/***** Write all item resources *****/
for (NumLink = 1;
NumLink <= NumLinks;
NumLink++)
{
/* Get data of this link */
PrgRsc_GetDataOfLinkFromClipboard (&Link,&mysql_res);
/* Show link */
PrgRsc_WriteRowClipboard (NumLink,&Link);
}
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
/***** End list *****/
HTM_UL_End ();
/***** End form *****/
Frm_EndForm ();
}
/*****************************************************************************/
/************************ Show one link from clipboard ***********************/
/*****************************************************************************/
static void PrgRsc_WriteRowClipboard (unsigned NumLink,
const struct PrgRsc_Link *Link)
{
extern const char *Prg_ResourceTypesDB[PrgRsc_NUM_TYPES];
HTM_LI_Begin ("class=\"DAT_%s\"",The_GetSuffix ());
HTM_LABEL_Begin (NULL);
if (NumLink)
HTM_INPUT_RADIO ("Link",true,
"value=\"%s_%ld\"",
Prg_ResourceTypesDB[Link->Type],Link->Cod);
else
HTM_INPUT_RADIO ("Link",false,
"value=\"%s_%ld\" checked=\"checked\"",
Prg_ResourceTypesDB[Link->Type],Link->Cod);
/***** Type *****/
Ico_PutIconOn (Prg_ResourceTypesLogos[Link->Type],Ico_BLACK,Prg_ResourceTypesDB[Link->Type]);
/***** Code *****/
if (Link->Cod > 0)
HTM_Long (Link->Cod);
else
HTM_Txt ("sin enlace"); // TODO: Need translation!!!!!
HTM_LABEL_End ();
HTM_LI_End ();
}
/*****************************************************************************/
/***************** Show clipboard to change resource link ********************/
/*****************************************************************************/
void PrgRsc_ChangeLink (void)
{
extern const char *Prg_ResourceTypesDB[PrgRsc_NUM_TYPES];
struct Prg_Item Item;
char TypeCod[3 + 1 + Cns_MAX_DECIMAL_DIGITS_LONG + 1];
char TypeStr[3 + 1];
PrgRsc_Type_t Type;
long Cod;
/***** Get list of program items *****/
Prg_GetListItems ();
/***** Get parameters *****/
/* Get program item and resource */
Prg_GetParams (&Item);
if (Item.Hierarchy.ItmCod <= 0)
Err_WrongResourceExit ();
/* Get link type and code */
Par_GetParToText ("Link",TypeCod,sizeof (TypeCod) - 1);
if (sscanf (TypeCod,"%3s_%ld",TypeStr,&Cod) == 2)
{ {
/***** Table *****/ Type = PrgRsc_GetTypeFromString (TypeStr);
HTM_TABLE_BeginWideMarginPadding (2);
HTM_TBODY_Begin (NULL);
/***** Write all item resources *****/ /***** Update resource link *****/
for (NumLink = 0, The_ResetRowColor1 (2); Prg_DB_UpdateRscLink (Item.Resource.Hierarchy.RscCod,Type,Cod);
NumLink < NumLinks;
NumLink++, The_ChangeRowColor1 (2))
{
/* Get data of this link */
PrgRsc_GetDataOfLinkFromClipboard (&Link,&mysql_res);
/* Show link */ /***** Remove link from clipboard *****/
PrgRsc_WriteRowViewLink (NumLink,&Link); Prg_DB_RemoveLinkFromClipboard (Type,Cod);
}
/***** End table *****/
HTM_TBODY_End ();
HTM_TABLE_End ();
} }
else
Ale_ShowAlert (Ale_INFO,"Empty clipboard.");
/***** Free structure that stores the query result *****/ /***** Show current program items, if any *****/
DB_FreeMySQLResult (&mysql_res); Prg_ShowAllItems (Prg_SHOW_CLIPBOARD,Item.Hierarchy.ItmCod,Item.Resource.Hierarchy.RscCod);
/***** Free list of program items *****/
Prg_FreeListItems ();
}
/*****************************************************************************/
/********************** Get resource data from clipboard *********************/
/*****************************************************************************/
static void PrgRsc_GetDataOfLinkFromClipboard (struct PrgRsc_Link *Link,
MYSQL_RES **mysql_res)
{
MYSQL_ROW row;
/***** Get data of item resource from database *****/
/* Get row */
row = mysql_fetch_row (*mysql_res);
/*
Type row[0]
Cod row[1]
*/
/* Get type (row[0]) */
Link->Type = PrgRsc_GetTypeFromString (row[0]);
/* Get code (row[1]) */
Link->Cod = Str_ConvertStrCodToLongCod (row[1]);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -931,37 +1080,3 @@ PrgRsc_Type_t PrgRsc_GetTypeFromString (const char *Str)
return PrgRsc_NONE; return PrgRsc_NONE;
} }
/*****************************************************************************/
/************************ Show one link from clipboard ***********************/
/*****************************************************************************/
static void PrgRsc_WriteRowViewLink (unsigned NumLink,
const struct PrgRsc_Link *Link)
{
extern const char *Prg_ResourceTypesDB[PrgRsc_NUM_TYPES];
/***** Begin row *****/
HTM_TR_Begin (NULL);
/***** Link number *****/
HTM_TD_Begin ("class=\"PRG_NUM PRG_RSC_%s RT %s\"",
The_GetSuffix (),The_GetColorRows1 (2));
HTM_Unsigned (NumLink + 1);
HTM_TD_End ();
/***** Type *****/
HTM_TD_Begin ("class=\"PRG_MAIN PRG_RSC_%s %s\"",
The_GetSuffix (),The_GetColorRows1 (2));
HTM_Txt (Prg_ResourceTypesDB[Link->Type]);
HTM_TD_End ();
/***** Code *****/
HTM_TD_Begin ("class=\"PRG_MAIN PRG_RSC_%s %s\"",
The_GetSuffix (),The_GetColorRows1 (2));
HTM_Long (Link->Cod);
HTM_TD_End ();
/***** End row *****/
HTM_TR_End ();
}

View File

@ -31,29 +31,6 @@
/************************** Public types and constants ***********************/ /************************** Public types and constants ***********************/
/*****************************************************************************/ /*****************************************************************************/
#define PrgRsc_NUM_TYPES 10
typedef enum
{
PrgRsc_NONE,
// gui TEACHING_GUIDE // Link to teaching guide
// bib BIBLIOGRAPHY // Link to bibliography
// faq FAQ // Link to FAQ
// lnk LINKS // Link to links
// tmt TIMETABLE // Link to timetable
PrgRsc_ASSIGNMENT,
// prj PROJECT // A project is only for some students
PrgRsc_CALL_FOR_EXAM,
// tst TEST // User selects tags, teacher should select
PrgRsc_EXAM,
PrgRsc_GAME,
PrgRsc_SURVEY,
PrgRsc_DOCUMENT,
PrgRsc_MARKS,
// grp GROUPS // ??? User select groups
PrgRsc_ATTENDANCE_EVENT,
PrgRsc_FORUM_THREAD,
} PrgRsc_Type_t;
struct PrgRsc_Link struct PrgRsc_Link
{ {
PrgRsc_Type_t Type; PrgRsc_Type_t Type;
@ -89,6 +66,7 @@ void PrgRsc_MoveUpResource (void);
void PrgRsc_MoveDownResource (void); void PrgRsc_MoveDownResource (void);
void PrgRsc_ShowClipboardToChgLink (void); void PrgRsc_ShowClipboardToChgLink (void);
void PrgRsc_ChangeLink (void);
PrgRsc_Type_t PrgRsc_GetTypeFromString (const char *Str); PrgRsc_Type_t PrgRsc_GetTypeFromString (const char *Str);

View File

@ -6270,6 +6270,29 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"Move down resource" // Precisa de tradução "Move down resource" // Precisa de tradução
#elif L==10 // tr #elif L==10 // tr
"Move down resource" // Çeviri lazim! "Move down resource" // Çeviri lazim!
#endif
,
[ActSeeCliPrgRsc] =
#if L==1 // ca
"Edit resource link" // Necessita traducció
#elif L==2 // de
"Edit resource link" // Need Übersetzung
#elif L==3 // en
"Edit resource link"
#elif L==4 // es
"Editar enlace de recurso"
#elif L==5 // fr
"Edit resource link" // Besoin de traduction
#elif L==6 // gn
"Editar enlace de recurso" // Okoteve traducción
#elif L==7 // it
"Edit resource link" // Bisogno di traduzione
#elif L==8 // pl
"Edit resource link" // Potrzebujesz tlumaczenie
#elif L==9 // pt
"Edit resource link" // Precisa de tradução
#elif L==10 // tr
"Edit resource link" // Çeviri lazim!
#endif #endif
, ,
[ActChgLnkPrgRsc] = [ActChgLnkPrgRsc] =

View File

@ -234,7 +234,7 @@ static const char *The_ClassColorRows[2][The_NUM_THEMES] =
const char *The_GetColorRows (void) const char *The_GetColorRows (void)
{ {
return The_ClassColorRows[The_RowEvenOdd[0]][Gbl.Prefs.Theme]; return The_GetColorRows1 (0);
} }
const char *The_GetColorRows1 (unsigned Level) const char *The_GetColorRows1 (unsigned Level)
@ -244,7 +244,7 @@ const char *The_GetColorRows1 (unsigned Level)
void The_ResetRowColor (void) void The_ResetRowColor (void)
{ {
The_RowEvenOdd[0] = 0; The_ResetRowColor1 (0);
} }
void The_ResetRowColor1 (unsigned Level) void The_ResetRowColor1 (unsigned Level)
@ -254,7 +254,7 @@ void The_ResetRowColor1 (unsigned Level)
void The_ChangeRowColor (void) void The_ChangeRowColor (void)
{ {
The_RowEvenOdd[0] = 1 - The_RowEvenOdd[0]; The_ChangeRowColor1 (0);
} }
void The_ChangeRowColor1 (unsigned Level) void The_ChangeRowColor1 (unsigned Level)