mirror of https://github.com/acanas/swad-core.git
Version 20.86: May 31, 2021 New module swad_call_for_exam_database for database queries related to calls for exams.
This commit is contained in:
parent
96e80a87b7
commit
3699490179
6
Makefile
6
Makefile
|
@ -32,9 +32,9 @@ OBJS = swad_account.o swad_account_database.o swad_action.o swad_agenda.o \
|
||||||
swad_assignment_database.o swad_attendance.o swad_attendance_database.o \
|
swad_assignment_database.o swad_attendance.o swad_attendance_database.o \
|
||||||
swad_banner.o swad_banner_database.o swad_box.o swad_building.o \
|
swad_banner.o swad_banner_database.o swad_box.o swad_building.o \
|
||||||
swad_button.o \
|
swad_button.o \
|
||||||
swad_calendar.o swad_call_for_exam.o swad_center.o \
|
swad_calendar.o swad_call_for_exam.o swad_call_for_exam_database.o \
|
||||||
swad_center_config.o swad_chat.o swad_chat_database.o swad_config.o \
|
swad_center.o swad_center_config.o swad_chat.o swad_chat_database.o \
|
||||||
swad_connected.o swad_connected_database.o swad_cookie.o \
|
swad_config.o swad_connected.o swad_connected_database.o swad_cookie.o \
|
||||||
swad_cookie_database.o swad_country.o swad_country_config.o \
|
swad_cookie_database.o swad_country.o swad_country_config.o \
|
||||||
swad_country_database.o swad_course.o swad_course_config.o \
|
swad_country_database.o swad_course.o swad_course_config.o \
|
||||||
swad_course_database.o swad_cryptography.o \
|
swad_course_database.o swad_cryptography.o \
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
|
|
||||||
#include "swad_box.h"
|
#include "swad_box.h"
|
||||||
#include "swad_call_for_exam.h"
|
#include "swad_call_for_exam.h"
|
||||||
|
#include "swad_call_for_exam_database.h"
|
||||||
#include "swad_config.h"
|
#include "swad_config.h"
|
||||||
#include "swad_database.h"
|
#include "swad_database.h"
|
||||||
#include "swad_degree_database.h"
|
#include "swad_degree_database.h"
|
||||||
|
@ -80,9 +81,6 @@ static long Cfe_GetParamsCallsForExams (struct Cfe_CallsForExams *CallsForExams)
|
||||||
static void Cfe_AllocMemCallForExam (struct Cfe_CallsForExams *CallsForExams);
|
static void Cfe_AllocMemCallForExam (struct Cfe_CallsForExams *CallsForExams);
|
||||||
static void Cfe_FreeMemCallForExam (struct Cfe_CallsForExams *CallsForExams);
|
static void Cfe_FreeMemCallForExam (struct Cfe_CallsForExams *CallsForExams);
|
||||||
|
|
||||||
static void Cfe_UpdateNumUsrsNotifiedByEMailAboutCallForExam (long ExaCod,
|
|
||||||
unsigned NumUsrsToBeNotifiedByEMail);
|
|
||||||
|
|
||||||
static void Cfe_GetExaCodToHighlight (struct Cfe_CallsForExams *CallsForExams);
|
static void Cfe_GetExaCodToHighlight (struct Cfe_CallsForExams *CallsForExams);
|
||||||
static void Cfe_GetDateToHighlight (struct Cfe_CallsForExams *CallsForExams);
|
static void Cfe_GetDateToHighlight (struct Cfe_CallsForExams *CallsForExams);
|
||||||
|
|
||||||
|
@ -91,9 +89,6 @@ static void Cfe_ListCallsForExams (struct Cfe_CallsForExams *CallsForExams,
|
||||||
static void Cfe_PutIconToCreateNewCallForExam (__attribute__((unused)) void *Args);
|
static void Cfe_PutIconToCreateNewCallForExam (__attribute__((unused)) void *Args);
|
||||||
static void Cfe_PutButtonToCreateNewCallForExam (void);
|
static void Cfe_PutButtonToCreateNewCallForExam (void);
|
||||||
|
|
||||||
static long Cfe_AddCallForExamToDB (const struct Cfe_CallsForExams *CallsForExams);
|
|
||||||
static void Cfe_ModifyCallForExamInDB (const struct Cfe_CallsForExams *CallsForExams,
|
|
||||||
long ExaCod);
|
|
||||||
static void Cfe_GetDataCallForExamFromDB (struct Cfe_CallsForExams *CallsForExams,
|
static void Cfe_GetDataCallForExamFromDB (struct Cfe_CallsForExams *CallsForExams,
|
||||||
long ExaCod);
|
long ExaCod);
|
||||||
static void Cfe_ShowCallForExam (struct Cfe_CallsForExams *CallsForExams,
|
static void Cfe_ShowCallForExam (struct Cfe_CallsForExams *CallsForExams,
|
||||||
|
@ -124,7 +119,7 @@ static struct Cfe_CallsForExams *Cfe_GetGlobalCallsForExams (void)
|
||||||
|
|
||||||
void Cfe_ResetCallsForExams (struct Cfe_CallsForExams *CallsForExams)
|
void Cfe_ResetCallsForExams (struct Cfe_CallsForExams *CallsForExams)
|
||||||
{
|
{
|
||||||
CallsForExams->NumCallsForExams = 0;
|
CallsForExams->NumCallsForExams = 0;
|
||||||
CallsForExams->Lst = NULL;
|
CallsForExams->Lst = NULL;
|
||||||
CallsForExams->NewExaCod = -1L;
|
CallsForExams->NewExaCod = -1L;
|
||||||
CallsForExams->HighlightExaCod = -1L;
|
CallsForExams->HighlightExaCod = -1L;
|
||||||
|
@ -200,10 +195,10 @@ static long Cfe_GetParamsCallsForExams (struct Cfe_CallsForExams *CallsForExams)
|
||||||
|
|
||||||
/***** Get the year *****/
|
/***** Get the year *****/
|
||||||
CallsForExams->CallForExam.Year = (unsigned)
|
CallsForExams->CallForExam.Year = (unsigned)
|
||||||
Par_GetParToUnsignedLong ("Year",
|
Par_GetParToUnsignedLong ("Year",
|
||||||
0, // N.A.
|
0, // N.A.
|
||||||
Deg_MAX_YEARS_PER_DEGREE,
|
Deg_MAX_YEARS_PER_DEGREE,
|
||||||
(unsigned long) Gbl.Hierarchy.Crs.Year);
|
(unsigned long) Gbl.Hierarchy.Crs.Year);
|
||||||
|
|
||||||
/***** Get the type of call for exam *****/
|
/***** Get the type of call for exam *****/
|
||||||
Par_GetParToText ("ExamSession",CallsForExams->CallForExam.Session,Cfe_MAX_BYTES_SESSION);
|
Par_GetParToText ("ExamSession",CallsForExams->CallForExam.Session,Cfe_MAX_BYTES_SESSION);
|
||||||
|
@ -234,26 +229,16 @@ static long Cfe_GetParamsCallsForExams (struct Cfe_CallsForExams *CallsForExams)
|
||||||
CallsForExams->CallForExam.Duration.Minute = (unsigned) Par_GetParToUnsignedLong ("DurationMinute",
|
CallsForExams->CallForExam.Duration.Minute = (unsigned) Par_GetParToUnsignedLong ("DurationMinute",
|
||||||
0,59,0);
|
0,59,0);
|
||||||
|
|
||||||
/***** Get the place where the exam will happen *****/
|
/***** Get the place where the exam will happen, the modality of exam,
|
||||||
Par_GetParToHTML ("Place",CallsForExams->CallForExam.Place,Cns_MAX_BYTES_TEXT);
|
the structure of exam, the mandatory documentation, the mandatory material,
|
||||||
|
the allowed material and other information *****/
|
||||||
/***** Get the modality of exam *****/
|
Par_GetParToHTML ("Place" ,CallsForExams->CallForExam.Place ,Cns_MAX_BYTES_TEXT);
|
||||||
Par_GetParToHTML ("ExamMode",CallsForExams->CallForExam.Mode,Cns_MAX_BYTES_TEXT);
|
Par_GetParToHTML ("ExamMode" ,CallsForExams->CallForExam.Mode ,Cns_MAX_BYTES_TEXT);
|
||||||
|
Par_GetParToHTML ("Structure" ,CallsForExams->CallForExam.Structure ,Cns_MAX_BYTES_TEXT);
|
||||||
/***** Get the structure of exam *****/
|
|
||||||
Par_GetParToHTML ("Structure",CallsForExams->CallForExam.Structure,Cns_MAX_BYTES_TEXT);
|
|
||||||
|
|
||||||
/***** Get the mandatory documentation *****/
|
|
||||||
Par_GetParToHTML ("DocRequired",CallsForExams->CallForExam.DocRequired,Cns_MAX_BYTES_TEXT);
|
Par_GetParToHTML ("DocRequired",CallsForExams->CallForExam.DocRequired,Cns_MAX_BYTES_TEXT);
|
||||||
|
|
||||||
/***** Get the mandatory material *****/
|
|
||||||
Par_GetParToHTML ("MatRequired",CallsForExams->CallForExam.MatRequired,Cns_MAX_BYTES_TEXT);
|
Par_GetParToHTML ("MatRequired",CallsForExams->CallForExam.MatRequired,Cns_MAX_BYTES_TEXT);
|
||||||
|
Par_GetParToHTML ("MatAllowed" ,CallsForExams->CallForExam.MatAllowed ,Cns_MAX_BYTES_TEXT);
|
||||||
/***** Get the allowed material *****/
|
Par_GetParToHTML ("OtherInfo" ,CallsForExams->CallForExam.OtherInfo ,Cns_MAX_BYTES_TEXT);
|
||||||
Par_GetParToHTML ("MatAllowed",CallsForExams->CallForExam.MatAllowed,Cns_MAX_BYTES_TEXT);
|
|
||||||
|
|
||||||
/***** Get other information *****/
|
|
||||||
Par_GetParToHTML ("OtherInfo",CallsForExams->CallForExam.OtherInfo,Cns_MAX_BYTES_TEXT);
|
|
||||||
|
|
||||||
return ExaCod;
|
return ExaCod;
|
||||||
}
|
}
|
||||||
|
@ -356,9 +341,9 @@ void Cfe_ReceiveCallForExam1 (void)
|
||||||
|
|
||||||
/***** Add the call for exam to the database and read it again from the database *****/
|
/***** Add the call for exam to the database and read it again from the database *****/
|
||||||
if (NewCallForExam)
|
if (NewCallForExam)
|
||||||
CallsForExams->NewExaCod = ExaCod = Cfe_AddCallForExamToDB (CallsForExams);
|
CallsForExams->NewExaCod = ExaCod = Cfe_DB_CreateCallForExam (&CallsForExams->CallForExam);
|
||||||
else
|
else
|
||||||
Cfe_ModifyCallForExamInDB (CallsForExams,ExaCod);
|
Cfe_DB_ModifyCallForExam (&CallsForExams->CallForExam,ExaCod);
|
||||||
|
|
||||||
/***** Free memory of the call for exam *****/
|
/***** Free memory of the call for exam *****/
|
||||||
Cfe_FreeMemCallForExam (CallsForExams);
|
Cfe_FreeMemCallForExam (CallsForExams);
|
||||||
|
@ -381,7 +366,7 @@ void Cfe_ReceiveCallForExam2 (void)
|
||||||
|
|
||||||
/***** Notify by email about the new call for exam *****/
|
/***** Notify by email about the new call for exam *****/
|
||||||
if ((NumUsrsToBeNotifiedByEMail = Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_CALL_FOR_EXAM,CallsForExams->HighlightExaCod)))
|
if ((NumUsrsToBeNotifiedByEMail = Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_CALL_FOR_EXAM,CallsForExams->HighlightExaCod)))
|
||||||
Cfe_UpdateNumUsrsNotifiedByEMailAboutCallForExam (CallsForExams->HighlightExaCod,NumUsrsToBeNotifiedByEMail);
|
Cfe_DB_UpdateNumUsrsNotifiedByEMailAboutCallForExam (CallsForExams->HighlightExaCod,NumUsrsToBeNotifiedByEMail);
|
||||||
|
|
||||||
/***** Create a new social note about the new call for exam *****/
|
/***** Create a new social note about the new call for exam *****/
|
||||||
Tml_Not_StoreAndPublishNote (TL_NOTE_CALL_FOR_EXAM,CallsForExams->HighlightExaCod);
|
Tml_Not_StoreAndPublishNote (TL_NOTE_CALL_FOR_EXAM,CallsForExams->HighlightExaCod);
|
||||||
|
@ -393,23 +378,6 @@ void Cfe_ReceiveCallForExam2 (void)
|
||||||
Cfe_ListCallsForExamsEdit ();
|
Cfe_ListCallsForExamsEdit ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/******* Update number of users notified in table of calls for exams *********/
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
static void Cfe_UpdateNumUsrsNotifiedByEMailAboutCallForExam (long ExaCod,
|
|
||||||
unsigned NumUsrsToBeNotifiedByEMail)
|
|
||||||
{
|
|
||||||
/***** Update number of users notified *****/
|
|
||||||
DB_QueryUPDATE ("can not update the number of notifications"
|
|
||||||
" of a call for exam",
|
|
||||||
"UPDATE cfe_exams"
|
|
||||||
" SET NumNotif=NumNotif+%u"
|
|
||||||
" WHERE ExaCod=%ld",
|
|
||||||
NumUsrsToBeNotifiedByEMail,
|
|
||||||
ExaCod);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/*************************** Print a call for exam ***************************/
|
/*************************** Print a call for exam ***************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -462,15 +430,14 @@ void Cfe_ReqRemoveCallForExam (void)
|
||||||
/* Begin alert */
|
/* Begin alert */
|
||||||
Ale_ShowAlertAndButton1 (Ale_QUESTION,Txt_Do_you_really_want_to_remove_the_following_call_for_exam);
|
Ale_ShowAlertAndButton1 (Ale_QUESTION,Txt_Do_you_really_want_to_remove_the_following_call_for_exam);
|
||||||
|
|
||||||
/* Show call for exam */
|
/* Show call for exam */
|
||||||
Cfe_AllocMemCallForExam (&CallsForExams);
|
Cfe_AllocMemCallForExam (&CallsForExams);
|
||||||
Cfe_GetDataCallForExamFromDB (&CallsForExams,ExaCod);
|
Cfe_GetDataCallForExamFromDB (&CallsForExams,ExaCod);
|
||||||
Cfe_ShowCallForExam (&CallsForExams,ExaCod,Cfe_NORMAL_VIEW,
|
Cfe_ShowCallForExam (&CallsForExams,ExaCod,Cfe_NORMAL_VIEW,
|
||||||
false); // Don't highlight
|
false); // Don't highlight
|
||||||
Cfe_FreeMemCallForExam (&CallsForExams);
|
Cfe_FreeMemCallForExam (&CallsForExams);
|
||||||
|
|
||||||
/* End alert */
|
/* End alert */
|
||||||
|
|
||||||
Ale_ShowAlertAndButton2 (ActRemCfe,NULL,NULL,
|
Ale_ShowAlertAndButton2 (ActRemCfe,NULL,NULL,
|
||||||
Cfe_PutParamExaCodToEdit,&CallsForExams.ExaCod,
|
Cfe_PutParamExaCodToEdit,&CallsForExams.ExaCod,
|
||||||
Btn_REMOVE_BUTTON,Txt_Remove);
|
Btn_REMOVE_BUTTON,Txt_Remove);
|
||||||
|
@ -495,14 +462,7 @@ void Cfe_RemoveCallForExam1 (void)
|
||||||
Err_WrongCallForExamExit ();
|
Err_WrongCallForExamExit ();
|
||||||
|
|
||||||
/***** Mark the call for exam as deleted in the database *****/
|
/***** Mark the call for exam as deleted in the database *****/
|
||||||
DB_QueryUPDATE ("can not remove call for exam",
|
Cfe_DB_MarkACallForExamAsDeleted (ExaCod);
|
||||||
"UPDATE cfe_exams"
|
|
||||||
" SET Status=%u"
|
|
||||||
" WHERE ExaCod=%ld"
|
|
||||||
" AND CrsCod=%ld",
|
|
||||||
(unsigned) Cfe_DELETED_CALL_FOR_EXAM,
|
|
||||||
ExaCod,
|
|
||||||
Gbl.Hierarchy.Crs.CrsCod);
|
|
||||||
|
|
||||||
/***** Mark possible notifications as removed *****/
|
/***** Mark possible notifications as removed *****/
|
||||||
Ntf_MarkNotifAsRemoved (Ntf_EVENT_CALL_FOR_EXAM,ExaCod);
|
Ntf_MarkNotifAsRemoved (Ntf_EVENT_CALL_FOR_EXAM,ExaCod);
|
||||||
|
@ -544,14 +504,7 @@ void Cfe_HideCallForExam (void)
|
||||||
Err_WrongCallForExamExit ();
|
Err_WrongCallForExamExit ();
|
||||||
|
|
||||||
/***** Mark the call for exam as hidden in the database *****/
|
/***** Mark the call for exam as hidden in the database *****/
|
||||||
DB_QueryUPDATE ("can not hide call for exam",
|
Cfe_DB_HideCallForExam (ExaCod);
|
||||||
"UPDATE cfe_exams"
|
|
||||||
" SET Status=%u"
|
|
||||||
" WHERE ExaCod=%ld"
|
|
||||||
" AND CrsCod=%ld",
|
|
||||||
(unsigned) Cfe_HIDDEN_CALL_FOR_EXAM,
|
|
||||||
ExaCod,
|
|
||||||
Gbl.Hierarchy.Crs.CrsCod);
|
|
||||||
|
|
||||||
/***** Set exam to be highlighted *****/
|
/***** Set exam to be highlighted *****/
|
||||||
CallsForExams->HighlightExaCod = ExaCod;
|
CallsForExams->HighlightExaCod = ExaCod;
|
||||||
|
@ -576,14 +529,7 @@ void Cfe_UnhideCallForExam (void)
|
||||||
Err_WrongCallForExamExit ();
|
Err_WrongCallForExamExit ();
|
||||||
|
|
||||||
/***** Mark the call for exam as visible in the database *****/
|
/***** Mark the call for exam as visible in the database *****/
|
||||||
DB_QueryUPDATE ("can not unhide call for exam",
|
Cfe_DB_UnhideCallForExam (ExaCod);
|
||||||
"UPDATE cfe_exams"
|
|
||||||
" SET Status=%u"
|
|
||||||
" WHERE ExaCod=%ld"
|
|
||||||
" AND CrsCod=%ld",
|
|
||||||
(unsigned) Cfe_VISIBLE_CALL_FOR_EXAM,
|
|
||||||
ExaCod,
|
|
||||||
Gbl.Hierarchy.Crs.CrsCod);
|
|
||||||
|
|
||||||
/***** Set exam to be highlighted *****/
|
/***** Set exam to be highlighted *****/
|
||||||
CallsForExams->HighlightExaCod = ExaCod;
|
CallsForExams->HighlightExaCod = ExaCod;
|
||||||
|
@ -710,7 +656,7 @@ static void Cfe_ListCallsForExams (struct Cfe_CallsForExams *CallsForExams,
|
||||||
NumExaAnns = (unsigned)
|
NumExaAnns = (unsigned)
|
||||||
DB_QuerySELECT (&mysql_res,"can not get calls for exams"
|
DB_QuerySELECT (&mysql_res,"can not get calls for exams"
|
||||||
" in this course for listing",
|
" in this course for listing",
|
||||||
"SELECT ExaCod" // row[0]
|
"SELECT ExaCod" // row[0]
|
||||||
" FROM cfe_exams"
|
" FROM cfe_exams"
|
||||||
" WHERE CrsCod=%ld"
|
" WHERE CrsCod=%ld"
|
||||||
" AND %s"
|
" AND %s"
|
||||||
|
@ -798,98 +744,10 @@ static void Cfe_PutButtonToCreateNewCallForExam (void)
|
||||||
extern const char *Txt_New_call_FOR_EXAM;
|
extern const char *Txt_New_call_FOR_EXAM;
|
||||||
|
|
||||||
Frm_BeginForm (ActEdiCfe);
|
Frm_BeginForm (ActEdiCfe);
|
||||||
Btn_PutConfirmButton (Txt_New_call_FOR_EXAM);
|
Btn_PutConfirmButton (Txt_New_call_FOR_EXAM);
|
||||||
Frm_EndForm ();
|
Frm_EndForm ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/******************** Add a call for exam to the database ********************/
|
|
||||||
/*****************************************************************************/
|
|
||||||
// Return the code of the call for exam just added
|
|
||||||
|
|
||||||
static long Cfe_AddCallForExamToDB (const struct Cfe_CallsForExams *CallsForExams)
|
|
||||||
{
|
|
||||||
long ExaCod;
|
|
||||||
|
|
||||||
/***** Add call for exam *****/
|
|
||||||
ExaCod =
|
|
||||||
DB_QueryINSERTandReturnCode ("can not create a new call for exam",
|
|
||||||
"INSERT INTO cfe_exams "
|
|
||||||
"(CrsCod,Status,NumNotif,CrsFullName,Year,ExamSession,"
|
|
||||||
"CallDate,ExamDate,Duration,"
|
|
||||||
"Place,ExamMode,Structure,"
|
|
||||||
"DocRequired,MatRequired,MatAllowed,OtherInfo)"
|
|
||||||
" VALUES "
|
|
||||||
"(%ld,%u,0,'%s',%u,'%s',"
|
|
||||||
"NOW(),'%04u-%02u-%02u %02u:%02u:00','%02u:%02u:00',"
|
|
||||||
"'%s','%s','%s',"
|
|
||||||
"'%s','%s','%s','%s')",
|
|
||||||
Gbl.Hierarchy.Crs.CrsCod,
|
|
||||||
(unsigned) Cfe_VISIBLE_CALL_FOR_EXAM,
|
|
||||||
CallsForExams->CallForExam.CrsFullName,
|
|
||||||
CallsForExams->CallForExam.Year,
|
|
||||||
CallsForExams->CallForExam.Session,
|
|
||||||
CallsForExams->CallForExam.ExamDate.Year,
|
|
||||||
CallsForExams->CallForExam.ExamDate.Month,
|
|
||||||
CallsForExams->CallForExam.ExamDate.Day,
|
|
||||||
CallsForExams->CallForExam.StartTime.Hour,
|
|
||||||
CallsForExams->CallForExam.StartTime.Minute,
|
|
||||||
CallsForExams->CallForExam.Duration.Hour,
|
|
||||||
CallsForExams->CallForExam.Duration.Minute,
|
|
||||||
CallsForExams->CallForExam.Place,
|
|
||||||
CallsForExams->CallForExam.Mode,
|
|
||||||
CallsForExams->CallForExam.Structure,
|
|
||||||
CallsForExams->CallForExam.DocRequired,
|
|
||||||
CallsForExams->CallForExam.MatRequired,
|
|
||||||
CallsForExams->CallForExam.MatAllowed,
|
|
||||||
CallsForExams->CallForExam.OtherInfo);
|
|
||||||
|
|
||||||
return ExaCod;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/***************** Modify a call for exam in the database ********************/
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
static void Cfe_ModifyCallForExamInDB (const struct Cfe_CallsForExams *CallsForExams,
|
|
||||||
long ExaCod)
|
|
||||||
{
|
|
||||||
/***** Modify call for exam *****/
|
|
||||||
DB_QueryUPDATE ("can not update a call for exam",
|
|
||||||
"UPDATE cfe_exams"
|
|
||||||
" SET CrsFullName='%s',"
|
|
||||||
"Year=%u,"
|
|
||||||
"ExamSession='%s',"
|
|
||||||
"ExamDate='%04u-%02u-%02u %02u:%02u:00',"
|
|
||||||
"Duration='%02u:%02u:00',"
|
|
||||||
"Place='%s',"
|
|
||||||
"ExamMode='%s',"
|
|
||||||
"Structure='%s',"
|
|
||||||
"DocRequired='%s',"
|
|
||||||
"MatRequired='%s',"
|
|
||||||
"MatAllowed='%s',"
|
|
||||||
"OtherInfo='%s'"
|
|
||||||
" WHERE ExaCod=%ld",
|
|
||||||
CallsForExams->CallForExam.CrsFullName,
|
|
||||||
CallsForExams->CallForExam.Year,
|
|
||||||
CallsForExams->CallForExam.Session,
|
|
||||||
CallsForExams->CallForExam.ExamDate.Year,
|
|
||||||
CallsForExams->CallForExam.ExamDate.Month,
|
|
||||||
CallsForExams->CallForExam.ExamDate.Day,
|
|
||||||
CallsForExams->CallForExam.StartTime.Hour,
|
|
||||||
CallsForExams->CallForExam.StartTime.Minute,
|
|
||||||
CallsForExams->CallForExam.Duration.Hour,
|
|
||||||
CallsForExams->CallForExam.Duration.Minute,
|
|
||||||
CallsForExams->CallForExam.Place,
|
|
||||||
CallsForExams->CallForExam.Mode,
|
|
||||||
CallsForExams->CallForExam.Structure,
|
|
||||||
CallsForExams->CallForExam.DocRequired,
|
|
||||||
CallsForExams->CallForExam.MatRequired,
|
|
||||||
CallsForExams->CallForExam.MatAllowed,
|
|
||||||
CallsForExams->CallForExam.OtherInfo,
|
|
||||||
ExaCod);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/******** Create a list with the dates of all the calls for exams ************/
|
/******** Create a list with the dates of all the calls for exams ************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -1842,17 +1700,3 @@ static void Cfe_GetNotifContentCallForExam (const struct Cfe_CallsForExams *Call
|
||||||
Txt_CALL_FOR_EXAM_Other_information,CallsForExams->CallForExam.OtherInfo) < 0)
|
Txt_CALL_FOR_EXAM_Other_information,CallsForExams->CallForExam.OtherInfo) < 0)
|
||||||
Err_NotEnoughMemoryExit ();
|
Err_NotEnoughMemoryExit ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/*********** Mark all exam announcements in the course as deleted ************/
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
void Cfe_DB_MarkCallForExamsInCrsAsDeleted (long CrsCod)
|
|
||||||
{
|
|
||||||
DB_QueryUPDATE ("can not remove calls for exams of a course",
|
|
||||||
"UPDATE cfe_exams"
|
|
||||||
" SET Status=%u"
|
|
||||||
" WHERE CrsCod=%ld",
|
|
||||||
(unsigned) Cfe_DELETED_CALL_FOR_EXAM,
|
|
||||||
CrsCod);
|
|
||||||
}
|
|
||||||
|
|
|
@ -126,6 +126,4 @@ void Cfe_GetSummaryAndContentCallForExam (char SummaryStr[Ntf_MAX_BYTES_SUMMARY
|
||||||
char **ContentStr,
|
char **ContentStr,
|
||||||
long ExaCod,bool GetContent);
|
long ExaCod,bool GetContent);
|
||||||
|
|
||||||
void Cfe_DB_MarkCallForExamsInCrsAsDeleted (long CrsCod);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -0,0 +1,236 @@
|
||||||
|
// swad_exam_announcement_database.c: calls for exams operations with database
|
||||||
|
|
||||||
|
/*
|
||||||
|
SWAD (Shared Workspace At a Distance),
|
||||||
|
is a web platform developed at the University of Granada (Spain),
|
||||||
|
and used to support university teaching.
|
||||||
|
|
||||||
|
This file is part of SWAD core.
|
||||||
|
Copyright (C) 1999-2021 Antonio Cañas Vargas
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Affero General 3 License as
|
||||||
|
published by the Free Software Foundation, either version 3 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Affero General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Affero General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/*****************************************************************************/
|
||||||
|
/********************************* Headers ***********************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
// #define _GNU_SOURCE // For asprintf
|
||||||
|
// #include <stddef.h> // For NULL
|
||||||
|
// #include <stdio.h> // For sscanf, asprintf, etc.
|
||||||
|
// #include <stdlib.h> // For exit, system, malloc, calloc, free, etc.
|
||||||
|
// #include <string.h> // For string functions
|
||||||
|
|
||||||
|
// #include "swad_box.h"
|
||||||
|
#include "swad_call_for_exam.h"
|
||||||
|
#include "swad_call_for_exam_database.h"
|
||||||
|
// #include "swad_config.h"
|
||||||
|
#include "swad_database.h"
|
||||||
|
// #include "swad_degree_database.h"
|
||||||
|
// #include "swad_error.h"
|
||||||
|
// #include "swad_form.h"
|
||||||
|
#include "swad_global.h"
|
||||||
|
// #include "swad_hierarchy.h"
|
||||||
|
// #include "swad_hierarchy_level.h"
|
||||||
|
// #include "swad_HTML.h"
|
||||||
|
// #include "swad_logo.h"
|
||||||
|
// #include "swad_notification.h"
|
||||||
|
// #include "swad_parameter.h"
|
||||||
|
// #include "swad_QR.h"
|
||||||
|
// #include "swad_RSS.h"
|
||||||
|
// #include "swad_string.h"
|
||||||
|
// #include "swad_timeline.h"
|
||||||
|
// #include "swad_timeline_database.h"
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/************** External global variables from others modules ****************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
extern struct Globals Gbl;
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/***************************** Private constants *****************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/******************************* Private types *******************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/***************************** Private variables *****************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/***************************** Private prototypes ****************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/******************** Add a call for exam to the database ********************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
// Return the code of the call for exam just added
|
||||||
|
|
||||||
|
long Cfe_DB_CreateCallForExam (const struct Cfe_CallForExam *CallForExam)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
DB_QueryINSERTandReturnCode ("can not create a new call for exam",
|
||||||
|
"INSERT INTO cfe_exams "
|
||||||
|
"(CrsCod,Status,NumNotif,CrsFullName,Year,ExamSession,"
|
||||||
|
"CallDate,ExamDate,Duration,"
|
||||||
|
"Place,ExamMode,Structure,"
|
||||||
|
"DocRequired,MatRequired,MatAllowed,OtherInfo)"
|
||||||
|
" VALUES "
|
||||||
|
"(%ld,%u,0,'%s',%u,'%s',"
|
||||||
|
"NOW(),'%04u-%02u-%02u %02u:%02u:00','%02u:%02u:00',"
|
||||||
|
"'%s','%s','%s',"
|
||||||
|
"'%s','%s','%s','%s')",
|
||||||
|
Gbl.Hierarchy.Crs.CrsCod,
|
||||||
|
(unsigned) Cfe_VISIBLE_CALL_FOR_EXAM,
|
||||||
|
CallForExam->CrsFullName,
|
||||||
|
CallForExam->Year,
|
||||||
|
CallForExam->Session,
|
||||||
|
CallForExam->ExamDate.Year,
|
||||||
|
CallForExam->ExamDate.Month,
|
||||||
|
CallForExam->ExamDate.Day,
|
||||||
|
CallForExam->StartTime.Hour,
|
||||||
|
CallForExam->StartTime.Minute,
|
||||||
|
CallForExam->Duration.Hour,
|
||||||
|
CallForExam->Duration.Minute,
|
||||||
|
CallForExam->Place,
|
||||||
|
CallForExam->Mode,
|
||||||
|
CallForExam->Structure,
|
||||||
|
CallForExam->DocRequired,
|
||||||
|
CallForExam->MatRequired,
|
||||||
|
CallForExam->MatAllowed,
|
||||||
|
CallForExam->OtherInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/***************** Modify a call for exam in the database ********************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void Cfe_DB_ModifyCallForExam (const struct Cfe_CallForExam *CallForExam,
|
||||||
|
long ExaCod)
|
||||||
|
{
|
||||||
|
/***** Modify call for exam *****/
|
||||||
|
DB_QueryUPDATE ("can not update a call for exam",
|
||||||
|
"UPDATE cfe_exams"
|
||||||
|
" SET CrsFullName='%s',"
|
||||||
|
"Year=%u,"
|
||||||
|
"ExamSession='%s',"
|
||||||
|
"ExamDate='%04u-%02u-%02u %02u:%02u:00',"
|
||||||
|
"Duration='%02u:%02u:00',"
|
||||||
|
"Place='%s',"
|
||||||
|
"ExamMode='%s',"
|
||||||
|
"Structure='%s',"
|
||||||
|
"DocRequired='%s',"
|
||||||
|
"MatRequired='%s',"
|
||||||
|
"MatAllowed='%s',"
|
||||||
|
"OtherInfo='%s'"
|
||||||
|
" WHERE ExaCod=%ld",
|
||||||
|
CallForExam->CrsFullName,
|
||||||
|
CallForExam->Year,
|
||||||
|
CallForExam->Session,
|
||||||
|
CallForExam->ExamDate.Year,
|
||||||
|
CallForExam->ExamDate.Month,
|
||||||
|
CallForExam->ExamDate.Day,
|
||||||
|
CallForExam->StartTime.Hour,
|
||||||
|
CallForExam->StartTime.Minute,
|
||||||
|
CallForExam->Duration.Hour,
|
||||||
|
CallForExam->Duration.Minute,
|
||||||
|
CallForExam->Place,
|
||||||
|
CallForExam->Mode,
|
||||||
|
CallForExam->Structure,
|
||||||
|
CallForExam->DocRequired,
|
||||||
|
CallForExam->MatRequired,
|
||||||
|
CallForExam->MatAllowed,
|
||||||
|
CallForExam->OtherInfo,
|
||||||
|
ExaCod);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/******* Update number of users notified in table of calls for exams *********/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void Cfe_DB_UpdateNumUsrsNotifiedByEMailAboutCallForExam (long ExaCod,
|
||||||
|
unsigned NumUsrsToBeNotifiedByEMail)
|
||||||
|
{
|
||||||
|
DB_QueryUPDATE ("can not update the number of notifications"
|
||||||
|
" of a call for exam",
|
||||||
|
"UPDATE cfe_exams"
|
||||||
|
" SET NumNotif=NumNotif+%u"
|
||||||
|
" WHERE ExaCod=%ld",
|
||||||
|
NumUsrsToBeNotifiedByEMail,
|
||||||
|
ExaCod);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/************* Mark the call for exam as hidden in the database **************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void Cfe_DB_HideCallForExam (long ExaCod)
|
||||||
|
{
|
||||||
|
DB_QueryUPDATE ("can not hide call for exam",
|
||||||
|
"UPDATE cfe_exams"
|
||||||
|
" SET Status=%u"
|
||||||
|
" WHERE ExaCod=%ld"
|
||||||
|
" AND CrsCod=%ld", // Extra check
|
||||||
|
(unsigned) Cfe_HIDDEN_CALL_FOR_EXAM,
|
||||||
|
ExaCod,
|
||||||
|
Gbl.Hierarchy.Crs.CrsCod);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/************* Mark the call for exam as visible in the database *************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void Cfe_DB_UnhideCallForExam (long ExaCod)
|
||||||
|
{
|
||||||
|
DB_QueryUPDATE ("can not unhide call for exam",
|
||||||
|
"UPDATE cfe_exams"
|
||||||
|
" SET Status=%u"
|
||||||
|
" WHERE ExaCod=%ld"
|
||||||
|
" AND CrsCod=%ld", // Extra check
|
||||||
|
(unsigned) Cfe_VISIBLE_CALL_FOR_EXAM,
|
||||||
|
ExaCod,
|
||||||
|
Gbl.Hierarchy.Crs.CrsCod);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/***** Mark a call for exam as deleted in the database *****/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void Cfe_DB_MarkACallForExamAsDeleted (long ExaCod)
|
||||||
|
{
|
||||||
|
DB_QueryUPDATE ("can not remove call for exam",
|
||||||
|
"UPDATE cfe_exams"
|
||||||
|
" SET Status=%u"
|
||||||
|
" WHERE ExaCod=%ld"
|
||||||
|
" AND CrsCod=%ld", // Extra check
|
||||||
|
(unsigned) Cfe_DELETED_CALL_FOR_EXAM,
|
||||||
|
ExaCod,
|
||||||
|
Gbl.Hierarchy.Crs.CrsCod);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/*********** Mark all exam announcements in the course as deleted ************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void Cfe_DB_MarkCallForExamsInCrsAsDeleted (long CrsCod)
|
||||||
|
{
|
||||||
|
DB_QueryUPDATE ("can not remove calls for exams of a course",
|
||||||
|
"UPDATE cfe_exams"
|
||||||
|
" SET Status=%u"
|
||||||
|
" WHERE CrsCod=%ld",
|
||||||
|
(unsigned) Cfe_DELETED_CALL_FOR_EXAM,
|
||||||
|
CrsCod);
|
||||||
|
}
|
|
@ -0,0 +1,59 @@
|
||||||
|
// swad_call_for_exam_database.h: calls for exams operations with database
|
||||||
|
|
||||||
|
#ifndef _SWAD_CFE_DB
|
||||||
|
#define _SWAD_CFE_DB
|
||||||
|
/*
|
||||||
|
SWAD (Shared Workspace At a Distance),
|
||||||
|
is a web platform developed at the University of Granada (Spain),
|
||||||
|
and used to support university teaching.
|
||||||
|
|
||||||
|
This file is part of SWAD core.
|
||||||
|
Copyright (C) 1999-2021 Antonio Cañas Vargas
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Affero General 3 License as
|
||||||
|
published by the Free Software Foundation, either version 3 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Affero General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Affero General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/*****************************************************************************/
|
||||||
|
/********************************* Headers ***********************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
// #include <stdbool.h> // For boolean type
|
||||||
|
|
||||||
|
#include "swad_call_for_exam.h"
|
||||||
|
// #include "swad_constant.h"
|
||||||
|
// #include "swad_course.h"
|
||||||
|
// #include "swad_date.h"
|
||||||
|
// #include "swad_notification.h"
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/************************** Public types and constants ***********************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/***************************** Public prototypes *****************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
long Cfe_DB_CreateCallForExam (const struct Cfe_CallForExam *CallForExam);
|
||||||
|
|
||||||
|
void Cfe_DB_ModifyCallForExam (const struct Cfe_CallForExam *CallForExam,
|
||||||
|
long ExaCod);
|
||||||
|
void Cfe_DB_UpdateNumUsrsNotifiedByEMailAboutCallForExam (long ExaCod,
|
||||||
|
unsigned NumUsrsToBeNotifiedByEMail);
|
||||||
|
|
||||||
|
void Cfe_DB_HideCallForExam (long ExaCod);
|
||||||
|
void Cfe_DB_UnhideCallForExam (long ExaCod);
|
||||||
|
|
||||||
|
void Cfe_DB_MarkACallForExamAsDeleted (long ExaCod);
|
||||||
|
void Cfe_DB_MarkCallForExamsInCrsAsDeleted (long CrsCod);
|
||||||
|
|
||||||
|
#endif
|
|
@ -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.85 (2021-05-28)"
|
#define Log_PLATFORM_VERSION "SWAD 20.86 (2021-05-31)"
|
||||||
#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.86: May 31, 2021 New module swad_call_for_exam_database for database queries related to calls for exams. (? lines)
|
||||||
Version 20.85: May 28, 2021 Queries moved to module swad_degree_database. (312319 lines)
|
Version 20.85: May 28, 2021 Queries moved to module swad_degree_database. (312319 lines)
|
||||||
Version 20.84: May 27, 2021 New module swad_degree_database for database queries related to degrees. (312216 lines)
|
Version 20.84: May 27, 2021 New module swad_degree_database for database queries related to degrees. (312216 lines)
|
||||||
Version 20.83.1: May 27, 2021 Database function moved from swad_date to swad_setting. (311993 lines)
|
Version 20.83.1: May 27, 2021 Database function moved from swad_date to swad_setting. (311993 lines)
|
||||||
|
|
|
@ -25,26 +25,10 @@
|
||||||
/********************************* Headers ***********************************/
|
/********************************* Headers ***********************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
// #include <stdbool.h> // For boolean type
|
|
||||||
// #include <stddef.h> // For NULL
|
|
||||||
// #include <stdlib.h> // For free
|
|
||||||
// #include <string.h> // For string functions
|
|
||||||
|
|
||||||
#include "swad_database.h"
|
#include "swad_database.h"
|
||||||
// #include "swad_degree.h"
|
|
||||||
// #include "swad_degree_config.h"
|
|
||||||
#include "swad_degree_database.h"
|
#include "swad_degree_database.h"
|
||||||
#include "swad_error.h"
|
#include "swad_error.h"
|
||||||
// #include "swad_figure.h"
|
|
||||||
// #include "swad_figure_cache.h"
|
|
||||||
// #include "swad_form.h"
|
|
||||||
// #include "swad_forum.h"
|
|
||||||
#include "swad_global.h"
|
#include "swad_global.h"
|
||||||
// #include "swad_hierarchy.h"
|
|
||||||
// #include "swad_HTML.h"
|
|
||||||
// #include "swad_logo.h"
|
|
||||||
// #include "swad_message.h"
|
|
||||||
// #include "swad_survey.h"
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/************** External global variables from others modules ****************/
|
/************** External global variables from others modules ****************/
|
||||||
|
|
|
@ -29,13 +29,8 @@
|
||||||
|
|
||||||
#include <mysql/mysql.h> // To access MySQL databases
|
#include <mysql/mysql.h> // To access MySQL databases
|
||||||
|
|
||||||
// #include "swad_action.h"
|
|
||||||
// #include "swad_constant.h"
|
|
||||||
#include "swad_degree.h"
|
#include "swad_degree.h"
|
||||||
#include "swad_degree_type.h"
|
#include "swad_degree_type.h"
|
||||||
// #include "swad_hierarchy_level.h"
|
|
||||||
// #include "swad_role_type.h"
|
|
||||||
// #include "swad_string.h"
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/***************************** Public constants ******************************/
|
/***************************** Public constants ******************************/
|
||||||
|
|
Loading…
Reference in New Issue