mirror of https://github.com/acanas/swad-core.git
Version 16.251.2
This commit is contained in:
parent
de4185ba70
commit
979ecb9e9b
|
@ -504,6 +504,7 @@ Assessment:
|
|||
NEW. ActShoGam Show game
|
||||
NEW. ActEdiOneGamQst Edit a new question for a game
|
||||
NEW. ActGamLstTstQst List test questions to select one or several questions
|
||||
NEW. ActAddTstQstToGam Add selected test questions to game
|
||||
NEW. ActRcvGamQst Receive a question of a game
|
||||
NEW. ActReqRemGamQst Request the removal of a question of a game
|
||||
NEW. ActRemGamQst Confirm the removal of a question of a game
|
||||
|
@ -1981,6 +1982,7 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
|
|||
/* ActShoGam */{1661,-1,TabUnk,ActSeeAllGam ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Rmt_UnhideGame ,NULL},
|
||||
/* ActEdiOneGamQst */{1662,-1,TabUnk,ActSeeAllGam ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Rmt_RequestEditQuestion ,NULL},
|
||||
/* ActGamLstTstQst */{1666,-1,TabUnk,ActSeeAllGam ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Tst_ListQuestionsToSelect ,NULL},
|
||||
/* ActAddTstQstToGam */{1667,-1,TabUnk,ActSeeAllGam ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Rmt_AddTstQuestionsToGame ,NULL},
|
||||
/* ActRcvGamQst */{1663,-1,TabUnk,ActSeeAllGam ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Rmt_ReceiveQst ,NULL},
|
||||
/* ActReqRemGamQst */{1664,-1,TabUnk,ActSeeAllGam ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Rmt_RequestRemoveQst ,NULL},
|
||||
/* ActRemGamQst */{1665,-1,TabUnk,ActSeeAllGam ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Rmt_RemoveQst ,NULL},
|
||||
|
@ -4710,6 +4712,7 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
|
|||
ActReqRemGamQst, // #1664
|
||||
ActRemGamQst, // #1665
|
||||
ActGamLstTstQst, // #1666
|
||||
ActAddTstQstToGam, // #1667
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -57,9 +57,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 + 9 + 43 + 17 + 47 + 33 + 24 + 115 + 90 + 416 + 165 + 172 + 42 + 14 + 97)
|
||||
#define Act_NUM_ACTIONS (1 + 9 + 43 + 17 + 47 + 33 + 24 + 115 + 91 + 416 + 165 + 172 + 42 + 14 + 97)
|
||||
|
||||
#define Act_MAX_ACTION_COD 1666
|
||||
#define Act_MAX_ACTION_COD 1667
|
||||
|
||||
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 12
|
||||
|
||||
|
@ -516,19 +516,20 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to
|
|||
#define ActShoGam (ActChgCalCrs1stDay + 76)
|
||||
#define ActEdiOneGamQst (ActChgCalCrs1stDay + 77)
|
||||
#define ActGamLstTstQst (ActChgCalCrs1stDay + 78)
|
||||
#define ActRcvGamQst (ActChgCalCrs1stDay + 79)
|
||||
#define ActReqRemGamQst (ActChgCalCrs1stDay + 80)
|
||||
#define ActRemGamQst (ActChgCalCrs1stDay + 81)
|
||||
#define ActAddTstQstToGam (ActChgCalCrs1stDay + 79)
|
||||
#define ActRcvGamQst (ActChgCalCrs1stDay + 80)
|
||||
#define ActReqRemGamQst (ActChgCalCrs1stDay + 81)
|
||||
#define ActRemGamQst (ActChgCalCrs1stDay + 82)
|
||||
|
||||
#define ActSeeOneExaAnn (ActChgCalCrs1stDay + 82)
|
||||
#define ActSeeDatExaAnn (ActChgCalCrs1stDay + 83)
|
||||
#define ActEdiExaAnn (ActChgCalCrs1stDay + 84)
|
||||
#define ActRcvExaAnn (ActChgCalCrs1stDay + 85)
|
||||
#define ActPrnExaAnn (ActChgCalCrs1stDay + 86)
|
||||
#define ActReqRemExaAnn (ActChgCalCrs1stDay + 87)
|
||||
#define ActRemExaAnn (ActChgCalCrs1stDay + 88)
|
||||
#define ActHidExaAnn (ActChgCalCrs1stDay + 89)
|
||||
#define ActShoExaAnn (ActChgCalCrs1stDay + 90)
|
||||
#define ActSeeOneExaAnn (ActChgCalCrs1stDay + 83)
|
||||
#define ActSeeDatExaAnn (ActChgCalCrs1stDay + 84)
|
||||
#define ActEdiExaAnn (ActChgCalCrs1stDay + 85)
|
||||
#define ActRcvExaAnn (ActChgCalCrs1stDay + 86)
|
||||
#define ActPrnExaAnn (ActChgCalCrs1stDay + 87)
|
||||
#define ActReqRemExaAnn (ActChgCalCrs1stDay + 88)
|
||||
#define ActRemExaAnn (ActChgCalCrs1stDay + 89)
|
||||
#define ActHidExaAnn (ActChgCalCrs1stDay + 90)
|
||||
#define ActShoExaAnn (ActChgCalCrs1stDay + 91)
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************** Files tab **********************************/
|
||||
|
|
|
@ -236,13 +236,17 @@
|
|||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define Log_PLATFORM_VERSION "SWAD 16.251.1 (2017-07-16)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 16.251.2 (2017-07-16)"
|
||||
#define CSS_FILE "swad16.235.1.css"
|
||||
#define JS_FILE "swad16.206.3.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 16.251.2: Jul 16, 2017 Listing games for remote control. Not finished. (227062 lines)
|
||||
1 change necessary in database:
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1667','es','N','Añadir tests a juego');
|
||||
|
||||
Version 16.251.1: Jul 16, 2017 Listing games for remote control. Not finished. (226888 lines)
|
||||
Version 16.251: Jul 16, 2017 Listing games for remote control. Not finished. (226867 lines)
|
||||
19 changes necessary in database:
|
||||
|
|
|
@ -3140,6 +3140,15 @@ static void Rmt_PutButtonToAddNewQuestions (void)
|
|||
Act_FormEnd ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************** Add selected test questions to game ********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Rmt_AddTstQuestionsToGame (void)
|
||||
{
|
||||
Ale_ShowAlert (Ale_WARNING,"Under development...."); // TODO: Write this function
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************** Write the heading of a game question *******************/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -113,6 +113,8 @@ void Rmt_RemoveGames (Sco_Scope_t Scope,long Cod);
|
|||
void Rmt_RequestEditQuestion (void);
|
||||
void Rmt_ReceiveQst (void);
|
||||
|
||||
void Rmt_AddTstQuestionsToGame (void);
|
||||
|
||||
void Rmt_RequestRemoveQst (void);
|
||||
void Rmt_RemoveQst (void);
|
||||
|
||||
|
|
205
swad_test.c
205
swad_test.c
|
@ -194,7 +194,8 @@ static unsigned long Tst_GetQuestions (MYSQL_RES **mysql_res);
|
|||
static unsigned long Tst_GetQuestionsForTest (MYSQL_RES **mysql_res);
|
||||
static void Tst_ListOneQstToEdit (void);
|
||||
static bool Tst_GetOneQuestionByCod (long QstCod,MYSQL_RES **mysql_res);
|
||||
static void Tst_ListOneOrMoreQuestions (unsigned long NumRows,MYSQL_RES *mysql_res);
|
||||
static void Tst_ListOneOrMoreQuestionsForEdition (unsigned long NumRows,MYSQL_RES *mysql_res);
|
||||
static void Tst_ListOneOrMoreQuestionsForSelection (unsigned long NumRows,MYSQL_RES *mysql_res);
|
||||
|
||||
static void Tst_WriteAnswersOfAQstEdit (long QstCod);
|
||||
static void Tst_WriteAnswersOfAQstViewTest (unsigned NumQst,long QstCod,bool Shuffle);
|
||||
|
@ -2598,7 +2599,7 @@ void Tst_ListQuestionsToEdit (void)
|
|||
fprintf (Gbl.F.Out,"</div>");
|
||||
|
||||
/* Show the table with the questions */
|
||||
Tst_ListOneOrMoreQuestions (NumRows,mysql_res);
|
||||
Tst_ListOneOrMoreQuestionsForEdition (NumRows,mysql_res);
|
||||
}
|
||||
|
||||
/***** Free structure that stores the query result *****/
|
||||
|
@ -2631,7 +2632,7 @@ void Tst_ListQuestionsToSelect (void)
|
|||
{
|
||||
if ((NumRows = Tst_GetQuestions (&mysql_res)) != 0) // Query database
|
||||
/* Show the table with the questions */
|
||||
Tst_ListOneOrMoreQuestions (NumRows,mysql_res);
|
||||
Tst_ListOneOrMoreQuestionsForSelection (NumRows,mysql_res);
|
||||
|
||||
/***** Free structure that stores the query result *****/
|
||||
DB_FreeMySQLResult (&mysql_res);
|
||||
|
@ -2951,7 +2952,7 @@ static void Tst_ListOneQstToEdit (void)
|
|||
/***** Query database *****/
|
||||
if (Tst_GetOneQuestionByCod (Gbl.Test.QstCod,&mysql_res))
|
||||
/***** Show the question ready to edit it *****/
|
||||
Tst_ListOneOrMoreQuestions (1,mysql_res);
|
||||
Tst_ListOneOrMoreQuestionsForEdition (1,mysql_res);
|
||||
else
|
||||
Lay_ShowErrorAndExit ("Can not get question.");
|
||||
|
||||
|
@ -2997,7 +2998,7 @@ static bool Tst_GetOneQuestionByCod (long QstCod,MYSQL_RES **mysql_res)
|
|||
/****************** List for edition one or more test questions **************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Tst_ListOneOrMoreQuestions (unsigned long NumRows,MYSQL_RES *mysql_res)
|
||||
static void Tst_ListOneOrMoreQuestionsForEdition (unsigned long NumRows,MYSQL_RES *mysql_res)
|
||||
{
|
||||
extern const char *Hlp_ASSESSMENT_Tests;
|
||||
extern const char *Txt_Questions;
|
||||
|
@ -3023,12 +3024,12 @@ static void Tst_ListOneOrMoreQuestions (unsigned long NumRows,MYSQL_RES *mysql_r
|
|||
|
||||
/***** Start box *****/
|
||||
Box_StartBox (NULL,Txt_Questions,Tst_PutIconsTests,
|
||||
Hlp_ASSESSMENT_Tests,Box_NOT_CLOSABLE);
|
||||
Hlp_ASSESSMENT_Tests,Box_NOT_CLOSABLE);
|
||||
|
||||
/***** Write the heading *****/
|
||||
Tbl_StartTableWideMargin (2);
|
||||
fprintf (Gbl.F.Out,"<tr>"
|
||||
"<th colspan=\"2\"></th>"
|
||||
"<th></th>"
|
||||
"<th class=\"CENTER_TOP\">"
|
||||
"%s"
|
||||
"</th>"
|
||||
|
@ -3114,9 +3115,11 @@ static void Tst_ListOneOrMoreQuestions (unsigned long NumRows,MYSQL_RES *mysql_r
|
|||
if ((Gbl.Test.QstCod = Str_ConvertStrCodToLongCod (row[0])) < 0)
|
||||
Lay_ShowErrorAndExit ("Wrong code of question.");
|
||||
|
||||
/* Write icon to remove the question */
|
||||
/***** Icons *****/
|
||||
fprintf (Gbl.F.Out,"<tr>"
|
||||
"<td class=\"BT%u\">",Gbl.RowEvenOdd);
|
||||
|
||||
/* Write icon to remove the question */
|
||||
Act_FormStart (ActReqRemTstQst);
|
||||
Tst_PutParamQstCod ();
|
||||
if (NumRows == 1)
|
||||
|
@ -3125,10 +3128,8 @@ static void Tst_ListOneOrMoreQuestions (unsigned long NumRows,MYSQL_RES *mysql_r
|
|||
Tst_WriteParamEditQst ();
|
||||
Ico_PutIconRemove ();
|
||||
Act_FormEnd ();
|
||||
fprintf (Gbl.F.Out,"</td>");
|
||||
|
||||
/* Write icon to edit the question */
|
||||
fprintf (Gbl.F.Out,"<td class=\"BT%u\">",Gbl.RowEvenOdd);
|
||||
Act_FormStart (ActEdiOneTstQst);
|
||||
Tst_PutParamQstCod ();
|
||||
fprintf (Gbl.F.Out,"<input type=\"image\" src=\"%s/edit64x64.png\""
|
||||
|
@ -3138,6 +3139,7 @@ static void Tst_ListOneOrMoreQuestions (unsigned long NumRows,MYSQL_RES *mysql_r
|
|||
Txt_Edit_question,
|
||||
Txt_Edit_question);
|
||||
Act_FormEnd ();
|
||||
|
||||
fprintf (Gbl.F.Out,"</td>");
|
||||
|
||||
/* Write number of question */
|
||||
|
@ -3280,6 +3282,189 @@ static void Tst_ListOneOrMoreQuestions (unsigned long NumRows,MYSQL_RES *mysql_r
|
|||
Box_EndBox ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************** List for edition one or more test questions **************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Tst_ListOneOrMoreQuestionsForSelection (unsigned long NumRows,MYSQL_RES *mysql_res)
|
||||
{
|
||||
extern const char *Hlp_ASSESSMENT_Tests;
|
||||
extern const char *Txt_Questions;
|
||||
extern const char *Txt_No_INDEX;
|
||||
extern const char *Txt_Code;
|
||||
extern const char *Txt_Date;
|
||||
extern const char *Txt_Tags;
|
||||
extern const char *Txt_Type;
|
||||
extern const char *Txt_TST_STR_ANSWER_TYPES[Tst_NUM_ANS_TYPES];
|
||||
extern const char *Txt_Shuffle;
|
||||
extern const char *Txt_Question;
|
||||
extern const char *Txt_Today;
|
||||
extern const char *Txt_Add_questions;
|
||||
unsigned long NumRow;
|
||||
MYSQL_ROW row;
|
||||
unsigned UniqueId;
|
||||
time_t TimeUTC;
|
||||
|
||||
/***** Start box *****/
|
||||
Box_StartBox (NULL,Txt_Questions,NULL,
|
||||
Hlp_ASSESSMENT_Tests,Box_NOT_CLOSABLE);
|
||||
|
||||
/***** Start form *****/
|
||||
Act_FormStart (ActAddTstQstToGam);
|
||||
|
||||
/***** Write the heading *****/
|
||||
Tbl_StartTableWideMargin (2);
|
||||
fprintf (Gbl.F.Out,"<tr>"
|
||||
"<th></th>"
|
||||
"<th class=\"CENTER_TOP\">"
|
||||
"%s"
|
||||
"</th>"
|
||||
"<th class=\"CENTER_TOP\">"
|
||||
"%s"
|
||||
"</th>"
|
||||
"<th class=\"CENTER_TOP\">"
|
||||
"%s"
|
||||
"</th>"
|
||||
"<th class=\"LEFT_TOP\">"
|
||||
"%s"
|
||||
"</th>"
|
||||
"<th class=\"CENTER_TOP\">"
|
||||
"%s"
|
||||
"</th>"
|
||||
"<th class=\"CENTER_TOP\">"
|
||||
"%s"
|
||||
"</th>"
|
||||
"<th class=\"CENTER_TOP\">"
|
||||
"%s"
|
||||
"</th>"
|
||||
"</tr>",
|
||||
Txt_No_INDEX,
|
||||
Txt_Code,
|
||||
Txt_Date,
|
||||
Txt_Tags,
|
||||
Txt_Type,
|
||||
Txt_Shuffle,
|
||||
Txt_Question);
|
||||
|
||||
/***** Write rows *****/
|
||||
for (NumRow = 0, UniqueId = 1;
|
||||
NumRow < NumRows;
|
||||
NumRow++, UniqueId++)
|
||||
{
|
||||
Gbl.RowEvenOdd = NumRow % 2;
|
||||
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
/*
|
||||
row[ 0] QstCod
|
||||
row[ 1] UNIX_TIMESTAMP(EditTime)
|
||||
row[ 2] AnsType
|
||||
row[ 3] Shuffle
|
||||
row[ 4] Stem
|
||||
row[ 5] Feedback
|
||||
row[ 6] ImageName
|
||||
row[ 7] ImageTitle
|
||||
row[ 8] ImageURL
|
||||
row[ 9] NumHits
|
||||
row[10] NumHitsNotBlank
|
||||
row[11] Score
|
||||
*/
|
||||
/***** Create test question *****/
|
||||
Tst_QstConstructor ();
|
||||
|
||||
/* row[0] holds the code of the question */
|
||||
if ((Gbl.Test.QstCod = Str_ConvertStrCodToLongCod (row[0])) < 0)
|
||||
Lay_ShowErrorAndExit ("Wrong code of question.");
|
||||
|
||||
/***** Icons *****/
|
||||
fprintf (Gbl.F.Out,"<tr>"
|
||||
"<td class=\"BT%u\">",Gbl.RowEvenOdd);
|
||||
|
||||
/* Write checkbox to select the question */
|
||||
fprintf (Gbl.F.Out,"<input type=\"checkbox\" name=\"QstCods\""
|
||||
" value=\"%ld\" />",
|
||||
Gbl.Test.QstCod);
|
||||
|
||||
/* Write number of question */
|
||||
fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">"
|
||||
"%lu "
|
||||
"</td>",
|
||||
Gbl.RowEvenOdd,NumRow + 1);
|
||||
|
||||
/* Write question code */
|
||||
fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">"
|
||||
"%ld "
|
||||
"</td>",
|
||||
Gbl.RowEvenOdd,Gbl.Test.QstCod);
|
||||
|
||||
/* Write the date (row[1] has the UTC date-time) */
|
||||
TimeUTC = Dat_GetUNIXTimeFromStr (row[1]);
|
||||
fprintf (Gbl.F.Out,"<td id=\"tst_date_%u\""
|
||||
" class=\"DAT_SMALL CENTER_TOP COLOR%u\">"
|
||||
"<script type=\"text/javascript\">"
|
||||
"writeLocalDateHMSFromUTC('tst_date_%u',%ld,"
|
||||
"%u,'<br />','%s',true,false,0x7);"
|
||||
"</script>"
|
||||
"</td>",
|
||||
UniqueId,Gbl.RowEvenOdd,
|
||||
UniqueId,(long) TimeUTC,
|
||||
(unsigned) Gbl.Prefs.DateFormat,Txt_Today);
|
||||
|
||||
/* Write the question tags */
|
||||
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP COLOR%u\">",
|
||||
Gbl.RowEvenOdd);
|
||||
Tst_GetAndWriteTagsQst (Gbl.Test.QstCod);
|
||||
fprintf (Gbl.F.Out,"</td>");
|
||||
|
||||
/* Write the question type (row[2]) */
|
||||
Gbl.Test.AnswerType = Tst_ConvertFromStrAnsTypDBToAnsTyp (row[2]);
|
||||
fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">"
|
||||
"%s "
|
||||
"</td>",
|
||||
Gbl.RowEvenOdd,
|
||||
Txt_TST_STR_ANSWER_TYPES[Gbl.Test.AnswerType]);
|
||||
|
||||
/* Write if shuffle is enabled (row[3]) */
|
||||
fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">",
|
||||
Gbl.RowEvenOdd);
|
||||
|
||||
fprintf (Gbl.F.Out,"<input type=\"checkbox\" name=\"Shuffle\" value=\"Y\"");
|
||||
if (row[3][0] == 'Y')
|
||||
fprintf (Gbl.F.Out," checked=\"checked\"");
|
||||
fprintf (Gbl.F.Out," disabled=\"disabled\" />");
|
||||
|
||||
fprintf (Gbl.F.Out,"</td>");
|
||||
|
||||
/* Write the stem (row[4]), the image (row[6], row[7], row[8]),
|
||||
the feedback (row[5]) and the answers */
|
||||
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP COLOR%u\">",
|
||||
Gbl.RowEvenOdd);
|
||||
Tst_WriteQstStem (row[4],"TEST_EDI");
|
||||
Img_GetImageNameTitleAndURLFromRow (row[6],row[7],row[8],&Gbl.Test.Image);
|
||||
Img_ShowImage (&Gbl.Test.Image,
|
||||
"TEST_IMG_EDIT_LIST_STEM_CONTAINER",
|
||||
"TEST_IMG_EDIT_LIST_STEM");
|
||||
Tst_WriteQstFeedback (row[5],"TEST_EDI_LIGHT");
|
||||
Tst_WriteAnswersOfAQstEdit (Gbl.Test.QstCod);
|
||||
fprintf (Gbl.F.Out,"</td>"
|
||||
"</tr>");
|
||||
|
||||
/***** Destroy test question *****/
|
||||
Tst_QstDestructor ();
|
||||
}
|
||||
|
||||
/***** End table *****/
|
||||
Tbl_EndTable ();
|
||||
|
||||
/***** Button to add questions *****/
|
||||
Btn_PutConfirmButton (Txt_Add_questions);
|
||||
|
||||
/***** End form *****/
|
||||
Act_FormEnd ();
|
||||
|
||||
/***** End box *****/
|
||||
Box_EndBox ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*********** Write hidden parameters for edition of test questions ***********/
|
||||
/*****************************************************************************/
|
||||
|
|
Loading…
Reference in New Issue