mirror of
https://github.com/acanas/swad-core.git
synced 2024-09-20 00:02:42 +02:00
Version 22.104: May 03, 2023 Rubrics in project. Not finished.
This commit is contained in:
parent
1d181d04eb
commit
e4489b85ca
19
sql/swad.sql
19
sql/swad.sql
|
@ -1206,9 +1206,6 @@ CREATE TABLE IF NOT EXISTS prg_resources (
|
|||
--
|
||||
CREATE TABLE IF NOT EXISTS prj_config (
|
||||
CrsCod INT NOT NULL DEFAULT -1,
|
||||
RubTutCod INT NOT NULL DEFAULT -1,
|
||||
RubEvlCod INT NOT NULL DEFAULT -1,
|
||||
RubGblCod INT NOT NULL DEFAULT -1,
|
||||
NETCanCreate ENUM('N','Y') NOT NULL DEFAULT 'Y',
|
||||
UNIQUE INDEX(CrsCod));
|
||||
--
|
||||
|
@ -1240,6 +1237,22 @@ CREATE TABLE IF NOT EXISTS prj_projects (
|
|||
INDEX(CrsCod,DptCod),
|
||||
INDEX(CrsCod,ReviewStatus));
|
||||
--
|
||||
-- Table prj_rubrics: stores the rubrics for each project
|
||||
--
|
||||
CREATE TABLE IF NOT EXISTS prj_rubrics (
|
||||
CrsCod INT NOT NULL,
|
||||
Type ENUM('tut','evl','gbl') NOT NULL,
|
||||
RubCod INT NOT NULL,
|
||||
UNIQUE INDEX(CrsCod,Type,RubCod));
|
||||
--
|
||||
-- Table prj_scores: stores the rubric criteria scores for each project
|
||||
--
|
||||
CREATE TABLE IF NOT EXISTS prj_scores (
|
||||
PrjCod INT NOT NULL,
|
||||
CriCod INT NOT NULL,
|
||||
Score DOUBLE PRECISION NOT NULL DEFAULT 0,
|
||||
UNIQUE INDEX(PrjCod,CriCod));
|
||||
--
|
||||
-- Table prj_users: stores the users inside projects
|
||||
--
|
||||
CREATE TABLE IF NOT EXISTS prj_users (
|
||||
|
|
|
@ -647,6 +647,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
|
|||
[ActRemStdPrj ] = {1693,-1,TabUnk,ActSeeAllPrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_RemStd ,NULL},
|
||||
[ActRemTutPrj ] = {1694,-1,TabUnk,ActSeeAllPrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_RemTut ,NULL},
|
||||
[ActRemEvlPrj ] = {1695,-1,TabUnk,ActSeeAllPrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_RemEvl ,NULL},
|
||||
[ActChgPrjSco ] = {1974,-1,TabUnk,ActSeeAllPrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ChangeCriterionScore ,NULL},
|
||||
[ActReqLnkPrj ] = {1948,-1,TabUnk,ActSeeAllPrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,PrjRsc_GetLinkToProject ,NULL},
|
||||
|
||||
[ActAdmDocPrj ] = {1697,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_ShowFileBrowserOrWorks ,NULL},
|
||||
|
@ -3866,4 +3867,5 @@ Act_Action_t ActLst_FromActCodToAction[1 + ActLst_MAX_ACTION_COD] = // Do not re
|
|||
ActRemRscCli_InPrg, // #1971
|
||||
ActSeeRscCli_InRub, // #1972
|
||||
ActRemRscCli_InRub, // #1973
|
||||
ActChgPrjSco, // #1974
|
||||
};
|
||||
|
|
|
@ -573,216 +573,217 @@
|
|||
#define ActRemStdPrj (ActChgCrsTT1stDay + 50)
|
||||
#define ActRemTutPrj (ActChgCrsTT1stDay + 51)
|
||||
#define ActRemEvlPrj (ActChgCrsTT1stDay + 52)
|
||||
#define ActReqLnkPrj (ActChgCrsTT1stDay + 53)
|
||||
#define ActChgPrjSco (ActChgCrsTT1stDay + 53)
|
||||
#define ActReqLnkPrj (ActChgCrsTT1stDay + 54)
|
||||
|
||||
#define ActAdmDocPrj (ActChgCrsTT1stDay + 54)
|
||||
#define ActReqRemFilDocPrj (ActChgCrsTT1stDay + 55)
|
||||
#define ActRemFilDocPrj (ActChgCrsTT1stDay + 56)
|
||||
#define ActRemFolDocPrj (ActChgCrsTT1stDay + 57)
|
||||
#define ActCopDocPrj (ActChgCrsTT1stDay + 58)
|
||||
#define ActPasDocPrj (ActChgCrsTT1stDay + 59)
|
||||
#define ActRemTreDocPrj (ActChgCrsTT1stDay + 60)
|
||||
#define ActFrmCreDocPrj (ActChgCrsTT1stDay + 61)
|
||||
#define ActCreFolDocPrj (ActChgCrsTT1stDay + 62)
|
||||
#define ActCreLnkDocPrj (ActChgCrsTT1stDay + 63)
|
||||
#define ActRenFolDocPrj (ActChgCrsTT1stDay + 64)
|
||||
#define ActRcvFilDocPrjDZ (ActChgCrsTT1stDay + 65)
|
||||
#define ActRcvFilDocPrjCla (ActChgCrsTT1stDay + 66)
|
||||
#define ActExpDocPrj (ActChgCrsTT1stDay + 67)
|
||||
#define ActConDocPrj (ActChgCrsTT1stDay + 68)
|
||||
#define ActZIPDocPrj (ActChgCrsTT1stDay + 69)
|
||||
#define ActReqDatDocPrj (ActChgCrsTT1stDay + 70)
|
||||
#define ActChgDatDocPrj (ActChgCrsTT1stDay + 71)
|
||||
#define ActDowDocPrj (ActChgCrsTT1stDay + 72)
|
||||
#define ActAdmDocPrj (ActChgCrsTT1stDay + 55)
|
||||
#define ActReqRemFilDocPrj (ActChgCrsTT1stDay + 56)
|
||||
#define ActRemFilDocPrj (ActChgCrsTT1stDay + 57)
|
||||
#define ActRemFolDocPrj (ActChgCrsTT1stDay + 58)
|
||||
#define ActCopDocPrj (ActChgCrsTT1stDay + 59)
|
||||
#define ActPasDocPrj (ActChgCrsTT1stDay + 60)
|
||||
#define ActRemTreDocPrj (ActChgCrsTT1stDay + 61)
|
||||
#define ActFrmCreDocPrj (ActChgCrsTT1stDay + 62)
|
||||
#define ActCreFolDocPrj (ActChgCrsTT1stDay + 63)
|
||||
#define ActCreLnkDocPrj (ActChgCrsTT1stDay + 64)
|
||||
#define ActRenFolDocPrj (ActChgCrsTT1stDay + 65)
|
||||
#define ActRcvFilDocPrjDZ (ActChgCrsTT1stDay + 66)
|
||||
#define ActRcvFilDocPrjCla (ActChgCrsTT1stDay + 67)
|
||||
#define ActExpDocPrj (ActChgCrsTT1stDay + 68)
|
||||
#define ActConDocPrj (ActChgCrsTT1stDay + 69)
|
||||
#define ActZIPDocPrj (ActChgCrsTT1stDay + 70)
|
||||
#define ActReqDatDocPrj (ActChgCrsTT1stDay + 71)
|
||||
#define ActChgDatDocPrj (ActChgCrsTT1stDay + 72)
|
||||
#define ActDowDocPrj (ActChgCrsTT1stDay + 73)
|
||||
|
||||
#define ActAdmAssPrj (ActChgCrsTT1stDay + 73)
|
||||
#define ActReqRemFilAssPrj (ActChgCrsTT1stDay + 74)
|
||||
#define ActRemFilAssPrj (ActChgCrsTT1stDay + 75)
|
||||
#define ActRemFolAssPrj (ActChgCrsTT1stDay + 76)
|
||||
#define ActCopAssPrj (ActChgCrsTT1stDay + 77)
|
||||
#define ActPasAssPrj (ActChgCrsTT1stDay + 78)
|
||||
#define ActRemTreAssPrj (ActChgCrsTT1stDay + 79)
|
||||
#define ActFrmCreAssPrj (ActChgCrsTT1stDay + 80)
|
||||
#define ActCreFolAssPrj (ActChgCrsTT1stDay + 81)
|
||||
#define ActCreLnkAssPrj (ActChgCrsTT1stDay + 82)
|
||||
#define ActRenFolAssPrj (ActChgCrsTT1stDay + 83)
|
||||
#define ActRcvFilAssPrjDZ (ActChgCrsTT1stDay + 84)
|
||||
#define ActRcvFilAssPrjCla (ActChgCrsTT1stDay + 85)
|
||||
#define ActExpAssPrj (ActChgCrsTT1stDay + 86)
|
||||
#define ActConAssPrj (ActChgCrsTT1stDay + 87)
|
||||
#define ActZIPAssPrj (ActChgCrsTT1stDay + 88)
|
||||
#define ActReqDatAssPrj (ActChgCrsTT1stDay + 89)
|
||||
#define ActChgDatAssPrj (ActChgCrsTT1stDay + 90)
|
||||
#define ActDowAssPrj (ActChgCrsTT1stDay + 91)
|
||||
#define ActAdmAssPrj (ActChgCrsTT1stDay + 74)
|
||||
#define ActReqRemFilAssPrj (ActChgCrsTT1stDay + 75)
|
||||
#define ActRemFilAssPrj (ActChgCrsTT1stDay + 76)
|
||||
#define ActRemFolAssPrj (ActChgCrsTT1stDay + 77)
|
||||
#define ActCopAssPrj (ActChgCrsTT1stDay + 78)
|
||||
#define ActPasAssPrj (ActChgCrsTT1stDay + 79)
|
||||
#define ActRemTreAssPrj (ActChgCrsTT1stDay + 80)
|
||||
#define ActFrmCreAssPrj (ActChgCrsTT1stDay + 81)
|
||||
#define ActCreFolAssPrj (ActChgCrsTT1stDay + 82)
|
||||
#define ActCreLnkAssPrj (ActChgCrsTT1stDay + 83)
|
||||
#define ActRenFolAssPrj (ActChgCrsTT1stDay + 84)
|
||||
#define ActRcvFilAssPrjDZ (ActChgCrsTT1stDay + 85)
|
||||
#define ActRcvFilAssPrjCla (ActChgCrsTT1stDay + 86)
|
||||
#define ActExpAssPrj (ActChgCrsTT1stDay + 87)
|
||||
#define ActConAssPrj (ActChgCrsTT1stDay + 88)
|
||||
#define ActZIPAssPrj (ActChgCrsTT1stDay + 89)
|
||||
#define ActReqDatAssPrj (ActChgCrsTT1stDay + 90)
|
||||
#define ActChgDatAssPrj (ActChgCrsTT1stDay + 91)
|
||||
#define ActDowAssPrj (ActChgCrsTT1stDay + 92)
|
||||
|
||||
#define ActSeeOneCfe (ActChgCrsTT1stDay + 92)
|
||||
#define ActSeeDatCfe (ActChgCrsTT1stDay + 93)
|
||||
#define ActEdiCfe (ActChgCrsTT1stDay + 94)
|
||||
#define ActRcvCfe (ActChgCrsTT1stDay + 95)
|
||||
#define ActPrnCfe (ActChgCrsTT1stDay + 96)
|
||||
#define ActReqRemCfe (ActChgCrsTT1stDay + 97)
|
||||
#define ActRemCfe (ActChgCrsTT1stDay + 98)
|
||||
#define ActHidCfe (ActChgCrsTT1stDay + 99)
|
||||
#define ActUnhCfe (ActChgCrsTT1stDay + 100)
|
||||
#define ActReqLnkCfe (ActChgCrsTT1stDay + 101)
|
||||
#define ActSeeOneCfe (ActChgCrsTT1stDay + 93)
|
||||
#define ActSeeDatCfe (ActChgCrsTT1stDay + 94)
|
||||
#define ActEdiCfe (ActChgCrsTT1stDay + 95)
|
||||
#define ActRcvCfe (ActChgCrsTT1stDay + 96)
|
||||
#define ActPrnCfe (ActChgCrsTT1stDay + 97)
|
||||
#define ActReqRemCfe (ActChgCrsTT1stDay + 98)
|
||||
#define ActRemCfe (ActChgCrsTT1stDay + 99)
|
||||
#define ActHidCfe (ActChgCrsTT1stDay + 100)
|
||||
#define ActUnhCfe (ActChgCrsTT1stDay + 101)
|
||||
#define ActReqLnkCfe (ActChgCrsTT1stDay + 102)
|
||||
|
||||
#define ActEdiOneTstQst (ActChgCrsTT1stDay + 102)
|
||||
#define ActReqImpTstQst (ActChgCrsTT1stDay + 103)
|
||||
#define ActImpTstQst (ActChgCrsTT1stDay + 104)
|
||||
#define ActLstTstQst (ActChgCrsTT1stDay + 105)
|
||||
#define ActRcvTstQst (ActChgCrsTT1stDay + 106)
|
||||
#define ActReqRemSevTstQst (ActChgCrsTT1stDay + 107)
|
||||
#define ActRemSevTstQst (ActChgCrsTT1stDay + 108)
|
||||
#define ActReqRemOneTstQst (ActChgCrsTT1stDay + 109)
|
||||
#define ActRemOneTstQst (ActChgCrsTT1stDay + 110)
|
||||
#define ActChgShfTstQst (ActChgCrsTT1stDay + 111)
|
||||
#define ActEdiOneTstQst (ActChgCrsTT1stDay + 103)
|
||||
#define ActReqImpTstQst (ActChgCrsTT1stDay + 104)
|
||||
#define ActImpTstQst (ActChgCrsTT1stDay + 105)
|
||||
#define ActLstTstQst (ActChgCrsTT1stDay + 106)
|
||||
#define ActRcvTstQst (ActChgCrsTT1stDay + 107)
|
||||
#define ActReqRemSevTstQst (ActChgCrsTT1stDay + 108)
|
||||
#define ActRemSevTstQst (ActChgCrsTT1stDay + 109)
|
||||
#define ActReqRemOneTstQst (ActChgCrsTT1stDay + 110)
|
||||
#define ActRemOneTstQst (ActChgCrsTT1stDay + 111)
|
||||
#define ActChgShfTstQst (ActChgCrsTT1stDay + 112)
|
||||
|
||||
#define ActEdiTag (ActChgCrsTT1stDay + 112)
|
||||
#define ActEnaTag (ActChgCrsTT1stDay + 113)
|
||||
#define ActDisTag (ActChgCrsTT1stDay + 114)
|
||||
#define ActRenTag (ActChgCrsTT1stDay + 115)
|
||||
#define ActEdiTag (ActChgCrsTT1stDay + 113)
|
||||
#define ActEnaTag (ActChgCrsTT1stDay + 114)
|
||||
#define ActDisTag (ActChgCrsTT1stDay + 115)
|
||||
#define ActRenTag (ActChgCrsTT1stDay + 116)
|
||||
|
||||
#define ActSeeTst (ActChgCrsTT1stDay + 116)
|
||||
#define ActReqAssTst (ActChgCrsTT1stDay + 117)
|
||||
#define ActAssTst (ActChgCrsTT1stDay + 118)
|
||||
#define ActCfgTst (ActChgCrsTT1stDay + 119)
|
||||
#define ActRcvCfgTst (ActChgCrsTT1stDay + 120)
|
||||
#define ActSeeTst (ActChgCrsTT1stDay + 117)
|
||||
#define ActReqAssTst (ActChgCrsTT1stDay + 118)
|
||||
#define ActAssTst (ActChgCrsTT1stDay + 119)
|
||||
#define ActCfgTst (ActChgCrsTT1stDay + 120)
|
||||
#define ActRcvCfgTst (ActChgCrsTT1stDay + 121)
|
||||
|
||||
#define ActReqSeeMyTstRes (ActChgCrsTT1stDay + 121)
|
||||
#define ActSeeMyTstResCrs (ActChgCrsTT1stDay + 122)
|
||||
#define ActSeeOneTstResMe (ActChgCrsTT1stDay + 123)
|
||||
#define ActReqSeeUsrTstRes (ActChgCrsTT1stDay + 124)
|
||||
#define ActSeeUsrTstResCrs (ActChgCrsTT1stDay + 125)
|
||||
#define ActSeeOneTstResOth (ActChgCrsTT1stDay + 126)
|
||||
#define ActReqSeeMyTstRes (ActChgCrsTT1stDay + 122)
|
||||
#define ActSeeMyTstResCrs (ActChgCrsTT1stDay + 123)
|
||||
#define ActSeeOneTstResMe (ActChgCrsTT1stDay + 124)
|
||||
#define ActReqSeeUsrTstRes (ActChgCrsTT1stDay + 125)
|
||||
#define ActSeeUsrTstResCrs (ActChgCrsTT1stDay + 126)
|
||||
#define ActSeeOneTstResOth (ActChgCrsTT1stDay + 127)
|
||||
|
||||
#define ActSeeOneExa (ActChgCrsTT1stDay + 127)
|
||||
#define ActSeeOneExa (ActChgCrsTT1stDay + 128)
|
||||
|
||||
#define ActFrmNewExa (ActChgCrsTT1stDay + 128)
|
||||
#define ActEdiOneExa (ActChgCrsTT1stDay + 129)
|
||||
#define ActNewExa (ActChgCrsTT1stDay + 130)
|
||||
#define ActChgExa (ActChgCrsTT1stDay + 131)
|
||||
#define ActReqRemExa (ActChgCrsTT1stDay + 132)
|
||||
#define ActRemExa (ActChgCrsTT1stDay + 133)
|
||||
#define ActHidExa (ActChgCrsTT1stDay + 134)
|
||||
#define ActUnhExa (ActChgCrsTT1stDay + 135)
|
||||
#define ActReqLnkExa (ActChgCrsTT1stDay + 136)
|
||||
#define ActFrmNewExa (ActChgCrsTT1stDay + 129)
|
||||
#define ActEdiOneExa (ActChgCrsTT1stDay + 130)
|
||||
#define ActNewExa (ActChgCrsTT1stDay + 131)
|
||||
#define ActChgExa (ActChgCrsTT1stDay + 132)
|
||||
#define ActReqRemExa (ActChgCrsTT1stDay + 133)
|
||||
#define ActRemExa (ActChgCrsTT1stDay + 134)
|
||||
#define ActHidExa (ActChgCrsTT1stDay + 135)
|
||||
#define ActUnhExa (ActChgCrsTT1stDay + 136)
|
||||
#define ActReqLnkExa (ActChgCrsTT1stDay + 137)
|
||||
|
||||
#define ActFrmNewExaSet (ActChgCrsTT1stDay + 137)
|
||||
#define ActNewExaSet (ActChgCrsTT1stDay + 138)
|
||||
#define ActReqRemExaSet (ActChgCrsTT1stDay + 139)
|
||||
#define ActRemExaSet (ActChgCrsTT1stDay + 140)
|
||||
#define ActUp_ExaSet (ActChgCrsTT1stDay + 141)
|
||||
#define ActDwnExaSet (ActChgCrsTT1stDay + 142)
|
||||
#define ActChgTitExaSet (ActChgCrsTT1stDay + 143)
|
||||
#define ActChgNumQstExaSet (ActChgCrsTT1stDay + 144)
|
||||
#define ActFrmNewExaSet (ActChgCrsTT1stDay + 138)
|
||||
#define ActNewExaSet (ActChgCrsTT1stDay + 139)
|
||||
#define ActReqRemExaSet (ActChgCrsTT1stDay + 140)
|
||||
#define ActRemExaSet (ActChgCrsTT1stDay + 141)
|
||||
#define ActUp_ExaSet (ActChgCrsTT1stDay + 142)
|
||||
#define ActDwnExaSet (ActChgCrsTT1stDay + 143)
|
||||
#define ActChgTitExaSet (ActChgCrsTT1stDay + 144)
|
||||
#define ActChgNumQstExaSet (ActChgCrsTT1stDay + 145)
|
||||
|
||||
#define ActReqAddQstExaSet (ActChgCrsTT1stDay + 145)
|
||||
#define ActLstTstQstForSet (ActChgCrsTT1stDay + 146)
|
||||
#define ActAddQstToExa (ActChgCrsTT1stDay + 147)
|
||||
#define ActReqRemSetQst (ActChgCrsTT1stDay + 148)
|
||||
#define ActRemExaQst (ActChgCrsTT1stDay + 149)
|
||||
#define ActValSetQst (ActChgCrsTT1stDay + 150)
|
||||
#define ActInvSetQst (ActChgCrsTT1stDay + 151)
|
||||
#define ActReqAddQstExaSet (ActChgCrsTT1stDay + 146)
|
||||
#define ActLstTstQstForSet (ActChgCrsTT1stDay + 147)
|
||||
#define ActAddQstToExa (ActChgCrsTT1stDay + 148)
|
||||
#define ActReqRemSetQst (ActChgCrsTT1stDay + 149)
|
||||
#define ActRemExaQst (ActChgCrsTT1stDay + 150)
|
||||
#define ActValSetQst (ActChgCrsTT1stDay + 151)
|
||||
#define ActInvSetQst (ActChgCrsTT1stDay + 152)
|
||||
|
||||
#define ActReqNewExaSes (ActChgCrsTT1stDay + 152)
|
||||
#define ActEdiOneExaSes (ActChgCrsTT1stDay + 153)
|
||||
#define ActNewExaSes (ActChgCrsTT1stDay + 154)
|
||||
#define ActChgExaSes (ActChgCrsTT1stDay + 155)
|
||||
#define ActReqRemExaSes (ActChgCrsTT1stDay + 156)
|
||||
#define ActRemExaSes (ActChgCrsTT1stDay + 157)
|
||||
#define ActHidExaSes (ActChgCrsTT1stDay + 158)
|
||||
#define ActUnhExaSes (ActChgCrsTT1stDay + 159)
|
||||
#define ActReqNewExaSes (ActChgCrsTT1stDay + 153)
|
||||
#define ActEdiOneExaSes (ActChgCrsTT1stDay + 154)
|
||||
#define ActNewExaSes (ActChgCrsTT1stDay + 155)
|
||||
#define ActChgExaSes (ActChgCrsTT1stDay + 156)
|
||||
#define ActReqRemExaSes (ActChgCrsTT1stDay + 157)
|
||||
#define ActRemExaSes (ActChgCrsTT1stDay + 158)
|
||||
#define ActHidExaSes (ActChgCrsTT1stDay + 159)
|
||||
#define ActUnhExaSes (ActChgCrsTT1stDay + 160)
|
||||
|
||||
#define ActSeeExaPrn (ActChgCrsTT1stDay + 160)
|
||||
#define ActAnsExaPrn (ActChgCrsTT1stDay + 161)
|
||||
#define ActEndExaPrn (ActChgCrsTT1stDay + 162)
|
||||
#define ActSeeExaPrn (ActChgCrsTT1stDay + 161)
|
||||
#define ActAnsExaPrn (ActChgCrsTT1stDay + 162)
|
||||
#define ActEndExaPrn (ActChgCrsTT1stDay + 163)
|
||||
|
||||
#define ActSeeMyExaResCrs (ActChgCrsTT1stDay + 163)
|
||||
#define ActSeeMyExaResExa (ActChgCrsTT1stDay + 164)
|
||||
#define ActSeeMyExaResSes (ActChgCrsTT1stDay + 165)
|
||||
#define ActSeeOneExaResMe (ActChgCrsTT1stDay + 166)
|
||||
#define ActReqSeeUsrExaRes (ActChgCrsTT1stDay + 167)
|
||||
#define ActSeeUsrExaResCrs (ActChgCrsTT1stDay + 168)
|
||||
#define ActSeeUsrExaResExa (ActChgCrsTT1stDay + 169)
|
||||
#define ActSeeUsrExaResSes (ActChgCrsTT1stDay + 170)
|
||||
#define ActSeeOneExaResOth (ActChgCrsTT1stDay + 171)
|
||||
#define ActChgVisExaRes (ActChgCrsTT1stDay + 172)
|
||||
#define ActSeeMyExaResCrs (ActChgCrsTT1stDay + 164)
|
||||
#define ActSeeMyExaResExa (ActChgCrsTT1stDay + 165)
|
||||
#define ActSeeMyExaResSes (ActChgCrsTT1stDay + 166)
|
||||
#define ActSeeOneExaResMe (ActChgCrsTT1stDay + 167)
|
||||
#define ActReqSeeUsrExaRes (ActChgCrsTT1stDay + 168)
|
||||
#define ActSeeUsrExaResCrs (ActChgCrsTT1stDay + 169)
|
||||
#define ActSeeUsrExaResExa (ActChgCrsTT1stDay + 170)
|
||||
#define ActSeeUsrExaResSes (ActChgCrsTT1stDay + 171)
|
||||
#define ActSeeOneExaResOth (ActChgCrsTT1stDay + 172)
|
||||
#define ActChgVisExaRes (ActChgCrsTT1stDay + 173)
|
||||
|
||||
#define ActSeeOneGam (ActChgCrsTT1stDay + 173)
|
||||
#define ActReqRemMch (ActChgCrsTT1stDay + 174)
|
||||
#define ActRemMch (ActChgCrsTT1stDay + 175)
|
||||
#define ActEdiMch (ActChgCrsTT1stDay + 176)
|
||||
#define ActChgMch (ActChgCrsTT1stDay + 177)
|
||||
#define ActReqNewMch (ActChgCrsTT1stDay + 178)
|
||||
#define ActNewMch (ActChgCrsTT1stDay + 179)
|
||||
#define ActResMch (ActChgCrsTT1stDay + 180)
|
||||
#define ActBckMch (ActChgCrsTT1stDay + 181)
|
||||
#define ActPlyPauMch (ActChgCrsTT1stDay + 182)
|
||||
#define ActFwdMch (ActChgCrsTT1stDay + 183)
|
||||
#define ActChgNumColMch (ActChgCrsTT1stDay + 184)
|
||||
#define ActChgVisResMchQst (ActChgCrsTT1stDay + 185)
|
||||
#define ActMchCntDwn (ActChgCrsTT1stDay + 186)
|
||||
#define ActRefMchTch (ActChgCrsTT1stDay + 187)
|
||||
#define ActSeeOneGam (ActChgCrsTT1stDay + 174)
|
||||
#define ActReqRemMch (ActChgCrsTT1stDay + 175)
|
||||
#define ActRemMch (ActChgCrsTT1stDay + 176)
|
||||
#define ActEdiMch (ActChgCrsTT1stDay + 177)
|
||||
#define ActChgMch (ActChgCrsTT1stDay + 178)
|
||||
#define ActReqNewMch (ActChgCrsTT1stDay + 179)
|
||||
#define ActNewMch (ActChgCrsTT1stDay + 180)
|
||||
#define ActResMch (ActChgCrsTT1stDay + 181)
|
||||
#define ActBckMch (ActChgCrsTT1stDay + 182)
|
||||
#define ActPlyPauMch (ActChgCrsTT1stDay + 183)
|
||||
#define ActFwdMch (ActChgCrsTT1stDay + 184)
|
||||
#define ActChgNumColMch (ActChgCrsTT1stDay + 185)
|
||||
#define ActChgVisResMchQst (ActChgCrsTT1stDay + 186)
|
||||
#define ActMchCntDwn (ActChgCrsTT1stDay + 187)
|
||||
#define ActRefMchTch (ActChgCrsTT1stDay + 188)
|
||||
|
||||
#define ActJoiMch (ActChgCrsTT1stDay + 188)
|
||||
#define ActSeeMchAnsQstStd (ActChgCrsTT1stDay + 189)
|
||||
#define ActRemMchAnsQstStd (ActChgCrsTT1stDay + 190)
|
||||
#define ActAnsMchQstStd (ActChgCrsTT1stDay + 191)
|
||||
#define ActRefMchStd (ActChgCrsTT1stDay + 192)
|
||||
#define ActJoiMch (ActChgCrsTT1stDay + 189)
|
||||
#define ActSeeMchAnsQstStd (ActChgCrsTT1stDay + 190)
|
||||
#define ActRemMchAnsQstStd (ActChgCrsTT1stDay + 191)
|
||||
#define ActAnsMchQstStd (ActChgCrsTT1stDay + 192)
|
||||
#define ActRefMchStd (ActChgCrsTT1stDay + 193)
|
||||
|
||||
#define ActSeeMyMchResCrs (ActChgCrsTT1stDay + 193)
|
||||
#define ActSeeMyMchResGam (ActChgCrsTT1stDay + 194)
|
||||
#define ActSeeMyMchResMch (ActChgCrsTT1stDay + 195)
|
||||
#define ActSeeOneMchResMe (ActChgCrsTT1stDay + 196)
|
||||
#define ActSeeMyMchResCrs (ActChgCrsTT1stDay + 194)
|
||||
#define ActSeeMyMchResGam (ActChgCrsTT1stDay + 195)
|
||||
#define ActSeeMyMchResMch (ActChgCrsTT1stDay + 196)
|
||||
#define ActSeeOneMchResMe (ActChgCrsTT1stDay + 197)
|
||||
|
||||
#define ActReqSeeUsrMchRes (ActChgCrsTT1stDay + 197)
|
||||
#define ActSeeUsrMchResCrs (ActChgCrsTT1stDay + 198)
|
||||
#define ActSeeUsrMchResGam (ActChgCrsTT1stDay + 199)
|
||||
#define ActSeeUsrMchResMch (ActChgCrsTT1stDay + 200)
|
||||
#define ActSeeOneMchResOth (ActChgCrsTT1stDay + 201)
|
||||
#define ActReqSeeUsrMchRes (ActChgCrsTT1stDay + 198)
|
||||
#define ActSeeUsrMchResCrs (ActChgCrsTT1stDay + 199)
|
||||
#define ActSeeUsrMchResGam (ActChgCrsTT1stDay + 200)
|
||||
#define ActSeeUsrMchResMch (ActChgCrsTT1stDay + 201)
|
||||
#define ActSeeOneMchResOth (ActChgCrsTT1stDay + 202)
|
||||
|
||||
#define ActChgVisResMchUsr (ActChgCrsTT1stDay + 202)
|
||||
#define ActChgVisResMchUsr (ActChgCrsTT1stDay + 203)
|
||||
|
||||
#define ActLstOneGam (ActChgCrsTT1stDay + 203)
|
||||
#define ActLstOneGam (ActChgCrsTT1stDay + 204)
|
||||
|
||||
#define ActFrmNewGam (ActChgCrsTT1stDay + 204)
|
||||
#define ActEdiOneGam (ActChgCrsTT1stDay + 205)
|
||||
#define ActNewGam (ActChgCrsTT1stDay + 206)
|
||||
#define ActChgGam (ActChgCrsTT1stDay + 207)
|
||||
#define ActReqRemGam (ActChgCrsTT1stDay + 208)
|
||||
#define ActRemGam (ActChgCrsTT1stDay + 209)
|
||||
#define ActHidGam (ActChgCrsTT1stDay + 210)
|
||||
#define ActUnhGam (ActChgCrsTT1stDay + 211)
|
||||
#define ActAddOneGamQst (ActChgCrsTT1stDay + 212)
|
||||
#define ActGamLstTstQst (ActChgCrsTT1stDay + 213)
|
||||
#define ActAddTstQstToGam (ActChgCrsTT1stDay + 214)
|
||||
#define ActReqRemGamQst (ActChgCrsTT1stDay + 215)
|
||||
#define ActRemGamQst (ActChgCrsTT1stDay + 216)
|
||||
#define ActUp_GamQst (ActChgCrsTT1stDay + 217)
|
||||
#define ActDwnGamQst (ActChgCrsTT1stDay + 218)
|
||||
#define ActReqLnkGam (ActChgCrsTT1stDay + 219)
|
||||
#define ActFrmNewGam (ActChgCrsTT1stDay + 205)
|
||||
#define ActEdiOneGam (ActChgCrsTT1stDay + 206)
|
||||
#define ActNewGam (ActChgCrsTT1stDay + 207)
|
||||
#define ActChgGam (ActChgCrsTT1stDay + 208)
|
||||
#define ActReqRemGam (ActChgCrsTT1stDay + 209)
|
||||
#define ActRemGam (ActChgCrsTT1stDay + 210)
|
||||
#define ActHidGam (ActChgCrsTT1stDay + 211)
|
||||
#define ActUnhGam (ActChgCrsTT1stDay + 212)
|
||||
#define ActAddOneGamQst (ActChgCrsTT1stDay + 213)
|
||||
#define ActGamLstTstQst (ActChgCrsTT1stDay + 214)
|
||||
#define ActAddTstQstToGam (ActChgCrsTT1stDay + 215)
|
||||
#define ActReqRemGamQst (ActChgCrsTT1stDay + 216)
|
||||
#define ActRemGamQst (ActChgCrsTT1stDay + 217)
|
||||
#define ActUp_GamQst (ActChgCrsTT1stDay + 218)
|
||||
#define ActDwnGamQst (ActChgCrsTT1stDay + 219)
|
||||
#define ActReqLnkGam (ActChgCrsTT1stDay + 220)
|
||||
|
||||
#define ActSeeOneRub (ActChgCrsTT1stDay + 220)
|
||||
#define ActFrmNewRub (ActChgCrsTT1stDay + 221)
|
||||
#define ActEdiOneRub (ActChgCrsTT1stDay + 222)
|
||||
#define ActNewRub (ActChgCrsTT1stDay + 223)
|
||||
#define ActChgRub (ActChgCrsTT1stDay + 224)
|
||||
#define ActReqRemRub (ActChgCrsTT1stDay + 225)
|
||||
#define ActRemRub (ActChgCrsTT1stDay + 226)
|
||||
#define ActReqLnkRub (ActChgCrsTT1stDay + 227)
|
||||
#define ActSeeOneRub (ActChgCrsTT1stDay + 221)
|
||||
#define ActFrmNewRub (ActChgCrsTT1stDay + 222)
|
||||
#define ActEdiOneRub (ActChgCrsTT1stDay + 223)
|
||||
#define ActNewRub (ActChgCrsTT1stDay + 224)
|
||||
#define ActChgRub (ActChgCrsTT1stDay + 225)
|
||||
#define ActReqRemRub (ActChgCrsTT1stDay + 226)
|
||||
#define ActRemRub (ActChgCrsTT1stDay + 227)
|
||||
#define ActReqLnkRub (ActChgCrsTT1stDay + 228)
|
||||
|
||||
#define ActSeeRscCli_InRub (ActChgCrsTT1stDay + 228)
|
||||
#define ActRemRscCli_InRub (ActChgCrsTT1stDay + 229)
|
||||
#define ActNewRubCri (ActChgCrsTT1stDay + 230)
|
||||
#define ActReqRemRubCri (ActChgCrsTT1stDay + 231)
|
||||
#define ActRemRubCri (ActChgCrsTT1stDay + 232)
|
||||
#define ActUp_RubCri (ActChgCrsTT1stDay + 233)
|
||||
#define ActDwnRubCri (ActChgCrsTT1stDay + 234)
|
||||
#define ActChgTitRubCri (ActChgCrsTT1stDay + 235)
|
||||
#define ActChgLnkRubCri (ActChgCrsTT1stDay + 236)
|
||||
#define ActChgMinRubCri (ActChgCrsTT1stDay + 237)
|
||||
#define ActChgMaxRubCri (ActChgCrsTT1stDay + 238)
|
||||
#define ActChgWeiRubCri (ActChgCrsTT1stDay + 239)
|
||||
#define ActSeeRscCli_InRub (ActChgCrsTT1stDay + 229)
|
||||
#define ActRemRscCli_InRub (ActChgCrsTT1stDay + 230)
|
||||
#define ActNewRubCri (ActChgCrsTT1stDay + 231)
|
||||
#define ActReqRemRubCri (ActChgCrsTT1stDay + 232)
|
||||
#define ActRemRubCri (ActChgCrsTT1stDay + 233)
|
||||
#define ActUp_RubCri (ActChgCrsTT1stDay + 234)
|
||||
#define ActDwnRubCri (ActChgCrsTT1stDay + 235)
|
||||
#define ActChgTitRubCri (ActChgCrsTT1stDay + 236)
|
||||
#define ActChgLnkRubCri (ActChgCrsTT1stDay + 237)
|
||||
#define ActChgMinRubCri (ActChgCrsTT1stDay + 238)
|
||||
#define ActChgMaxRubCri (ActChgCrsTT1stDay + 239)
|
||||
#define ActChgWeiRubCri (ActChgCrsTT1stDay + 240)
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************** Files tab **********************************/
|
||||
|
@ -1778,7 +1779,7 @@
|
|||
|
||||
#define ActLst_NUM_ACTIONS (ActChgMyTT1stDay + 1)
|
||||
|
||||
#define ActLst_MAX_ACTION_COD 1973
|
||||
#define ActLst_MAX_ACTION_COD 1974
|
||||
|
||||
#define ActLst_DEFAULT_ACTION_AFTER_LOGIN ActSeeGblTL
|
||||
|
||||
|
|
|
@ -629,10 +629,19 @@ 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.103 (2023-04-25)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 22.104 (2023-05-03)"
|
||||
#define CSS_FILE "swad22.103.css"
|
||||
#define JS_FILE "swad22.49.js"
|
||||
/*
|
||||
Version 22.104: May 03, 2023 Rubrics in project. Not finished. (? lines)
|
||||
3 changes necessary in database:
|
||||
CREATE TABLE IF NOT EXISTS prj_rubrics (CrsCod INT NOT NULL,Type ENUM('tut','evl','gbl') NOT NULL,RubCod INT NOT NULL,UNIQUE INDEX(CrsCod,Type,RubCod));
|
||||
CREATE TABLE IF NOT EXISTS prj_scores (PrjCod INT NOT NULL,CriCod INT NOT NULL,Score DOUBLE PRECISION NOT NULL DEFAULT 0,UNIQUE INDEX(PrjCod,CriCod));
|
||||
ALTER TABLE prj_config DROP COLUMN RubTutCod,DROP COLUMN RubEvlCod,DROP COLUMN RubGblCod;
|
||||
If you want to use MyISAM:
|
||||
ALTER TABLE prj_rubrics ENGINE=MyISAM;
|
||||
ALTER TABLE prj_scores ENGINE=MyISAM;
|
||||
|
||||
Version 22.103: Apr 25, 2023 Fixed issue in list of rubric criteria. (337537 lines)
|
||||
Version 22.102.3: Apr 21, 2023 Changes in exams. (337538 lines)
|
||||
Version 22.102.2: Apr 21, 2023 Changes in games. (337454 lines)
|
||||
|
|
|
@ -2558,18 +2558,12 @@ mysql> DESCRIBE prj_config;
|
|||
| Field | Type | Null | Key | Default | Extra |
|
||||
+--------------+---------------+------+-----+---------+-------+
|
||||
| CrsCod | int | NO | PRI | -1 | |
|
||||
| RubTutCod | int | NO | | -1 | |
|
||||
| RubEvlCod | int | NO | | -1 | |
|
||||
| RubGblCod | int | NO | | -1 | |
|
||||
| NETCanCreate | enum('N','Y') | NO | | Y | |
|
||||
+--------------+---------------+------+-----+---------+-------+
|
||||
5 rows in set (0,00 sec)
|
||||
2 rows in set (0,00 sec)
|
||||
*/
|
||||
DB_CreateTable ("CREATE TABLE IF NOT EXISTS prj_config ("
|
||||
"CrsCod INT NOT NULL DEFAULT -1,"
|
||||
"RubTutCod INT NOT NULL DEFAULT -1,"
|
||||
"RubEvlCod INT NOT NULL DEFAULT -1,"
|
||||
"RubGblCod INT NOT NULL DEFAULT -1,"
|
||||
"NETCanCreate ENUM('N','Y') NOT NULL DEFAULT 'Y',"
|
||||
"UNIQUE INDEX(CrsCod))");
|
||||
|
||||
|
@ -2647,6 +2641,42 @@ mysql> DESCRIBE prj_reviews;
|
|||
"INDEX(PrjCod,ReviewTime),"
|
||||
"INDEX(PrjCod,Result))");
|
||||
|
||||
/***** Table prj_rubrics *****/
|
||||
/*
|
||||
mysql> DESCRIBE prj_rubrics;
|
||||
+--------+-------------------------+------+-----+---------+-------+
|
||||
| Field | Type | Null | Key | Default | Extra |
|
||||
+--------+-------------------------+------+-----+---------+-------+
|
||||
| CrsCod | int | NO | PRI | NULL | |
|
||||
| Type | enum('tut','evl','gbl') | NO | PRI | NULL | |
|
||||
| RubCod | int | NO | PRI | NULL | |
|
||||
+--------+-------------------------+------+-----+---------+-------+
|
||||
3 rows in set (0,00 sec)
|
||||
*/
|
||||
DB_CreateTable ("CREATE TABLE IF NOT EXISTS prj_rubrics ("
|
||||
"CrsCod INT NOT NULL,"
|
||||
"Type ENUM('tut','evl','gbl') NOT NULL,"
|
||||
"RubCod INT NOT NULL,"
|
||||
"UNIQUE INDEX(CrsCod,Type,RubCod))");
|
||||
|
||||
/***** Table prj_scores *****/
|
||||
/*
|
||||
mysql> DESCRIBE prj_scores;
|
||||
+--------+--------+------+-----+---------+-------+
|
||||
| Field | Type | Null | Key | Default | Extra |
|
||||
+--------+--------+------+-----+---------+-------+
|
||||
| PrjCod | int | NO | PRI | NULL | |
|
||||
| CriCod | int | NO | PRI | NULL | |
|
||||
| Score | double | NO | | 0 | |
|
||||
+--------+--------+------+-----+---------+-------+
|
||||
3 rows in set (0,00 sec)
|
||||
*/
|
||||
DB_CreateTable ("CREATE TABLE IF NOT EXISTS prj_scores ("
|
||||
"PrjCod INT NOT NULL,"
|
||||
"CriCod INT NOT NULL,"
|
||||
"Score DOUBLE PRECISION NOT NULL DEFAULT 0,"
|
||||
"UNIQUE INDEX(PrjCod,CriCod))");
|
||||
|
||||
/***** Table prj_users *****/
|
||||
/*
|
||||
mysql> DESCRIBE prj_users;
|
||||
|
@ -4112,7 +4142,7 @@ double DB_QuerySELECTDouble (const char *MsgError,
|
|||
va_list ap;
|
||||
int NumBytesPrinted;
|
||||
char *Query;
|
||||
double DoubleNum = 0.0;
|
||||
double DoubleNum = 0.0; // Default value
|
||||
|
||||
/***** Create query string *****/
|
||||
va_start (ap,fmt);
|
||||
|
|
|
@ -1227,7 +1227,7 @@ static void Inf_AsignInfoType (struct Inf_Info *Info,
|
|||
Inf_Src_t Inf_GetInfoSrcFromForm (void)
|
||||
{
|
||||
/***** Get info source for a specific type of course information
|
||||
(introduction, teaching guide, bibliography, FAQ, links or evaluation) *****/
|
||||
(introduction, teaching guide, bibliography, FAQ, links or assessment) *****/
|
||||
return (Inf_Src_t)
|
||||
Par_GetParUnsignedLong ("InfoSrc",
|
||||
0,
|
||||
|
@ -1355,7 +1355,7 @@ void Inf_GetInfoTxtFromDB (long CrsCod,Inf_Type_t InfoType,
|
|||
MYSQL_ROW row;
|
||||
|
||||
/***** Get info source for a specific type of course information
|
||||
(bibliography, FAQ, links or evaluation) from database *****/
|
||||
(bibliography, FAQ, links or assessment) from database *****/
|
||||
if (Inf_DB_GetInfoTxt (&mysql_res,CrsCod,InfoType) == 1)
|
||||
{
|
||||
/* Get info text */
|
||||
|
|
102
swad_project.c
102
swad_project.c
|
@ -55,6 +55,9 @@
|
|||
#include "swad_project_config.h"
|
||||
#include "swad_project_database.h"
|
||||
#include "swad_role.h"
|
||||
#include "swad_rubric.h"
|
||||
#include "swad_rubric_criteria.h"
|
||||
#include "swad_rubric_database.h"
|
||||
#include "swad_setting.h"
|
||||
#include "swad_string.h"
|
||||
|
||||
|
@ -188,7 +191,6 @@ static void Prj_ShowFormToFilterByDpt (const struct Prj_Projects *Projects);
|
|||
|
||||
static bool Prj_CheckIfICanViewProjectFiles (long PrjCod);
|
||||
|
||||
static void Prj_PutCurrentPars (void *Projects);
|
||||
static void Prj_PutParAssign (unsigned Assign);
|
||||
static void Prj_PutParHidden (unsigned Hidden);
|
||||
static void Prj_PutParFaulti (unsigned Faulti);
|
||||
|
@ -310,7 +312,7 @@ static void Prj_PutIconOffLockedUnlocked (const struct Prj_Project *Prj);
|
|||
static Prj_ReviewStatus_t Prj_GetParReviewStatus (void);
|
||||
|
||||
//------------------------------- Rubrics -------------------------------------
|
||||
static void Prj_ShowRubrics (long PrjCod);
|
||||
static void Prj_ShowRubrics (struct Prj_Projects *Projects);
|
||||
static bool Prj_CheckIfICanViewRubric (long PrjCod,PrjCfg_Rubric_t WhichRubric);
|
||||
static bool Prj_CheckIfICanFillRubric (long PrjCod,PrjCfg_Rubric_t WhichRubric);
|
||||
|
||||
|
@ -919,7 +921,7 @@ bool Prj_CheckIfICanViewProjectAssessment (long PrjCod)
|
|||
/********************** Put parameters used in projects **********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Prj_PutCurrentPars (void *Projects)
|
||||
void Prj_PutCurrentPars (void *Projects)
|
||||
{
|
||||
if (Projects)
|
||||
Prj_PutPars (&((struct Prj_Projects *) Projects)->Filter,
|
||||
|
@ -1357,7 +1359,7 @@ void Prj_ShowBoxWithOneProject (struct Prj_Projects *Projects)
|
|||
Brw_ShowFileBrowserProject (Projects->Prj.PrjCod);
|
||||
|
||||
/***** Show project rubrics *****/
|
||||
Prj_ShowRubrics (Projects->Prj.PrjCod);
|
||||
Prj_ShowRubrics (Projects);
|
||||
|
||||
/***** End box *****/
|
||||
Box_BoxEnd ();
|
||||
|
@ -3324,8 +3326,8 @@ static void Prj_GetListProjects (struct Prj_Projects *Projects)
|
|||
|
||||
void Prj_GetProjectDataByCod (struct Prj_Project *Prj)
|
||||
{
|
||||
extern const char *Prj_Proposal_DB[Prj_NUM_PROPOSAL_TYPES];
|
||||
extern const char *Prj_ReviewStatus_DB[Prj_NUM_REVIEW_STATUS];
|
||||
extern const char *Prj_DB_Proposal[Prj_NUM_PROPOSAL_TYPES];
|
||||
extern const char *Prj_DB_ReviewStatus[Prj_NUM_REVIEW_STATUS];
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
Prj_Proposal_t Proposal;
|
||||
|
@ -3367,7 +3369,7 @@ void Prj_GetProjectDataByCod (struct Prj_Project *Prj)
|
|||
for (Proposal = (Prj_Proposal_t) 0;
|
||||
Proposal <= (Prj_Proposal_t) (Prj_NUM_PROPOSAL_TYPES - 1);
|
||||
Proposal++)
|
||||
if (!strcmp (Prj_Proposal_DB[Proposal],row[7]))
|
||||
if (!strcmp (Prj_DB_Proposal[Proposal],row[7]))
|
||||
{
|
||||
Prj->Proposal = Proposal;
|
||||
break;
|
||||
|
@ -3392,7 +3394,7 @@ void Prj_GetProjectDataByCod (struct Prj_Project *Prj)
|
|||
for (ReviewStatus = (Prj_ReviewStatus_t) 0;
|
||||
ReviewStatus <= (Prj_ReviewStatus_t) (Prj_NUM_REVIEW_STATUS - 1);
|
||||
ReviewStatus++)
|
||||
if (!strcmp (Prj_ReviewStatus_DB[ReviewStatus],row[15]))
|
||||
if (!strcmp (Prj_DB_ReviewStatus[ReviewStatus],row[15]))
|
||||
{
|
||||
Prj->Review.Status = ReviewStatus;
|
||||
break;
|
||||
|
@ -4473,11 +4475,12 @@ static Prj_ReviewStatus_t Prj_GetParReviewStatus (void)
|
|||
/************************ Show rubrics in a project **************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Prj_ShowRubrics (long PrjCod)
|
||||
static void Prj_ShowRubrics (struct Prj_Projects *Projects)
|
||||
{
|
||||
extern const char *Hlp_ASSESSMENT_Projects;
|
||||
extern const char *Txt_Rubrics;
|
||||
extern const char *Txt_PROJECT_RUBRIC[PrjCfg_NUM_RUBRICS];
|
||||
struct Rub_Rubric Rubric;
|
||||
PrjCfg_Rubric_t WhichRubric;
|
||||
|
||||
/***** Begin box *****/
|
||||
|
@ -4485,20 +4488,32 @@ static void Prj_ShowRubrics (long PrjCod)
|
|||
NULL,NULL,
|
||||
Hlp_ASSESSMENT_Projects,Box_NOT_CLOSABLE);
|
||||
|
||||
/***** Begin table *****/
|
||||
HTM_TABLE_BeginWideMarginPadding (5);
|
||||
|
||||
/***** Rubrics *****/
|
||||
for (WhichRubric = (PrjCfg_Rubric_t) 0;
|
||||
for (WhichRubric = (PrjCfg_Rubric_t) 1;
|
||||
WhichRubric <= (PrjCfg_Rubric_t) (PrjCfg_NUM_RUBRICS - 1);
|
||||
WhichRubric++)
|
||||
if (Prj_CheckIfICanViewRubric (Projects->Prj.PrjCod,WhichRubric))
|
||||
{
|
||||
if (Prj_CheckIfICanViewRubric (PrjCod,WhichRubric))
|
||||
{
|
||||
Ale_ShowAlert (Ale_INFO,Txt_PROJECT_RUBRIC[WhichRubric]);
|
||||
Ale_ShowAlert (Ale_SUCCESS,"Can see");
|
||||
if (Prj_CheckIfICanFillRubric (PrjCod,WhichRubric))
|
||||
Ale_ShowAlert (Ale_SUCCESS,"Can fill");
|
||||
}
|
||||
/***** Get rubric data *****/
|
||||
Rub_RubricConstructor (&Rubric);
|
||||
Rubric.RubCod = Projects->Config.RubCod[WhichRubric];
|
||||
Rub_GetRubricDataByCod (&Rubric);
|
||||
|
||||
/***** Show this rubric ready to fill it *****/
|
||||
Rub_ShowRubricInProject (Projects,&Rubric,
|
||||
Txt_PROJECT_RUBRIC[WhichRubric],
|
||||
Prj_CheckIfICanFillRubric (Projects->Prj.PrjCod,WhichRubric));
|
||||
|
||||
/***** Free memory used for rubric *****/
|
||||
Rub_RubricDestructor (&Rubric);
|
||||
}
|
||||
|
||||
/***** End table *****/
|
||||
HTM_TABLE_End ();
|
||||
|
||||
/***** End box *****/
|
||||
Box_BoxEnd ();
|
||||
}
|
||||
|
@ -4515,6 +4530,8 @@ static bool Prj_CheckIfICanViewRubric (long PrjCod,PrjCfg_Rubric_t WhichRubric)
|
|||
case Rol_NET:
|
||||
switch (WhichRubric)
|
||||
{
|
||||
case PrjCfg_RUBRIC_ERR:
|
||||
return false;
|
||||
case PrjCfg_RUBRIC_TUT:
|
||||
case PrjCfg_RUBRIC_EVL:
|
||||
return ((Prj_GetMyRolesInProject (PrjCod) & (1 << Prj_ROLE_TUT | // I am a tutor
|
||||
|
@ -4540,6 +4557,8 @@ static bool Prj_CheckIfICanFillRubric (long PrjCod,PrjCfg_Rubric_t WhichRubric)
|
|||
case Rol_NET:
|
||||
switch (WhichRubric)
|
||||
{
|
||||
case PrjCfg_RUBRIC_ERR:
|
||||
return false;
|
||||
case PrjCfg_RUBRIC_TUT:
|
||||
return ((Prj_GetMyRolesInProject (PrjCod) & (1 << Prj_ROLE_TUT)) != 0); // I am a tutor
|
||||
case PrjCfg_RUBRIC_EVL:
|
||||
|
@ -4556,6 +4575,52 @@ static bool Prj_CheckIfICanFillRubric (long PrjCod,PrjCfg_Rubric_t WhichRubric)
|
|||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************* Change the score of a criterion in a project ******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Prj_ChangeCriterionScore (void)
|
||||
{
|
||||
struct Prj_Projects Projects;
|
||||
long CriCod;
|
||||
double Score;
|
||||
long RubCod;
|
||||
PrjCfg_Rubric_t WhichRubric;
|
||||
|
||||
/***** Reset projects *****/
|
||||
Prj_ResetPrjsAndReadConfig (&Projects);
|
||||
|
||||
/***** Allocate memory for the project *****/
|
||||
Prj_AllocMemProject (&Projects.Prj);
|
||||
|
||||
/***** Get parameters *****/
|
||||
Prj_GetPars (&Projects);
|
||||
Projects.Prj.PrjCod = ParCod_GetAndCheckPar (ParCod_Prj);
|
||||
CriCod = ParCod_GetAndCheckPar (ParCod_Cri);
|
||||
Score = RubCri_GetParScore ();
|
||||
|
||||
/***** Get data of the project from database *****/
|
||||
Prj_GetProjectDataByCod (&Projects.Prj);
|
||||
|
||||
/***** Get which rubric match this criterion *****/
|
||||
if ((RubCod = Rub_DB_GetRubCodFromCriCod (CriCod)) <= 0)
|
||||
Err_WrongRubricExit ();
|
||||
if ((WhichRubric = Prj_DB_GetWichRubricFromRubCod (RubCod)) == PrjCfg_RUBRIC_ERR)
|
||||
Err_WrongRubricExit ();
|
||||
|
||||
/***** Update review *****/
|
||||
if (Prj_CheckIfICanFillRubric (Projects.Prj.PrjCod,WhichRubric))
|
||||
Prj_DB_UpdateScore (Projects.Prj.PrjCod,CriCod,Score);
|
||||
else
|
||||
Err_NoPermission ();
|
||||
|
||||
/***** Free memory of the project *****/
|
||||
Prj_FreeMemProject (&Projects.Prj);
|
||||
|
||||
/***** Show projects again *****/
|
||||
Prj_ShowProjects (&Projects);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********************** Remove all projects in a course **********************/
|
||||
/*****************************************************************************/
|
||||
|
@ -4571,6 +4636,9 @@ void Prj_RemoveCrsProjects (long CrsCod)
|
|||
/***** Remove configuration of projects in the course *****/
|
||||
Prj_DB_RemoveConfigOfCrsPrjs (CrsCod);
|
||||
|
||||
/***** Remove associations of rubrics to projects in the course *****/
|
||||
Prj_DB_RemoveRubricsOfCrsPrjs (CrsCod);
|
||||
|
||||
/***** Remove projects *****/
|
||||
Prj_DB_RemoveCrsPrjs (CrsCod);
|
||||
}
|
||||
|
|
|
@ -214,6 +214,7 @@ void Prj_ShowTableSelectedPrjs (void);
|
|||
bool Prj_CheckIfICanViewProjectDocuments (long PrjCod);
|
||||
bool Prj_CheckIfICanViewProjectAssessment (long PrjCod);
|
||||
|
||||
void Prj_PutCurrentPars (void *Projects);
|
||||
void Prj_PutPars (struct Prj_Filter *Filter,
|
||||
Prj_Order_t Order,
|
||||
unsigned NumPage,
|
||||
|
@ -271,6 +272,8 @@ void Prj_UnloProjectEdition (void);
|
|||
|
||||
void Prj_ChangeReviewStatus (void);
|
||||
|
||||
void Prj_ChangeCriterionScore (void);
|
||||
|
||||
void Prj_RemoveCrsProjects (long CrsCod);
|
||||
void Prj_RemoveUsrFromProjects (long UsrCod);
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
/*****************************************************************************/
|
||||
|
||||
#include <stdbool.h> // For boolean type
|
||||
#include <string.h> // For string functions
|
||||
|
||||
#include "swad_action_list.h"
|
||||
#include "swad_alert.h"
|
||||
|
@ -56,12 +57,6 @@ static const char *PrjCfg_RubricIDs[PrjCfg_NUM_RUBRICS] =
|
|||
|
||||
extern struct Globals Gbl;
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************* Private global variables **************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
// static struct Rub_Rubric PrjCfg_Rubrics[PrjCfg_NUM_RUBRICS];
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** Private prototypes ****************************/
|
||||
/*****************************************************************************/
|
||||
|
@ -74,6 +69,8 @@ static void PrjCfg_ShowFormRubric (const struct PrjCfg_Config *Config,
|
|||
|
||||
static void PrjCfg_GetConfigDataFromRow (MYSQL_RES *mysql_res,
|
||||
struct PrjCfg_Config *Config);
|
||||
static void PrjCfg_GetRubricDataFromRow (MYSQL_RES *mysql_res,
|
||||
struct PrjCfg_Config *Config);
|
||||
static bool PrjCfg_GetIfNETCanCreateFromForm (void);
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -83,19 +80,28 @@ static bool PrjCfg_GetIfNETCanCreateFromForm (void);
|
|||
void PrjCfg_GetConfig (struct PrjCfg_Config *Config)
|
||||
{
|
||||
MYSQL_RES *mysql_res;
|
||||
unsigned NumRubrics;
|
||||
unsigned NumRub;
|
||||
PrjCfg_Rubric_t WhichRubric;
|
||||
|
||||
/***** Get configuration of projects for current course from database *****/
|
||||
Config->NETCanCreate = PrjCfg_NET_CAN_CREATE_DEFAULT;
|
||||
if (Prj_DB_GetConfig (&mysql_res))
|
||||
PrjCfg_GetConfigDataFromRow (mysql_res,Config);
|
||||
else
|
||||
{
|
||||
for (WhichRubric = (PrjCfg_Rubric_t) 0;
|
||||
|
||||
/***** Free structure that stores the query result *****/
|
||||
DB_FreeMySQLResult (&mysql_res);
|
||||
|
||||
/***** Get project rubrics for current course from database *****/
|
||||
for (WhichRubric = (PrjCfg_Rubric_t) 1;
|
||||
WhichRubric <= (PrjCfg_Rubric_t) (PrjCfg_NUM_RUBRICS - 1);
|
||||
WhichRubric++)
|
||||
Config->RubCod[WhichRubric] = -1L;
|
||||
Config->NETCanCreate = PrjCfg_NET_CAN_CREATE_DEFAULT;
|
||||
}
|
||||
NumRubrics = Prj_DB_GetRubrics (&mysql_res);
|
||||
for (NumRub = 0;
|
||||
NumRub < NumRubrics;
|
||||
NumRub++)
|
||||
PrjCfg_GetRubricDataFromRow (mysql_res,Config);
|
||||
|
||||
/***** Free structure that stores the query result *****/
|
||||
DB_FreeMySQLResult (&mysql_res);
|
||||
|
@ -174,7 +180,7 @@ static void PrjCfg_ShowFormRubrics (const struct PrjCfg_Config *Config)
|
|||
Rub_GetListRubrics (&Rubrics);
|
||||
|
||||
/***** Rubric selectors *****/
|
||||
for (WhichRubric = (PrjCfg_Rubric_t) 0;
|
||||
for (WhichRubric = (PrjCfg_Rubric_t) 1;
|
||||
WhichRubric <= (PrjCfg_Rubric_t) (PrjCfg_NUM_RUBRICS - 1);
|
||||
WhichRubric++)
|
||||
PrjCfg_ShowFormRubric (Config,&Rubrics,WhichRubric);
|
||||
|
@ -244,24 +250,56 @@ static void PrjCfg_GetConfigDataFromRow (MYSQL_RES *mysql_res,
|
|||
struct PrjCfg_Config *Config)
|
||||
{
|
||||
MYSQL_ROW row;
|
||||
|
||||
/***** Get row *****/
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
/*
|
||||
row[0] NETCanCreate
|
||||
*/
|
||||
/***** Get whether non-editing teachers can create new projects or not (row[0]) *****/
|
||||
Config->NETCanCreate = (row[0][0] == 'Y');
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************** Get project rubric from a database row *******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void PrjCfg_GetRubricDataFromRow (MYSQL_RES *mysql_res,
|
||||
struct PrjCfg_Config *Config)
|
||||
{
|
||||
MYSQL_ROW row;
|
||||
PrjCfg_Rubric_t WhichRubric;
|
||||
|
||||
/***** Get row *****/
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
/*
|
||||
row[0] RubTutCod
|
||||
row[1] RubEvlCod
|
||||
row[2] RubGblCod
|
||||
row[3] NETCanCreate
|
||||
row[0] Type
|
||||
row[1] RubCod
|
||||
*/
|
||||
/***** Get rubric codes (row[0], row[1], row[2] *****/
|
||||
for (WhichRubric = (PrjCfg_Rubric_t) 0;
|
||||
/***** Get rubric type (row[0]) *****/
|
||||
WhichRubric = PrjCfg_GetRubricFromString (row[0]);
|
||||
|
||||
/***** Get rubric code (row[1]) *****/
|
||||
Config->RubCod[WhichRubric] = Str_ConvertStrCodToLongCod (row[1]);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********************** Convert from string to type **************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
PrjCfg_Rubric_t PrjCfg_GetRubricFromString (const char *Str)
|
||||
{
|
||||
extern const char *Prj_DB_WhichRubric[PrjCfg_NUM_RUBRICS];
|
||||
PrjCfg_Rubric_t WhichRubric;
|
||||
|
||||
/***** Compare string with all string types *****/
|
||||
for (WhichRubric = (PrjCfg_Rubric_t) 1;
|
||||
WhichRubric <= (PrjCfg_Rubric_t) (PrjCfg_NUM_RUBRICS - 1);
|
||||
WhichRubric++)
|
||||
Config->RubCod[WhichRubric] = Str_ConvertStrCodToLongCod (row[WhichRubric]);
|
||||
if (!strcmp (Prj_DB_WhichRubric[WhichRubric],Str))
|
||||
return WhichRubric;
|
||||
|
||||
/***** Get whether non-editing teachers can create new projects or not (row[3]) *****/
|
||||
Config->NETCanCreate = (row[3][0] == 'Y');
|
||||
return PrjCfg_RUBRIC_ERR;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -307,17 +345,18 @@ void PrjCfg_ReceiveConfig (void)
|
|||
/***** Reset projects *****/
|
||||
Prj_ResetPrjsAndReadConfig (&Projects);
|
||||
|
||||
/***** Get non-editing teachers can create new projects or not *****/
|
||||
Projects.Config.NETCanCreate = PrjCfg_GetIfNETCanCreateFromForm ();
|
||||
|
||||
/***** Get rubric codes *****/
|
||||
for (WhichRubric = (PrjCfg_Rubric_t) 0;
|
||||
for (WhichRubric = (PrjCfg_Rubric_t) 1;
|
||||
WhichRubric <= (PrjCfg_Rubric_t) (PrjCfg_NUM_RUBRICS - 1);
|
||||
WhichRubric++)
|
||||
Projects.Config.RubCod[WhichRubric] = Par_GetParLong (PrjCfg_RubricIDs[WhichRubric]);
|
||||
|
||||
/***** Get non-editing teachers can create new projects or not *****/
|
||||
Projects.Config.NETCanCreate = PrjCfg_GetIfNETCanCreateFromForm ();
|
||||
|
||||
/***** Update database *****/
|
||||
Prj_DB_UpdateConfig (&Projects);
|
||||
Prj_DB_UpdateRubrics (&Projects);
|
||||
|
||||
/***** Show confirmation message *****/
|
||||
Ale_ShowAlert (Ale_SUCCESS,Txt_The_configuration_of_the_projects_has_been_updated);
|
||||
|
|
|
@ -35,18 +35,19 @@
|
|||
|
||||
#define PrjCfg_NET_CAN_CREATE_DEFAULT true
|
||||
|
||||
#define PrjCfg_NUM_RUBRICS 3
|
||||
#define PrjCfg_NUM_RUBRICS 4
|
||||
typedef enum
|
||||
{
|
||||
PrjCfg_RUBRIC_TUT,
|
||||
PrjCfg_RUBRIC_EVL,
|
||||
PrjCfg_RUBRIC_GBL,
|
||||
PrjCfg_RUBRIC_ERR = 0,
|
||||
PrjCfg_RUBRIC_TUT = 1,
|
||||
PrjCfg_RUBRIC_EVL = 2,
|
||||
PrjCfg_RUBRIC_GBL = 3,
|
||||
} PrjCfg_Rubric_t;
|
||||
|
||||
struct PrjCfg_Config
|
||||
{
|
||||
long RubCod[PrjCfg_NUM_RUBRICS];
|
||||
bool NETCanCreate;
|
||||
long RubCod[PrjCfg_NUM_RUBRICS];
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -57,6 +58,7 @@ void PrjCfg_GetConfig (struct PrjCfg_Config *Config);
|
|||
|
||||
bool PrjCfg_CheckIfICanConfig (void);
|
||||
void PrjCfg_ShowFormConfig (void);
|
||||
PrjCfg_Rubric_t PrjCfg_GetRubricFromString (const char *Str);
|
||||
void PrjCfg_ReceiveConfig (void);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -44,8 +44,16 @@ extern struct Globals Gbl;
|
|||
/************************** Public constants and types ***********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/***** Enum field in database for type of rubric *****/
|
||||
const char *Prj_DB_WhichRubric[PrjCfg_NUM_RUBRICS] =
|
||||
{
|
||||
[PrjCfg_RUBRIC_TUT] = "tut",
|
||||
[PrjCfg_RUBRIC_EVL] = "evl",
|
||||
[PrjCfg_RUBRIC_GBL] = "gbl",
|
||||
};
|
||||
|
||||
/***** Enum field in database for types of proposal *****/
|
||||
const char *Prj_Proposal_DB[Prj_NUM_PROPOSAL_TYPES] =
|
||||
const char *Prj_DB_Proposal[Prj_NUM_PROPOSAL_TYPES] =
|
||||
{
|
||||
[Prj_PROPOSAL_NEW ] = "new",
|
||||
[Prj_PROPOSAL_MODIFIED ] = "modified",
|
||||
|
@ -53,7 +61,7 @@ const char *Prj_Proposal_DB[Prj_NUM_PROPOSAL_TYPES] =
|
|||
};
|
||||
|
||||
/***** Enum field in database for review status *****/
|
||||
const char *Prj_ReviewStatus_DB[Prj_NUM_REVIEW_STATUS] =
|
||||
const char *Prj_DB_ReviewStatus[Prj_NUM_REVIEW_STATUS] =
|
||||
{
|
||||
[Prj_UNREVIEWED] = "unreviewed",
|
||||
[Prj_UNAPPROVED] = "unapproved",
|
||||
|
@ -115,7 +123,7 @@ long Prj_DB_CreateProject (const struct Prj_Project *Prj)
|
|||
Prj->Assigned == Prj_ASSIGNED ? 'Y' :
|
||||
'N',
|
||||
Prj->NumStds,
|
||||
Prj_Proposal_DB[Prj->Proposal],
|
||||
Prj_DB_Proposal[Prj->Proposal],
|
||||
Prj->CreatTime,
|
||||
Prj->ModifTime,
|
||||
Prj->Title,
|
||||
|
@ -123,7 +131,7 @@ long Prj_DB_CreateProject (const struct Prj_Project *Prj)
|
|||
Prj->Knowledge,
|
||||
Prj->Materials,
|
||||
Prj->URL,
|
||||
Prj_ReviewStatus_DB[Prj->Review.Status],
|
||||
Prj_DB_ReviewStatus[Prj->Review.Status],
|
||||
Prj->Review.Time,
|
||||
Prj->Review.Txt);
|
||||
}
|
||||
|
@ -155,7 +163,7 @@ void Prj_DB_UpdateProject (const struct Prj_Project *Prj)
|
|||
Prj->Assigned == Prj_ASSIGNED ? 'Y' :
|
||||
'N',
|
||||
Prj->NumStds,
|
||||
Prj_Proposal_DB[Prj->Proposal],
|
||||
Prj_DB_Proposal[Prj->Proposal],
|
||||
Prj->ModifTime,
|
||||
Prj->Title,
|
||||
Prj->Description,
|
||||
|
@ -212,12 +220,30 @@ void Prj_DB_UpdateReview (const struct Prj_Project *Prj)
|
|||
"ReviewTxt='%s'"
|
||||
" WHERE PrjCod=%ld"
|
||||
" AND CrsCod=%ld", // Extra check
|
||||
Prj_ReviewStatus_DB[Prj->Review.Status],
|
||||
Prj_DB_ReviewStatus[Prj->Review.Status],
|
||||
Prj->Review.Txt,
|
||||
Prj->PrjCod,
|
||||
Gbl.Hierarchy.Crs.CrsCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/**************** Update score of a criterion in a project *******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Prj_DB_UpdateScore (long PrjCod,long CriCod,double Score)
|
||||
{
|
||||
Str_SetDecimalPointToUS (); // To write the decimal point as a dot
|
||||
DB_QueryUPDATE ("can not update score",
|
||||
"UPDATE prj_scores"
|
||||
" SET Score=%.15lg"
|
||||
" WHERE PrjCod=%ld"
|
||||
" AND CriCod=%ld",
|
||||
Score,
|
||||
PrjCod,
|
||||
CriCod);
|
||||
Str_SetDecimalPointToLocal (); // Return to local system
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************** Get projects *******************************/
|
||||
/*****************************************************************************/
|
||||
|
@ -301,38 +327,38 @@ unsigned Prj_DB_GetListProjects (MYSQL_RES **mysql_res,
|
|||
{
|
||||
case (1 << Prj_UNREVIEWED): // Unreviewed projects
|
||||
if (asprintf (&ReviewSubQuery," AND prj_projects.ReviewStatus='%s'",
|
||||
Prj_ReviewStatus_DB[Prj_UNREVIEWED]) < 0)
|
||||
Prj_DB_ReviewStatus[Prj_UNREVIEWED]) < 0)
|
||||
Err_NotEnoughMemoryExit ();
|
||||
break;
|
||||
case (1 << Prj_UNAPPROVED): // Unapproved projects
|
||||
if (asprintf (&ReviewSubQuery," AND prj_projects.ReviewStatus='%s'",
|
||||
Prj_ReviewStatus_DB[Prj_UNAPPROVED]) < 0)
|
||||
Prj_DB_ReviewStatus[Prj_UNAPPROVED]) < 0)
|
||||
Err_NotEnoughMemoryExit ();
|
||||
break;
|
||||
case (1 << Prj_APPROVED): // Approved projects
|
||||
if (asprintf (&ReviewSubQuery," AND prj_projects.ReviewStatus='%s'",
|
||||
Prj_ReviewStatus_DB[Prj_APPROVED ]) < 0)
|
||||
Prj_DB_ReviewStatus[Prj_APPROVED ]) < 0)
|
||||
Err_NotEnoughMemoryExit ();
|
||||
break;
|
||||
case (1 << Prj_UNREVIEWED |
|
||||
1 << Prj_UNAPPROVED): // Unreviewed and unapproved projects
|
||||
if (asprintf (&ReviewSubQuery," AND prj_projects.ReviewStatus IN ('%s','%s')",
|
||||
Prj_ReviewStatus_DB[Prj_UNREVIEWED],
|
||||
Prj_ReviewStatus_DB[Prj_UNAPPROVED]) < 0)
|
||||
Prj_DB_ReviewStatus[Prj_UNREVIEWED],
|
||||
Prj_DB_ReviewStatus[Prj_UNAPPROVED]) < 0)
|
||||
Err_NotEnoughMemoryExit ();
|
||||
break;
|
||||
case (1 << Prj_UNREVIEWED |
|
||||
1 << Prj_APPROVED): // Unreviewed and approved projects
|
||||
if (asprintf (&ReviewSubQuery," AND prj_projects.ReviewStatus IN ('%s','%s')",
|
||||
Prj_ReviewStatus_DB[Prj_UNREVIEWED],
|
||||
Prj_ReviewStatus_DB[Prj_APPROVED ]) < 0)
|
||||
Prj_DB_ReviewStatus[Prj_UNREVIEWED],
|
||||
Prj_DB_ReviewStatus[Prj_APPROVED ]) < 0)
|
||||
Err_NotEnoughMemoryExit ();
|
||||
break;
|
||||
case (1 << Prj_UNAPPROVED |
|
||||
1 << Prj_APPROVED): // Unapproved and approved projects
|
||||
if (asprintf (&ReviewSubQuery," AND prj_projects.ReviewStatus IN ('%s','%s')",
|
||||
Prj_ReviewStatus_DB[Prj_UNAPPROVED],
|
||||
Prj_ReviewStatus_DB[Prj_APPROVED ]) < 0)
|
||||
Prj_DB_ReviewStatus[Prj_UNAPPROVED],
|
||||
Prj_DB_ReviewStatus[Prj_APPROVED ]) < 0)
|
||||
Err_NotEnoughMemoryExit ();
|
||||
break;
|
||||
default: // All projects
|
||||
|
@ -595,8 +621,8 @@ unsigned Prj_DB_GetPrjDataToCheckFaults (MYSQL_RES **mysql_res,long PrjCod)
|
|||
"ReviewStatus<>'%s' AND ModifTime>ReviewTime" // row[5] = 0 / 1
|
||||
" FROM prj_projects"
|
||||
" WHERE PrjCod=%ld",
|
||||
Prj_ReviewStatus_DB[Prj_UNAPPROVED],
|
||||
Prj_ReviewStatus_DB[Prj_UNREVIEWED],
|
||||
Prj_DB_ReviewStatus[Prj_UNAPPROVED],
|
||||
Prj_DB_ReviewStatus[Prj_UNREVIEWED],
|
||||
PrjCod);
|
||||
}
|
||||
|
||||
|
@ -675,6 +701,21 @@ long Prj_DB_GetCrsOfPrj (long PrjCod)
|
|||
PrjCod); // Project found...
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********************* Get criteria in a given rubric ************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
double Prj_DB_GetScore (long PrjCod,long CriCod)
|
||||
{
|
||||
return DB_QuerySELECTDouble ("can not get score",
|
||||
"SELECT Score"
|
||||
" FROM prj_scores"
|
||||
" WHERE PrjCod=%ld"
|
||||
" AND CriCod=%ld",
|
||||
PrjCod,
|
||||
CriCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************** Get number of courses with projects ********************/
|
||||
/*****************************************************************************/
|
||||
|
@ -902,6 +943,18 @@ void Prj_DB_RemoveConfigOfCrsPrjs (long CrsCod)
|
|||
CrsCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********** Remove associations of rubrics to projects in the course *********/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Prj_DB_RemoveRubricsOfCrsPrjs (long CrsCod)
|
||||
{
|
||||
DB_QueryDELETE ("can not remove rubrics of projects in a course",
|
||||
"DELETE FROM prj_rubrics"
|
||||
" WHERE CrsCod=%ld",
|
||||
CrsCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************* Remove project ******************************/
|
||||
/*****************************************************************************/
|
||||
|
@ -936,17 +989,35 @@ void Prj_DB_UpdateConfig (const struct Prj_Projects *Projects)
|
|||
{
|
||||
DB_QueryREPLACE ("can not save configuration of projects",
|
||||
"REPLACE INTO prj_config"
|
||||
" (CrsCod,RubTutCod,RubEvlCod,RubGblCod,NETCanCreate)"
|
||||
" (CrsCod,NETCanCreate)"
|
||||
" VALUES"
|
||||
" (%ld,%ld,%ld,%ld,'%c')",
|
||||
" (%ld,'%c')",
|
||||
Gbl.Hierarchy.Crs.CrsCod,
|
||||
Projects->Config.RubCod[PrjCfg_RUBRIC_TUT],
|
||||
Projects->Config.RubCod[PrjCfg_RUBRIC_EVL],
|
||||
Projects->Config.RubCod[PrjCfg_RUBRIC_GBL],
|
||||
Projects->Config.NETCanCreate ? 'Y' :
|
||||
'N');
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********* Update rubrics associated to projects for current course **********/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Prj_DB_UpdateRubrics (const struct Prj_Projects *Projects)
|
||||
{
|
||||
PrjCfg_Rubric_t WhichRubric;
|
||||
|
||||
for (WhichRubric = (PrjCfg_Rubric_t) 1;
|
||||
WhichRubric <= (PrjCfg_Rubric_t) (PrjCfg_NUM_RUBRICS - 1);
|
||||
WhichRubric++)
|
||||
DB_QueryREPLACE ("can not save configuration of projects",
|
||||
"REPLACE INTO prj_rubrics"
|
||||
" (CrsCod,Type,RubCod)"
|
||||
" VALUES"
|
||||
" (%ld,'%s',%ld)",
|
||||
Gbl.Hierarchy.Crs.CrsCod,
|
||||
Prj_DB_WhichRubric[WhichRubric],
|
||||
Projects->Config.RubCod[WhichRubric]);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************** Get configuration of projects for current course *************/
|
||||
/*****************************************************************************/
|
||||
|
@ -955,11 +1026,42 @@ unsigned Prj_DB_GetConfig (MYSQL_RES **mysql_res)
|
|||
{
|
||||
return (unsigned)
|
||||
DB_QuerySELECT (mysql_res,"can not get project configuration",
|
||||
"SELECT RubTutCod," // row[0]
|
||||
"RubEvlCod," // row[1]
|
||||
"RubGblCod," // row[2]
|
||||
"NETCanCreate" // row[3]
|
||||
"SELECT NETCanCreate" // row[0]
|
||||
" FROM prj_config"
|
||||
" WHERE CrsCod=%ld",
|
||||
Gbl.Hierarchy.Crs.CrsCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************* Get project rubrics for current course ******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
unsigned Prj_DB_GetRubrics (MYSQL_RES **mysql_res)
|
||||
{
|
||||
return (unsigned)
|
||||
DB_QuerySELECT (mysql_res,"can not get project rubrics",
|
||||
"SELECT Type," // row[0]
|
||||
"RubCod" // row[1]
|
||||
" FROM prj_rubrics"
|
||||
" WHERE CrsCod=%ld",
|
||||
Gbl.Hierarchy.Crs.CrsCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*** Get type of project rubric in the current course given a rubric code ****/
|
||||
/*****************************************************************************/
|
||||
|
||||
PrjCfg_Rubric_t Prj_DB_GetWichRubricFromRubCod (long RubCod)
|
||||
{
|
||||
char StrTypeDB[32];
|
||||
|
||||
DB_QuerySELECTString (StrTypeDB,sizeof (StrTypeDB) - 1,
|
||||
"can not get which rubric",
|
||||
"SELECT Type" // row[0]
|
||||
" FROM prj_rubrics"
|
||||
" WHERE CrsCod=%ld"
|
||||
" AND RubCod=%ld",
|
||||
Gbl.Hierarchy.Crs.CrsCod,
|
||||
RubCod);
|
||||
return PrjCfg_GetRubricFromString (StrTypeDB);
|
||||
}
|
||||
|
|
|
@ -41,6 +41,7 @@ void Prj_DB_UpdateProject (const struct Prj_Project *Prj);
|
|||
void Prj_DB_AddUsrToPrj (long PrjCod,Prj_RoleInProject_t RoleInProject,long UsrCod);
|
||||
void Prj_DB_HideOrUnhideProject (long PrjCod,bool Hide);
|
||||
void Prj_DB_UpdateReview (const struct Prj_Project *Prj);
|
||||
void Prj_DB_UpdateScore (long PrjCod,long CriCod,double Score);
|
||||
|
||||
unsigned Prj_DB_GetListProjects (MYSQL_RES **mysql_res,
|
||||
const struct Prj_Projects *Projects,
|
||||
|
@ -53,6 +54,7 @@ unsigned Prj_DB_GetUsrsInPrj (MYSQL_RES **mysql_res,
|
|||
long PrjCod,Prj_RoleInProject_t RoleInProject);
|
||||
unsigned Prj_DB_GetMyRolesInPrj (MYSQL_RES **mysql_res,long PrjCod);
|
||||
long Prj_DB_GetCrsOfPrj (long PrjCod);
|
||||
double Prj_DB_GetScore (long PrjCod,long CriCod);
|
||||
unsigned Prj_DB_GetNumCoursesWithProjects (HieLvl_Level_t Scope);
|
||||
unsigned Prj_DB_GetNumProjects (HieLvl_Level_t Scope);
|
||||
|
||||
|
@ -61,12 +63,16 @@ void Prj_DB_RemoveUsrFromProjects (long UsrCod);
|
|||
void Prj_DB_RemoveUsrsFromPrj (long PrjCod);
|
||||
void Prj_DB_RemoveUsrsFromCrsPrjs (long CrsCod);
|
||||
void Prj_DB_RemoveConfigOfCrsPrjs (long CrsCod);
|
||||
void Prj_DB_RemoveRubricsOfCrsPrjs (long CrsCod);
|
||||
void Prj_DB_RemovePrj (long PrjCod);
|
||||
void Prj_DB_RemoveCrsPrjs (long CrsCod);
|
||||
|
||||
//----------------------------- Configuration ---------------------------------
|
||||
|
||||
void Prj_DB_UpdateConfig (const struct Prj_Projects *Projects);
|
||||
void Prj_DB_UpdateRubrics (const struct Prj_Projects *Projects);
|
||||
unsigned Prj_DB_GetConfig (MYSQL_RES **mysql_res);
|
||||
unsigned Prj_DB_GetRubrics (MYSQL_RES **mysql_res);
|
||||
PrjCfg_Rubric_t Prj_DB_GetWichRubricFromRubCod (long RubCod);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -63,9 +63,6 @@ static void Rub_PutIconToCreateNewRubric (struct Rub_Rubrics *Rubrics);
|
|||
static void Prg_PutIconToViewResourceClipboard (void);
|
||||
static void Rub_PutParsToCreateNewRubric (void *Rubrics);
|
||||
|
||||
static void Rub_ShowRubricMainData (struct Rub_Rubrics *Rubrics,
|
||||
bool ShowOnlyThisRubric);
|
||||
|
||||
static void Rub_PutIconsViewingOneRubric (void *Rubrics);
|
||||
static void Rub_PutIconsEditingOneRubric (void *Rubrics);
|
||||
static void Rub_PutIconsToRemEditOneRubric (struct Rub_Rubrics *Rubrics);
|
||||
|
@ -368,7 +365,7 @@ void Rub_ShowOnlyOneRubric (struct Rub_Rubrics *Rubrics)
|
|||
/********* Show a pair of rows with the main data of a given rubric **********/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Rub_ShowRubricMainData (struct Rub_Rubrics *Rubrics,
|
||||
void Rub_ShowRubricMainData (struct Rub_Rubrics *Rubrics,
|
||||
bool ShowOnlyThisRubric)
|
||||
{
|
||||
extern const char *Txt_View_rubric;
|
||||
|
@ -412,6 +409,8 @@ static void Rub_ShowRubricMainData (struct Rub_Rubrics *Rubrics,
|
|||
HTM_Unsigned (Rub_DB_GetNumCriteriaInRubric (Rubrics->Rubric.RubCod));
|
||||
HTM_DIV_End ();
|
||||
|
||||
HTM_TD_End ();
|
||||
|
||||
/***** End 1st row of this rubric *****/
|
||||
HTM_TR_End ();
|
||||
|
||||
|
@ -449,6 +448,60 @@ static void Rub_ShowRubricMainData (struct Rub_Rubrics *Rubrics,
|
|||
The_ChangeRowColor ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************ Show one rubric in a project ***********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Rub_ShowRubricInProject (struct Prj_Projects *Projects,
|
||||
struct Rub_Rubric *Rubric,
|
||||
const char *WhichRubricTxt,
|
||||
bool ICanFill)
|
||||
{
|
||||
extern const char *Txt_Rubric;
|
||||
|
||||
/***** Begin first row of this rubric *****/
|
||||
HTM_TR_Begin (NULL);
|
||||
|
||||
/***** Rubric title *****/
|
||||
HTM_TD_Begin ("class=\"LT ASG_TITLE_%s %s\"",
|
||||
The_GetSuffix (),The_GetColorRows ());
|
||||
HTM_TxtColonNBSP (WhichRubricTxt);
|
||||
HTM_Txt (Rubric->Title);
|
||||
HTM_TD_End ();
|
||||
|
||||
/***** End 1st row of this rubric *****/
|
||||
HTM_TR_End ();
|
||||
|
||||
/***** Begin 2nd row of this rubric *****/
|
||||
HTM_TR_Begin (NULL);
|
||||
|
||||
/***** Text of the rubric *****/
|
||||
HTM_TD_Begin ("class=\"LT PAR DAT_%s %s\"",
|
||||
The_GetSuffix (),The_GetColorRows ());
|
||||
Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML,
|
||||
Rubric->Txt,Cns_MAX_BYTES_TEXT,false); // Convert from HTML to rigorous HTML
|
||||
ALn_InsertLinks (Rubric->Txt,Cns_MAX_BYTES_TEXT,60); // Insert links
|
||||
HTM_Txt (Rubric->Txt);
|
||||
HTM_TD_End ();
|
||||
|
||||
/***** End 2nd row of this rubric *****/
|
||||
HTM_TR_End ();
|
||||
|
||||
/***** Begin 4rd row of this rubric *****/
|
||||
HTM_TR_Begin (NULL);
|
||||
|
||||
/***** Write criteria of this rubric *****/
|
||||
HTM_TD_Begin ("class=\"LT %s\"",The_GetColorRows ());
|
||||
RubCri_ListCriteriaInProject (Projects,Rubric->RubCod,ICanFill);
|
||||
HTM_TD_End ();
|
||||
|
||||
/***** End 3rd row of this rubric *****/
|
||||
HTM_TR_End ();
|
||||
|
||||
/***** Change color for next rubric *****/
|
||||
The_ChangeRowColor ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*************** Put icons when viewing or editing one rubric ****************/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
/********************************* Headers ***********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#include "swad_project.h"
|
||||
#include "swad_rubric_type.h"
|
||||
#include "swad_string.h"
|
||||
|
||||
|
@ -50,6 +51,12 @@ bool Rub_CheckIfICanEditRubrics (void);
|
|||
bool Rub_CheckIfEditable (void);
|
||||
void Rub_SeeOneRubric (void);
|
||||
void Rub_ShowOnlyOneRubric (struct Rub_Rubrics *Rubrics);
|
||||
void Rub_ShowRubricMainData (struct Rub_Rubrics *Rubrics,
|
||||
bool ShowOnlyThisRubric);
|
||||
void Rub_ShowRubricInProject (struct Prj_Projects *Projects,
|
||||
struct Rub_Rubric *Rubric,
|
||||
const char *WhichRubricTxt,
|
||||
bool ICanFill);
|
||||
|
||||
void Rub_SetCurrentRubCod (long GamCod);
|
||||
void Rub_PutPars (void *Rubrics);
|
||||
|
|
|
@ -24,8 +24,10 @@
|
|||
/********************************* Headers ***********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define _GNU_SOURCE // For asprintf
|
||||
#include <float.h> // For DBL_MAX
|
||||
#include <mysql/mysql.h> // To access MySQL databases
|
||||
#include <stdio.h> // For asprintf
|
||||
#include <string.h> // For string functions
|
||||
|
||||
#include "swad_action_list.h"
|
||||
|
@ -40,6 +42,7 @@
|
|||
#include "swad_global.h"
|
||||
#include "swad_parameter.h"
|
||||
#include "swad_parameter_code.h"
|
||||
#include "swad_project_database.h"
|
||||
#include "swad_resource_database.h"
|
||||
#include "swad_rubric.h"
|
||||
#include "swad_rubric_criteria.h"
|
||||
|
@ -61,6 +64,7 @@ static const char *RubCri_ParValues[RubCri_NUM_VALUES] =
|
|||
[RubCri_MIN] = "MinVal",
|
||||
[RubCri_MAX] = "MaxVal",
|
||||
};
|
||||
#define RubCri_SCORE_STEP 0.1
|
||||
|
||||
#define RubCri_WEIGHT_MIN 0.0
|
||||
#define RubCri_WEIGHT_MAX 1.0
|
||||
|
@ -76,6 +80,12 @@ typedef enum
|
|||
RubCri_PUT_COLUMN_FOR_ICONS,
|
||||
} RubCri_PutColumnForIcons_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
RubCri_DONT_PUT_COLUMNS_FOR_SCORE,
|
||||
RubCri_PUT_COLUMNS_FOR_SCORE,
|
||||
} RubCri_PutColumnsForScore_t;
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** Private prototypes ****************************/
|
||||
/*****************************************************************************/
|
||||
|
@ -98,11 +108,16 @@ static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics,
|
|||
unsigned MaxCriInd,
|
||||
unsigned NumCriteria,
|
||||
MYSQL_RES *mysql_res);
|
||||
static void RubCri_ListOneOrMoreCriteriaInProject (struct Prj_Projects *Projects,
|
||||
bool ICanFill,
|
||||
unsigned NumCriteria,
|
||||
MYSQL_RES *mysql_res);
|
||||
|
||||
static void RubCri_GetCriterionDataFromRow (MYSQL_RES *mysql_res,
|
||||
struct RubCri_Criterion *Criterion);
|
||||
|
||||
static void RubCri_PutTableHeadingForCriteria (RubCri_PutColumnForIcons_t PutColumnForIcons);
|
||||
static void RubCri_PutTableHeadingForCriteria (RubCri_PutColumnForIcons_t PutColumnForIcons,
|
||||
RubCri_PutColumnsForScore_t PutColumnsForScore);
|
||||
|
||||
static void RubCri_GetAndCheckRubricAndCriterion (struct Rub_Rubrics *Rubrics);
|
||||
|
||||
|
@ -169,7 +184,8 @@ static void RubCri_PutFormNewCriterion (struct Rub_Rubrics *Rubrics,
|
|||
NULL,Box_NOT_CLOSABLE,2);
|
||||
|
||||
/***** Table heading *****/
|
||||
RubCri_PutTableHeadingForCriteria (RubCri_DONT_PUT_COLUMN_FOR_ICONS);
|
||||
RubCri_PutTableHeadingForCriteria (RubCri_DONT_PUT_COLUMN_FOR_ICONS,
|
||||
RubCri_DONT_PUT_COLUMNS_FOR_SCORE);
|
||||
|
||||
/***** Begin row *****/
|
||||
HTM_TR_Begin (NULL);
|
||||
|
@ -200,7 +216,8 @@ static void RubCri_PutFormNewCriterion (struct Rub_Rubrics *Rubrics,
|
|||
ValueRange++)
|
||||
{
|
||||
HTM_TD_Begin ("class=\"RT\"");
|
||||
HTM_INPUT_FLOAT (RubCri_ParValues[ValueRange],0.0,DBL_MAX,0.1,
|
||||
HTM_INPUT_FLOAT (RubCri_ParValues[ValueRange],
|
||||
0.0,DBL_MAX,RubCri_SCORE_STEP,
|
||||
Rubrics->Criterion.Values[ValueRange],false,
|
||||
" class=\"INPUT_FLOAT INPUT_%s\" required=\"required\"",
|
||||
The_GetSuffix ());
|
||||
|
@ -548,6 +565,28 @@ void RubCri_ListCriteriaForEdition (struct Rub_Rubrics *Rubrics)
|
|||
DB_FreeMySQLResult (&mysql_res);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/**************** List the criteria of a rubric in a project *****************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void RubCri_ListCriteriaInProject (struct Prj_Projects *Projects,long RubCod,
|
||||
bool ICanFill)
|
||||
{
|
||||
MYSQL_RES *mysql_res;
|
||||
unsigned NumCriteria;
|
||||
|
||||
/***** Get data of rubric criteria from database *****/
|
||||
NumCriteria = Rub_DB_GetCriteria (&mysql_res,RubCod);
|
||||
|
||||
/***** Show table with rubric criteria *****/
|
||||
if (NumCriteria)
|
||||
RubCri_ListOneOrMoreCriteriaInProject (Projects,ICanFill,
|
||||
NumCriteria,mysql_res);
|
||||
|
||||
/***** Free structure that stores the query result *****/
|
||||
DB_FreeMySQLResult (&mysql_res);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********************** List rubric criteria for edition *********************/
|
||||
/*****************************************************************************/
|
||||
|
@ -564,7 +603,8 @@ static void RubCri_ListOneOrMoreCriteriaForSeeing (unsigned NumCriteria,
|
|||
HTM_TABLE_BeginWideMarginPadding (5);
|
||||
|
||||
/***** Write the heading *****/
|
||||
RubCri_PutTableHeadingForCriteria (RubCri_DONT_PUT_COLUMN_FOR_ICONS);
|
||||
RubCri_PutTableHeadingForCriteria (RubCri_DONT_PUT_COLUMN_FOR_ICONS,
|
||||
RubCri_DONT_PUT_COLUMNS_FOR_SCORE);
|
||||
|
||||
/***** Write rows *****/
|
||||
for (NumCriterion = 0, The_ResetRowColor ();
|
||||
|
@ -577,12 +617,11 @@ static void RubCri_ListOneOrMoreCriteriaForSeeing (unsigned NumCriteria,
|
|||
/***** Get criterion data *****/
|
||||
RubCri_GetCriterionDataFromRow (mysql_res,&Criterion);
|
||||
|
||||
/***** Begin first row *****/
|
||||
/***** Begin row *****/
|
||||
HTM_TR_Begin (NULL);
|
||||
|
||||
/***** Index *****/
|
||||
HTM_TD_Begin ("rowspan=\"2\" class=\"RT %s\"",
|
||||
The_GetColorRows ());
|
||||
HTM_TD_Begin ("class=\"RT %s\"",The_GetColorRows ());
|
||||
Lay_WriteIndex (Criterion.CriInd,"BIG_INDEX");
|
||||
HTM_TD_End ();
|
||||
|
||||
|
@ -619,21 +658,7 @@ static void RubCri_ListOneOrMoreCriteriaForSeeing (unsigned NumCriteria,
|
|||
HTM_Double (Criterion.Weight);
|
||||
HTM_TD_End ();
|
||||
|
||||
/***** End first row *****/
|
||||
HTM_TR_End ();
|
||||
|
||||
/***** Begin second row *****/
|
||||
HTM_TR_Begin (NULL);
|
||||
|
||||
/***** Questions *****/
|
||||
HTM_TD_Begin ("colspan=\"5\" class=\"LT %s\"",
|
||||
The_GetColorRows ());
|
||||
|
||||
// Description here
|
||||
|
||||
HTM_TD_End ();
|
||||
|
||||
/***** End second row *****/
|
||||
/***** End row *****/
|
||||
HTM_TR_End ();
|
||||
}
|
||||
|
||||
|
@ -666,7 +691,8 @@ static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics,
|
|||
HTM_TABLE_BeginWideMarginPadding (5);
|
||||
|
||||
/***** Write the heading *****/
|
||||
RubCri_PutTableHeadingForCriteria (RubCri_PUT_COLUMN_FOR_ICONS);
|
||||
RubCri_PutTableHeadingForCriteria (RubCri_PUT_COLUMN_FOR_ICONS,
|
||||
RubCri_DONT_PUT_COLUMNS_FOR_SCORE);
|
||||
|
||||
/***** Write rows *****/
|
||||
for (NumCriterion = 0, The_ResetRowColor ();
|
||||
|
@ -682,12 +708,11 @@ static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics,
|
|||
/***** Build anchor string *****/
|
||||
Frm_SetAnchorStr (Rubrics->Criterion.CriCod,&Anchor);
|
||||
|
||||
/***** Begin first row *****/
|
||||
/***** Begin row *****/
|
||||
HTM_TR_Begin (NULL);
|
||||
|
||||
/***** Icons *****/
|
||||
HTM_TD_Begin ("rowspan=\"2\" class=\"BT %s\"",
|
||||
The_GetColorRows ());
|
||||
HTM_TD_Begin ("class=\"BT %s\"",The_GetColorRows ());
|
||||
|
||||
/* Put icon to remove the criterion */
|
||||
Ico_PutContextualIconToRemove (ActReqRemRubCri,NULL,
|
||||
|
@ -714,7 +739,7 @@ static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics,
|
|||
HTM_TD_End ();
|
||||
|
||||
/***** Index *****/
|
||||
HTM_TD_Begin ("rowspan=\"2\" class=\"RT %s\"",
|
||||
HTM_TD_Begin ("class=\"RT %s\"",
|
||||
The_GetColorRows ());
|
||||
Lay_WriteIndex (Rubrics->Criterion.CriInd,"BIG_INDEX");
|
||||
HTM_TD_End ();
|
||||
|
@ -750,7 +775,8 @@ static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics,
|
|||
HTM_TD_Begin ("class=\"RT %s\"",The_GetColorRows ());
|
||||
Frm_BeginFormAnchor (RubCri_ActionsValues[ValueRange],Anchor);
|
||||
RubCri_PutParsOneCriterion (Rubrics);
|
||||
HTM_INPUT_FLOAT (RubCri_ParValues[ValueRange],0.0,DBL_MAX,0.1,
|
||||
HTM_INPUT_FLOAT (RubCri_ParValues[ValueRange],
|
||||
0.0,DBL_MAX,RubCri_SCORE_STEP,
|
||||
Rubrics->Criterion.Values[ValueRange],false,
|
||||
" class=\"INPUT_FLOAT INPUT_%s\""
|
||||
" required=\"required\"",
|
||||
|
@ -774,21 +800,7 @@ static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics,
|
|||
Frm_EndForm ();
|
||||
HTM_TD_End ();
|
||||
|
||||
/***** End first row *****/
|
||||
HTM_TR_End ();
|
||||
|
||||
/***** Begin second row *****/
|
||||
HTM_TR_Begin (NULL);
|
||||
|
||||
/***** Questions *****/
|
||||
HTM_TD_Begin ("colspan=\"5\" class=\"LT %s\"",
|
||||
The_GetColorRows ());
|
||||
|
||||
// Description here
|
||||
|
||||
HTM_TD_End ();
|
||||
|
||||
/***** End second row *****/
|
||||
/***** End row *****/
|
||||
HTM_TR_End ();
|
||||
|
||||
/***** Free anchor string *****/
|
||||
|
@ -799,6 +811,142 @@ static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics,
|
|||
HTM_TABLE_End ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********************* List rubric criteria in a project *********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void RubCri_ListOneOrMoreCriteriaInProject (struct Prj_Projects *Projects,
|
||||
bool ICanFill,
|
||||
unsigned NumCriteria,
|
||||
MYSQL_RES *mysql_res)
|
||||
{
|
||||
extern const char *Txt_Criteria;
|
||||
struct RubCri_Criterion Criterion;
|
||||
unsigned NumCriterion;
|
||||
RubCri_ValueRange_t ValueRange;
|
||||
char *Anchor;
|
||||
double Score = 0.0;
|
||||
|
||||
/***** Begin table *****/
|
||||
HTM_TABLE_BeginWideMarginPadding (5);
|
||||
|
||||
/***** Write the heading *****/
|
||||
RubCri_PutTableHeadingForCriteria (RubCri_DONT_PUT_COLUMN_FOR_ICONS,
|
||||
RubCri_PUT_COLUMNS_FOR_SCORE);
|
||||
|
||||
/***** Write rows *****/
|
||||
for (NumCriterion = 0, The_ResetRowColor ();
|
||||
NumCriterion < NumCriteria;
|
||||
NumCriterion++, The_ChangeRowColor ())
|
||||
{
|
||||
/***** Create criterion of questions *****/
|
||||
RubCri_ResetCriterion (&Criterion);
|
||||
|
||||
/***** Get criterion data *****/
|
||||
RubCri_GetCriterionDataFromRow (mysql_res,&Criterion);
|
||||
|
||||
/***** Build anchor string *****/
|
||||
Frm_SetAnchorStr (Criterion.CriCod,&Anchor);
|
||||
|
||||
/***** Begin row *****/
|
||||
HTM_TR_Begin (NULL);
|
||||
|
||||
/***** Index *****/
|
||||
HTM_TD_Begin ("class=\"RT %s\"",The_GetColorRows ());
|
||||
Lay_WriteIndex (Criterion.CriInd,"BIG_INDEX");
|
||||
HTM_TD_End ();
|
||||
|
||||
/***** Title *****/
|
||||
HTM_TD_Begin ("class=\"LT DAT_%s %s\"",
|
||||
The_GetSuffix (),
|
||||
The_GetColorRows ());
|
||||
HTM_ARTICLE_Begin (Anchor);
|
||||
HTM_Txt (Criterion.Title);
|
||||
HTM_ARTICLE_End ();
|
||||
HTM_TD_End ();
|
||||
|
||||
/***** Link to resource *****/
|
||||
HTM_TD_Begin ("class=\"LT DAT_%s %s\"",
|
||||
The_GetSuffix (),
|
||||
The_GetColorRows ());
|
||||
Rsc_WriteLinkName (&Criterion.Link,Frm_DONT_PUT_FORM_TO_GO);
|
||||
HTM_TD_End ();
|
||||
|
||||
/***** Minimum and maximum values of criterion *****/
|
||||
for (ValueRange = (RubCri_ValueRange_t) 0;
|
||||
ValueRange <= (RubCri_ValueRange_t) (RubCri_NUM_VALUES - 1);
|
||||
ValueRange++)
|
||||
{
|
||||
HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
|
||||
The_GetSuffix (),
|
||||
The_GetColorRows ());
|
||||
HTM_Double (Criterion.Values[ValueRange]);
|
||||
HTM_TD_End ();
|
||||
}
|
||||
|
||||
/***** Criterion weight *****/
|
||||
HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
|
||||
The_GetSuffix (),
|
||||
The_GetColorRows ());
|
||||
HTM_Double (Criterion.Weight);
|
||||
HTM_TD_End ();
|
||||
|
||||
/***** Criterion score *****/
|
||||
HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
|
||||
The_GetSuffix (),
|
||||
The_GetColorRows ());
|
||||
/* Get score from database */
|
||||
Score = Prj_DB_GetScore (Projects->Prj.PrjCod,
|
||||
Criterion.CriCod);
|
||||
|
||||
/* Show score */
|
||||
if (ICanFill)
|
||||
{
|
||||
Frm_BeginFormAnchor (ActChgPrjSco,Anchor);
|
||||
Prj_PutCurrentPars (Projects);
|
||||
ParCod_PutPar (ParCod_Cri,Criterion.CriCod);
|
||||
HTM_INPUT_FLOAT ("Score",
|
||||
Criterion.Values[RubCri_MIN],
|
||||
Criterion.Values[RubCri_MAX],
|
||||
RubCri_SCORE_STEP,
|
||||
Score,false,
|
||||
" class=\"INPUT_FLOAT INPUT_%s\""
|
||||
" required=\"required\"",
|
||||
The_GetSuffix ());
|
||||
Frm_EndForm ();
|
||||
}
|
||||
else
|
||||
HTM_Double (Score);
|
||||
HTM_TD_End ();
|
||||
|
||||
/***** Criterion score x weight *****/
|
||||
HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
|
||||
The_GetSuffix (),
|
||||
The_GetColorRows ());
|
||||
HTM_Double (Criterion.Weight);
|
||||
HTM_TD_End ();
|
||||
|
||||
/***** End row *****/
|
||||
HTM_TR_End ();
|
||||
}
|
||||
|
||||
/***** End table *****/
|
||||
HTM_TABLE_End ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************** Get parameter with score of a criterion *******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
double RubCri_GetParScore (void)
|
||||
{
|
||||
char ScoreStr[64];
|
||||
|
||||
/***** Get criterion weight *****/
|
||||
Par_GetParText ("Score",ScoreStr,sizeof (ScoreStr) - 1);
|
||||
return Str_GetDoubleFromStr (ScoreStr);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************** Get rubric criteria data *************************/
|
||||
/*****************************************************************************/
|
||||
|
@ -853,7 +1001,8 @@ static void RubCri_GetCriterionDataFromRow (MYSQL_RES *mysql_res,
|
|||
/****************** Put table heading for rubric criteria ********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void RubCri_PutTableHeadingForCriteria (RubCri_PutColumnForIcons_t PutColumnForIcons)
|
||||
static void RubCri_PutTableHeadingForCriteria (RubCri_PutColumnForIcons_t PutColumnForIcons,
|
||||
RubCri_PutColumnsForScore_t PutColumnsForScore)
|
||||
{
|
||||
extern const char *Txt_No_INDEX;
|
||||
extern const char *Txt_Criterion;
|
||||
|
@ -861,6 +1010,8 @@ static void RubCri_PutTableHeadingForCriteria (RubCri_PutColumnForIcons_t PutCol
|
|||
extern const char *Txt_Minimum;
|
||||
extern const char *Txt_Maximum;
|
||||
extern const char *Txt_Weight;
|
||||
extern const char *Txt_Score;
|
||||
char *Title;
|
||||
|
||||
/***** Begin row *****/
|
||||
HTM_TR_Begin (NULL);
|
||||
|
@ -871,9 +1022,17 @@ static void RubCri_PutTableHeadingForCriteria (RubCri_PutColumnForIcons_t PutCol
|
|||
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_LEFT );
|
||||
HTM_TH (Txt_Maximum ,HTM_HEAD_LEFT );
|
||||
HTM_TH (Txt_Weight ,HTM_HEAD_LEFT );
|
||||
HTM_TH (Txt_Minimum ,HTM_HEAD_RIGHT);
|
||||
HTM_TH (Txt_Maximum ,HTM_HEAD_RIGHT);
|
||||
HTM_TH (Txt_Weight ,HTM_HEAD_RIGHT);
|
||||
if (PutColumnsForScore == RubCri_PUT_COLUMNS_FOR_SCORE)
|
||||
{
|
||||
HTM_TH (Txt_Score ,HTM_HEAD_RIGHT);
|
||||
if (asprintf (&Title,"%s × %s",Txt_Score,Txt_Weight) < 0)
|
||||
Err_NotEnoughMemoryExit ();
|
||||
HTM_TH (Title,HTM_HEAD_RIGHT);
|
||||
free (Title);
|
||||
}
|
||||
|
||||
/***** End row *****/
|
||||
HTM_TR_End ();
|
||||
|
|
|
@ -43,6 +43,9 @@ void RubCri_ChangeWeight (void);
|
|||
|
||||
void RubCri_ListCriteriaForSeeing (const struct Rub_Rubrics *Rubrics);
|
||||
void RubCri_ListCriteriaForEdition (struct Rub_Rubrics *Rubrics);
|
||||
void RubCri_ListCriteriaInProject (struct Prj_Projects *Projects,long RubCod,
|
||||
bool ICanFill);
|
||||
double RubCri_GetParScore (void);
|
||||
|
||||
void RubCri_ResetCriterion (struct RubCri_Criterion *Criterion);
|
||||
|
||||
|
|
|
@ -505,6 +505,20 @@ unsigned Rub_DB_GetNumCriteriaInRubric (long RubCod)
|
|||
RubCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************** Get rubric code given a criterion code *******************/
|
||||
/*****************************************************************************/
|
||||
// Return <0 is criterion is not present in any rubric
|
||||
|
||||
long Rub_DB_GetRubCodFromCriCod (long CriCod)
|
||||
{
|
||||
return DB_QuerySELECTCode ("can not get which rubric",
|
||||
"SELECT RubCod" // row[0]
|
||||
" FROM rub_criteria"
|
||||
" WHERE CriCod=%ld",
|
||||
CriCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********* Get criterion code given rubric and index of criterion ************/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -65,8 +65,9 @@ void Rub_DB_UpdateCriterionIndex (long CriInd,long CriCod,long RubCod);
|
|||
void Rub_DB_LockTable (void);
|
||||
|
||||
unsigned Rub_DB_GetNumCriteriaInRubric (long RubCod);
|
||||
long Rub_DB_GetRubCodFromCriCod (long CriCod);
|
||||
long Rub_DB_GetCriCodFromCriInd (long RubCod,unsigned QstInd);
|
||||
unsigned Rub_DB_GetCriIndFromCriCod (long RubCod,long QstCod);
|
||||
unsigned Rub_DB_GetCriIndFromCriCod (long RubCod,long CriCod);
|
||||
unsigned Rub_DB_GetMaxCriterionIndexInRubric (long RubCod);
|
||||
unsigned Rub_DB_GetPrevCriterionIndexInRubric (long RubCod,unsigned QstInd);
|
||||
unsigned Rub_DB_GetNextCriterionIndexInRubric (long RubCod,unsigned QstInd);
|
||||
|
|
|
@ -10111,6 +10111,29 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] =
|
|||
"Remove evaluator from a project" // Precisa de tradução
|
||||
#elif L==10 // tr
|
||||
"Remove evaluator from a project" // Çeviri lazim!
|
||||
#endif
|
||||
,
|
||||
[ActChgPrjSco] =
|
||||
#if L==1 // ca
|
||||
"Canviar la puntuació d'un criteri en un projecte"
|
||||
#elif L==2 // de
|
||||
"Ändern Sie die Punktzahl eines Kriteriums in einem Projekt"
|
||||
#elif L==3 // en
|
||||
"Change the score of a criterion in a project"
|
||||
#elif L==4 // es
|
||||
"Cambiar la puntuación de un criterio en un proyecto"
|
||||
#elif L==5 // fr
|
||||
"Modifier le score d'un critère dans un projet"
|
||||
#elif L==6 // gn
|
||||
"Omoambue puntuación peteî criterio peteî proyecto-pe"
|
||||
#elif L==7 // it
|
||||
"Modificare il punteggio di un criterio in un progetto"
|
||||
#elif L==8 // pl
|
||||
"Zmień wynik kryterium w projekcie"
|
||||
#elif L==9 // pt
|
||||
"Alterar a pontuação de um critério em um projeto"
|
||||
#elif L==10 // tr
|
||||
"Bir projedeki bir kriterin puanını değiştirin"
|
||||
#endif
|
||||
,
|
||||
[ActReqLnkPrj] =
|
||||
|
|
Loading…
Reference in New Issue
Block a user