Version18.113

This commit is contained in:
Antonio Cañas Vargas 2019-04-17 12:40:04 +02:00
parent f3b0648bc1
commit 03dc50cad4
10 changed files with 421 additions and 173 deletions

View File

@ -984,6 +984,7 @@ CREATE TABLE IF NOT EXISTS projects (
PrjCod INT NOT NULL AUTO_INCREMENT,
CrsCod INT NOT NULL DEFAULT -1,
DptCod INT NOT NULL DEFAULT -1,
Locked ENUM('N','Y') NOT NULL DEFAULT 'N',
Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',
Preassigned ENUM('N','Y') NOT NULL DEFAULT 'N',
NumStds INT NOT NULL DEFAULT 1,

View File

@ -506,6 +506,8 @@ Assessment:
363. ActRemPrj Remove project
364. ActHidPrj Hide project
365. ActShoPrj Show project
NEW. ActLckPrj Lock project edition
NEW. ActUnlPrj Unlock project edition
366. ActReqAddStdPrj Request adding a student to a project
367. ActReqAddTutPrj Request adding a tutor to a project
368. ActReqAddEvlPrj Request adding an evaluator to a project
@ -2043,6 +2045,8 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActRemPrj */{1681,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_RemoveProject ,NULL},
/* ActHidPrj */{1682,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_HideProject ,NULL},
/* ActShoPrj */{1683,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ShowProject ,NULL},
/* ActLckPrj */{1773,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_LockProjectEdition ,NULL},
/* ActUnlPrj */{1774,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_UnlockProjectEdition ,NULL},
/* ActReqAddStdPrj */{1684,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqAddStds ,NULL},
/* ActReqAddTutPrj */{1685,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqAddTuts ,NULL},
/* ActReqAddEvlPrj */{1686,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqAddEvls ,NULL},
@ -4949,6 +4953,8 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
ActAllFavSocNotUsr, // #1770
ActAllFavSocComUsr, // #1771
ActReqMaiUsr, // #1772
ActLckPrj, // #1773
ActUnlPrj, // #1774
};
/*****************************************************************************/

View File

@ -61,9 +61,9 @@ typedef enum
typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action
#define Act_NUM_ACTIONS (1 + 8 + 61 + 38 + 12 + 42 + 36 + 19 + 110 + 157 + 437 + 176 + 169 + 15 + 67)
#define Act_NUM_ACTIONS (1 + 8 + 61 + 38 + 12 + 42 + 36 + 19 + 110 + 159 + 437 + 176 + 169 + 15 + 67)
#define Act_MAX_ACTION_COD 1772
#define Act_MAX_ACTION_COD 1774
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 13
@ -522,133 +522,135 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to
#define ActRemPrj (ActChgCrsTT1stDay + 35)
#define ActHidPrj (ActChgCrsTT1stDay + 36)
#define ActShoPrj (ActChgCrsTT1stDay + 37)
#define ActReqAddStdPrj (ActChgCrsTT1stDay + 38)
#define ActReqAddTutPrj (ActChgCrsTT1stDay + 39)
#define ActReqAddEvlPrj (ActChgCrsTT1stDay + 40)
#define ActAddStdPrj (ActChgCrsTT1stDay + 41)
#define ActAddTutPrj (ActChgCrsTT1stDay + 42)
#define ActAddEvlPrj (ActChgCrsTT1stDay + 43)
#define ActReqRemStdPrj (ActChgCrsTT1stDay + 44)
#define ActReqRemTutPrj (ActChgCrsTT1stDay + 45)
#define ActReqRemEvlPrj (ActChgCrsTT1stDay + 46)
#define ActRemStdPrj (ActChgCrsTT1stDay + 47)
#define ActRemTutPrj (ActChgCrsTT1stDay + 48)
#define ActRemEvlPrj (ActChgCrsTT1stDay + 49)
#define ActLckPrj (ActChgCrsTT1stDay + 38)
#define ActUnlPrj (ActChgCrsTT1stDay + 39)
#define ActReqAddStdPrj (ActChgCrsTT1stDay + 40)
#define ActReqAddTutPrj (ActChgCrsTT1stDay + 41)
#define ActReqAddEvlPrj (ActChgCrsTT1stDay + 42)
#define ActAddStdPrj (ActChgCrsTT1stDay + 43)
#define ActAddTutPrj (ActChgCrsTT1stDay + 44)
#define ActAddEvlPrj (ActChgCrsTT1stDay + 45)
#define ActReqRemStdPrj (ActChgCrsTT1stDay + 46)
#define ActReqRemTutPrj (ActChgCrsTT1stDay + 47)
#define ActReqRemEvlPrj (ActChgCrsTT1stDay + 48)
#define ActRemStdPrj (ActChgCrsTT1stDay + 49)
#define ActRemTutPrj (ActChgCrsTT1stDay + 50)
#define ActRemEvlPrj (ActChgCrsTT1stDay + 51)
#define ActAdmDocPrj (ActChgCrsTT1stDay + 50)
#define ActReqRemFilDocPrj (ActChgCrsTT1stDay + 51)
#define ActRemFilDocPrj (ActChgCrsTT1stDay + 52)
#define ActRemFolDocPrj (ActChgCrsTT1stDay + 53)
#define ActCopDocPrj (ActChgCrsTT1stDay + 54)
#define ActPasDocPrj (ActChgCrsTT1stDay + 55)
#define ActRemTreDocPrj (ActChgCrsTT1stDay + 56)
#define ActFrmCreDocPrj (ActChgCrsTT1stDay + 57)
#define ActCreFolDocPrj (ActChgCrsTT1stDay + 58)
#define ActCreLnkDocPrj (ActChgCrsTT1stDay + 59)
#define ActRenFolDocPrj (ActChgCrsTT1stDay + 60)
#define ActRcvFilDocPrjDZ (ActChgCrsTT1stDay + 61)
#define ActRcvFilDocPrjCla (ActChgCrsTT1stDay + 62)
#define ActExpDocPrj (ActChgCrsTT1stDay + 63)
#define ActConDocPrj (ActChgCrsTT1stDay + 64)
#define ActZIPDocPrj (ActChgCrsTT1stDay + 65)
#define ActReqDatDocPrj (ActChgCrsTT1stDay + 66)
#define ActChgDatDocPrj (ActChgCrsTT1stDay + 67)
#define ActDowDocPrj (ActChgCrsTT1stDay + 68)
#define ActAdmDocPrj (ActChgCrsTT1stDay + 52)
#define ActReqRemFilDocPrj (ActChgCrsTT1stDay + 53)
#define ActRemFilDocPrj (ActChgCrsTT1stDay + 54)
#define ActRemFolDocPrj (ActChgCrsTT1stDay + 55)
#define ActCopDocPrj (ActChgCrsTT1stDay + 56)
#define ActPasDocPrj (ActChgCrsTT1stDay + 57)
#define ActRemTreDocPrj (ActChgCrsTT1stDay + 58)
#define ActFrmCreDocPrj (ActChgCrsTT1stDay + 59)
#define ActCreFolDocPrj (ActChgCrsTT1stDay + 60)
#define ActCreLnkDocPrj (ActChgCrsTT1stDay + 61)
#define ActRenFolDocPrj (ActChgCrsTT1stDay + 62)
#define ActRcvFilDocPrjDZ (ActChgCrsTT1stDay + 63)
#define ActRcvFilDocPrjCla (ActChgCrsTT1stDay + 64)
#define ActExpDocPrj (ActChgCrsTT1stDay + 65)
#define ActConDocPrj (ActChgCrsTT1stDay + 66)
#define ActZIPDocPrj (ActChgCrsTT1stDay + 67)
#define ActReqDatDocPrj (ActChgCrsTT1stDay + 68)
#define ActChgDatDocPrj (ActChgCrsTT1stDay + 69)
#define ActDowDocPrj (ActChgCrsTT1stDay + 70)
#define ActAdmAssPrj (ActChgCrsTT1stDay + 69)
#define ActReqRemFilAssPrj (ActChgCrsTT1stDay + 70)
#define ActRemFilAssPrj (ActChgCrsTT1stDay + 71)
#define ActRemFolAssPrj (ActChgCrsTT1stDay + 72)
#define ActCopAssPrj (ActChgCrsTT1stDay + 73)
#define ActPasAssPrj (ActChgCrsTT1stDay + 74)
#define ActRemTreAssPrj (ActChgCrsTT1stDay + 75)
#define ActFrmCreAssPrj (ActChgCrsTT1stDay + 76)
#define ActCreFolAssPrj (ActChgCrsTT1stDay + 77)
#define ActCreLnkAssPrj (ActChgCrsTT1stDay + 78)
#define ActRenFolAssPrj (ActChgCrsTT1stDay + 79)
#define ActRcvFilAssPrjDZ (ActChgCrsTT1stDay + 80)
#define ActRcvFilAssPrjCla (ActChgCrsTT1stDay + 81)
#define ActExpAssPrj (ActChgCrsTT1stDay + 82)
#define ActConAssPrj (ActChgCrsTT1stDay + 83)
#define ActZIPAssPrj (ActChgCrsTT1stDay + 84)
#define ActReqDatAssPrj (ActChgCrsTT1stDay + 85)
#define ActChgDatAssPrj (ActChgCrsTT1stDay + 86)
#define ActDowAssPrj (ActChgCrsTT1stDay + 87)
#define ActAdmAssPrj (ActChgCrsTT1stDay + 71)
#define ActReqRemFilAssPrj (ActChgCrsTT1stDay + 72)
#define ActRemFilAssPrj (ActChgCrsTT1stDay + 73)
#define ActRemFolAssPrj (ActChgCrsTT1stDay + 74)
#define ActCopAssPrj (ActChgCrsTT1stDay + 75)
#define ActPasAssPrj (ActChgCrsTT1stDay + 76)
#define ActRemTreAssPrj (ActChgCrsTT1stDay + 77)
#define ActFrmCreAssPrj (ActChgCrsTT1stDay + 78)
#define ActCreFolAssPrj (ActChgCrsTT1stDay + 79)
#define ActCreLnkAssPrj (ActChgCrsTT1stDay + 80)
#define ActRenFolAssPrj (ActChgCrsTT1stDay + 81)
#define ActRcvFilAssPrjDZ (ActChgCrsTT1stDay + 82)
#define ActRcvFilAssPrjCla (ActChgCrsTT1stDay + 83)
#define ActExpAssPrj (ActChgCrsTT1stDay + 84)
#define ActConAssPrj (ActChgCrsTT1stDay + 85)
#define ActZIPAssPrj (ActChgCrsTT1stDay + 86)
#define ActReqDatAssPrj (ActChgCrsTT1stDay + 87)
#define ActChgDatAssPrj (ActChgCrsTT1stDay + 88)
#define ActDowAssPrj (ActChgCrsTT1stDay + 89)
#define ActSeeTst (ActChgCrsTT1stDay + 88)
#define ActAssTst (ActChgCrsTT1stDay + 89)
#define ActEdiTstQst (ActChgCrsTT1stDay + 90)
#define ActEdiOneTstQst (ActChgCrsTT1stDay + 91)
#define ActReqImpTstQst (ActChgCrsTT1stDay + 92)
#define ActImpTstQst (ActChgCrsTT1stDay + 93)
#define ActLstTstQst (ActChgCrsTT1stDay + 94)
#define ActRcvTstQst (ActChgCrsTT1stDay + 95)
#define ActReqRemTstQst (ActChgCrsTT1stDay + 96)
#define ActRemTstQst (ActChgCrsTT1stDay + 97)
#define ActShfTstQst (ActChgCrsTT1stDay + 98)
#define ActCfgTst (ActChgCrsTT1stDay + 99)
#define ActEnableTag (ActChgCrsTT1stDay + 100)
#define ActDisableTag (ActChgCrsTT1stDay + 101)
#define ActRenTag (ActChgCrsTT1stDay + 102)
#define ActRcvCfgTst (ActChgCrsTT1stDay + 103)
#define ActSeeTst (ActChgCrsTT1stDay + 90)
#define ActAssTst (ActChgCrsTT1stDay + 91)
#define ActEdiTstQst (ActChgCrsTT1stDay + 92)
#define ActEdiOneTstQst (ActChgCrsTT1stDay + 93)
#define ActReqImpTstQst (ActChgCrsTT1stDay + 94)
#define ActImpTstQst (ActChgCrsTT1stDay + 95)
#define ActLstTstQst (ActChgCrsTT1stDay + 96)
#define ActRcvTstQst (ActChgCrsTT1stDay + 97)
#define ActReqRemTstQst (ActChgCrsTT1stDay + 98)
#define ActRemTstQst (ActChgCrsTT1stDay + 99)
#define ActShfTstQst (ActChgCrsTT1stDay + 100)
#define ActCfgTst (ActChgCrsTT1stDay + 101)
#define ActEnableTag (ActChgCrsTT1stDay + 102)
#define ActDisableTag (ActChgCrsTT1stDay + 103)
#define ActRenTag (ActChgCrsTT1stDay + 104)
#define ActRcvCfgTst (ActChgCrsTT1stDay + 105)
#define ActReqSeeMyTstRes (ActChgCrsTT1stDay + 104)
#define ActSeeMyTstRes (ActChgCrsTT1stDay + 105)
#define ActSeeOneTstResMe (ActChgCrsTT1stDay + 106)
#define ActReqSeeUsrTstRes (ActChgCrsTT1stDay + 107)
#define ActSeeUsrTstRes (ActChgCrsTT1stDay + 108)
#define ActSeeOneTstResOth (ActChgCrsTT1stDay + 109)
#define ActReqSeeMyTstRes (ActChgCrsTT1stDay + 106)
#define ActSeeMyTstRes (ActChgCrsTT1stDay + 107)
#define ActSeeOneTstResMe (ActChgCrsTT1stDay + 108)
#define ActReqSeeUsrTstRes (ActChgCrsTT1stDay + 109)
#define ActSeeUsrTstRes (ActChgCrsTT1stDay + 110)
#define ActSeeOneTstResOth (ActChgCrsTT1stDay + 111)
#define ActSeeOneGam (ActChgCrsTT1stDay + 110)
#define ActPlyGam (ActChgCrsTT1stDay + 111)
#define ActPlyGam1stQst (ActChgCrsTT1stDay + 112)
#define ActPlyGamNxtQst (ActChgCrsTT1stDay + 113)
#define ActPlyGamAns (ActChgCrsTT1stDay + 114)
#define ActAnsGam (ActChgCrsTT1stDay + 115)
#define ActFrmNewGam (ActChgCrsTT1stDay + 116)
#define ActEdiOneGam (ActChgCrsTT1stDay + 117)
#define ActNewGam (ActChgCrsTT1stDay + 118)
#define ActChgGam (ActChgCrsTT1stDay + 119)
#define ActReqRemGam (ActChgCrsTT1stDay + 120)
#define ActRemGam (ActChgCrsTT1stDay + 121)
#define ActReqRstGam (ActChgCrsTT1stDay + 122)
#define ActRstGam (ActChgCrsTT1stDay + 123)
#define ActHidGam (ActChgCrsTT1stDay + 124)
#define ActShoGam (ActChgCrsTT1stDay + 125)
#define ActAddOneGamQst (ActChgCrsTT1stDay + 126)
#define ActGamLstTstQst (ActChgCrsTT1stDay + 127)
#define ActAddTstQstToGam (ActChgCrsTT1stDay + 128)
#define ActReqRemGamQst (ActChgCrsTT1stDay + 129)
#define ActRemGamQst (ActChgCrsTT1stDay + 130)
#define ActUp_GamQst (ActChgCrsTT1stDay + 131)
#define ActDwnGamQst (ActChgCrsTT1stDay + 132)
#define ActSeeOneGam (ActChgCrsTT1stDay + 112)
#define ActPlyGam (ActChgCrsTT1stDay + 113)
#define ActPlyGam1stQst (ActChgCrsTT1stDay + 114)
#define ActPlyGamNxtQst (ActChgCrsTT1stDay + 115)
#define ActPlyGamAns (ActChgCrsTT1stDay + 116)
#define ActAnsGam (ActChgCrsTT1stDay + 117)
#define ActFrmNewGam (ActChgCrsTT1stDay + 118)
#define ActEdiOneGam (ActChgCrsTT1stDay + 119)
#define ActNewGam (ActChgCrsTT1stDay + 120)
#define ActChgGam (ActChgCrsTT1stDay + 121)
#define ActReqRemGam (ActChgCrsTT1stDay + 122)
#define ActRemGam (ActChgCrsTT1stDay + 123)
#define ActReqRstGam (ActChgCrsTT1stDay + 124)
#define ActRstGam (ActChgCrsTT1stDay + 125)
#define ActHidGam (ActChgCrsTT1stDay + 126)
#define ActShoGam (ActChgCrsTT1stDay + 127)
#define ActAddOneGamQst (ActChgCrsTT1stDay + 128)
#define ActGamLstTstQst (ActChgCrsTT1stDay + 129)
#define ActAddTstQstToGam (ActChgCrsTT1stDay + 130)
#define ActReqRemGamQst (ActChgCrsTT1stDay + 131)
#define ActRemGamQst (ActChgCrsTT1stDay + 132)
#define ActUp_GamQst (ActChgCrsTT1stDay + 133)
#define ActDwnGamQst (ActChgCrsTT1stDay + 134)
#define ActSeeOneSvy (ActChgCrsTT1stDay + 133)
#define ActAnsSvy (ActChgCrsTT1stDay + 134)
#define ActFrmNewSvy (ActChgCrsTT1stDay + 135)
#define ActEdiOneSvy (ActChgCrsTT1stDay + 136)
#define ActNewSvy (ActChgCrsTT1stDay + 137)
#define ActChgSvy (ActChgCrsTT1stDay + 138)
#define ActReqRemSvy (ActChgCrsTT1stDay + 139)
#define ActRemSvy (ActChgCrsTT1stDay + 140)
#define ActReqRstSvy (ActChgCrsTT1stDay + 141)
#define ActRstSvy (ActChgCrsTT1stDay + 142)
#define ActHidSvy (ActChgCrsTT1stDay + 143)
#define ActShoSvy (ActChgCrsTT1stDay + 144)
#define ActEdiOneSvyQst (ActChgCrsTT1stDay + 145)
#define ActRcvSvyQst (ActChgCrsTT1stDay + 146)
#define ActReqRemSvyQst (ActChgCrsTT1stDay + 147)
#define ActRemSvyQst (ActChgCrsTT1stDay + 148)
#define ActSeeOneSvy (ActChgCrsTT1stDay + 135)
#define ActAnsSvy (ActChgCrsTT1stDay + 136)
#define ActFrmNewSvy (ActChgCrsTT1stDay + 137)
#define ActEdiOneSvy (ActChgCrsTT1stDay + 138)
#define ActNewSvy (ActChgCrsTT1stDay + 139)
#define ActChgSvy (ActChgCrsTT1stDay + 140)
#define ActReqRemSvy (ActChgCrsTT1stDay + 141)
#define ActRemSvy (ActChgCrsTT1stDay + 142)
#define ActReqRstSvy (ActChgCrsTT1stDay + 143)
#define ActRstSvy (ActChgCrsTT1stDay + 144)
#define ActHidSvy (ActChgCrsTT1stDay + 145)
#define ActShoSvy (ActChgCrsTT1stDay + 146)
#define ActEdiOneSvyQst (ActChgCrsTT1stDay + 147)
#define ActRcvSvyQst (ActChgCrsTT1stDay + 148)
#define ActReqRemSvyQst (ActChgCrsTT1stDay + 149)
#define ActRemSvyQst (ActChgCrsTT1stDay + 150)
#define ActSeeOneExaAnn (ActChgCrsTT1stDay + 149)
#define ActSeeDatExaAnn (ActChgCrsTT1stDay + 150)
#define ActEdiExaAnn (ActChgCrsTT1stDay + 151)
#define ActRcvExaAnn (ActChgCrsTT1stDay + 152)
#define ActPrnExaAnn (ActChgCrsTT1stDay + 153)
#define ActReqRemExaAnn (ActChgCrsTT1stDay + 154)
#define ActRemExaAnn (ActChgCrsTT1stDay + 155)
#define ActHidExaAnn (ActChgCrsTT1stDay + 156)
#define ActShoExaAnn (ActChgCrsTT1stDay + 157)
#define ActSeeOneExaAnn (ActChgCrsTT1stDay + 151)
#define ActSeeDatExaAnn (ActChgCrsTT1stDay + 152)
#define ActEdiExaAnn (ActChgCrsTT1stDay + 153)
#define ActRcvExaAnn (ActChgCrsTT1stDay + 154)
#define ActPrnExaAnn (ActChgCrsTT1stDay + 155)
#define ActReqRemExaAnn (ActChgCrsTT1stDay + 156)
#define ActRemExaAnn (ActChgCrsTT1stDay + 157)
#define ActHidExaAnn (ActChgCrsTT1stDay + 158)
#define ActShoExaAnn (ActChgCrsTT1stDay + 159)
/*****************************************************************************/
/******************************** Files tab **********************************/

View File

@ -455,10 +455,13 @@ En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
#define Log_PLATFORM_VERSION "SWAD 18.112.2 (2019-04-12)"
#define Log_PLATFORM_VERSION "SWAD 18.113 (2019-04-17)"
#define CSS_FILE "swad18.112.1.css"
#define JS_FILE "swad18.92.js"
/*
Version 18.113: Apr 17, 2019 Individual locking of the edition of each project through a padlock icon. Only the teacher of the subject can lock / unlock each project. Suggested by Pedro Villar Castro. (243000 lines)
ALTER TABLE projects ADD COLUMN Locked ENUM('N','Y') NOT NULL DEFAULT 'N' AFTER DptCod;
Version 18.112.2: Apr 12, 2019 Changed icons for preassigned/non-preassigned projects. (242783 lines)
Copy the following icon to icon public directory:
sudo cp icon/user-slash.svg /var/www/html/swad/icon/

View File

@ -2097,6 +2097,7 @@ mysql> DESCRIBE projects;
| PrjCod | int(11) | NO | PRI | NULL | auto_increment |
| CrsCod | int(11) | NO | MUL | -1 | |
| DptCod | int(11) | NO | | -1 | |
| Locked | enum('N','Y') | NO | | N | |
| Hidden | enum('N','Y') | NO | | N | |
| Preassigned | enum('N','Y') | NO | | N | |
| NumStds | int(11) | NO | | 1 | |
@ -2109,12 +2110,13 @@ mysql> DESCRIBE projects;
| Materials | text | NO | | NULL | |
| URL | varchar(255) | NO | | NULL | |
+-------------+-------------------------------------+------+-----+---------+----------------+
14 rows in set (0,00 sec)
15 rows in set (0.00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS projects ("
"PrjCod INT NOT NULL AUTO_INCREMENT,"
"CrsCod INT NOT NULL DEFAULT -1,"
"DptCod INT NOT NULL DEFAULT -1,"
"Locked ENUM('N','Y') NOT NULL DEFAULT 'N',"
"Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',"
"Preassigned ENUM('N','Y') NOT NULL DEFAULT 'N',"
"NumStds INT NOT NULL DEFAULT 1,"

View File

@ -288,6 +288,24 @@ void Ico_PutContextualIconToPrint (Act_Action_t NextAction,void (*FuncParams) (v
Txt_Print);
}
void Ico_PutContextualIconToLock (Act_Action_t NextAction,void (*FuncParams) (void))
{
extern const char *Txt_Lock;
Lay_PutContextualLinkOnlyIcon (NextAction,NULL,FuncParams,
"unlock.svg",
Txt_Lock);
}
void Ico_PutContextualIconToUnlock (Act_Action_t NextAction,void (*FuncParams) (void))
{
extern const char *Txt_Unlock;
Lay_PutContextualLinkOnlyIcon (NextAction,NULL,FuncParams,
"lock.svg",
Txt_Unlock);
}
/*****************************************************************************/
/**************** Show an icon inside a div (without text) *******************/
/*****************************************************************************/

View File

@ -65,6 +65,8 @@ void Ico_PutContextualIconToView (Act_Action_t NextAction,void (*FuncParams) (vo
void Ico_PutContextualIconToUnhide (Act_Action_t NextAction,const char *Anchor,void (*FuncParams) (void));
void Ico_PutContextualIconToHide (Act_Action_t NextAction,const char *Anchor,void (*FuncParams) (void));
void Ico_PutContextualIconToPrint (Act_Action_t NextAction,void (*FuncParams) (void));
void Ico_PutContextualIconToLock (Act_Action_t NextAction,void (*FuncParams) (void));
void Ico_PutContextualIconToUnlock (Act_Action_t NextAction,void (*FuncParams) (void));
void Ico_PutDivIcon (const char *DivClass,const char *Icon,const char *Title);
void Ico_PutDivIconLink (const char *DivClass,const char *Icon,const char *Title);

View File

@ -94,7 +94,13 @@ static const char *PreassignedNonpreassigImage[Prj_NUM_PREASSIGNED_NONPREASSIG]
"user.svg", // Prj_PREASSIGNED
"user-slash.svg", // Prj_NONPREASSIG
};
/*
static const char *PreassignedNonpreassigImage[Prj_NUM_PREASSIGNED_NONPREASSIG] =
{
"lock.svg", // Prj_PREASSIGNED
"unlock.svg", // Prj_NONPREASSIG
};
*/
/*****************************************************************************/
/***************************** Private variables *****************************/
/*****************************************************************************/
@ -169,10 +175,11 @@ static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInProject);
static void Prj_GetParamPrjOrder (void);
static void Prj_PutFormsToRemEditOnePrj (long PrjCod,Prj_HiddenVisibl_t Hidden,
static void Prj_PutFormsToRemEditOnePrj (const struct Project *Prj,
bool ICanViewProjectFiles);
static bool Prj_CheckIfICanEditProject (long PrjCod);
static bool Prj_CheckIfICanLockProject (void);
static void Prj_ResetProject (struct Project *Prj);
@ -948,18 +955,14 @@ static void Prj_ShowOneProject (unsigned NumIndex,struct Project *Prj,
switch (ProjectView)
{
case Prj_LIST_PROJECTS:
fprintf (Gbl.F.Out,"<td rowspan=\"3\" class=\"CONTEXT_COL COLOR%u\">",
Gbl.RowEvenOdd);
Prj_PutFormsToRemEditOnePrj (Prj->PrjCod,Prj->Hidden,
ICanViewProjectFiles);
case Prj_FILE_BROWSER_PROJECT:
fprintf (Gbl.F.Out,"<td rowspan=\"3\" class=\"CONTEXT_COL");
if (ProjectView == Prj_LIST_PROJECTS)
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"\">");
Prj_PutFormsToRemEditOnePrj (Prj,ICanViewProjectFiles);
fprintf (Gbl.F.Out,"</td>");
break;
case Prj_FILE_BROWSER_PROJECT:
fprintf (Gbl.F.Out,"<td rowspan=\"3\" class=\"CONTEXT_COL\">");
Prj_PutFormsToRemEditOnePrj (Prj->PrjCod,Prj->Hidden,
ICanViewProjectFiles);
fprintf (Gbl.F.Out,"</td>");
break;
default:
break;
}
@ -2191,18 +2194,18 @@ void Prj_PutHiddenParamPrjOrder (void)
/****************** Put a link (form) to edit one project ********************/
/*****************************************************************************/
static void Prj_PutFormsToRemEditOnePrj (long PrjCod,Prj_HiddenVisibl_t Hidden,
static void Prj_PutFormsToRemEditOnePrj (const struct Project *Prj,
bool ICanViewProjectFiles)
{
Gbl.Prjs.PrjCod = PrjCod; // Used as parameter in contextual links
Gbl.Prjs.PrjCod = Prj->PrjCod; // Used as parameter in contextual links
if (Prj_CheckIfICanEditProject (PrjCod))
if (Prj_CheckIfICanEditProject (Prj->PrjCod))
{
/***** Put form to remove project *****/
Ico_PutContextualIconToRemove (ActReqRemPrj,Prj_PutCurrentParams);
/***** Put form to hide/show project *****/
switch (Hidden)
switch (Prj->Hidden)
{
case Prj_HIDDEN:
Ico_PutContextualIconToUnhide (ActShoPrj,NULL,Prj_PutCurrentParams);
@ -2222,6 +2225,18 @@ static void Prj_PutFormsToRemEditOnePrj (long PrjCod,Prj_HiddenVisibl_t Hidden,
/***** Put form to print project *****/
Ico_PutContextualIconToPrint (ActPrnOnePrj,Prj_PutCurrentParams);
/***** Put form to lock project *****/
if (Prj_CheckIfICanLockProject ())
switch (Prj->Locked)
{
case Prj_LOCKED:
Ico_PutContextualIconToUnlock (ActUnlPrj,Prj_PutCurrentParams);
break;
case Prj_UNLOCKED:
Ico_PutContextualIconToLock (ActLckPrj,Prj_PutCurrentParams);
break;
}
}
/*****************************************************************************/
@ -2261,6 +2276,22 @@ static bool Prj_CheckIfICanEditProject (long PrjCod)
}
}
/*****************************************************************************/
/************************ Can I block a given project? ***********************/
/*****************************************************************************/
static bool Prj_CheckIfICanLockProject (void)
{
switch (Gbl.Usrs.Me.Role.Logged)
{
case Rol_TCH:
case Rol_SYS_ADM:
return true;
default:
return false;
}
}
/*****************************************************************************/
/************************** List all the projects ****************************/
/*****************************************************************************/
@ -2516,17 +2547,18 @@ void Prj_GetDataOfProjectByCod (struct Project *Prj)
"SELECT PrjCod," // row[ 0]
"CrsCod," // row[ 1]
"DptCod," // row[ 2]
"Hidden," // row[ 3]
"Preassigned," // row[ 4]
"NumStds," // row[ 5]
"Proposal," // row[ 6]
"UNIX_TIMESTAMP(CreatTime)," // row[ 7]
"UNIX_TIMESTAMP(ModifTime)," // row[ 8]
"Title," // row[ 9]
"Description," // row[10]
"Knowledge," // row[11]
"Materials," // row[12]
"URL" // row[13]
"Locked," // row[ 3]
"Hidden," // row[ 4]
"Preassigned," // row[ 5]
"NumStds," // row[ 6]
"Proposal," // row[ 7]
"UNIX_TIMESTAMP(CreatTime)," // row[ 8]
"UNIX_TIMESTAMP(ModifTime)," // row[ 9]
"Title," // row[10]
"Description," // row[11]
"Knowledge," // row[12]
"Materials," // row[13]
"URL" // row[14]
" FROM projects"
" WHERE PrjCod=%ld AND CrsCod=%ld",
Prj->PrjCod,
@ -2544,56 +2576,60 @@ void Prj_GetDataOfProjectByCod (struct Project *Prj)
/* Get code of the department (row[2]) */
Prj->DptCod = Str_ConvertStrCodToLongCod (row[2]);
/* Get whether the project is hidden or not (row[3]) */
Prj->Hidden = (row[3][0] == 'Y') ? Prj_HIDDEN :
/* Get whether the project is locked or not (row[3]) */
Prj->Locked = (row[3][0] == 'Y') ? Prj_LOCKED :
Prj_UNLOCKED;
/* Get whether the project is hidden or not (row[4]) */
Prj->Hidden = (row[4][0] == 'Y') ? Prj_HIDDEN :
Prj_VISIBL;
/* Get if project is preassigned or not (row[4]) */
Prj->Preassigned = (row[4][0] == 'Y') ? Prj_PREASSIGNED :
/* Get if project is preassigned or not (row[5]) */
Prj->Preassigned = (row[5][0] == 'Y') ? Prj_PREASSIGNED :
Prj_NONPREASSIG;
/* Get if project is preassigned or not (row[5]) */
NumLong = Str_ConvertStrCodToLongCod (row[5]);
/* Get if project is preassigned or not (row[6]) */
NumLong = Str_ConvertStrCodToLongCod (row[6]);
if (NumLong >= 0)
Prj->NumStds = (unsigned) NumLong;
else
Prj->NumStds = 1;
/* Get project status (row[6]) */
/* Get project status (row[7]) */
Prj->Proposal = Prj_PROPOSAL_DEFAULT;
for (Proposal = (Prj_Proposal_t) 0;
Proposal <= (Prj_Proposal_t) (Prj_NUM_PROPOSAL_TYPES - 1);
Proposal++)
if (!strcmp (Prj_Proposal_DB[Proposal],row[6]))
if (!strcmp (Prj_Proposal_DB[Proposal],row[7]))
{
Prj->Proposal = Proposal;
break;
}
/* Get creation date/time (row[7] holds the creation UTC time) */
Prj->CreatTime = Dat_GetUNIXTimeFromStr (row[7]);
/* Get creation date/time (row[8] holds the creation UTC time) */
Prj->CreatTime = Dat_GetUNIXTimeFromStr (row[8]);
/* Get modification date/time (row[8] holds the modification UTC time) */
Prj->ModifTime = Dat_GetUNIXTimeFromStr (row[8]);
/* Get modification date/time (row[9] holds the modification UTC time) */
Prj->ModifTime = Dat_GetUNIXTimeFromStr (row[9]);
/* Get the title of the project (row[9]) */
Str_Copy (Prj->Title,row[9],
/* Get the title of the project (row[10]) */
Str_Copy (Prj->Title,row[10],
Prj_MAX_BYTES_PROJECT_TITLE);
/* Get the description of the project (row[10]) */
Str_Copy (Prj->Description,row[10],
/* Get the description of the project (row[11]) */
Str_Copy (Prj->Description,row[11],
Cns_MAX_BYTES_TEXT);
/* Get the required knowledge for the project (row[11]) */
Str_Copy (Prj->Knowledge,row[11],
/* Get the required knowledge for the project (row[12]) */
Str_Copy (Prj->Knowledge,row[12],
Cns_MAX_BYTES_TEXT);
/* Get the required materials for the project (row[12]) */
Str_Copy (Prj->Materials,row[12],
/* Get the required materials for the project (row[13]) */
Str_Copy (Prj->Materials,row[13],
Cns_MAX_BYTES_TEXT);
/* Get the URL of the project (row[13]) */
Str_Copy (Prj->URL,row[13],
/* Get the URL of the project (row[14]) */
Str_Copy (Prj->URL,row[14],
Cns_MAX_BYTES_WWW);
}
@ -2617,6 +2653,7 @@ static void Prj_ResetProject (struct Project *Prj)
if (Prj->PrjCod <= 0) // If > 0 ==> keep value
Prj->PrjCod = -1L;
Prj->CrsCod = -1L;
Prj->Locked = Prj_UNLOCKED;
Prj->Hidden = Prj_NEW_PRJ_HIDDEN_VISIBL_DEFAULT;
Prj->Preassigned = Prj_NEW_PRJ_PREASSIGNED_NONPREASSIG_DEFAULT;
Prj->NumStds = 1;
@ -2853,6 +2890,90 @@ void Prj_ShowProject (void)
Prj_ShowProjectsInCurrentPage ();
}
/*****************************************************************************/
/************************** Lock edition of a project ************************/
/*****************************************************************************/
void Prj_LockProjectEdition (void)
{
extern const char *Txt_The_edition_of_project_X_is_now_locked;
struct Project Prj;
/***** Allocate memory for the project *****/
Prj_AllocMemProject (&Prj);
/***** Get parameters *****/
Prj_GetParams ();
if ((Prj.PrjCod = Prj_GetParamPrjCod ()) < 0)
Lay_ShowErrorAndExit ("Code of project is missing.");
/***** Get data of the project from database *****/
Prj_GetDataOfProjectByCod (&Prj);
if (Prj_CheckIfICanEditProject (Prj.PrjCod))
{
/***** Hide project *****/
DB_QueryUPDATE ("can not hide project",
"UPDATE projects SET Locked='Y'"
" WHERE PrjCod=%ld AND CrsCod=%ld",
Prj.PrjCod,Gbl.Hierarchy.Crs.CrsCod);
/***** Write message to show the change made *****/
Ale_ShowAlert (Ale_SUCCESS,Txt_The_edition_of_project_X_is_now_locked,
Prj.Title);
}
else
Lay_NoPermissionExit ();
/***** Free memory of the project *****/
Prj_FreeMemProject (&Prj);
/***** Show projects again *****/
Prj_ShowProjectsInCurrentPage ();
}
/*****************************************************************************/
/************************* Unlock edition of a project ***********************/
/*****************************************************************************/
void Prj_UnlockProjectEdition (void)
{
extern const char *Txt_The_edition_of_project_X_is_now_unlocked;
struct Project Prj;
/***** Allocate memory for the project *****/
Prj_AllocMemProject (&Prj);
/***** Get parameters *****/
Prj_GetParams ();
if ((Prj.PrjCod = Prj_GetParamPrjCod ()) < 0)
Lay_ShowErrorAndExit ("Code of project is missing.");
/***** Get data of the project from database *****/
Prj_GetDataOfProjectByCod (&Prj);
if (Prj_CheckIfICanEditProject (Prj.PrjCod))
{
/***** Show project *****/
DB_QueryUPDATE ("can not show project",
"UPDATE projects SET Locked='N'"
" WHERE PrjCod=%ld AND CrsCod=%ld",
Prj.PrjCod,Gbl.Hierarchy.Crs.CrsCod);
/***** Write message to show the change made *****/
Ale_ShowAlert (Ale_SUCCESS,Txt_The_edition_of_project_X_is_now_unlocked,
Prj.Title);
}
else
Lay_NoPermissionExit ();
/***** Free memory of the project *****/
Prj_FreeMemProject (&Prj);
/***** Show projects again *****/
Prj_ShowProjectsInCurrentPage ();
}
/*****************************************************************************/
/********************* Put a form to create/edit project *********************/
/*****************************************************************************/

View File

@ -57,6 +57,12 @@ typedef enum
#define Prj_FILTER_PREASSIGNED_DEFAULT (1 << Prj_PREASSIGNED) // on
#define Prj_FILTER_NONPREASSIG_DEFAULT (1 << Prj_NONPREASSIG) // on
typedef enum
{
Prj_LOCKED = 0,
Prj_UNLOCKED = 1,
} Prj_Locked_t;
/* Hidden projects / visible projects */
#define Prj_NUM_HIDDEN_VISIBL 2
typedef enum
@ -121,6 +127,7 @@ struct Project
{
long PrjCod;
long CrsCod;
Prj_Locked_t Locked;
Prj_HiddenVisibl_t Hidden;
Prj_PreassignedNonpreassig_t Preassigned;
unsigned NumStds;
@ -191,6 +198,8 @@ void Prj_ReqRemProject (void);
void Prj_RemoveProject (void);
void Prj_HideProject (void);
void Prj_ShowProject (void);
void Prj_LockProjectEdition (void);
void Prj_UnlockProjectEdition (void);
void Prj_RecFormProject (void);
void Prj_RemoveCrsProjects (long CrsCod);

View File

@ -17581,6 +17581,27 @@ const char *Txt_Locations =
"Localiza&ccedil;&otilde;es";
#endif
const char *Txt_Lock =
#if L==1 // ca
"Tancar";
#elif L==2 // de
"Abschlie&szlig;en";
#elif L==3 // en
"Lock";
#elif L==4 // es
"Bloquear";
#elif L==5 // fr
"Verrouiller";
#elif L==6 // gn
"Bloquear"; // Okoteve traducción
#elif L==7 // it
"Bloccare";
#elif L==8 // pl
"Zablokowa&cacute;";
#elif L==9 // pt
"Trancar";
#endif
const char *Txt_LOG_More_info =
#if L==1 // ca
"Observaciones"; // Necessita traduccio
@ -43990,6 +44011,48 @@ const char *Txt_The_department_X_has_been_renamed_as_Y = // Warning: it is very
"O departamento <strong>%s</strong> foi renomeado como <strong>%s</strong>.";
#endif
const char *Txt_The_edition_of_project_X_is_now_locked = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"L'edici&oacute; del projecte <strong>%s</strong> ara est&agrave; bloquejada.";
#elif L==2 // de
"Die Edition des Projekts <strong>%s</strong> ist jetzt gesperrt.";
#elif L==3 // en
"The edition of the project <strong>%s</strong> is now locked.";
#elif L==4 // es
"La edici&oacute;n del proyecto <strong>%s</strong> ahora est&aacute; bloqueada.";
#elif L==5 // fr
"L'&eacute;dition du projet <strong>%s</strong> est maintenant verrouill&eacute;e.";
#elif L==6 // gn
"La edici&oacute;n del proyecto <strong>%s</strong> ahora est&aacute; bloqueada."; // Okoteve traducción
#elif L==7 // it
"L'edizione del progetto <strong>%s</strong> &egrave; ora chiusa a chiave.";
#elif L==8 // pl
"Edycja projektu <strong>%s</strong> jest teraz zablokowana.";
#elif L==9 // pt
"A edi&ccedil;&atilde;o do projeto <strong>%s</strong> est&aacute; agora bloqueada.";
#endif
const char *Txt_The_edition_of_project_X_is_now_unlocked = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"L'edici&oacute; del projecte <strong>%s</strong> ara est&agrave; desbloquejada.";
#elif L==2 // de
"Die Edition des Projekts <strong>%s</strong> ist jetzt freigeschaltet.";
#elif L==3 // en
"The edition of the project <strong>%s</strong> is now unlocked.";
#elif L==4 // es
"La edici&oacute;n del proyecto <strong>%s</strong> ahora est&aacute; desbloqueada.";
#elif L==5 // fr
"L'&eacute;dition du projet <strong>%s</strong> est maintenant ouverte.";
#elif L==6 // gn
"La edici&oacute;n del proyecto <strong>%s</strong> ahora est&aacute; desbloqueada."; // Okoteve traducción
#elif L==7 // it
"L'edizione del progetto <strong>%s</strong> &egrave; ora chiusa a chiave.";
#elif L==8 // pl
"Edycja projektu <strong>%s</strong> jest teraz odblokowana.";
#elif L==9 // pt
"A edi&ccedil;&atilde;o do projeto <strong>%s</strong> est&aacute; agora desbloqueada.";
#endif
const char *Txt_The_email_X_has_been_confirmed = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"El correo <strong>%s</strong> ha sido confirmado."; // Necessita traduccio
@ -51371,6 +51434,27 @@ const char *Txt_unknown_TIME =
"desconhecido";
#endif
const char *Txt_Unlock =
#if L==1 // ca
"Desbloquejar";
#elif L==2 // de
"Aufschlie&szlig;en";
#elif L==3 // en
"Unlock";
#elif L==4 // es
"Desbloquear";
#elif L==5 // fr
"D&eacute;verouiller";
#elif L==6 // gn
"Desbloquear"; // Okoteve traducción
#elif L==7 // it
"Sbloccare";
#elif L==8 // pl
"Odblokowa&cacute;";
#elif L==9 // pt
"Desbloquear";
#endif
const char *Txt_unread_MESSAGE =
#if L==1 // ca
"no le&iacute;do"; // Necessita traduccio