Version 15.179

This commit is contained in:
Antonio Cañas Vargas 2016-04-05 02:59:34 +02:00
parent b7fb17f33d
commit 2d2dd7bb9e
8 changed files with 212 additions and 112 deletions

View File

@ -755,7 +755,8 @@ Assessment:
617. ActLstTstQst List for edition several self-assessment test questions 617. ActLstTstQst List for edition several self-assessment test questions
618. ActRcvTstQst Receive a question of self-assessment 618. ActRcvTstQst Receive a question of self-assessment
619. ActShfTstQst Change shuffle of of a question of self-assessment 619. ActShfTstQst Change shuffle of of a question of self-assessment
620. ActRemTstQst Remove a question of self-assessment NEW 620. ActReqRemTstQst Request removing a self-assesment test question
620. ActRemTstQst Remove a self-assesment test question
621. ActCfgTst Request renaming of tags of questions of self-assesment 621. ActCfgTst Request renaming of tags of questions of self-assesment
622. ActEnableTag Enable a tag 622. ActEnableTag Enable a tag
623. ActDisableTag Disable a tag 623. ActDisableTag Disable a tag
@ -1336,7 +1337,7 @@ NEW 1071. ActFrmLogIn Show landing page (forms to log in and to create a new
1148. ActReqDatBrf Ask for metadata of a file in the briefcase 1148. ActReqDatBrf Ask for metadata of a file in the briefcase
1149. ActChgDatBrf Change metadata of a file in the briefcase 1149. ActChgDatBrf Change metadata of a file in the briefcase
1150. ActDowBrf Download a file in the briefcase 1150. ActDowBrf Download a file in the briefcase
1151. ActAskRemOldBrf Ask for removing old files in the briefcase 1151. ActReqRemOldBrf Ask for removing old files in the briefcase
1152. ActRemOldBrf Remove old files in the briefcase 1152. ActRemOldBrf Remove old files in the briefcase
*/ */
@ -2066,6 +2067,7 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActImpTstQst */{1008,-1,TabAss,ActReqTst ,0x110,0x100,0x000,Act_CONTENT_DATA,Act_MAIN_WINDOW,NULL ,TsI_ImportQstsFromXML ,NULL}, /* ActImpTstQst */{1008,-1,TabAss,ActReqTst ,0x110,0x100,0x000,Act_CONTENT_DATA,Act_MAIN_WINDOW,NULL ,TsI_ImportQstsFromXML ,NULL},
/* ActLstTstQst */{ 132,-1,TabAss,ActReqTst ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Tst_ListQuestionsToEdit ,NULL}, /* ActLstTstQst */{ 132,-1,TabAss,ActReqTst ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Tst_ListQuestionsToEdit ,NULL},
/* ActRcvTstQst */{ 126,-1,TabAss,ActReqTst ,0x110,0x100,0x000,Act_CONTENT_DATA,Act_MAIN_WINDOW,NULL ,Tst_ReceiveQst ,NULL}, /* ActRcvTstQst */{ 126,-1,TabAss,ActReqTst ,0x110,0x100,0x000,Act_CONTENT_DATA,Act_MAIN_WINDOW,NULL ,Tst_ReceiveQst ,NULL},
/* ActReqRemTstQst */{1523,-1,TabAss,ActReqTst ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Tst_RequestRemoveQst ,NULL},
/* ActRemTstQst */{ 133,-1,TabAss,ActReqTst ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Tst_RemoveQst ,NULL}, /* ActRemTstQst */{ 133,-1,TabAss,ActReqTst ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Tst_RemoveQst ,NULL},
/* ActShfTstQst */{ 455,-1,TabAss,ActReqTst ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Tst_ChangeShuffleQst ,NULL}, /* ActShfTstQst */{ 455,-1,TabAss,ActReqTst ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Tst_ChangeShuffleQst ,NULL},
@ -2706,7 +2708,7 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActReqDatBrf */{1047,-1,TabPrf,ActAdmBrf ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Brw_ShowFileMetadata ,NULL}, /* ActReqDatBrf */{1047,-1,TabPrf,ActAdmBrf ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Brw_ShowFileMetadata ,NULL},
/* ActChgDatBrf */{1048,-1,TabPrf,ActAdmBrf ,0x1FC,0x1FC,0x1FC,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Brw_ChgFileMetadata ,NULL}, /* ActChgDatBrf */{1048,-1,TabPrf,ActAdmBrf ,0x1FC,0x1FC,0x1FC,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Brw_ChgFileMetadata ,NULL},
/* ActDowBrf */{1123,-1,TabPrf,ActAdmBrf ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_DOWNLD_FILE,Brw_DownloadFile ,NULL ,NULL}, /* ActDowBrf */{1123,-1,TabPrf,ActAdmBrf ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_DOWNLD_FILE,Brw_DownloadFile ,NULL ,NULL},
/* ActAskRemOldBrf */{1488,-1,TabPrf,ActAdmBrf ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Brw_AskRemoveOldFiles ,NULL}, /* ActReqRemOldBrf */{1488,-1,TabPrf,ActAdmBrf ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Brw_AskRemoveOldFiles ,NULL},
/* ActRemOldBrf */{1489,-1,TabPrf,ActAdmBrf ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Brw_RemoveOldFiles ,NULL}, /* ActRemOldBrf */{1489,-1,TabPrf,ActAdmBrf ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Brw_RemoveOldFiles ,NULL},
}; };
@ -4203,7 +4205,7 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
ActChgCal1stDay, // #1485 ActChgCal1stDay, // #1485
ActChgCrsTT1stDay, // #1486 ActChgCrsTT1stDay, // #1486
ActChgMyTT1stDay, // #1487 ActChgMyTT1stDay, // #1487
ActAskRemOldBrf, // #1488 ActReqRemOldBrf, // #1488
ActRemOldBrf, // #1489 ActRemOldBrf, // #1489
ActSeeSocTmlGbl, // #1490 ActSeeSocTmlGbl, // #1490
-1, // #1491 (obsolete action) -1, // #1491 (obsolete action)
@ -4238,6 +4240,7 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
ActSeeSocPrf, // #1520 ActSeeSocPrf, // #1520
ActFrmLogIn, // #1521 ActFrmLogIn, // #1521
ActUpdSignUpReq, // #1522 ActUpdSignUpReq, // #1522
ActReqRemTstQst, // #1523
}; };
/*****************************************************************************/ /*****************************************************************************/

View File

@ -71,9 +71,9 @@ typedef enum
typedef int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action typedef int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action
#define Act_NUM_ACTIONS (1+9+51+15+90+70+67+205+183+144+172+36+27+83) #define Act_NUM_ACTIONS (1+9+51+15+90+70+67+205+184+144+172+36+27+83)
#define Act_MAX_ACTION_COD 1522 #define Act_MAX_ACTION_COD 1523
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 20 #define Act_MAX_OPTIONS_IN_MENU_PER_TAB 20
@ -782,90 +782,91 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica
#define ActImpTstQst (ActRcvRchTxtCrsLnk+106) #define ActImpTstQst (ActRcvRchTxtCrsLnk+106)
#define ActLstTstQst (ActRcvRchTxtCrsLnk+107) #define ActLstTstQst (ActRcvRchTxtCrsLnk+107)
#define ActRcvTstQst (ActRcvRchTxtCrsLnk+108) #define ActRcvTstQst (ActRcvRchTxtCrsLnk+108)
#define ActRemTstQst (ActRcvRchTxtCrsLnk+109) #define ActReqRemTstQst (ActRcvRchTxtCrsLnk+109)
#define ActShfTstQst (ActRcvRchTxtCrsLnk+110) #define ActRemTstQst (ActRcvRchTxtCrsLnk+110)
#define ActCfgTst (ActRcvRchTxtCrsLnk+111) #define ActShfTstQst (ActRcvRchTxtCrsLnk+111)
#define ActEnableTag (ActRcvRchTxtCrsLnk+112) #define ActCfgTst (ActRcvRchTxtCrsLnk+112)
#define ActDisableTag (ActRcvRchTxtCrsLnk+113) #define ActEnableTag (ActRcvRchTxtCrsLnk+113)
#define ActRenTag (ActRcvRchTxtCrsLnk+114) #define ActDisableTag (ActRcvRchTxtCrsLnk+114)
#define ActRcvCfgTst (ActRcvRchTxtCrsLnk+115) #define ActRenTag (ActRcvRchTxtCrsLnk+115)
#define ActRcvCfgTst (ActRcvRchTxtCrsLnk+116)
#define ActReqSeeMyTstExa (ActRcvRchTxtCrsLnk+116) #define ActReqSeeMyTstExa (ActRcvRchTxtCrsLnk+117)
#define ActSeeMyTstExa (ActRcvRchTxtCrsLnk+117) #define ActSeeMyTstExa (ActRcvRchTxtCrsLnk+118)
#define ActSeeOneTstExaMe (ActRcvRchTxtCrsLnk+118) #define ActSeeOneTstExaMe (ActRcvRchTxtCrsLnk+119)
#define ActReqSeeUsrTstExa (ActRcvRchTxtCrsLnk+119) #define ActReqSeeUsrTstExa (ActRcvRchTxtCrsLnk+120)
#define ActSeeUsrTstExa (ActRcvRchTxtCrsLnk+120) #define ActSeeUsrTstExa (ActRcvRchTxtCrsLnk+121)
#define ActSeeOneTstExaOth (ActRcvRchTxtCrsLnk+121) #define ActSeeOneTstExaOth (ActRcvRchTxtCrsLnk+122)
#define ActPrnCal (ActRcvRchTxtCrsLnk+122) #define ActPrnCal (ActRcvRchTxtCrsLnk+123)
#define ActChgCal1stDay (ActRcvRchTxtCrsLnk+123) #define ActChgCal1stDay (ActRcvRchTxtCrsLnk+124)
#define ActEdiExaAnn (ActRcvRchTxtCrsLnk+124) #define ActEdiExaAnn (ActRcvRchTxtCrsLnk+125)
#define ActRcvExaAnn (ActRcvRchTxtCrsLnk+125) #define ActRcvExaAnn (ActRcvRchTxtCrsLnk+126)
#define ActPrnExaAnn (ActRcvRchTxtCrsLnk+126) #define ActPrnExaAnn (ActRcvRchTxtCrsLnk+127)
#define ActRemExaAnn (ActRcvRchTxtCrsLnk+127) #define ActRemExaAnn (ActRcvRchTxtCrsLnk+128)
#define ActChgToSeeMrk (ActRcvRchTxtCrsLnk+128) #define ActChgToSeeMrk (ActRcvRchTxtCrsLnk+129)
#define ActSeeMrkCrs (ActRcvRchTxtCrsLnk+129) #define ActSeeMrkCrs (ActRcvRchTxtCrsLnk+130)
#define ActExpSeeMrkCrs (ActRcvRchTxtCrsLnk+130) #define ActExpSeeMrkCrs (ActRcvRchTxtCrsLnk+131)
#define ActConSeeMrkCrs (ActRcvRchTxtCrsLnk+131) #define ActConSeeMrkCrs (ActRcvRchTxtCrsLnk+132)
#define ActReqDatSeeMrkCrs (ActRcvRchTxtCrsLnk+132) #define ActReqDatSeeMrkCrs (ActRcvRchTxtCrsLnk+133)
#define ActSeeMyMrkCrs (ActRcvRchTxtCrsLnk+133) #define ActSeeMyMrkCrs (ActRcvRchTxtCrsLnk+134)
#define ActSeeMrkGrp (ActRcvRchTxtCrsLnk+134) #define ActSeeMrkGrp (ActRcvRchTxtCrsLnk+135)
#define ActExpSeeMrkGrp (ActRcvRchTxtCrsLnk+135) #define ActExpSeeMrkGrp (ActRcvRchTxtCrsLnk+136)
#define ActConSeeMrkGrp (ActRcvRchTxtCrsLnk+136) #define ActConSeeMrkGrp (ActRcvRchTxtCrsLnk+137)
#define ActReqDatSeeMrkGrp (ActRcvRchTxtCrsLnk+137) #define ActReqDatSeeMrkGrp (ActRcvRchTxtCrsLnk+138)
#define ActSeeMyMrkGrp (ActRcvRchTxtCrsLnk+138) #define ActSeeMyMrkGrp (ActRcvRchTxtCrsLnk+139)
#define ActChgToAdmMrk (ActRcvRchTxtCrsLnk+139) #define ActChgToAdmMrk (ActRcvRchTxtCrsLnk+140)
#define ActAdmMrkCrs (ActRcvRchTxtCrsLnk+140) #define ActAdmMrkCrs (ActRcvRchTxtCrsLnk+141)
#define ActReqRemFilMrkCrs (ActRcvRchTxtCrsLnk+141) #define ActReqRemFilMrkCrs (ActRcvRchTxtCrsLnk+142)
#define ActRemFilMrkCrs (ActRcvRchTxtCrsLnk+142) #define ActRemFilMrkCrs (ActRcvRchTxtCrsLnk+143)
#define ActRemFolMrkCrs (ActRcvRchTxtCrsLnk+143) #define ActRemFolMrkCrs (ActRcvRchTxtCrsLnk+144)
#define ActCopMrkCrs (ActRcvRchTxtCrsLnk+144) #define ActCopMrkCrs (ActRcvRchTxtCrsLnk+145)
#define ActPasMrkCrs (ActRcvRchTxtCrsLnk+145) #define ActPasMrkCrs (ActRcvRchTxtCrsLnk+146)
#define ActRemTreMrkCrs (ActRcvRchTxtCrsLnk+146) #define ActRemTreMrkCrs (ActRcvRchTxtCrsLnk+147)
#define ActFrmCreMrkCrs (ActRcvRchTxtCrsLnk+147) #define ActFrmCreMrkCrs (ActRcvRchTxtCrsLnk+148)
#define ActCreFolMrkCrs (ActRcvRchTxtCrsLnk+148) #define ActCreFolMrkCrs (ActRcvRchTxtCrsLnk+149)
#define ActRenFolMrkCrs (ActRcvRchTxtCrsLnk+149) #define ActRenFolMrkCrs (ActRcvRchTxtCrsLnk+150)
#define ActRcvFilMrkCrsDZ (ActRcvRchTxtCrsLnk+150) #define ActRcvFilMrkCrsDZ (ActRcvRchTxtCrsLnk+151)
#define ActRcvFilMrkCrsCla (ActRcvRchTxtCrsLnk+151) #define ActRcvFilMrkCrsCla (ActRcvRchTxtCrsLnk+152)
#define ActExpAdmMrkCrs (ActRcvRchTxtCrsLnk+152) #define ActExpAdmMrkCrs (ActRcvRchTxtCrsLnk+153)
#define ActConAdmMrkCrs (ActRcvRchTxtCrsLnk+153) #define ActConAdmMrkCrs (ActRcvRchTxtCrsLnk+154)
#define ActZIPAdmMrkCrs (ActRcvRchTxtCrsLnk+154) #define ActZIPAdmMrkCrs (ActRcvRchTxtCrsLnk+155)
#define ActShoMrkCrs (ActRcvRchTxtCrsLnk+155) #define ActShoMrkCrs (ActRcvRchTxtCrsLnk+156)
#define ActHidMrkCrs (ActRcvRchTxtCrsLnk+156) #define ActHidMrkCrs (ActRcvRchTxtCrsLnk+157)
#define ActReqDatAdmMrkCrs (ActRcvRchTxtCrsLnk+157) #define ActReqDatAdmMrkCrs (ActRcvRchTxtCrsLnk+158)
#define ActChgDatAdmMrkCrs (ActRcvRchTxtCrsLnk+158) #define ActChgDatAdmMrkCrs (ActRcvRchTxtCrsLnk+159)
#define ActDowAdmMrkCrs (ActRcvRchTxtCrsLnk+159) #define ActDowAdmMrkCrs (ActRcvRchTxtCrsLnk+160)
#define ActChgNumRowHeaCrs (ActRcvRchTxtCrsLnk+160) #define ActChgNumRowHeaCrs (ActRcvRchTxtCrsLnk+161)
#define ActChgNumRowFooCrs (ActRcvRchTxtCrsLnk+161) #define ActChgNumRowFooCrs (ActRcvRchTxtCrsLnk+162)
#define ActAdmMrkGrp (ActRcvRchTxtCrsLnk+162) #define ActAdmMrkGrp (ActRcvRchTxtCrsLnk+163)
#define ActReqRemFilMrkGrp (ActRcvRchTxtCrsLnk+163) #define ActReqRemFilMrkGrp (ActRcvRchTxtCrsLnk+164)
#define ActRemFilMrkGrp (ActRcvRchTxtCrsLnk+164) #define ActRemFilMrkGrp (ActRcvRchTxtCrsLnk+165)
#define ActRemFolMrkGrp (ActRcvRchTxtCrsLnk+165) #define ActRemFolMrkGrp (ActRcvRchTxtCrsLnk+166)
#define ActCopMrkGrp (ActRcvRchTxtCrsLnk+166) #define ActCopMrkGrp (ActRcvRchTxtCrsLnk+167)
#define ActPasMrkGrp (ActRcvRchTxtCrsLnk+167) #define ActPasMrkGrp (ActRcvRchTxtCrsLnk+168)
#define ActRemTreMrkGrp (ActRcvRchTxtCrsLnk+168) #define ActRemTreMrkGrp (ActRcvRchTxtCrsLnk+169)
#define ActFrmCreMrkGrp (ActRcvRchTxtCrsLnk+169) #define ActFrmCreMrkGrp (ActRcvRchTxtCrsLnk+170)
#define ActCreFolMrkGrp (ActRcvRchTxtCrsLnk+170) #define ActCreFolMrkGrp (ActRcvRchTxtCrsLnk+171)
#define ActRenFolMrkGrp (ActRcvRchTxtCrsLnk+171) #define ActRenFolMrkGrp (ActRcvRchTxtCrsLnk+172)
#define ActRcvFilMrkGrpDZ (ActRcvRchTxtCrsLnk+172) #define ActRcvFilMrkGrpDZ (ActRcvRchTxtCrsLnk+173)
#define ActRcvFilMrkGrpCla (ActRcvRchTxtCrsLnk+173) #define ActRcvFilMrkGrpCla (ActRcvRchTxtCrsLnk+174)
#define ActExpAdmMrkGrp (ActRcvRchTxtCrsLnk+174) #define ActExpAdmMrkGrp (ActRcvRchTxtCrsLnk+175)
#define ActConAdmMrkGrp (ActRcvRchTxtCrsLnk+175) #define ActConAdmMrkGrp (ActRcvRchTxtCrsLnk+176)
#define ActZIPAdmMrkGrp (ActRcvRchTxtCrsLnk+176) #define ActZIPAdmMrkGrp (ActRcvRchTxtCrsLnk+177)
#define ActShoMrkGrp (ActRcvRchTxtCrsLnk+177) #define ActShoMrkGrp (ActRcvRchTxtCrsLnk+178)
#define ActHidMrkGrp (ActRcvRchTxtCrsLnk+178) #define ActHidMrkGrp (ActRcvRchTxtCrsLnk+179)
#define ActReqDatAdmMrkGrp (ActRcvRchTxtCrsLnk+179) #define ActReqDatAdmMrkGrp (ActRcvRchTxtCrsLnk+180)
#define ActChgDatAdmMrkGrp (ActRcvRchTxtCrsLnk+180) #define ActChgDatAdmMrkGrp (ActRcvRchTxtCrsLnk+181)
#define ActDowAdmMrkGrp (ActRcvRchTxtCrsLnk+181) #define ActDowAdmMrkGrp (ActRcvRchTxtCrsLnk+182)
#define ActChgNumRowHeaGrp (ActRcvRchTxtCrsLnk+182) #define ActChgNumRowHeaGrp (ActRcvRchTxtCrsLnk+183)
#define ActChgNumRowFooGrp (ActRcvRchTxtCrsLnk+183) #define ActChgNumRowFooGrp (ActRcvRchTxtCrsLnk+184)
/*****************************************************************************/ /*****************************************************************************/
/******************************* Users tab ***********************************/ /******************************* Users tab ***********************************/
@ -1392,7 +1393,7 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica
#define ActChgDatBrf (ActSeeAllStaCrs+80) #define ActChgDatBrf (ActSeeAllStaCrs+80)
#define ActDowBrf (ActSeeAllStaCrs+81) #define ActDowBrf (ActSeeAllStaCrs+81)
#define ActAskRemOldBrf (ActSeeAllStaCrs+82) #define ActReqRemOldBrf (ActSeeAllStaCrs+82)
#define ActRemOldBrf (ActSeeAllStaCrs+83) #define ActRemOldBrf (ActSeeAllStaCrs+83)
/*****************************************************************************/ /*****************************************************************************/

View File

@ -126,22 +126,27 @@
// TODO: Do not show e-mails of administrators and teachers in lists openly // TODO: Do not show e-mails of administrators and teachers in lists openly
// TODO: Fix bug in marks reported by Francisco Ocaña // TODO: Fix bug in marks reported by Francisco Ocaña
// TODO: In Statistics > Degrees, show only degrees with students // TODO: In Statistics > Degrees, show only degrees with students
// TODO: Change layout of confirm / reject incription. Use green and red buttons // TODO: Change layout of confirm / reject registration. Use green and red buttons
// TODO: Ask for confirmation when removing a test question // TODO: When editing an existing question, put upper left contextual link to remove the question
/*****************************************************************************/ /*****************************************************************************/
/****************************** Public constants *****************************/ /****************************** Public constants *****************************/
/*****************************************************************************/ /*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 15.178.2 (2016-04-05)" #define Log_PLATFORM_VERSION "SWAD 15.179 (2016-04-05)"
#define CSS_FILE "swad15.178.1.css" #define CSS_FILE "swad15.178.2.css"
#define JS_FILE "swad15.178.2.js" #define JS_FILE "swad15.178.2.js"
// Number of lines (includes comments but not blank lines) has been got with the following command: // Number of lines (includes comments but not blank lines) has been got with the following command:
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1 // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
/* /*
Version 15.178.2: Apr 04, 2016 Changes in JavaScript related to images in test questions. (198265 lines) Version 15.179: Apr 05, 2016 Fixed bug when getting a parameter.
Ask for confirmation when removing a test question. (198355 lines)
1 change necessary in database:
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1523','es','N','Preguntar si eliminar pregunta test');
Version 15.178.2: Apr 05, 2016 Changes in JavaScript related to images in test questions. (198265 lines)
Version 15.178.1: Apr 04, 2016 Changes in CSS related to images in test questions. (198240 lines) Version 15.178.1: Apr 04, 2016 Changes in CSS related to images in test questions. (198240 lines)
Version 15.178: Apr 04, 2016 Code refactoring related to images in test questions. (198244 lines) Version 15.178: Apr 04, 2016 Code refactoring related to images in test questions. (198244 lines)
5 changes necessary in database: 5 changes necessary in database:

View File

@ -2074,7 +2074,7 @@ void Brw_GetParAndInitFileBrowser (void)
case ActReqDatBrf: case ActReqDatBrf:
case ActChgDatBrf: case ActChgDatBrf:
case ActDowBrf: case ActDowBrf:
case ActAskRemOldBrf: // Ask for removing old files in briefcase case ActReqRemOldBrf: // Ask for removing old files in briefcase
case ActRemOldBrf: // Remove old files in briefcase case ActRemOldBrf: // Remove old files in briefcase
Gbl.FileBrowser.Type = Brw_ADMI_BRIEF_USR; Gbl.FileBrowser.Type = Brw_ADMI_BRIEF_USR;
break; break;
@ -2346,7 +2346,6 @@ static void Brw_GetParamsPathInTreeAndFileName (void)
{ {
if (strstr (Gbl.FileBrowser.FilFolLnkName,"..")) // ".." is not allowed in the path if (strstr (Gbl.FileBrowser.FilFolLnkName,"..")) // ".." is not allowed in the path
Lay_ShowErrorAndExit ("Wrong path."); Lay_ShowErrorAndExit ("Wrong path.");
Gbl.FileBrowser.FileType = FileType; Gbl.FileBrowser.FileType = FileType;
break; break;
} }
@ -3542,7 +3541,7 @@ static void Brw_WriteTopBeforeShowingFileBrowser (void)
/***** Write contextual links *****/ /***** Write contextual links *****/
if (Gbl.FileBrowser.Type == Brw_ADMI_BRIEF_USR && if (Gbl.FileBrowser.Type == Brw_ADMI_BRIEF_USR &&
Gbl.Action.Act != ActAskRemOldBrf) Gbl.Action.Act != ActReqRemOldBrf)
{ {
fprintf (Gbl.F.Out,"<div class=\"CONTEXT_MENU\">"); fprintf (Gbl.F.Out,"<div class=\"CONTEXT_MENU\">");
Brw_PutFormToAskRemOldFiles (); Brw_PutFormToAskRemOldFiles ();
@ -11462,7 +11461,7 @@ static void Brw_PutFormToAskRemOldFiles (void)
{ {
extern const char *Txt_Remove_old_files; extern const char *Txt_Remove_old_files;
Lay_PutContextualLink (ActAskRemOldBrf,Brw_PutParamsContextualLink, Lay_PutContextualLink (ActReqRemOldBrf,Brw_PutParamsContextualLink,
"remove-on64x64.png", "remove-on64x64.png",
Txt_Remove_old_files,Txt_Remove_old_files); Txt_Remove_old_files,Txt_Remove_old_files);
} }

View File

@ -502,8 +502,8 @@ unsigned Par_GetParameter (tParamType ParamType,const char *ParamName,
/***** For multiple parameters, loop for any ocurrence of the parameter /***** For multiple parameters, loop for any ocurrence of the parameter
For unique parameter, find only the first ocurrence *****/ For unique parameter, find only the first ocurrence *****/
for (Param = Gbl.Params.List, NumTimes = 0; for (Param = Gbl.Params.List, NumTimes = 0;
Param != NULL && (FindMoreThanOneOcurrence || NumTimes < 1); Param != NULL && (FindMoreThanOneOcurrence || NumTimes == 0);
NumTimes++) )
/***** Find next ocurrence of parameter in list of parameters *****/ /***** Find next ocurrence of parameter in list of parameters *****/
for (ParamFound = false; for (ParamFound = false;
Param != NULL && !ParamFound; Param != NULL && !ParamFound;
@ -531,7 +531,8 @@ unsigned Par_GetParameter (tParamType ParamType,const char *ParamName,
if (ParamFound) if (ParamFound)
{ {
if (NumTimes == 0) // The first ocurrence of this parameter NumTimes++;
if (NumTimes == 1) // NumTimes == 1 ==> the first ocurrence of this parameter
{ {
/***** Get the first ocurrence of this parameter in list *****/ /***** Get the first ocurrence of this parameter in list *****/
if (ParamPtr) if (ParamPtr)
@ -541,7 +542,7 @@ unsigned Par_GetParameter (tParamType ParamType,const char *ParamName,
if (Param->FileName.Start != 0) // It's a file if (Param->FileName.Start != 0) // It's a file
FindMoreThanOneOcurrence = false; FindMoreThanOneOcurrence = false;
} }
else // Not the first ocurrence of this parameter else // NumTimes > 1 ==> not the first ocurrence of this parameter
{ {
/***** Add separator when param multiple *****/ /***** Add separator when param multiple *****/
/* Check if there is space to copy separator */ /* Check if there is space to copy separator */

View File

@ -208,7 +208,7 @@ static void Tst_WriteScoreStart (unsigned ColSpan);
static void Tst_WriteScoreEnd (void); static void Tst_WriteScoreEnd (void);
static void Tst_WriteParamQstCod (unsigned NumQst,long QstCod); static void Tst_WriteParamQstCod (unsigned NumQst,long QstCod);
static void Tst_GetAndWriteTagsQst (long QstCod); static void Tst_GetAndWriteTagsQst (long QstCod);
static int Tst_GetParamsTst (void); static bool Tst_GetParamsTst (void);
static unsigned Tst_GetAndCheckParamNumTst (void); static unsigned Tst_GetAndCheckParamNumTst (void);
static void Tst_GetParamNumQst (void); static void Tst_GetParamNumQst (void);
static bool Tst_GetCreateXMLFromForm (void); static bool Tst_GetCreateXMLFromForm (void);
@ -2606,7 +2606,6 @@ static void Tst_ListOneOrMoreQuestionsToEdit (unsigned long NumRows,MYSQL_RES *m
Act_FormStart (ActLstTstQst); Act_FormStart (ActLstTstQst);
Sta_WriteParamsDatesSeeAccesses (); Sta_WriteParamsDatesSeeAccesses ();
Tst_WriteParamEditQst (); Tst_WriteParamEditQst ();
Par_PutHiddenParamChar ("OnlyThisQst",'N');
Par_PutHiddenParamUnsigned ("Order",(unsigned) Order); Par_PutHiddenParamUnsigned ("Order",(unsigned) Order);
Act_LinkFormSubmit (Txt_TST_STR_ORDER_FULL[Order],"TIT_TBL"); Act_LinkFormSubmit (Txt_TST_STR_ORDER_FULL[Order],"TIT_TBL");
if (Order == Gbl.Test.SelectedOrderType) if (Order == Gbl.Test.SelectedOrderType)
@ -2652,13 +2651,12 @@ static void Tst_ListOneOrMoreQuestionsToEdit (unsigned long NumRows,MYSQL_RES *m
/* Write icon to remove the question */ /* Write icon to remove the question */
fprintf (Gbl.F.Out,"<tr>" fprintf (Gbl.F.Out,"<tr>"
"<td class=\"BT%u\">",Gbl.RowEvenOdd); "<td class=\"BT%u\">",Gbl.RowEvenOdd);
Act_FormStart (ActRemTstQst); Act_FormStart (ActReqRemTstQst);
Sta_WriteParamsDatesSeeAccesses (); Sta_WriteParamsDatesSeeAccesses ();
Tst_WriteParamEditQst (); Tst_WriteParamEditQst ();
Par_PutHiddenParamLong ("QstCod",QstCod); Par_PutHiddenParamLong ("QstCod",QstCod);
Par_PutHiddenParamChar ("OnlyThisQst", if (NumRows == 1)
NumRows == 1 ? 'Y' : Par_PutHiddenParamChar ("OnlyThisQst",'Y'); // If there are only one row, don't list again after removing
'N'); // If there are only one row, don't list again after removing
Lay_PutIconRemove (); Lay_PutIconRemove ();
Act_FormEnd (); Act_FormEnd ();
fprintf (Gbl.F.Out,"</td>"); fprintf (Gbl.F.Out,"</td>");
@ -2723,9 +2721,8 @@ static void Tst_ListOneOrMoreQuestionsToEdit (unsigned long NumRows,MYSQL_RES *m
Par_PutHiddenParamLong ("QstCod",QstCod); Par_PutHiddenParamLong ("QstCod",QstCod);
Sta_WriteParamsDatesSeeAccesses (); Sta_WriteParamsDatesSeeAccesses ();
Tst_WriteParamEditQst (); Tst_WriteParamEditQst ();
Par_PutHiddenParamChar ("OnlyThisQst", if (NumRows == 1)
NumRows == 1 ? 'Y' : Par_PutHiddenParamChar ("OnlyThisQst",'Y'); // If editing only one question, don't edit others
'N'); // If editing only one question, don't edit others
Par_PutHiddenParamUnsigned ("Order",(unsigned) Gbl.Test.SelectedOrderType); Par_PutHiddenParamUnsigned ("Order",(unsigned) Gbl.Test.SelectedOrderType);
fprintf (Gbl.F.Out,"<input type=\"checkbox\" name=\"Shuffle\" value=\"Y\""); fprintf (Gbl.F.Out,"<input type=\"checkbox\" name=\"Shuffle\" value=\"Y\"");
if (Str_ConvertToUpperLetter (row[3][0]) == 'Y') if (Str_ConvertToUpperLetter (row[3][0]) == 'Y')
@ -4040,9 +4037,9 @@ static void Tst_GetAndWriteTagsQst (long QstCod)
/*****************************************************************************/ /*****************************************************************************/
/************ Get parameters for the selection of test questions *************/ /************ Get parameters for the selection of test questions *************/
/*****************************************************************************/ /*****************************************************************************/
// Return 1 (OK) if all parameters are found, or 0 (error) if any necessary parameter is not found // Return true (OK) if all parameters are found, or false (error) if any necessary parameter is not found
static int Tst_GetParamsTst (void) static bool Tst_GetParamsTst (void)
{ {
extern const char *Txt_You_must_select_one_ore_more_tags; extern const char *Txt_You_must_select_one_ore_more_tags;
extern const char *Txt_You_must_select_one_ore_more_types_of_answer; extern const char *Txt_You_must_select_one_ore_more_types_of_answer;
@ -4114,8 +4111,7 @@ static int Tst_GetParamsTst (void)
Gbl.Test.XML.CreateXML = Tst_GetCreateXMLFromForm (); Gbl.Test.XML.CreateXML = Tst_GetCreateXMLFromForm ();
} }
return Error ? 0 : return !Error;
1;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -5469,7 +5465,58 @@ static void Tst_EnableOrDisableTag (long TagCod,bool TagHidden)
} }
/*****************************************************************************/ /*****************************************************************************/
/******************************* Remove a question ***************************/ /******************** Request the removal of a question **********************/
/*****************************************************************************/
void Tst_RequestRemoveQst (void)
{
extern const char *Txt_Do_you_really_want_to_remove_the_question_X;
extern const char *Txt_Remove_question;
char YN[1+1];
bool EditingOnlyThisQst;
/***** Get the question code *****/
if (!Tst_GetQstCod ())
Lay_ShowErrorAndExit ("Wrong code of question.");
/***** Get a parameter that indicates whether it's necessary
to continue listing the rest of questions ******/
Par_GetParToText ("OnlyThisQst",YN,1);
EditingOnlyThisQst = (Str_ConvertToUpperLetter (YN[0]) == 'Y');
/***** Start form *****/
Act_FormStart (ActRemTstQst);
Par_PutHiddenParamLong ("QstCod",Gbl.Test.QstCod);
if (EditingOnlyThisQst)
Par_PutHiddenParamChar ("OnlyThisQst",'Y');
else
{
if (Tst_GetParamsTst ()) // Get other parameters from the form
{
Sta_WriteParamsDatesSeeAccesses ();
Tst_WriteParamEditQst ();
}
Tst_FreeTagsList ();
}
/***** Ask for confirmation of removing *****/
sprintf (Gbl.Message,Txt_Do_you_really_want_to_remove_the_question_X,
Gbl.Test.QstCod);
Lay_ShowAlert (Lay_WARNING,Gbl.Message);
Lay_PutRemoveButton (Txt_Remove_question);
/***** End form *****/
Act_FormEnd ();
/***** Continue editing questions *****/
if (EditingOnlyThisQst)
Tst_ListOneQstToEdit ();
else
Tst_ListQuestionsToEdit ();
}
/*****************************************************************************/
/***************************** Remove a question *****************************/
/*****************************************************************************/ /*****************************************************************************/
void Tst_RemoveQst (void) void Tst_RemoveQst (void)
@ -5483,7 +5530,8 @@ void Tst_RemoveQst (void)
if (!Tst_GetQstCod ()) if (!Tst_GetQstCod ())
Lay_ShowErrorAndExit ("Wrong code of question."); Lay_ShowErrorAndExit ("Wrong code of question.");
/***** Get a parameter that indicates whether it's necessary to continue listing the rest of questions ******/ /***** Get a parameter that indicates whether it's necessary
to continue listing the rest of questions ******/
Par_GetParToText ("OnlyThisQst",YN,1); Par_GetParToText ("OnlyThisQst",YN,1);
EditingOnlyThisQst = (Str_ConvertToUpperLetter (YN[0]) == 'Y'); EditingOnlyThisQst = (Str_ConvertToUpperLetter (YN[0]) == 'Y');

View File

@ -147,6 +147,7 @@ void Tst_ReceiveQst (void);
bool Tst_CheckIfQstFormatIsCorrectAndCountNumOptions (void); bool Tst_CheckIfQstFormatIsCorrectAndCountNumOptions (void);
long Tst_GetIntAnsFromStr (char *Str); long Tst_GetIntAnsFromStr (char *Str);
double Tst_GetFloatAnsFromStr (char *Str); double Tst_GetFloatAnsFromStr (char *Str);
void Tst_RequestRemoveQst (void);
void Tst_RemoveQst (void); void Tst_RemoveQst (void);
void Tst_ChangeShuffleQst (void); void Tst_ChangeShuffleQst (void);
void Tst_InsertOrUpdateQstTagsAnsIntoDB (void); void Tst_InsertOrUpdateQstTagsAnsIntoDB (void);

View File

@ -9003,6 +9003,27 @@ const char *Txt_Do_you_really_want_to_remove_the_group_X_Y_students_ = // Warnin
"Doing so will remove %u students from that group."; // Necessita de tradução "Doing so will remove %u students from that group."; // Necessita de tradução
#endif #endif
const char *Txt_Do_you_really_want_to_remove_the_question_X = // Warning: it is very important to include %ld in the following sentences
#if L==1
"&iquest;Realmente desea eliminar la pregunta <strong>%ld</strong>?"; // Necessita traduccio
#elif L==2
"Wollen Sie die Frage <strong>%ld</strong> wirklich entfernen?";
#elif L==3
"Do you really want to remove the question <strong>%ld</strong>?";
#elif L==4
"&iquest;Realmente desea eliminar la pregunta <strong>%ld</strong>?";
#elif L==5
"Voulez-vous vraiment supprimer la question <strong>%ld</strong>?";
#elif L==6
"&iquest;Realmente desea eliminar la pregunta <strong>%ld</strong>?"; // Okoteve traducción
#elif L==7
"Vuoi realmente rimuovere la domanda <strong>%ld</strong>?";
#elif L==8
"Czy na pewno chcesz usunac pytanie <strong>%ld</strong>?";
#elif L==9
"Voc&ecirc; realmente deseja remover a quest&atilde;o <strong>%ld</strong>?";
#endif
const char *Txt_Do_you_really_want_to_remove_the_survey_X = // Warning: it is very important to include %s in the following sentences const char *Txt_Do_you_really_want_to_remove_the_survey_X = // Warning: it is very important to include %s in the following sentences
#if L==1 #if L==1
"&iquest;Realmente desea eliminar la encuesta <strong>%s</strong>?"; // Necessita traduccio "&iquest;Realmente desea eliminar la encuesta <strong>%s</strong>?"; // Necessita traduccio
@ -30131,6 +30152,27 @@ const char *Txt_Remove_photo =
"Remover foto"; "Remover foto";
#endif #endif
const char *Txt_Remove_question =
#if L==1
"Eliminar pregunta";
#elif L==2
"Entfernen Frage";
#elif L==3
"Remove question";
#elif L==4
"Eliminar pregunta";
#elif L==5
"Supprimer question";
#elif L==6
"Eliminar pregunta"; // Okoteve traducción
#elif L==7
"Rimuovere domanda";
#elif L==8
"Usu&nacute; pytanie";
#elif L==9
"Remover quest&atilde;o";
#endif
const char *Txt_Remove_record_field = const char *Txt_Remove_record_field =
#if L==1 #if L==1
"Eliminar campo de ficha"; // Necessita traduccio "Eliminar campo de ficha"; // Necessita traduccio
@ -47397,7 +47439,7 @@ const char *Txt_TST_STR_ORDER_FULL[Tst_NUM_TYPES_ORDER_QST] =
const char *Txt_TST_STR_ORDER_SHORT[Tst_NUM_TYPES_ORDER_QST] = const char *Txt_TST_STR_ORDER_SHORT[Tst_NUM_TYPES_ORDER_QST] =
{ {
#if L==1 // Tst_ORDER_STEM #if L==1 // Tst_ORDER_STEM
"Pregunta" // Necessita traduccio "Pregunta"
#elif L==2 #elif L==2
"Frage" "Frage"
#elif L==3 #elif L==3
@ -47411,7 +47453,7 @@ const char *Txt_TST_STR_ORDER_SHORT[Tst_NUM_TYPES_ORDER_QST] =
#elif L==7 #elif L==7
"Domanda" "Domanda"
#elif L==8 #elif L==8
"Question" // Potrzebujesz tlumaczenie "Pytanie"
#elif L==9 #elif L==9
"Quest&atilde;o" "Quest&atilde;o"
#endif #endif