Version 22.104: May 03, 2023 Rubrics in project. Not finished.

This commit is contained in:
acanas 2023-05-03 11:02:06 +02:00
parent 1d181d04eb
commit e4489b85ca
20 changed files with 913 additions and 378 deletions

View File

@ -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 (

View File

@ -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
};

View File

@ -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

View File

@ -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)

View File

@ -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);

View File

@ -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 */

View File

@ -186,9 +186,9 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
case Pag_PROJECTS:
Frm_BeginFormAnchor (ActSeeAllPrj,Pagination->Anchor);
Prj_PutPars (&((struct Prj_Projects *) Context)->Filter,
((struct Prj_Projects *) Context)->SelectedOrder,
1,
Cod);
((struct Prj_Projects *) Context)->SelectedOrder,
1,
Cod);
break;
case Pag_EXAMS:
Frm_BeginFormAnchor (ActSeeAllExa,Pagination->Anchor);
@ -313,9 +313,9 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
case Pag_PROJECTS:
Frm_BeginFormAnchor (ActSeeAllPrj,Pagination->Anchor);
Prj_PutPars (&((struct Prj_Projects *) Context)->Filter,
((struct Prj_Projects *) Context)->SelectedOrder,
1,
Cod);
((struct Prj_Projects *) Context)->SelectedOrder,
1,
Cod);
break;
case Pag_EXAMS:
Frm_BeginFormAnchor (ActSeeAllExa,Pagination->Anchor);
@ -433,9 +433,9 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
case Pag_PROJECTS:
Frm_BeginFormAnchor (ActSeeAllPrj,Pagination->Anchor);
Prj_PutPars (&((struct Prj_Projects *) Context)->Filter,
((struct Prj_Projects *) Context)->SelectedOrder,
Pagination->LeftPage,
Cod);
((struct Prj_Projects *) Context)->SelectedOrder,
Pagination->LeftPage,
Cod);
break;
case Pag_EXAMS:
Frm_BeginFormAnchor (ActSeeAllExa,Pagination->Anchor);
@ -566,9 +566,9 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
case Pag_PROJECTS:
Frm_BeginFormAnchor (ActSeeAllPrj,Pagination->Anchor);
Prj_PutPars (&((struct Prj_Projects *) Context)->Filter,
((struct Prj_Projects *) Context)->SelectedOrder,
NumPage,
Cod);
((struct Prj_Projects *) Context)->SelectedOrder,
NumPage,
Cod);
break;
case Pag_EXAMS:
Frm_BeginFormAnchor (ActSeeAllExa,Pagination->Anchor);
@ -685,9 +685,9 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
case Pag_PROJECTS:
Frm_BeginFormAnchor (ActSeeAllPrj,Pagination->Anchor);
Prj_PutPars (&((struct Prj_Projects *) Context)->Filter,
((struct Prj_Projects *) Context)->SelectedOrder,
Pagination->RightPage,
Cod);
((struct Prj_Projects *) Context)->SelectedOrder,
Pagination->RightPage,
Cod);
break;
case Pag_EXAMS:
Frm_BeginFormAnchor (ActSeeAllExa,Pagination->Anchor);
@ -805,9 +805,9 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
case Pag_PROJECTS:
Frm_BeginFormAnchor (ActSeeAllPrj,Pagination->Anchor);
Prj_PutPars (&((struct Prj_Projects *) Context)->Filter,
((struct Prj_Projects *) Context)->SelectedOrder,
Pagination->NumPags,
Cod);
((struct Prj_Projects *) Context)->SelectedOrder,
Pagination->NumPags,
Cod);
break;
case Pag_EXAMS:
Frm_BeginFormAnchor (ActSeeAllExa,Pagination->Anchor);

View File

@ -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);
@ -642,9 +644,9 @@ static void Prj_ShowFormToFilterByMy_All (const struct Prj_Projects *Projects)
Filter.Review = Projects->Filter.Review;
Filter.DptCod = Projects->Filter.DptCod;
Prj_PutPars (&Filter,
Projects->SelectedOrder,
Projects->CurrentPage,
-1L);
Projects->SelectedOrder,
Projects->CurrentPage,
-1L);
Usr_PutWhoIcon (Who);
Frm_EndForm ();
Set_EndPref ();
@ -676,9 +678,9 @@ static void Prj_ShowFormToFilterByAssign (const struct Prj_Projects *Projects)
Filter.Review = Projects->Filter.Review;
Filter.DptCod = Projects->Filter.DptCod;
Prj_PutPars (&Filter,
Projects->SelectedOrder,
Projects->CurrentPage,
-1L);
Projects->SelectedOrder,
Projects->CurrentPage,
-1L);
Ico_PutSettingIconLink (AssignedNonassigIcon[Assign],Ico_BLACK,
Txt_PROJECT_ASSIGNED_NONASSIGNED_PLURAL[Assign]);
Frm_EndForm ();
@ -720,9 +722,9 @@ static void Prj_ShowFormToFilterByHidden (const struct Prj_Projects *Projects)
Filter.Review = Projects->Filter.Review;
Filter.DptCod = Projects->Filter.DptCod;
Prj_PutPars (&Filter,
Projects->SelectedOrder,
Projects->CurrentPage,
-1L);
Projects->SelectedOrder,
Projects->CurrentPage,
-1L);
Ico_PutSettingIconLink (HiddenVisiblIcon[HidVis].Icon,
HiddenVisiblIcon[HidVis].Color,
Txt_PROJECT_HIDDEN_VISIBL_PROJECTS[HidVis]);
@ -765,9 +767,9 @@ static void Prj_ShowFormToFilterByWarning (const struct Prj_Projects *Projects)
Filter.Review = Projects->Filter.Review;
Filter.DptCod = Projects->Filter.DptCod;
Prj_PutPars (&Filter,
Projects->SelectedOrder,
Projects->CurrentPage,
-1L);
Projects->SelectedOrder,
Projects->CurrentPage,
-1L);
Ico_PutSettingIconLink (FaultinessIcon[Faultiness].Icon,
FaultinessIcon[Faultiness].Color,
Txt_PROJECT_FAULTY_FAULTLESS_PROJECTS[Faultiness]);
@ -801,9 +803,9 @@ static void Prj_ShowFormToFilterByReview (const struct Prj_Projects *Projects)
Filter.Review = Projects->Filter.Review ^ (1 << ReviewStatus); // Toggle
Filter.DptCod = Projects->Filter.DptCod;
Prj_PutPars (&Filter,
Projects->SelectedOrder,
Projects->CurrentPage,
-1L);
Projects->SelectedOrder,
Projects->CurrentPage,
-1L);
Ico_PutSettingIconLink (ReviewIcon[ReviewStatus].Icon,
ReviewIcon[ReviewStatus].Color,
Txt_PROJECT_REVIEW_PLURAL[ReviewStatus]);
@ -833,9 +835,9 @@ static void Prj_ShowFormToFilterByDpt (const struct Prj_Projects *Projects)
Filter.Review = Projects->Filter.Review;
Filter.DptCod = Prj_FILTER_DPT_DEFAULT; // Do not put department parameter here
Prj_PutPars (&Filter,
Projects->SelectedOrder,
Projects->CurrentPage,
-1L);
Projects->SelectedOrder,
Projects->CurrentPage,
-1L);
/***** Write selector with departments *****/
if (asprintf (&SelectClass,"TITLE_DESCRIPTION_WIDTH INPUT_%s",
@ -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,
@ -933,9 +935,9 @@ static void Prj_PutCurrentPars (void *Projects)
Each parameter is passed only if its value is distinct to default. */
void Prj_PutPars (struct Prj_Filter *Filter,
Prj_Order_t Order,
unsigned NumPage,
long PrjCod)
Prj_Order_t Order,
unsigned NumPage,
long PrjCod)
{
/***** Put filter parameters (which projects to show) *****/
if (Filter->Who != Prj_FILTER_WHO_DEFAULT)
@ -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,19 +4488,31 @@ static void Prj_ShowRubrics (long PrjCod)
NULL,NULL,
Hlp_ASSESSMENT_Projects,Box_NOT_CLOSABLE);
/***** Rubrics *****/
for (WhichRubric = (PrjCfg_Rubric_t) 0;
WhichRubric <= (PrjCfg_Rubric_t) (PrjCfg_NUM_RUBRICS - 1);
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");
}
}
/***** Begin table *****/
HTM_TABLE_BeginWideMarginPadding (5);
/***** Rubrics *****/
for (WhichRubric = (PrjCfg_Rubric_t) 1;
WhichRubric <= (PrjCfg_Rubric_t) (PrjCfg_NUM_RUBRICS - 1);
WhichRubric++)
if (Prj_CheckIfICanViewRubric (Projects->Prj.PrjCod,WhichRubric))
{
/***** 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);
}

View File

@ -214,10 +214,11 @@ 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,
long PrjCod);
Prj_Order_t Order,
unsigned NumPage,
long PrjCod);
void Prj_GetPars (struct Prj_Projects *Projects);
void Prj_PutIconsListProjects (void *Projects);
@ -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);

View File

@ -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;
WhichRubric <= (PrjCfg_Rubric_t) (PrjCfg_NUM_RUBRICS - 1);
WhichRubric++)
Config->RubCod[WhichRubric] = -1L;
Config->NETCanCreate = PrjCfg_NET_CAN_CREATE_DEFAULT;
}
/***** 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;
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);

View File

@ -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

View File

@ -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);
}

View File

@ -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

View File

@ -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,8 +365,8 @@ 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,
bool ShowOnlyThisRubric)
void Rub_ShowRubricMainData (struct Rub_Rubrics *Rubrics,
bool ShowOnlyThisRubric)
{
extern const char *Txt_View_rubric;
extern const char *Txt_Number_of_criteria;
@ -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 ****************/
/*****************************************************************************/

View File

@ -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);

View File

@ -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&nbsp;&times;&nbsp;%s",Txt_Score,Txt_Weight) < 0)
Err_NotEnoughMemoryExit ();
HTM_TH (Title,HTM_HEAD_RIGHT);
free (Title);
}
/***** End row *****/
HTM_TR_End ();

View File

@ -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);

View File

@ -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 ************/
/*****************************************************************************/

View File

@ -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);

View File

@ -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&oacute; d'un criteri en un projecte"
#elif L==2 // de
"&Auml;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&oacute;n de un criterio en un proyecto"
#elif L==5 // fr
"Modifier le score d'un crit&egrave;re dans un projet"
#elif L==6 // gn
"Omoambue puntuaci&oacute;n pete&icirc; criterio pete&icirc; proyecto-pe"
#elif L==7 // it
"Modificare il punteggio di un criterio in un progetto"
#elif L==8 // pl
"Zmie&nacute; wynik kryterium w projekcie"
#elif L==9 // pt
"Alterar a pontua&ccedil;&atilde;o de um crit&eacute;rio em um projeto"
#elif L==10 // tr
"Bir projedeki bir kriterin puan&inodot;n&inodot; de&gbreve;i&scedil;tirin"
#endif
,
[ActReqLnkPrj] =