Version 20.96.1: Jul 30, 2021 Fix bugs removing exams.

This commit is contained in:
acanas 2021-07-30 12:14:57 +02:00
parent ef2e43cdcc
commit 0e5ed54fa2
9 changed files with 265 additions and 117 deletions

View File

@ -40,7 +40,7 @@
#include "swad_duplicate_database.h" #include "swad_duplicate_database.h"
#include "swad_enrolment_database.h" #include "swad_enrolment_database.h"
#include "swad_error.h" #include "swad_error.h"
#include "swad_exam_print.h" #include "swad_exam_database.h"
#include "swad_follow.h" #include "swad_follow.h"
#include "swad_form.h" #include "swad_form.h"
#include "swad_forum.h" #include "swad_forum.h"
@ -1017,7 +1017,8 @@ void Acc_CompletelyEliminateAccount (struct UsrData *UsrDat,
/***** Remove test, exams and matches made by user in all courses *****/ /***** Remove test, exams and matches made by user in all courses *****/
TstPrn_RemovePrintsMadeByUsrInAllCrss (UsrDat->UsrCod); TstPrn_RemovePrintsMadeByUsrInAllCrss (UsrDat->UsrCod);
ExaPrn_RemovePrintsMadeByUsrInAllCrss (UsrDat->UsrCod); Exa_DB_RemovePrintQuestionsMadeByUsrInAllCrss (UsrDat->UsrCod);
Exa_DB_RemovePrintsMadeByUsrInAllCrss (UsrDat->UsrCod);
Mch_RemoveMatchesMadeByUsrInAllCrss (UsrDat->UsrCod); Mch_RemoveMatchesMadeByUsrInAllCrss (UsrDat->UsrCod);
/***** Remove user's notifications *****/ /***** Remove user's notifications *****/

View File

@ -602,13 +602,14 @@ TODO: FIX BUG, URGENT! En las fechas como par
TODO: En las encuestas, que los estudiantes no puedan ver los resultados hasta que no finalice el plazo. TODO: En las encuestas, que los estudiantes no puedan ver los resultados hasta que no finalice el plazo.
*/ */
#define Log_PLATFORM_VERSION "SWAD 20.96 (2021-07-27)" #define Log_PLATFORM_VERSION "SWAD 20.96.1 (2021-07-30)"
#define CSS_FILE "swad20.45.css" #define CSS_FILE "swad20.45.css"
#define JS_FILE "swad20.69.1.js" #define JS_FILE "swad20.69.1.js"
/* /*
TODO: Rename CENTRE to CENTER in help wiki. TODO: Rename CENTRE to CENTER in help wiki.
TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams
Version 20.96.1: Jul 30, 2021 Fix bugs removing exams. (314373 lines)
Version 20.96: Jul 27, 2021 Queries moved to module swad_exam_database. (314247 lines) Version 20.96: Jul 27, 2021 Queries moved to module swad_exam_database. (314247 lines)
Version 20.95.3: Jul 20, 2021 Queries moved to module swad_exam_database. (314210 lines) Version 20.95.3: Jul 20, 2021 Queries moved to module swad_exam_database. (314210 lines)
Version 20.95.2: Jul 16, 2021 Queries moved to module swad_exam_database. (314137 lines) Version 20.95.2: Jul 16, 2021 Queries moved to module swad_exam_database. (314137 lines)

View File

@ -41,7 +41,7 @@
#include "swad_enrolment.h" #include "swad_enrolment.h"
#include "swad_enrolment_database.h" #include "swad_enrolment_database.h"
#include "swad_error.h" #include "swad_error.h"
#include "swad_exam_print.h" #include "swad_exam_database.h"
#include "swad_form.h" #include "swad_form.h"
#include "swad_global.h" #include "swad_global.h"
#include "swad_hierarchy.h" #include "swad_hierarchy.h"
@ -3212,7 +3212,8 @@ static void Enr_EffectivelyRemUsrFromCrs (struct UsrData *UsrDat,
/* Remove tests, exams and matches results made by user in course */ /* Remove tests, exams and matches results made by user in course */
TstPrn_RemovePrintsMadeByUsrInCrs (UsrDat->UsrCod,Crs->CrsCod); TstPrn_RemovePrintsMadeByUsrInCrs (UsrDat->UsrCod,Crs->CrsCod);
ExaPrn_RemovePrintsMadeByUsrInCrs (UsrDat->UsrCod,Crs->CrsCod); Exa_DB_RemovePrintsQuestionsMadeByUsrInCrs (UsrDat->UsrCod,Crs->CrsCod);
Exa_DB_RemovePrintsMadeByUsrInCrs (UsrDat->UsrCod,Crs->CrsCod);
Mch_RemoveMatchesMadeByUsrInCrs (UsrDat->UsrCod,Crs->CrsCod); Mch_RemoveMatchesMadeByUsrInCrs (UsrDat->UsrCod,Crs->CrsCod);
} }

View File

@ -137,8 +137,10 @@ static Exa_Order_t Exa_GetParamOrder (void);
static void Exa_RemoveExamFromAllTables (long ExaCod); static void Exa_RemoveExamFromAllTables (long ExaCod);
static void Exa_RemoveAllMedFilesFromStemOfAllQstsInCrs (long CrsCod); static void Exa_RemoveAllMedFilesFromStemOfAllQstsFromExam (long ExaCod);
static void Exa_RemoveAllMedFilesFromAnsOfAllQstsInCrs (long CrsCod); static void Exa_RemoveAllMedFilesFromStemOfAllQstsFromCrs (long CrsCod);
static void Exa_RemoveAllMedFilesFromAnsOfAllQstsFromExam (long ExaCod);
static void Exa_RemoveAllMedFilesFromAnsOfAllQstsFromCrs (long CrsCod);
static bool Exa_DB_CheckIfSimilarExamExists (const struct Exa_Exam *Exam); static bool Exa_DB_CheckIfSimilarExamExists (const struct Exa_Exam *Exam);
@ -1076,29 +1078,26 @@ void Exa_RemoveExam (void)
static void Exa_RemoveExamFromAllTables (long ExaCod) static void Exa_RemoveExamFromAllTables (long ExaCod)
{ {
/***** Remove questions of exams prints, and exam prints, of this exam *****/
Exa_DB_RemovePrintQuestionsFromExam (ExaCod);
Exa_DB_RemovePrintsFromExam (ExaCod);
/***** Remove all sessions in this exam *****/ /***** Remove all sessions in this exam *****/
Exa_DB_RemoveSessionsInExamFromAllTables (ExaCod); Exa_DB_RemoveSessionsInExamFromAllTables (ExaCod);
/***** Remove exam questions *****/ /***** Remove media associated to exam questions in the exam *****/
DB_QueryDELETE ("can not remove exam questions", Exa_RemoveAllMedFilesFromStemOfAllQstsFromExam (ExaCod);
"DELETE FROM exa_set_questions" Exa_RemoveAllMedFilesFromAnsOfAllQstsFromExam (ExaCod);
" USING exa_sets,"
"exa_set_questions" /***** Remove the answers and the questions in sets of questions *****/
" WHERE exa_sets.ExaCod=%ld" Exa_DB_RemoveSetAnswersFromExam (ExaCod);
" AND exa_sets.SetCod=exa_set_questions.SetCod", Exa_DB_RemoveSetQuestionsFromExam (ExaCod);
ExaCod);
/***** Remove exam sets *****/ /***** Remove exam sets *****/
DB_QueryDELETE ("can not remove exam sets", Exa_DB_RemoveSetsFromExam (ExaCod);
"DELETE FROM exa_sets"
" WHERE ExaCod=%ld",
ExaCod);
/***** Remove exam *****/ /***** Remove exam *****/
DB_QueryDELETE ("can not remove exam", Exa_DB_RemoveExam (ExaCod);
"DELETE FROM exa_exams"
" WHERE ExaCod=%ld",
ExaCod);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1107,61 +1106,60 @@ static void Exa_RemoveExamFromAllTables (long ExaCod)
void Exa_RemoveCrsExams (long CrsCod) void Exa_RemoveCrsExams (long CrsCod)
{ {
/***** Remove all exams prints made in the course *****/ /***** Remove questions of exams prints, and exam prints,
ExaPrn_RemoveCrsPrints (CrsCod); made in the given course *****/
Exa_DB_RemovePrintQuestionsFromCrs (CrsCod);
Exa_DB_RemovePrintsFromCrs (CrsCod);
/***** Remove all sessions in the course *****/ /***** Remove all sessions in the course *****/
Exa_DB_RemoveSessionInCourseFromAllTables (CrsCod); Exa_DB_RemoveSessionInCourseFromAllTables (CrsCod);
/***** Remove media associated to test questions in the course *****/ /***** Remove media associated to test questions in the course *****/
Exa_RemoveAllMedFilesFromStemOfAllQstsInCrs (CrsCod); Exa_RemoveAllMedFilesFromStemOfAllQstsFromCrs (CrsCod);
Exa_RemoveAllMedFilesFromAnsOfAllQstsInCrs (CrsCod); Exa_RemoveAllMedFilesFromAnsOfAllQstsFromCrs (CrsCod);
/***** Remove the answers in set of questions *****/ /***** Remove the answers and the questions in sets of questions *****/
DB_QueryDELETE ("can not remove answers in course exams", Exa_DB_RemoveSetAnswersFromCrs (CrsCod);
"DELETE FROM exa_set_answers" Exa_DB_RemoveSetQuestionsFromCrs (CrsCod);
" USING exa_exams,"
"exa_sets,"
"exa_set_questions,"
"exa_set_answers"
" WHERE exa_exams.CrsCod=%ld"
" AND exa_exams.ExaCod=exa_sets.ExaCod",
" AND exa_sets.SetCod=exa_set_questions.SetCod"
" AND exa_set_questions.QstCod=exa_set_answers.QstCod",
CrsCod);
/***** Remove the questions in set of questions *****/
DB_QueryDELETE ("can not remove questions in course exams",
"DELETE FROM exa_set_questions"
" USING exa_exams,"
"exa_sets,"
"exa_set_questions"
" WHERE exa_exams.CrsCod=%ld"
" AND exa_exams.ExaCod=exa_sets.ExaCod",
" AND exa_sets.SetCod=exa_set_questions.SetCod",
CrsCod);
/***** Remove the sets of questions in exams *****/ /***** Remove the sets of questions in exams *****/
DB_QueryDELETE ("can not remove sets in course exams", Exa_DB_RemoveSetsFromCrs (CrsCod);
"DELETE FROM exa_sets"
" USING exa_exams,"
"exa_sets"
" WHERE exa_exams.CrsCod=%ld"
" AND exa_exams.ExaCod=exa_sets.ExaCod",
CrsCod);
/***** Remove the exams *****/ /***** Remove the exams *****/
DB_QueryDELETE ("can not remove course exams", Exa_DB_RemoveExamsFromCrs (CrsCod);
"DELETE FROM exa_exams" }
" WHERE CrsCod=%ld",
CrsCod); /*****************************************************************************/
/********* Remove all media associated to stems of an exam questions *********/
/*****************************************************************************/
static void Exa_RemoveAllMedFilesFromStemOfAllQstsFromExam (long ExaCod)
{
MYSQL_RES *mysql_res;
unsigned NumMedia;
/***** Get media codes associated to stems of an exam questions from database *****/
NumMedia = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get media",
"SELECT exa_set_questions.MedCod"
" FROM exa_sets,"
"exa_set_questions"
" WHERE exa_sets.ExaCod=%ld"
" AND exa_sets.SetCod=exa_set_questions.SetCod",
ExaCod);
/***** Go over result removing media files *****/
Med_RemoveMediaFromAllRows (NumMedia,mysql_res);
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
} }
/*****************************************************************************/ /*****************************************************************************/
/** Remove all media associated to stems of all exam questions in a course ***/ /** Remove all media associated to stems of all exam questions in a course ***/
/*****************************************************************************/ /*****************************************************************************/
static void Exa_RemoveAllMedFilesFromStemOfAllQstsInCrs (long CrsCod) static void Exa_RemoveAllMedFilesFromStemOfAllQstsFromCrs (long CrsCod)
{ {
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
unsigned NumMedia; unsigned NumMedia;
@ -1185,11 +1183,39 @@ static void Exa_RemoveAllMedFilesFromStemOfAllQstsInCrs (long CrsCod)
DB_FreeMySQLResult (&mysql_res); DB_FreeMySQLResult (&mysql_res);
} }
/*****************************************************************************/
/** Remove media associated to all answers of all exam questions in an exam **/
/*****************************************************************************/
static void Exa_RemoveAllMedFilesFromAnsOfAllQstsFromExam (long ExaCod)
{
MYSQL_RES *mysql_res;
unsigned NumMedia;
/***** Get names of media files associated to answers of exam questions from database *****/
NumMedia = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get media",
"SELECT exa_set_answers.MedCod"
" FROM exa_sets,"
"exa_set_questions,"
"exa_set_answers"
" WHERE exa_sets.ExaCod=%ld"
" AND exa_sets.SetCod=exa_set_questions.SetCod"
" AND exa_set_questions.QstCod=exa_set_answers.QstCod",
ExaCod);
/***** Go over result removing media files *****/
Med_RemoveMediaFromAllRows (NumMedia,mysql_res);
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
}
/*****************************************************************************/ /*****************************************************************************/
/* Remove media associated to all answers of all exam questions in a course **/ /* Remove media associated to all answers of all exam questions in a course **/
/*****************************************************************************/ /*****************************************************************************/
static void Exa_RemoveAllMedFilesFromAnsOfAllQstsInCrs (long CrsCod) static void Exa_RemoveAllMedFilesFromAnsOfAllQstsFromCrs (long CrsCod)
{ {
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
unsigned NumMedia; unsigned NumMedia;

View File

@ -168,6 +168,30 @@ void Exa_DB_GetExamTxt (long ExaCod,char Txt[Cns_MAX_BYTES_TEXT + 1])
ExaCod); ExaCod);
} }
/*****************************************************************************/
/********************************* Remove exam *******************************/
/*****************************************************************************/
void Exa_DB_RemoveExam (long ExaCod)
{
DB_QueryDELETE ("can not remove exam",
"DELETE FROM exa_exams"
" WHERE ExaCod=%ld",
ExaCod);
}
/*****************************************************************************/
/********************** Remove all exams from a course ***********************/
/*****************************************************************************/
void Exa_DB_RemoveExamsFromCrs (long CrsCod)
{
DB_QueryDELETE ("can not remove course exams",
"DELETE FROM exa_exams"
" WHERE CrsCod=%ld",
CrsCod);
}
/*****************************************************************************/ /*****************************************************************************/
/********************** Create a new set of questions ************************/ /********************** Create a new set of questions ************************/
/*****************************************************************************/ /*****************************************************************************/
@ -419,6 +443,33 @@ unsigned Exa_DB_GetNextSetIndexInExam (long ExaCod,unsigned SetInd)
SetInd); SetInd);
} }
/*****************************************************************************/
/***************** Remove the sets of questions from an course ***************/
/*****************************************************************************/
void Exa_DB_RemoveSetsFromExam (long ExaCod)
{
DB_QueryDELETE ("can not remove exam sets",
"DELETE FROM exa_sets"
" WHERE ExaCod=%ld",
ExaCod);
}
/*****************************************************************************/
/************ Remove the sets of questions from exams in a course ************/
/*****************************************************************************/
void Exa_DB_RemoveSetsFromCrs (long CrsCod)
{
DB_QueryDELETE ("can not remove sets in course exams",
"DELETE FROM exa_sets"
" USING exa_exams,"
"exa_sets"
" WHERE exa_exams.CrsCod=%ld"
" AND exa_exams.ExaCod=exa_sets.ExaCod",
CrsCod);
}
/*****************************************************************************/ /*****************************************************************************/
/********************* Get number of questions in a set **********************/ /********************* Get number of questions in a set **********************/
/*****************************************************************************/ /*****************************************************************************/
@ -469,6 +520,38 @@ unsigned Exa_DB_GetValidityAndTypeOfQuestion (MYSQL_RES **mysql_res,long QstCod)
QstCod); QstCod);
} }
/*****************************************************************************/
/********* Remove the questions in sets of questions from an exam ************/
/*****************************************************************************/
void Exa_DB_RemoveSetQuestionsFromExam (long ExaCod)
{
DB_QueryDELETE ("can not remove exam questions",
"DELETE FROM exa_set_questions"
" USING exa_sets,"
"exa_set_questions"
" WHERE exa_sets.ExaCod=%ld"
" AND exa_sets.SetCod=exa_set_questions.SetCod",
ExaCod);
}
/*****************************************************************************/
/********* Remove the questions in sets of questions from a course ***********/
/*****************************************************************************/
void Exa_DB_RemoveSetQuestionsFromCrs (long CrsCod)
{
DB_QueryDELETE ("can not remove questions in course exams",
"DELETE FROM exa_set_questions"
" USING exa_exams,"
"exa_sets,"
"exa_set_questions"
" WHERE exa_exams.CrsCod=%ld"
" AND exa_exams.ExaCod=exa_sets.ExaCod",
" AND exa_sets.SetCod=exa_set_questions.SetCod",
CrsCod);
}
/*****************************************************************************/ /*****************************************************************************/
/************** Get answers text for a question in an exam set ***************/ /************** Get answers text for a question in an exam set ***************/
/*****************************************************************************/ /*****************************************************************************/
@ -498,6 +581,42 @@ unsigned Exa_DB_GetQstAnswersCorrFromSet (MYSQL_RES **mysql_res,long QstCod)
QstCod); QstCod);
} }
/*****************************************************************************/
/********** Remove the answers in sets of questions from an exam *************/
/*****************************************************************************/
void Exa_DB_RemoveSetAnswersFromExam (long ExaCod)
{
DB_QueryDELETE ("can not remove exam answers",
"DELETE FROM exa_set_answers"
" USING exa_sets,"
"exa_set_questions,"
"exa_set_answers"
" WHERE exa_sets.ExaCod=%ld"
" AND exa_sets.SetCod=exa_set_questions.SetCod",
" AND exa_set_questions.QstCod=exa_set_answers.QstCod",
ExaCod);
}
/*****************************************************************************/
/********** Remove the answers in sets of questions from a course ************/
/*****************************************************************************/
void Exa_DB_RemoveSetAnswersFromCrs (long CrsCod)
{
DB_QueryDELETE ("can not remove answers in course exams",
"DELETE FROM exa_set_answers"
" USING exa_exams,"
"exa_sets,"
"exa_set_questions,"
"exa_set_answers"
" WHERE exa_exams.CrsCod=%ld"
" AND exa_exams.ExaCod=exa_sets.ExaCod",
" AND exa_sets.SetCod=exa_set_questions.SetCod"
" AND exa_set_questions.QstCod=exa_set_answers.QstCod",
CrsCod);
}
/*****************************************************************************/ /*****************************************************************************/
/************************* Create a new exam session *************************/ /************************* Create a new exam session *************************/
/*****************************************************************************/ /*****************************************************************************/
@ -1138,10 +1257,25 @@ void Exa_DB_RemovePrintsMadeByUsrInCrs (long UsrCod,long CrsCod)
} }
/*****************************************************************************/ /*****************************************************************************/
/******* Remove exams prints made by the given user in the given course ******/ /**************** Remove exams prints made in the given exam *****************/
/*****************************************************************************/ /*****************************************************************************/
void Exa_DB_RemovePrintsInCrs (long CrsCod) void Exa_DB_RemovePrintsFromExam (long ExaCod)
{
DB_QueryDELETE ("can not remove exams prints in a course",
"DELETE FROM exa_prints"
" USING exa_sessions,"
"exa_prints"
" WHERE exa_sessions.ExaCod=%ld"
" AND exa_sessions.SesCod=exa_prints.SesCod",
ExaCod);
}
/*****************************************************************************/
/*************** Remove exams prints made in the given course ****************/
/*****************************************************************************/
void Exa_DB_RemovePrintsFromCrs (long CrsCod)
{ {
DB_QueryDELETE ("can not remove exams prints in a course", DB_QueryDELETE ("can not remove exams prints in a course",
"DELETE FROM exa_prints" "DELETE FROM exa_prints"
@ -1277,10 +1411,27 @@ void Exa_DB_RemovePrintsQuestionsMadeByUsrInCrs (long UsrCod,long CrsCod)
} }
/*****************************************************************************/ /*****************************************************************************/
/* Remove questions of exams prints made by the given user in a given course */ /************ Remove questions of exams prints in a given course *************/
/*****************************************************************************/ /*****************************************************************************/
void Exa_DB_RemovePrintQuestionsInCrs (long CrsCod) void Exa_DB_RemovePrintQuestionsFromExam (long ExaCod)
{
DB_QueryDELETE ("can not remove exams prints in an exam",
"DELETE FROM exa_print_questions"
" USING exa_sessions,"
"exa_prints,"
"exa_print_questions"
" WHERE exa_sessions.ExaCod=%ld"
" AND exa_sessions.SesCod=exa_prints.SesCod"
" AND exa_prints.PrnCod=exa_print_questions.PrnCod",
ExaCod);
}
/*****************************************************************************/
/************ Remove questions of exams prints in a given course *************/
/*****************************************************************************/
void Exa_DB_RemovePrintQuestionsFromCrs (long CrsCod)
{ {
DB_QueryDELETE ("can not remove exams prints in a course", DB_QueryDELETE ("can not remove exams prints in a course",
"DELETE FROM exa_print_questions" "DELETE FROM exa_print_questions"

View File

@ -45,6 +45,8 @@ unsigned Exa_DB_GetListExams (MYSQL_RES **mysql_res,Exa_Order_t SelectedOrder);
unsigned Exa_DB_GetDataOfExamByCod (MYSQL_RES **mysql_res,long ExaCod); unsigned Exa_DB_GetDataOfExamByCod (MYSQL_RES **mysql_res,long ExaCod);
unsigned Exa_DB_GetExamStartEnd (MYSQL_RES **mysql_res,long ExaCod); unsigned Exa_DB_GetExamStartEnd (MYSQL_RES **mysql_res,long ExaCod);
void Exa_DB_GetExamTxt (long ExaCod,char Txt[Cns_MAX_BYTES_TEXT + 1]); void Exa_DB_GetExamTxt (long ExaCod,char Txt[Cns_MAX_BYTES_TEXT + 1]);
void Exa_DB_RemoveExam (long ExaCod);
void Exa_DB_RemoveExamsFromCrs (long CrsCod);
long Exa_DB_CreateSet (const struct ExaSet_Set *Set,unsigned SetInd); long Exa_DB_CreateSet (const struct ExaSet_Set *Set,unsigned SetInd);
void Exa_DB_UpdateSet (const struct ExaSet_Set *Set); void Exa_DB_UpdateSet (const struct ExaSet_Set *Set);
@ -63,13 +65,20 @@ long Exa_DB_GetSetCodFromSetInd (long ExaCod,unsigned SetInd);
unsigned Exa_DB_GetMaxSetIndexInExam (long ExaCod); unsigned Exa_DB_GetMaxSetIndexInExam (long ExaCod);
unsigned Exa_DB_GetPrevSetIndexInExam (long ExaCod,unsigned SetInd); unsigned Exa_DB_GetPrevSetIndexInExam (long ExaCod,unsigned SetInd);
unsigned Exa_DB_GetNextSetIndexInExam (long ExaCod,unsigned SetInd); unsigned Exa_DB_GetNextSetIndexInExam (long ExaCod,unsigned SetInd);
void Exa_DB_RemoveSetsFromExam (long ExaCod);
void Exa_DB_RemoveSetsFromCrs (long CrsCod);
unsigned Exa_DB_GetNumQstsInSet (long SetCod); unsigned Exa_DB_GetNumQstsInSet (long SetCod);
unsigned Exa_DB_GetSomeQstsFromSetToPrint (MYSQL_RES **mysql_res, unsigned Exa_DB_GetSomeQstsFromSetToPrint (MYSQL_RES **mysql_res,
long SetCod,unsigned NumQstsToPrint); long SetCod,unsigned NumQstsToPrint);
unsigned Exa_DB_GetValidityAndTypeOfQuestion (MYSQL_RES **mysql_res,long QstCod); unsigned Exa_DB_GetValidityAndTypeOfQuestion (MYSQL_RES **mysql_res,long QstCod);
void Exa_DB_RemoveSetQuestionsFromExam (long ExaCod);
void Exa_DB_RemoveSetQuestionsFromCrs (long CrsCod);
unsigned Exa_DB_GetQstAnswersTextFromSet (MYSQL_RES **mysql_res,long QstCod); unsigned Exa_DB_GetQstAnswersTextFromSet (MYSQL_RES **mysql_res,long QstCod);
unsigned Exa_DB_GetQstAnswersCorrFromSet (MYSQL_RES **mysql_res,long QstCod); unsigned Exa_DB_GetQstAnswersCorrFromSet (MYSQL_RES **mysql_res,long QstCod);
void Exa_DB_RemoveSetAnswersFromExam (long ExaCod);
void Exa_DB_RemoveSetAnswersFromCrs (long CrsCod);
long Exa_DB_CreateSession (const struct ExaSes_Session *Session); long Exa_DB_CreateSession (const struct ExaSes_Session *Session);
void Exa_DB_UpdateSession (const struct ExaSes_Session *Session); void Exa_DB_UpdateSession (const struct ExaSes_Session *Session);
@ -98,7 +107,8 @@ unsigned Exa_DB_GetDataOfPrintBySesCodAndUsrCod (MYSQL_RES **mysql_res,
long SesCod,long UsrCod); long SesCod,long UsrCod);
void Exa_DB_RemovePrintsMadeByUsrInAllCrss (long UsrCod); void Exa_DB_RemovePrintsMadeByUsrInAllCrss (long UsrCod);
void Exa_DB_RemovePrintsMadeByUsrInCrs (long UsrCod,long CrsCod); void Exa_DB_RemovePrintsMadeByUsrInCrs (long UsrCod,long CrsCod);
void Exa_DB_RemovePrintsInCrs (long CrsCod); void Exa_DB_RemovePrintsFromExam (long ExaCod);
void Exa_DB_RemovePrintsFromCrs (long CrsCod);
void Exa_DB_StoreOneQstOfPrint (const struct ExaPrn_Print *Print, void Exa_DB_StoreOneQstOfPrint (const struct ExaPrn_Print *Print,
unsigned QstInd); unsigned QstInd);
@ -109,7 +119,8 @@ unsigned Exa_DB_GetNumQstsNotBlankInPrint (long PrnCod);
double Exa_DB_ComputeTotalScoreOfPrint (long PrnCod); double Exa_DB_ComputeTotalScoreOfPrint (long PrnCod);
void Exa_DB_RemovePrintQuestionsMadeByUsrInAllCrss (long UsrCod); void Exa_DB_RemovePrintQuestionsMadeByUsrInAllCrss (long UsrCod);
void Exa_DB_RemovePrintsQuestionsMadeByUsrInCrs (long UsrCod,long CrsCod); void Exa_DB_RemovePrintsQuestionsMadeByUsrInCrs (long UsrCod,long CrsCod);
void Exa_DB_RemovePrintQuestionsInCrs (long CrsCod); void Exa_DB_RemovePrintQuestionsFromExam (long ExaCod);
void Exa_DB_RemovePrintQuestionsFromCrs (long CrsCod);
bool Exa_DB_CheckIfSessionIsTheSameAsTheLast (long PrnCod); bool Exa_DB_CheckIfSessionIsTheSameAsTheLast (long PrnCod);
bool Exa_DB_CheckIfUserAgentIsTheSameAsTheLast (long PrnCod,const char *UserAgentDB); bool Exa_DB_CheckIfUserAgentIsTheSameAsTheLast (long PrnCod,const char *UserAgentDB);

View File

@ -1320,42 +1320,3 @@ static void ExaPrn_GetCorrectTxtAnswerFromDB (struct Tst_Question *Question)
/***** Free structure that stores the query result *****/ /***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res); DB_FreeMySQLResult (&mysql_res);
} }
/*****************************************************************************/
/********************** Remove exam prints made by a user ********************/
/*****************************************************************************/
void ExaPrn_RemovePrintsMadeByUsrInAllCrss (long UsrCod)
{
/***** Remove exam prints questions for the given user *****/
Exa_DB_RemovePrintQuestionsMadeByUsrInAllCrss (UsrCod);
/***** Remove exam prints made by the given user *****/
Exa_DB_RemovePrintsMadeByUsrInAllCrss (UsrCod);
}
/*****************************************************************************/
/*************** Remove exam prints made by a user in a course ***************/
/*****************************************************************************/
void ExaPrn_RemovePrintsMadeByUsrInCrs (long UsrCod,long CrsCod)
{
/***** Remove questions of exams prints made by the given user in the given course *****/
Exa_DB_RemovePrintsQuestionsMadeByUsrInCrs (UsrCod,CrsCod);
/***** Remove exams prints made by the given user in the given course *****/
Exa_DB_RemovePrintsMadeByUsrInCrs (UsrCod,CrsCod);
}
/*****************************************************************************/
/****************** Remove all exams prints made in a course *****************/
/*****************************************************************************/
void ExaPrn_RemoveCrsPrints (long CrsCod)
{
/***** Remove questions of exams prints made by the given user in the given course *****/
Exa_DB_RemovePrintQuestionsInCrs (CrsCod);
/***** Remove exams prints made by the given user in the given course *****/
Exa_DB_RemovePrintsInCrs (CrsCod);
}

View File

@ -90,8 +90,4 @@ void ExaPrn_ReceivePrintAnswer (void);
void ExaPrn_ComputeAnswerScore (struct TstPrn_PrintedQuestion *PrintedQuestion, void ExaPrn_ComputeAnswerScore (struct TstPrn_PrintedQuestion *PrintedQuestion,
struct Tst_Question *Question); struct Tst_Question *Question);
void ExaPrn_RemovePrintsMadeByUsrInAllCrss (long UsrCod);
void ExaPrn_RemovePrintsMadeByUsrInCrs (long UsrCod,long CrsCod);
void ExaPrn_RemoveCrsPrints (long CrsCod);
#endif #endif

View File

@ -141,7 +141,7 @@ static void Mch_RemoveMatchFromAllTables (long MchCod);
static void Mch_DB_RemoveMatchFromTable (long MchCod,const char *TableName); static void Mch_DB_RemoveMatchFromTable (long MchCod,const char *TableName);
static void Mch_DB_RemoveMatchesInGameFromTable (long GamCod,const char *TableName); static void Mch_DB_RemoveMatchesInGameFromTable (long GamCod,const char *TableName);
static void Mch_DB_RemoveMatchesInCourseFromTable (long CrsCod,const char *TableName); static void Mch_DB_RemoveMatchesInCourseFromTable (long CrsCod,const char *TableName);
static void Mch_RemoveMatchesMadeByUsrFromTable (long UsrCod,const char *TableName); static void Mch_DB_RemoveMatchesMadeByUsrFromTable (long UsrCod,const char *TableName);
static void Mch_RemoveMatchesMadeByUsrInCrsFromTable (long UsrCod,long CrsCod,const char *TableName); static void Mch_RemoveMatchesMadeByUsrInCrsFromTable (long UsrCod,long CrsCod,const char *TableName);
static void Mch_PutParamsPlay (void *MchCod); static void Mch_PutParamsPlay (void *MchCod);
@ -1293,12 +1293,12 @@ static void Mch_DB_RemoveMatchesInCourseFromTable (long CrsCod,const char *Table
void Mch_RemoveMatchesMadeByUsrInAllCrss (long UsrCod) void Mch_RemoveMatchesMadeByUsrInAllCrss (long UsrCod)
{ {
/***** Remove student from secondary tables *****/ /***** Remove student from secondary tables *****/
Mch_RemoveMatchesMadeByUsrFromTable (UsrCod,"mch_players"); Mch_DB_RemoveMatchesMadeByUsrFromTable (UsrCod,"mch_players");
Mch_RemoveMatchesMadeByUsrFromTable (UsrCod,"mch_results"); Mch_DB_RemoveMatchesMadeByUsrFromTable (UsrCod,"mch_results");
Mch_RemoveMatchesMadeByUsrFromTable (UsrCod,"mch_answers"); Mch_DB_RemoveMatchesMadeByUsrFromTable (UsrCod,"mch_answers");
} }
static void Mch_RemoveMatchesMadeByUsrFromTable (long UsrCod,const char *TableName) static void Mch_DB_RemoveMatchesMadeByUsrFromTable (long UsrCod,const char *TableName)
{ {
/***** Remove matches in course from secondary table *****/ /***** Remove matches in course from secondary table *****/
DB_QueryDELETE ("can not remove matches of a user from table", DB_QueryDELETE ("can not remove matches of a user from table",