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
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
};
/*****************************************************************************/

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
#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)
/*****************************************************************************/

View File

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

View File

@ -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,"<div class=\"CONTEXT_MENU\">");
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);
}

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

View File

@ -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,"<tr>"
"<td class=\"BT%u\">",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,"</td>");
@ -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,"<input type=\"checkbox\" name=\"Shuffle\" value=\"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 *************/
/*****************************************************************************/
// 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_types_of_answer;
@ -4114,8 +4111,7 @@ static int Tst_GetParamsTst (void)
Gbl.Test.XML.CreateXML = Tst_GetCreateXMLFromForm ();
}
return Error ? 0 :
1;
return !Error;
}
/*****************************************************************************/
@ -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)
@ -5483,7 +5530,8 @@ void Tst_RemoveQst (void)
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 ******/
/***** 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');

View File

@ -147,6 +147,7 @@ void Tst_ReceiveQst (void);
bool Tst_CheckIfQstFormatIsCorrectAndCountNumOptions (void);
long Tst_GetIntAnsFromStr (char *Str);
double Tst_GetFloatAnsFromStr (char *Str);
void Tst_RequestRemoveQst (void);
void Tst_RemoveQst (void);
void Tst_ChangeShuffleQst (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
#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
#if L==1
"&iquest;Realmente desea eliminar la encuesta <strong>%s</strong>?"; // 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&nacute; pytanie";
#elif L==9
"Remover quest&atilde;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&atilde;o"
#endif