From 2d2dd7bb9eb189e0449f046c9b486ef3dc7db168 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Tue, 5 Apr 2016 02:59:34 +0200 Subject: [PATCH] Version 15.179 --- swad_action.c | 11 ++-- swad_action.h | 157 ++++++++++++++++++++++---------------------- swad_changelog.h | 15 +++-- swad_file_browser.c | 7 +- swad_parameter.c | 9 +-- swad_test.c | 78 +++++++++++++++++----- swad_test.h | 1 + swad_text.c | 46 ++++++++++++- 8 files changed, 212 insertions(+), 112 deletions(-) diff --git a/swad_action.c b/swad_action.c index 00a8064e..977eb470 100644 --- a/swad_action.c +++ b/swad_action.c @@ -755,7 +755,8 @@ Assessment: 617. ActLstTstQst List for edition several self-assessment test questions 618. ActRcvTstQst Receive 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 622. ActEnableTag Enable 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 1149. ActChgDatBrf Change metadata of 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 */ @@ -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}, /* 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}, + /* 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}, /* 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}, /* 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}, - /* 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}, }; @@ -4203,7 +4205,7 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq ActChgCal1stDay, // #1485 ActChgCrsTT1stDay, // #1486 ActChgMyTT1stDay, // #1487 - ActAskRemOldBrf, // #1488 + ActReqRemOldBrf, // #1488 ActRemOldBrf, // #1489 ActSeeSocTmlGbl, // #1490 -1, // #1491 (obsolete action) @@ -4238,6 +4240,7 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq ActSeeSocPrf, // #1520 ActFrmLogIn, // #1521 ActUpdSignUpReq, // #1522 + ActReqRemTstQst, // #1523 }; /*****************************************************************************/ diff --git a/swad_action.h b/swad_action.h index 60eb6d8c..760179c3 100644 --- a/swad_action.h +++ b/swad_action.h @@ -71,9 +71,9 @@ typedef enum 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 @@ -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 ActLstTstQst (ActRcvRchTxtCrsLnk+107) #define ActRcvTstQst (ActRcvRchTxtCrsLnk+108) -#define ActRemTstQst (ActRcvRchTxtCrsLnk+109) -#define ActShfTstQst (ActRcvRchTxtCrsLnk+110) -#define ActCfgTst (ActRcvRchTxtCrsLnk+111) -#define ActEnableTag (ActRcvRchTxtCrsLnk+112) -#define ActDisableTag (ActRcvRchTxtCrsLnk+113) -#define ActRenTag (ActRcvRchTxtCrsLnk+114) -#define ActRcvCfgTst (ActRcvRchTxtCrsLnk+115) +#define ActReqRemTstQst (ActRcvRchTxtCrsLnk+109) +#define ActRemTstQst (ActRcvRchTxtCrsLnk+110) +#define ActShfTstQst (ActRcvRchTxtCrsLnk+111) +#define ActCfgTst (ActRcvRchTxtCrsLnk+112) +#define ActEnableTag (ActRcvRchTxtCrsLnk+113) +#define ActDisableTag (ActRcvRchTxtCrsLnk+114) +#define ActRenTag (ActRcvRchTxtCrsLnk+115) +#define ActRcvCfgTst (ActRcvRchTxtCrsLnk+116) -#define ActReqSeeMyTstExa (ActRcvRchTxtCrsLnk+116) -#define ActSeeMyTstExa (ActRcvRchTxtCrsLnk+117) -#define ActSeeOneTstExaMe (ActRcvRchTxtCrsLnk+118) -#define ActReqSeeUsrTstExa (ActRcvRchTxtCrsLnk+119) -#define ActSeeUsrTstExa (ActRcvRchTxtCrsLnk+120) -#define ActSeeOneTstExaOth (ActRcvRchTxtCrsLnk+121) +#define ActReqSeeMyTstExa (ActRcvRchTxtCrsLnk+117) +#define ActSeeMyTstExa (ActRcvRchTxtCrsLnk+118) +#define ActSeeOneTstExaMe (ActRcvRchTxtCrsLnk+119) +#define ActReqSeeUsrTstExa (ActRcvRchTxtCrsLnk+120) +#define ActSeeUsrTstExa (ActRcvRchTxtCrsLnk+121) +#define ActSeeOneTstExaOth (ActRcvRchTxtCrsLnk+122) -#define ActPrnCal (ActRcvRchTxtCrsLnk+122) -#define ActChgCal1stDay (ActRcvRchTxtCrsLnk+123) +#define ActPrnCal (ActRcvRchTxtCrsLnk+123) +#define ActChgCal1stDay (ActRcvRchTxtCrsLnk+124) -#define ActEdiExaAnn (ActRcvRchTxtCrsLnk+124) -#define ActRcvExaAnn (ActRcvRchTxtCrsLnk+125) -#define ActPrnExaAnn (ActRcvRchTxtCrsLnk+126) -#define ActRemExaAnn (ActRcvRchTxtCrsLnk+127) +#define ActEdiExaAnn (ActRcvRchTxtCrsLnk+125) +#define ActRcvExaAnn (ActRcvRchTxtCrsLnk+126) +#define ActPrnExaAnn (ActRcvRchTxtCrsLnk+127) +#define ActRemExaAnn (ActRcvRchTxtCrsLnk+128) -#define ActChgToSeeMrk (ActRcvRchTxtCrsLnk+128) +#define ActChgToSeeMrk (ActRcvRchTxtCrsLnk+129) -#define ActSeeMrkCrs (ActRcvRchTxtCrsLnk+129) -#define ActExpSeeMrkCrs (ActRcvRchTxtCrsLnk+130) -#define ActConSeeMrkCrs (ActRcvRchTxtCrsLnk+131) -#define ActReqDatSeeMrkCrs (ActRcvRchTxtCrsLnk+132) -#define ActSeeMyMrkCrs (ActRcvRchTxtCrsLnk+133) +#define ActSeeMrkCrs (ActRcvRchTxtCrsLnk+130) +#define ActExpSeeMrkCrs (ActRcvRchTxtCrsLnk+131) +#define ActConSeeMrkCrs (ActRcvRchTxtCrsLnk+132) +#define ActReqDatSeeMrkCrs (ActRcvRchTxtCrsLnk+133) +#define ActSeeMyMrkCrs (ActRcvRchTxtCrsLnk+134) -#define ActSeeMrkGrp (ActRcvRchTxtCrsLnk+134) -#define ActExpSeeMrkGrp (ActRcvRchTxtCrsLnk+135) -#define ActConSeeMrkGrp (ActRcvRchTxtCrsLnk+136) -#define ActReqDatSeeMrkGrp (ActRcvRchTxtCrsLnk+137) -#define ActSeeMyMrkGrp (ActRcvRchTxtCrsLnk+138) +#define ActSeeMrkGrp (ActRcvRchTxtCrsLnk+135) +#define ActExpSeeMrkGrp (ActRcvRchTxtCrsLnk+136) +#define ActConSeeMrkGrp (ActRcvRchTxtCrsLnk+137) +#define ActReqDatSeeMrkGrp (ActRcvRchTxtCrsLnk+138) +#define ActSeeMyMrkGrp (ActRcvRchTxtCrsLnk+139) -#define ActChgToAdmMrk (ActRcvRchTxtCrsLnk+139) +#define ActChgToAdmMrk (ActRcvRchTxtCrsLnk+140) -#define ActAdmMrkCrs (ActRcvRchTxtCrsLnk+140) -#define ActReqRemFilMrkCrs (ActRcvRchTxtCrsLnk+141) -#define ActRemFilMrkCrs (ActRcvRchTxtCrsLnk+142) -#define ActRemFolMrkCrs (ActRcvRchTxtCrsLnk+143) -#define ActCopMrkCrs (ActRcvRchTxtCrsLnk+144) -#define ActPasMrkCrs (ActRcvRchTxtCrsLnk+145) -#define ActRemTreMrkCrs (ActRcvRchTxtCrsLnk+146) -#define ActFrmCreMrkCrs (ActRcvRchTxtCrsLnk+147) -#define ActCreFolMrkCrs (ActRcvRchTxtCrsLnk+148) -#define ActRenFolMrkCrs (ActRcvRchTxtCrsLnk+149) -#define ActRcvFilMrkCrsDZ (ActRcvRchTxtCrsLnk+150) -#define ActRcvFilMrkCrsCla (ActRcvRchTxtCrsLnk+151) -#define ActExpAdmMrkCrs (ActRcvRchTxtCrsLnk+152) -#define ActConAdmMrkCrs (ActRcvRchTxtCrsLnk+153) -#define ActZIPAdmMrkCrs (ActRcvRchTxtCrsLnk+154) -#define ActShoMrkCrs (ActRcvRchTxtCrsLnk+155) -#define ActHidMrkCrs (ActRcvRchTxtCrsLnk+156) -#define ActReqDatAdmMrkCrs (ActRcvRchTxtCrsLnk+157) -#define ActChgDatAdmMrkCrs (ActRcvRchTxtCrsLnk+158) -#define ActDowAdmMrkCrs (ActRcvRchTxtCrsLnk+159) -#define ActChgNumRowHeaCrs (ActRcvRchTxtCrsLnk+160) -#define ActChgNumRowFooCrs (ActRcvRchTxtCrsLnk+161) +#define ActAdmMrkCrs (ActRcvRchTxtCrsLnk+141) +#define ActReqRemFilMrkCrs (ActRcvRchTxtCrsLnk+142) +#define ActRemFilMrkCrs (ActRcvRchTxtCrsLnk+143) +#define ActRemFolMrkCrs (ActRcvRchTxtCrsLnk+144) +#define ActCopMrkCrs (ActRcvRchTxtCrsLnk+145) +#define ActPasMrkCrs (ActRcvRchTxtCrsLnk+146) +#define ActRemTreMrkCrs (ActRcvRchTxtCrsLnk+147) +#define ActFrmCreMrkCrs (ActRcvRchTxtCrsLnk+148) +#define ActCreFolMrkCrs (ActRcvRchTxtCrsLnk+149) +#define ActRenFolMrkCrs (ActRcvRchTxtCrsLnk+150) +#define ActRcvFilMrkCrsDZ (ActRcvRchTxtCrsLnk+151) +#define ActRcvFilMrkCrsCla (ActRcvRchTxtCrsLnk+152) +#define ActExpAdmMrkCrs (ActRcvRchTxtCrsLnk+153) +#define ActConAdmMrkCrs (ActRcvRchTxtCrsLnk+154) +#define ActZIPAdmMrkCrs (ActRcvRchTxtCrsLnk+155) +#define ActShoMrkCrs (ActRcvRchTxtCrsLnk+156) +#define ActHidMrkCrs (ActRcvRchTxtCrsLnk+157) +#define ActReqDatAdmMrkCrs (ActRcvRchTxtCrsLnk+158) +#define ActChgDatAdmMrkCrs (ActRcvRchTxtCrsLnk+159) +#define ActDowAdmMrkCrs (ActRcvRchTxtCrsLnk+160) +#define ActChgNumRowHeaCrs (ActRcvRchTxtCrsLnk+161) +#define ActChgNumRowFooCrs (ActRcvRchTxtCrsLnk+162) -#define ActAdmMrkGrp (ActRcvRchTxtCrsLnk+162) -#define ActReqRemFilMrkGrp (ActRcvRchTxtCrsLnk+163) -#define ActRemFilMrkGrp (ActRcvRchTxtCrsLnk+164) -#define ActRemFolMrkGrp (ActRcvRchTxtCrsLnk+165) -#define ActCopMrkGrp (ActRcvRchTxtCrsLnk+166) -#define ActPasMrkGrp (ActRcvRchTxtCrsLnk+167) -#define ActRemTreMrkGrp (ActRcvRchTxtCrsLnk+168) -#define ActFrmCreMrkGrp (ActRcvRchTxtCrsLnk+169) -#define ActCreFolMrkGrp (ActRcvRchTxtCrsLnk+170) -#define ActRenFolMrkGrp (ActRcvRchTxtCrsLnk+171) -#define ActRcvFilMrkGrpDZ (ActRcvRchTxtCrsLnk+172) -#define ActRcvFilMrkGrpCla (ActRcvRchTxtCrsLnk+173) -#define ActExpAdmMrkGrp (ActRcvRchTxtCrsLnk+174) -#define ActConAdmMrkGrp (ActRcvRchTxtCrsLnk+175) -#define ActZIPAdmMrkGrp (ActRcvRchTxtCrsLnk+176) -#define ActShoMrkGrp (ActRcvRchTxtCrsLnk+177) -#define ActHidMrkGrp (ActRcvRchTxtCrsLnk+178) -#define ActReqDatAdmMrkGrp (ActRcvRchTxtCrsLnk+179) -#define ActChgDatAdmMrkGrp (ActRcvRchTxtCrsLnk+180) -#define ActDowAdmMrkGrp (ActRcvRchTxtCrsLnk+181) -#define ActChgNumRowHeaGrp (ActRcvRchTxtCrsLnk+182) -#define ActChgNumRowFooGrp (ActRcvRchTxtCrsLnk+183) +#define ActAdmMrkGrp (ActRcvRchTxtCrsLnk+163) +#define ActReqRemFilMrkGrp (ActRcvRchTxtCrsLnk+164) +#define ActRemFilMrkGrp (ActRcvRchTxtCrsLnk+165) +#define ActRemFolMrkGrp (ActRcvRchTxtCrsLnk+166) +#define ActCopMrkGrp (ActRcvRchTxtCrsLnk+167) +#define ActPasMrkGrp (ActRcvRchTxtCrsLnk+168) +#define ActRemTreMrkGrp (ActRcvRchTxtCrsLnk+169) +#define ActFrmCreMrkGrp (ActRcvRchTxtCrsLnk+170) +#define ActCreFolMrkGrp (ActRcvRchTxtCrsLnk+171) +#define ActRenFolMrkGrp (ActRcvRchTxtCrsLnk+172) +#define ActRcvFilMrkGrpDZ (ActRcvRchTxtCrsLnk+173) +#define ActRcvFilMrkGrpCla (ActRcvRchTxtCrsLnk+174) +#define ActExpAdmMrkGrp (ActRcvRchTxtCrsLnk+175) +#define ActConAdmMrkGrp (ActRcvRchTxtCrsLnk+176) +#define ActZIPAdmMrkGrp (ActRcvRchTxtCrsLnk+177) +#define ActShoMrkGrp (ActRcvRchTxtCrsLnk+178) +#define ActHidMrkGrp (ActRcvRchTxtCrsLnk+179) +#define ActReqDatAdmMrkGrp (ActRcvRchTxtCrsLnk+180) +#define ActChgDatAdmMrkGrp (ActRcvRchTxtCrsLnk+181) +#define ActDowAdmMrkGrp (ActRcvRchTxtCrsLnk+182) +#define ActChgNumRowHeaGrp (ActRcvRchTxtCrsLnk+183) +#define ActChgNumRowFooGrp (ActRcvRchTxtCrsLnk+184) /*****************************************************************************/ /******************************* 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 ActDowBrf (ActSeeAllStaCrs+81) -#define ActAskRemOldBrf (ActSeeAllStaCrs+82) +#define ActReqRemOldBrf (ActSeeAllStaCrs+82) #define ActRemOldBrf (ActSeeAllStaCrs+83) /*****************************************************************************/ diff --git a/swad_changelog.h b/swad_changelog.h index 4ea2de77..3ac6b1cf 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -126,22 +126,27 @@ // TODO: Do not show e-mails of administrators and teachers in lists openly // TODO: Fix bug in marks reported by Francisco Ocaña // 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 *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 15.178.2 (2016-04-05)" -#define CSS_FILE "swad15.178.1.css" +#define Log_PLATFORM_VERSION "SWAD 15.179 (2016-04-05)" +#define CSS_FILE "swad15.178.2.css" #define JS_FILE "swad15.178.2.js" // 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 /* - 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: Apr 04, 2016 Code refactoring related to images in test questions. (198244 lines) 5 changes necessary in database: diff --git a/swad_file_browser.c b/swad_file_browser.c index c7aa2ebb..4129afa7 100644 --- a/swad_file_browser.c +++ b/swad_file_browser.c @@ -2074,7 +2074,7 @@ void Brw_GetParAndInitFileBrowser (void) case ActReqDatBrf: case ActChgDatBrf: 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 Gbl.FileBrowser.Type = Brw_ADMI_BRIEF_USR; break; @@ -2346,7 +2346,6 @@ static void Brw_GetParamsPathInTreeAndFileName (void) { if (strstr (Gbl.FileBrowser.FilFolLnkName,"..")) // ".." is not allowed in the path Lay_ShowErrorAndExit ("Wrong path."); - Gbl.FileBrowser.FileType = FileType; break; } @@ -3542,7 +3541,7 @@ static void Brw_WriteTopBeforeShowingFileBrowser (void) /***** Write contextual links *****/ if (Gbl.FileBrowser.Type == Brw_ADMI_BRIEF_USR && - Gbl.Action.Act != ActAskRemOldBrf) + Gbl.Action.Act != ActReqRemOldBrf) { fprintf (Gbl.F.Out,"
"); Brw_PutFormToAskRemOldFiles (); @@ -11462,7 +11461,7 @@ static void Brw_PutFormToAskRemOldFiles (void) { extern const char *Txt_Remove_old_files; - Lay_PutContextualLink (ActAskRemOldBrf,Brw_PutParamsContextualLink, + Lay_PutContextualLink (ActReqRemOldBrf,Brw_PutParamsContextualLink, "remove-on64x64.png", Txt_Remove_old_files,Txt_Remove_old_files); } diff --git a/swad_parameter.c b/swad_parameter.c index 407f93e6..6baebf92 100644 --- a/swad_parameter.c +++ b/swad_parameter.c @@ -502,8 +502,8 @@ unsigned Par_GetParameter (tParamType ParamType,const char *ParamName, /***** For multiple parameters, loop for any ocurrence of the parameter For unique parameter, find only the first ocurrence *****/ for (Param = Gbl.Params.List, NumTimes = 0; - Param != NULL && (FindMoreThanOneOcurrence || NumTimes < 1); - NumTimes++) + Param != NULL && (FindMoreThanOneOcurrence || NumTimes == 0); + ) /***** Find next ocurrence of parameter in list of parameters *****/ for (ParamFound = false; Param != NULL && !ParamFound; @@ -531,7 +531,8 @@ unsigned Par_GetParameter (tParamType ParamType,const char *ParamName, 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 *****/ if (ParamPtr) @@ -541,7 +542,7 @@ unsigned Par_GetParameter (tParamType ParamType,const char *ParamName, if (Param->FileName.Start != 0) // It's a file 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 *****/ /* Check if there is space to copy separator */ diff --git a/swad_test.c b/swad_test.c index 9ae1c57b..6f64452f 100644 --- a/swad_test.c +++ b/swad_test.c @@ -208,7 +208,7 @@ static void Tst_WriteScoreStart (unsigned ColSpan); static void Tst_WriteScoreEnd (void); static void Tst_WriteParamQstCod (unsigned NumQst,long QstCod); static void Tst_GetAndWriteTagsQst (long QstCod); -static int Tst_GetParamsTst (void); +static bool Tst_GetParamsTst (void); static unsigned Tst_GetAndCheckParamNumTst (void); static void Tst_GetParamNumQst (void); static bool Tst_GetCreateXMLFromForm (void); @@ -2606,7 +2606,6 @@ static void Tst_ListOneOrMoreQuestionsToEdit (unsigned long NumRows,MYSQL_RES *m Act_FormStart (ActLstTstQst); Sta_WriteParamsDatesSeeAccesses (); Tst_WriteParamEditQst (); - Par_PutHiddenParamChar ("OnlyThisQst",'N'); Par_PutHiddenParamUnsigned ("Order",(unsigned) Order); Act_LinkFormSubmit (Txt_TST_STR_ORDER_FULL[Order],"TIT_TBL"); 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 */ fprintf (Gbl.F.Out,"" "",Gbl.RowEvenOdd); - Act_FormStart (ActRemTstQst); + Act_FormStart (ActReqRemTstQst); Sta_WriteParamsDatesSeeAccesses (); Tst_WriteParamEditQst (); Par_PutHiddenParamLong ("QstCod",QstCod); - Par_PutHiddenParamChar ("OnlyThisQst", - NumRows == 1 ? 'Y' : - 'N'); // If there are only one row, don't list again after removing + if (NumRows == 1) + Par_PutHiddenParamChar ("OnlyThisQst",'Y'); // If there are only one row, don't list again after removing Lay_PutIconRemove (); Act_FormEnd (); fprintf (Gbl.F.Out,""); @@ -2723,9 +2721,8 @@ static void Tst_ListOneOrMoreQuestionsToEdit (unsigned long NumRows,MYSQL_RES *m Par_PutHiddenParamLong ("QstCod",QstCod); Sta_WriteParamsDatesSeeAccesses (); Tst_WriteParamEditQst (); - Par_PutHiddenParamChar ("OnlyThisQst", - NumRows == 1 ? 'Y' : - 'N'); // If editing only one question, don't edit others + if (NumRows == 1) + Par_PutHiddenParamChar ("OnlyThisQst",'Y'); // If editing only one question, don't edit others Par_PutHiddenParamUnsigned ("Order",(unsigned) Gbl.Test.SelectedOrderType); fprintf (Gbl.F.Out,"%ld?"; // Necessita traduccio +#elif L==2 + "Wollen Sie die Frage %ld wirklich entfernen?"; +#elif L==3 + "Do you really want to remove the question %ld?"; +#elif L==4 + "¿Realmente desea eliminar la pregunta %ld?"; +#elif L==5 + "Voulez-vous vraiment supprimer la question %ld?"; +#elif L==6 + "¿Realmente desea eliminar la pregunta %ld?"; // Okoteve traducción +#elif L==7 + "Vuoi realmente rimuovere la domanda %ld?"; +#elif L==8 + "Czy na pewno chcesz usunac pytanie %ld?"; +#elif L==9 + "Você realmente deseja remover a questão %ld?"; +#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 #if L==1 "¿Realmente desea eliminar la encuesta %s?"; // Necessita traduccio @@ -30131,6 +30152,27 @@ const char *Txt_Remove_photo = "Remover foto"; #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ń pytanie"; +#elif L==9 + "Remover questão"; +#endif + const char *Txt_Remove_record_field = #if L==1 "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] = { #if L==1 // Tst_ORDER_STEM - "Pregunta" // Necessita traduccio + "Pregunta" #elif L==2 "Frage" #elif L==3 @@ -47411,7 +47453,7 @@ const char *Txt_TST_STR_ORDER_SHORT[Tst_NUM_TYPES_ORDER_QST] = #elif L==7 "Domanda" #elif L==8 - "Question" // Potrzebujesz tlumaczenie + "Pytanie" #elif L==9 "Questão" #endif