mirror of https://github.com/acanas/swad-core.git
Version 22.23: Sep 23, 2022 New module swad_call_for_exam_resource.
This commit is contained in:
parent
429136495f
commit
f5efd11ecd
14
Makefile
14
Makefile
|
@ -35,13 +35,13 @@ OBJS = swad_account.o swad_account_database.o swad_action.o swad_admin.o \
|
||||||
swad_banner.o swad_banner_database.o swad_box.o swad_browser.o \
|
swad_banner.o swad_banner_database.o swad_box.o swad_browser.o \
|
||||||
swad_browser_database.o swad_building.o swad_building_database.o \
|
swad_browser_database.o swad_building.o swad_building_database.o \
|
||||||
swad_button.o \
|
swad_button.o \
|
||||||
swad_calendar.o swad_call_for_exam.o swad_call_for_exam_database.o \
|
swad_calendar.o swad_call_for_exam.o swad_call_for_exam_resource.o \
|
||||||
swad_center.o swad_center_config.o swad_center_database.o swad_chat.o \
|
swad_call_for_exam_database.o swad_center.o swad_center_config.o \
|
||||||
swad_chat_database.o swad_config.o swad_connected.o \
|
swad_center_database.o swad_chat.o swad_chat_database.o swad_config.o \
|
||||||
swad_connected_database.o swad_cookie.o swad_cookie_database.o \
|
swad_connected.o swad_connected_database.o swad_cookie.o \
|
||||||
swad_country.o swad_country_config.o swad_country_database.o \
|
swad_cookie_database.o swad_country.o swad_country_config.o \
|
||||||
swad_course.o swad_course_config.o swad_course_database.o \
|
swad_country_database.o swad_course.o swad_course_config.o \
|
||||||
swad_cryptography.o \
|
swad_course_database.o swad_cryptography.o \
|
||||||
swad_database.o swad_date.o swad_degree.o swad_degree_config.o \
|
swad_database.o swad_date.o swad_degree.o swad_degree_config.o \
|
||||||
swad_degree_database.o swad_degree_type.o swad_department.o \
|
swad_degree_database.o swad_degree_type.o swad_department.o \
|
||||||
swad_department_database.o swad_duplicate.o swad_duplicate_database.o \
|
swad_department_database.o swad_duplicate.o swad_duplicate_database.o \
|
||||||
|
|
|
@ -2125,7 +2125,8 @@ a:hover img.CENTER_PHOTO_SHOW
|
||||||
display:inline-block;
|
display:inline-block;
|
||||||
box-sizing:border-box;
|
box-sizing:border-box;
|
||||||
margin:2px 0;
|
margin:2px 0;
|
||||||
padding:8px 12px 12px 12px;
|
padding:10px;
|
||||||
|
/* padding:8px 12px 12px 12px; */
|
||||||
border-radius:2px;
|
border-radius:2px;
|
||||||
box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 2px 1px -2px rgba(0,0,0,0.2), 0 1px 5px 0 rgba(0,0,0,0.12);
|
box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 2px 1px -2px rgba(0,0,0,0.2), 0 1px 5px 0 rgba(0,0,0,0.12);
|
||||||
text-align:center;
|
text-align:center;
|
||||||
|
@ -3640,7 +3641,13 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;}
|
||||||
.MCH_LIMEGREEN {color:#636e00;}
|
.MCH_LIMEGREEN {color:#636e00;}
|
||||||
.MCH_GREEN {color:#246600;}
|
.MCH_GREEN {color:#246600;}
|
||||||
|
|
||||||
.MCH_TCH_STEM_WHITE
|
.MCH_TCH_STEM_WHITE,
|
||||||
|
.MCH_TCH_STEM_GREY,
|
||||||
|
.MCH_TCH_STEM_PURPLE,
|
||||||
|
.MCH_TCH_STEM_BLUE,
|
||||||
|
.MCH_TCH_STEM_YELLOW,
|
||||||
|
.MCH_TCH_STEM_PINK
|
||||||
|
.MCH_TCH_STEM_DARK
|
||||||
{
|
{
|
||||||
color:#202020;
|
color:#202020;
|
||||||
font-size:24pt;
|
font-size:24pt;
|
|
@ -29,11 +29,13 @@
|
||||||
#include "swad_admin.h"
|
#include "swad_admin.h"
|
||||||
#include "swad_agenda.h"
|
#include "swad_agenda.h"
|
||||||
#include "swad_announcement.h"
|
#include "swad_announcement.h"
|
||||||
|
#include "swad_assignment_resource.h"
|
||||||
#include "swad_attendance.h"
|
#include "swad_attendance.h"
|
||||||
#include "swad_banner.h"
|
#include "swad_banner.h"
|
||||||
#include "swad_building.h"
|
#include "swad_building.h"
|
||||||
#include "swad_calendar.h"
|
#include "swad_calendar.h"
|
||||||
#include "swad_call_for_exam.h"
|
#include "swad_call_for_exam.h"
|
||||||
|
#include "swad_call_for_exam_resource.h"
|
||||||
#include "swad_center_config.h"
|
#include "swad_center_config.h"
|
||||||
#include "swad_config.h"
|
#include "swad_config.h"
|
||||||
#include "swad_cookie.h"
|
#include "swad_cookie.h"
|
||||||
|
@ -1425,7 +1427,7 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
|
||||||
[ActHidAtt ] = {1069,-1,TabUnk,ActSeeAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Att_HideAttEvent ,NULL},
|
[ActHidAtt ] = {1069,-1,TabUnk,ActSeeAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Att_HideAttEvent ,NULL},
|
||||||
[ActUnhAtt ] = {1070,-1,TabUnk,ActSeeAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Att_UnhideAttEvent ,NULL},
|
[ActUnhAtt ] = {1070,-1,TabUnk,ActSeeAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Att_UnhideAttEvent ,NULL},
|
||||||
[ActSeeOneAtt ] = {1071,-1,TabUnk,ActSeeAtt ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Att_SeeOneAttEvent ,NULL},
|
[ActSeeOneAtt ] = {1071,-1,TabUnk,ActSeeAtt ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Att_SeeOneAttEvent ,NULL},
|
||||||
[ActReqLnkAtt ] = {1938,-1,TabUnk,ActSeeAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Att_GetLinkToEvent ,NULL},
|
[ActReqLnkAtt ] = {1938,-1,TabUnk,ActSeeAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,AttRsc_GetLinkToEvent ,NULL},
|
||||||
[ActRecAttStd ] = {1072,-1,TabUnk,ActSeeAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Att_RegisterStudentsInAttEvent ,NULL},
|
[ActRecAttStd ] = {1072,-1,TabUnk,ActSeeAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Att_RegisterStudentsInAttEvent ,NULL},
|
||||||
[ActRecAttMe ] = {1076,-1,TabUnk,ActSeeAtt ,0x008, 0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Att_RegisterMeAsStdInAttEvent ,NULL},
|
[ActRecAttMe ] = {1076,-1,TabUnk,ActSeeAtt ,0x008, 0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Att_RegisterMeAsStdInAttEvent ,NULL},
|
||||||
|
|
||||||
|
|
|
@ -112,10 +112,4 @@ unsigned Asg_GetNumAssignments (HieLvl_Level_t Scope,unsigned *NumNotif);
|
||||||
//-------------------------------- Figures ------------------------------------
|
//-------------------------------- Figures ------------------------------------
|
||||||
void Asg_GetAndShowAssignmentsStats (void);
|
void Asg_GetAndShowAssignmentsStats (void);
|
||||||
|
|
||||||
//--------------------------- Program resources -------------------------------
|
|
||||||
void AsgRsc_GetLinkToAssignment (void);
|
|
||||||
void AsgRsc_WriteAssignmentInCrsProgram (long AsgCod,bool PutFormToGo,
|
|
||||||
const char *Icon,const char *IconTitle);
|
|
||||||
void AsgRsc_GetTitleFromAsgCod (long AsgCod,char *Title,size_t TitleSize);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -34,9 +34,9 @@
|
||||||
/***************************** Public prototypes *****************************/
|
/***************************** Public prototypes *****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
void Asg_GetLinkToAssignment (void);
|
void AsgRsc_GetLinkToAssignment (void);
|
||||||
void Asg_WriteAssignmentInCrsProgram (long AsgCod,bool PutFormToGo,
|
void AsgRsc_WriteAssignmentInCrsProgram (long AsgCod,bool PutFormToGo,
|
||||||
const char *Icon,const char *IconTitle);
|
const char *Icon,const char *IconTitle);
|
||||||
void Asg_GetTitleFromAsgCod (long AsgCod,char *Title,size_t TitleSize);
|
void AsgRsc_GetTitleFromAsgCod (long AsgCod,char *Title,size_t TitleSize);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -3300,7 +3300,7 @@ static void Att_ListAttEventsForAStd (const struct Att_Events *Events,
|
||||||
/************************ Get link to attendance event ***********************/
|
/************************ Get link to attendance event ***********************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
void Att_GetLinkToEvent (void)
|
void AttRsc_GetLinkToEvent (void)
|
||||||
{
|
{
|
||||||
extern const char *Txt_Link_to_resource_X_copied_into_clipboard;
|
extern const char *Txt_Link_to_resource_X_copied_into_clipboard;
|
||||||
long AttCod;
|
long AttCod;
|
||||||
|
@ -3329,7 +3329,7 @@ void Att_GetLinkToEvent (void)
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
void AttRsc_WriteAttEventInCrsProgram (long AttCod,bool PutFormToGo,
|
void AttRsc_WriteAttEventInCrsProgram (long AttCod,bool PutFormToGo,
|
||||||
const char *Icon,const char *IconTitle)
|
const char *Icon,const char *IconTitle)
|
||||||
{
|
{
|
||||||
extern const char *Txt_Actions[Act_NUM_ACTIONS];
|
extern const char *Txt_Actions[Act_NUM_ACTIONS];
|
||||||
char Title[Att_MAX_BYTES_ATTENDANCE_EVENT_TITLE + 1];
|
char Title[Att_MAX_BYTES_ATTENDANCE_EVENT_TITLE + 1];
|
||||||
|
|
|
@ -110,9 +110,9 @@ void Att_ListUsrsAttendanceCrs (void);
|
||||||
void Att_PrintUsrsAttendanceCrs (void);
|
void Att_PrintUsrsAttendanceCrs (void);
|
||||||
|
|
||||||
//--------------------------- Program resources -------------------------------
|
//--------------------------- Program resources -------------------------------
|
||||||
void Att_GetLinkToEvent (void);
|
void AttRsc_GetLinkToEvent (void);
|
||||||
void AttRsc_WriteAttEventInCrsProgram (long AttCod,bool PutFormToGo,
|
void AttRsc_WriteAttEventInCrsProgram (long AttCod,bool PutFormToGo,
|
||||||
const char *Icon,const char *IconTitle);
|
const char *Icon,const char *IconTitle);
|
||||||
void AttRsc_GetTitleFromAttCod (long AttCod,char *Title,size_t TitleSize);
|
void AttRsc_GetTitleFromAttCod (long AttCod,char *Title,size_t TitleSize);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
66
swad_box.c
66
swad_box.c
|
@ -155,40 +155,46 @@ static void Box_BoxInternalBegin (const char *Width,const char *Title,
|
||||||
HTM_DIV_Begin ("class=\"%s\"",ClassFrame);
|
HTM_DIV_Begin ("class=\"%s\"",ClassFrame);
|
||||||
|
|
||||||
/***** Row for left and right icons *****/
|
/***** Row for left and right icons *****/
|
||||||
HTM_DIV_Begin ("class=\"FRAME_ICO\"");
|
if (FunctionToDrawContextualIcons ||
|
||||||
|
HelpLink ||
|
||||||
|
Closable == Box_CLOSABLE)
|
||||||
|
{
|
||||||
|
/* Begin row for left and right icons */
|
||||||
|
HTM_DIV_Begin ("class=\"FRAME_ICO\"");
|
||||||
|
|
||||||
|
/* Contextual icons at left */
|
||||||
|
if (FunctionToDrawContextualIcons)
|
||||||
|
{
|
||||||
|
HTM_DIV_Begin ("class=\"FRAME_ICO_LEFT\"");
|
||||||
|
FunctionToDrawContextualIcons (Args);
|
||||||
|
HTM_DIV_End ();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Icons at right: help and close */
|
||||||
|
HTM_DIV_Begin ("class=\"FRAME_ICO_RIGHT\"");
|
||||||
|
|
||||||
|
if (HelpLink) // Link to help
|
||||||
|
{
|
||||||
|
HTM_A_Begin ("href=\"%s%s\" target=\"_blank\"",Hlp_WIKI,HelpLink);
|
||||||
|
Ico_PutDivIcon ("CONTEXT_OPT HLP_HIGHLIGHT",
|
||||||
|
"question.svg",Ico_BLACK,Txt_Help);
|
||||||
|
HTM_A_End ();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Closable == Box_CLOSABLE) // Icon to close the box
|
||||||
|
{
|
||||||
|
HTM_A_Begin ("href=\"\" onclick=\"toggleDisplay('%s');return false;\"",
|
||||||
|
Gbl.Box.Ids[Gbl.Box.Nested]);
|
||||||
|
Ico_PutDivIcon ("CONTEXT_OPT HLP_HIGHLIGHT",
|
||||||
|
"times.svg",Ico_BLACK,Txt_Close);
|
||||||
|
HTM_A_End ();
|
||||||
|
}
|
||||||
|
|
||||||
/* Contextual icons at left */
|
|
||||||
if (FunctionToDrawContextualIcons)
|
|
||||||
{
|
|
||||||
HTM_DIV_Begin ("class=\"FRAME_ICO_LEFT\"");
|
|
||||||
FunctionToDrawContextualIcons (Args);
|
|
||||||
HTM_DIV_End ();
|
HTM_DIV_End ();
|
||||||
}
|
|
||||||
|
|
||||||
/* Icons at right: help and close */
|
|
||||||
HTM_DIV_Begin ("class=\"FRAME_ICO_RIGHT\"");
|
|
||||||
|
|
||||||
if (HelpLink) // Link to help
|
|
||||||
{
|
|
||||||
HTM_A_Begin ("href=\"%s%s\" target=\"_blank\"",Hlp_WIKI,HelpLink);
|
|
||||||
Ico_PutDivIcon ("CONTEXT_OPT HLP_HIGHLIGHT",
|
|
||||||
"question.svg",Ico_BLACK,Txt_Help);
|
|
||||||
HTM_A_End ();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Closable == Box_CLOSABLE) // Icon to close the box
|
|
||||||
{
|
|
||||||
HTM_A_Begin ("href=\"\" onclick=\"toggleDisplay('%s');return false;\"",
|
|
||||||
Gbl.Box.Ids[Gbl.Box.Nested]);
|
|
||||||
Ico_PutDivIcon ("CONTEXT_OPT HLP_HIGHLIGHT",
|
|
||||||
"times.svg",Ico_BLACK,Txt_Close);
|
|
||||||
HTM_A_End ();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
/* End row for left and right icons */
|
||||||
HTM_DIV_End ();
|
HTM_DIV_End ();
|
||||||
|
}
|
||||||
/***** End row for left and right icons *****/
|
|
||||||
HTM_DIV_End ();
|
|
||||||
|
|
||||||
/***** Frame title *****/
|
/***** Frame title *****/
|
||||||
if (Title)
|
if (Title)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// swad_exam_announcement.c: calls for exams
|
// swad_call_for_exam.c: calls for exams
|
||||||
|
|
||||||
/*
|
/*
|
||||||
SWAD (Shared Workspace At a Distance),
|
SWAD (Shared Workspace At a Distance),
|
||||||
|
@ -54,12 +54,6 @@
|
||||||
#include "swad_timeline.h"
|
#include "swad_timeline.h"
|
||||||
#include "swad_timeline_database.h"
|
#include "swad_timeline_database.h"
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/**************************** Private constants ******************************/
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
#define Cfe_MAX_BYTES_SESSION_AND_DATE (Cfe_MAX_BYTES_SESSION + (2 + Cns_MAX_BYTES_DATE + 7) + 1)
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/************** External global variables from others modules ****************/
|
/************** External global variables from others modules ****************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -70,13 +64,8 @@ extern struct Globals Gbl;
|
||||||
/***************************** Private prototypes ****************************/
|
/***************************** Private prototypes ****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static struct Cfe_CallsForExams *Cfe_GetGlobalCallsForExams (void);
|
|
||||||
|
|
||||||
static long Cfe_GetParamsCallsForExams (struct Cfe_CallsForExams *CallsForExams);
|
static long Cfe_GetParamsCallsForExams (struct Cfe_CallsForExams *CallsForExams);
|
||||||
|
|
||||||
static void Cfe_AllocMemCallForExam (struct Cfe_CallsForExams *CallsForExams);
|
|
||||||
static void Cfe_FreeMemCallForExam (struct Cfe_CallsForExams *CallsForExams);
|
|
||||||
|
|
||||||
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);
|
||||||
|
|
||||||
|
@ -85,27 +74,21 @@ 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 void Cfe_GetDataCallForExamFromDB (struct Cfe_CallsForExams *CallsForExams,
|
|
||||||
long ExaCod);
|
|
||||||
static void Cfe_ShowCallForExam (struct Cfe_CallsForExams *CallsForExams,
|
static void Cfe_ShowCallForExam (struct Cfe_CallsForExams *CallsForExams,
|
||||||
long ExaCod,
|
long ExaCod,
|
||||||
Cfe_TypeViewCallForExam_t TypeViewCallForExam,
|
Cfe_TypeViewCallForExam_t TypeViewCallForExam,
|
||||||
bool HighLight);
|
bool HighLight);
|
||||||
static void Cfe_PutIconsCallForExam (void *CallsForExams);
|
static void Cfe_PutIconsCallForExam (void *CallsForExams);
|
||||||
static void Cfe_PutParamExaCodToEdit (void *ExaCod);
|
static void Cfe_PutParamExaCodToEdit (void *ExaCod);
|
||||||
static long Cfe_GetParamExaCod (void);
|
|
||||||
|
|
||||||
static void Cfe_GetNotifContentCallForExam (const struct Cfe_CallsForExams *CallsForExams,
|
static void Cfe_GetNotifContentCallForExam (const struct Cfe_CallsForExams *CallsForExams,
|
||||||
char **ContentStr);
|
char **ContentStr);
|
||||||
|
|
||||||
static void Cfe_BuildSessionAndDate (const struct Cfe_CallsForExams *CallsForExams,
|
|
||||||
char SessionAndDate[Cfe_MAX_BYTES_SESSION_AND_DATE]);
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/******************** Get global calls for exams context *********************/
|
/******************** Get global calls for exams context *********************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static struct Cfe_CallsForExams *Cfe_GetGlobalCallsForExams (void)
|
struct Cfe_CallsForExams *Cfe_GetGlobalCallsForExams (void)
|
||||||
{
|
{
|
||||||
static struct Cfe_CallsForExams Cfe_GlobalCallsForExams; // Used to preserve information between priori and posteriori functions
|
static struct Cfe_CallsForExams Cfe_GlobalCallsForExams; // Used to preserve information between priori and posteriori functions
|
||||||
|
|
||||||
|
@ -246,7 +229,7 @@ static long Cfe_GetParamsCallsForExams (struct Cfe_CallsForExams *CallsForExams)
|
||||||
/* Allocate memory for those parameters of an exam anno. with a lot of text **/
|
/* Allocate memory for those parameters of an exam anno. with a lot of text **/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void Cfe_AllocMemCallForExam (struct Cfe_CallsForExams *CallsForExams)
|
void Cfe_AllocMemCallForExam (struct Cfe_CallsForExams *CallsForExams)
|
||||||
{
|
{
|
||||||
if ((CallsForExams->CallForExam.Place = malloc (Cns_MAX_BYTES_TEXT + 1)) == NULL)
|
if ((CallsForExams->CallForExam.Place = malloc (Cns_MAX_BYTES_TEXT + 1)) == NULL)
|
||||||
Err_NotEnoughMemoryExit ();
|
Err_NotEnoughMemoryExit ();
|
||||||
|
@ -274,7 +257,7 @@ static void Cfe_AllocMemCallForExam (struct Cfe_CallsForExams *CallsForExams)
|
||||||
/* Free memory of those parameters of an exam announcem. with a lot of text **/
|
/* Free memory of those parameters of an exam announcem. with a lot of text **/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void Cfe_FreeMemCallForExam (struct Cfe_CallsForExams *CallsForExams)
|
void Cfe_FreeMemCallForExam (struct Cfe_CallsForExams *CallsForExams)
|
||||||
{
|
{
|
||||||
if (CallsForExams->CallForExam.Place)
|
if (CallsForExams->CallForExam.Place)
|
||||||
{
|
{
|
||||||
|
@ -794,8 +777,8 @@ void Cfe_FreeListCallsForExams (struct Cfe_CallsForExams *CallsForExams)
|
||||||
/*********** Read the data of a call for exam from the database **************/
|
/*********** Read the data of a call for exam from the database **************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void Cfe_GetDataCallForExamFromDB (struct Cfe_CallsForExams *CallsForExams,
|
void Cfe_GetDataCallForExamFromDB (struct Cfe_CallsForExams *CallsForExams,
|
||||||
long ExaCod)
|
long ExaCod)
|
||||||
{
|
{
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
|
@ -1565,7 +1548,7 @@ void Cfe_PutHiddenParamExaCod (long ExaCod)
|
||||||
/************ Get parameter with the code of a call for exam *****************/
|
/************ Get parameter with the code of a call for exam *****************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static long Cfe_GetParamExaCod (void)
|
long Cfe_GetParamExaCod (void)
|
||||||
{
|
{
|
||||||
/* Get notice code */
|
/* Get notice code */
|
||||||
return Par_GetParToLong ("ExaCod");
|
return Par_GetParToLong ("ExaCod");
|
||||||
|
@ -1688,133 +1671,11 @@ static void Cfe_GetNotifContentCallForExam (const struct Cfe_CallsForExams *Call
|
||||||
Err_NotEnoughMemoryExit ();
|
Err_NotEnoughMemoryExit ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/************************ Get link to call for exam **************************/
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
void Cfe_GetLinkToCallForExam (void)
|
|
||||||
{
|
|
||||||
extern const char *Txt_Link_to_resource_X_copied_into_clipboard;
|
|
||||||
struct Cfe_CallsForExams *CallsForExams = Cfe_GetGlobalCallsForExams ();
|
|
||||||
long ExaCod;
|
|
||||||
char SessionAndDate[Cfe_MAX_BYTES_SESSION_AND_DATE];
|
|
||||||
|
|
||||||
/***** Reset calls for exams context *****/
|
|
||||||
Cfe_ResetCallsForExams (CallsForExams);
|
|
||||||
|
|
||||||
/***** Get the code of the call for exam *****/
|
|
||||||
if ((ExaCod = Cfe_GetParamExaCod ()) <= 0)
|
|
||||||
Err_WrongCallForExamExit ();
|
|
||||||
|
|
||||||
/***** Get data of call for exam *****/
|
|
||||||
Cfe_AllocMemCallForExam (CallsForExams);
|
|
||||||
Cfe_GetDataCallForExamFromDB (CallsForExams,ExaCod);
|
|
||||||
|
|
||||||
/***** Session and date of the exam *****/
|
|
||||||
Cfe_BuildSessionAndDate (CallsForExams,SessionAndDate);
|
|
||||||
|
|
||||||
/***** Copy link to call for exam into resource clipboard *****/
|
|
||||||
Prg_DB_CopyToClipboard (PrgRsc_CALL_FOR_EXAM,ExaCod);
|
|
||||||
|
|
||||||
/***** Write sucess message *****/
|
|
||||||
Ale_ShowAlert (Ale_SUCCESS,Txt_Link_to_resource_X_copied_into_clipboard,
|
|
||||||
SessionAndDate);
|
|
||||||
|
|
||||||
/***** Free memory of the call for exam *****/
|
|
||||||
Cfe_FreeMemCallForExam (CallsForExams);
|
|
||||||
|
|
||||||
/***** Set exam to be highlighted *****/
|
|
||||||
CallsForExams->HighlightExaCod = ExaCod;
|
|
||||||
|
|
||||||
/***** Show again the list of calls for exams *****/
|
|
||||||
Cfe_ListCallsForExamsEdit ();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/******************* Write call for exam in course program *******************/
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
void CfeRsc_WriteCallForExamInCrsProgram (long ExaCod,bool PutFormToGo,
|
|
||||||
const char *Icon,const char *IconTitle)
|
|
||||||
{
|
|
||||||
extern const char *Txt_Actions[Act_NUM_ACTIONS];
|
|
||||||
struct Cfe_CallsForExams CallsForExams;
|
|
||||||
char SessionAndDate[Cfe_MAX_BYTES_SESSION_AND_DATE];
|
|
||||||
char *Anchor = NULL;
|
|
||||||
|
|
||||||
/***** Get session and date of the exam *****/
|
|
||||||
Cfe_ResetCallsForExams (&CallsForExams);
|
|
||||||
Cfe_AllocMemCallForExam (&CallsForExams);
|
|
||||||
Cfe_GetDataCallForExamFromDB (&CallsForExams,ExaCod);
|
|
||||||
Cfe_BuildSessionAndDate (&CallsForExams,SessionAndDate);
|
|
||||||
Cfe_FreeMemCallForExam (&CallsForExams);
|
|
||||||
|
|
||||||
/***** Begin form to download file *****/
|
|
||||||
if (PutFormToGo)
|
|
||||||
{
|
|
||||||
/* Build anchor string */
|
|
||||||
Frm_SetAnchorStr (ExaCod,&Anchor);
|
|
||||||
|
|
||||||
/* Begin form */
|
|
||||||
Frm_BeginFormAnchor (ActSeeOneCfe,Anchor);
|
|
||||||
Cfe_PutHiddenParamExaCod (ExaCod);
|
|
||||||
HTM_BUTTON_Submit_Begin (Txt_Actions[ActSeeOneCfe],
|
|
||||||
"class=\"LM BT_LINK PRG_LNK_%s\"",
|
|
||||||
The_GetSuffix ());
|
|
||||||
|
|
||||||
/* Free anchor string */
|
|
||||||
Frm_FreeAnchorStr (Anchor);
|
|
||||||
}
|
|
||||||
|
|
||||||
/***** Icon depending on type ******/
|
|
||||||
if (PutFormToGo)
|
|
||||||
Ico_PutIconLink (Icon,Ico_BLACK,ActSeeOneCfe);
|
|
||||||
else
|
|
||||||
Ico_PutIconOn (Icon,Ico_BLACK,IconTitle);
|
|
||||||
|
|
||||||
/***** Write Name of the course and date of exam *****/
|
|
||||||
HTM_Txt (SessionAndDate);
|
|
||||||
|
|
||||||
/***** End form to download file *****/
|
|
||||||
if (PutFormToGo)
|
|
||||||
{
|
|
||||||
/* End form */
|
|
||||||
HTM_BUTTON_End ();
|
|
||||||
|
|
||||||
Frm_EndForm ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/************** Get call for exam text from call for exam code ***************/
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
void CfeRsc_GetTitleFromExaCod (long ExaCod,char *Title,size_t TitleSize)
|
|
||||||
{
|
|
||||||
extern const char *Txt_Call_for_exam;
|
|
||||||
struct Cfe_CallsForExams CallsForExams;
|
|
||||||
char SessionAndDate[Cfe_MAX_BYTES_SESSION_AND_DATE];
|
|
||||||
|
|
||||||
/***** Reset calls for exams context *****/
|
|
||||||
Cfe_ResetCallsForExams (&CallsForExams);
|
|
||||||
|
|
||||||
/***** Get data of call for exam *****/
|
|
||||||
Cfe_AllocMemCallForExam (&CallsForExams);
|
|
||||||
Cfe_GetDataCallForExamFromDB (&CallsForExams,ExaCod);
|
|
||||||
|
|
||||||
/***** Session and date of the exam *****/
|
|
||||||
Cfe_BuildSessionAndDate (&CallsForExams,SessionAndDate);
|
|
||||||
snprintf (Title,TitleSize,"%s: %s",Txt_Call_for_exam,SessionAndDate);
|
|
||||||
|
|
||||||
/***** Free memory of the call for exam *****/
|
|
||||||
Cfe_FreeMemCallForExam (&CallsForExams);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/*********** Build string with session and date of a call for exam ***********/
|
/*********** Build string with session and date of a call for exam ***********/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void Cfe_BuildSessionAndDate (const struct Cfe_CallsForExams *CallsForExams,
|
void Cfe_BuildSessionAndDate (const struct Cfe_CallsForExams *CallsForExams,
|
||||||
char SessionAndDate[Cfe_MAX_BYTES_SESSION_AND_DATE])
|
char SessionAndDate[Cfe_MAX_BYTES_SESSION_AND_DATE])
|
||||||
{
|
{
|
||||||
char StrExamDate[Cns_MAX_BYTES_DATE + 1];
|
char StrExamDate[Cns_MAX_BYTES_DATE + 1];
|
||||||
|
|
|
@ -96,13 +96,19 @@ struct Cfe_CallsForExams
|
||||||
struct Cfe_CallForExam CallForExam;
|
struct Cfe_CallForExam CallForExam;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define Cfe_MAX_BYTES_SESSION_AND_DATE (Cfe_MAX_BYTES_SESSION + (2 + Cns_MAX_BYTES_DATE + 7) + 1)
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/***************************** Public prototypes *****************************/
|
/***************************** Public prototypes *****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
struct Cfe_CallsForExams *Cfe_GetGlobalCallsForExams (void);
|
||||||
|
|
||||||
void Cfe_ResetCallsForExams (struct Cfe_CallsForExams *CallsForExams);
|
void Cfe_ResetCallsForExams (struct Cfe_CallsForExams *CallsForExams);
|
||||||
|
|
||||||
void Cfe_PutFrmEditACallForExam (void);
|
void Cfe_PutFrmEditACallForExam (void);
|
||||||
|
void Cfe_AllocMemCallForExam (struct Cfe_CallsForExams *CallsForExams);
|
||||||
|
void Cfe_FreeMemCallForExam (struct Cfe_CallsForExams *CallsForExams);
|
||||||
void Cfe_ReceiveCallForExam1 (void);
|
void Cfe_ReceiveCallForExam1 (void);
|
||||||
void Cfe_ReceiveCallForExam2 (void);
|
void Cfe_ReceiveCallForExam2 (void);
|
||||||
void Cfe_PrintCallForExam (void);
|
void Cfe_PrintCallForExam (void);
|
||||||
|
@ -113,6 +119,8 @@ void Cfe_HideCallForExam (void);
|
||||||
void Cfe_UnhideCallForExam (void);
|
void Cfe_UnhideCallForExam (void);
|
||||||
|
|
||||||
void Cfe_FreeListCallsForExams (struct Cfe_CallsForExams *CallsForExams);
|
void Cfe_FreeListCallsForExams (struct Cfe_CallsForExams *CallsForExams);
|
||||||
|
void Cfe_GetDataCallForExamFromDB (struct Cfe_CallsForExams *CallsForExams,
|
||||||
|
long ExaCod);
|
||||||
void Cfe_ListCallsForExamsSee (void);
|
void Cfe_ListCallsForExamsSee (void);
|
||||||
void Cfe_ListCallsForExamsEdit (void);
|
void Cfe_ListCallsForExamsEdit (void);
|
||||||
|
|
||||||
|
@ -121,15 +129,13 @@ void Cfe_ListCallsForExamsDay (void);
|
||||||
|
|
||||||
void Cfe_CreateListCallsForExams (struct Cfe_CallsForExams *CallsForExams);
|
void Cfe_CreateListCallsForExams (struct Cfe_CallsForExams *CallsForExams);
|
||||||
void Cfe_PutHiddenParamExaCod (long ExaCod);
|
void Cfe_PutHiddenParamExaCod (long ExaCod);
|
||||||
|
long Cfe_GetParamExaCod (void);
|
||||||
|
|
||||||
void Cfe_GetSummaryAndContentCallForExam (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
|
void Cfe_GetSummaryAndContentCallForExam (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
|
||||||
char **ContentStr,
|
char **ContentStr,
|
||||||
long ExaCod,bool GetContent);
|
long ExaCod,bool GetContent);
|
||||||
|
|
||||||
//--------------------------- Program resources -------------------------------
|
void Cfe_BuildSessionAndDate (const struct Cfe_CallsForExams *CallsForExams,
|
||||||
void Cfe_GetLinkToCallForExam (void);
|
char SessionAndDate[Cfe_MAX_BYTES_SESSION_AND_DATE]);
|
||||||
void CfeRsc_WriteCallForExamInCrsProgram (long ExaCod,bool PutFormToGo,
|
|
||||||
const char *Icon,const char *IconTitle);
|
|
||||||
void CfeRsc_GetTitleFromExaCod (long ExaCod,char *Title,size_t TitleSize);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -0,0 +1,155 @@
|
||||||
|
// swad_call_for_exam_resource.c: links to calls for exams as program resources
|
||||||
|
|
||||||
|
/*
|
||||||
|
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-2022 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 "swad_alert.h"
|
||||||
|
#include "swad_call_for_exam.h"
|
||||||
|
#include "swad_call_for_exam_resource.h"
|
||||||
|
#include "swad_error.h"
|
||||||
|
#include "swad_form.h"
|
||||||
|
#include "swad_program_database.h"
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/************************ Get link to call for exam **************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void Cfe_GetLinkToCallForExam (void)
|
||||||
|
{
|
||||||
|
extern const char *Txt_Link_to_resource_X_copied_into_clipboard;
|
||||||
|
struct Cfe_CallsForExams *CallsForExams = Cfe_GetGlobalCallsForExams ();
|
||||||
|
long ExaCod;
|
||||||
|
char SessionAndDate[Cfe_MAX_BYTES_SESSION_AND_DATE];
|
||||||
|
|
||||||
|
/***** Reset calls for exams context *****/
|
||||||
|
Cfe_ResetCallsForExams (CallsForExams);
|
||||||
|
|
||||||
|
/***** Get the code of the call for exam *****/
|
||||||
|
if ((ExaCod = Cfe_GetParamExaCod ()) <= 0)
|
||||||
|
Err_WrongCallForExamExit ();
|
||||||
|
|
||||||
|
/***** Get data of call for exam *****/
|
||||||
|
Cfe_AllocMemCallForExam (CallsForExams);
|
||||||
|
Cfe_GetDataCallForExamFromDB (CallsForExams,ExaCod);
|
||||||
|
|
||||||
|
/***** Session and date of the exam *****/
|
||||||
|
Cfe_BuildSessionAndDate (CallsForExams,SessionAndDate);
|
||||||
|
|
||||||
|
/***** Copy link to call for exam into resource clipboard *****/
|
||||||
|
Prg_DB_CopyToClipboard (PrgRsc_CALL_FOR_EXAM,ExaCod);
|
||||||
|
|
||||||
|
/***** Write sucess message *****/
|
||||||
|
Ale_ShowAlert (Ale_SUCCESS,Txt_Link_to_resource_X_copied_into_clipboard,
|
||||||
|
SessionAndDate);
|
||||||
|
|
||||||
|
/***** Free memory of the call for exam *****/
|
||||||
|
Cfe_FreeMemCallForExam (CallsForExams);
|
||||||
|
|
||||||
|
/***** Set exam to be highlighted *****/
|
||||||
|
CallsForExams->HighlightExaCod = ExaCod;
|
||||||
|
|
||||||
|
/***** Show again the list of calls for exams *****/
|
||||||
|
Cfe_ListCallsForExamsEdit ();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/******************* Write call for exam in course program *******************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void CfeRsc_WriteCallForExamInCrsProgram (long ExaCod,bool PutFormToGo,
|
||||||
|
const char *Icon,const char *IconTitle)
|
||||||
|
{
|
||||||
|
extern const char *Txt_Actions[Act_NUM_ACTIONS];
|
||||||
|
struct Cfe_CallsForExams CallsForExams;
|
||||||
|
char SessionAndDate[Cfe_MAX_BYTES_SESSION_AND_DATE];
|
||||||
|
char *Anchor = NULL;
|
||||||
|
|
||||||
|
/***** Get session and date of the exam *****/
|
||||||
|
Cfe_ResetCallsForExams (&CallsForExams);
|
||||||
|
Cfe_AllocMemCallForExam (&CallsForExams);
|
||||||
|
Cfe_GetDataCallForExamFromDB (&CallsForExams,ExaCod);
|
||||||
|
Cfe_BuildSessionAndDate (&CallsForExams,SessionAndDate);
|
||||||
|
Cfe_FreeMemCallForExam (&CallsForExams);
|
||||||
|
|
||||||
|
/***** Begin form to download file *****/
|
||||||
|
if (PutFormToGo)
|
||||||
|
{
|
||||||
|
/* Build anchor string */
|
||||||
|
Frm_SetAnchorStr (ExaCod,&Anchor);
|
||||||
|
|
||||||
|
/* Begin form */
|
||||||
|
Frm_BeginFormAnchor (ActSeeOneCfe,Anchor);
|
||||||
|
Cfe_PutHiddenParamExaCod (ExaCod);
|
||||||
|
HTM_BUTTON_Submit_Begin (Txt_Actions[ActSeeOneCfe],
|
||||||
|
"class=\"LM BT_LINK PRG_LNK_%s\"",
|
||||||
|
The_GetSuffix ());
|
||||||
|
|
||||||
|
/* Free anchor string */
|
||||||
|
Frm_FreeAnchorStr (Anchor);
|
||||||
|
}
|
||||||
|
|
||||||
|
/***** Icon depending on type ******/
|
||||||
|
if (PutFormToGo)
|
||||||
|
Ico_PutIconLink (Icon,Ico_BLACK,ActSeeOneCfe);
|
||||||
|
else
|
||||||
|
Ico_PutIconOn (Icon,Ico_BLACK,IconTitle);
|
||||||
|
|
||||||
|
/***** Write Name of the course and date of exam *****/
|
||||||
|
HTM_Txt (SessionAndDate);
|
||||||
|
|
||||||
|
/***** End form to download file *****/
|
||||||
|
if (PutFormToGo)
|
||||||
|
{
|
||||||
|
/* End form */
|
||||||
|
HTM_BUTTON_End ();
|
||||||
|
|
||||||
|
Frm_EndForm ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/************** Get call for exam text from call for exam code ***************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void CfeRsc_GetTitleFromExaCod (long ExaCod,char *Title,size_t TitleSize)
|
||||||
|
{
|
||||||
|
extern const char *Txt_Call_for_exam;
|
||||||
|
struct Cfe_CallsForExams CallsForExams;
|
||||||
|
char SessionAndDate[Cfe_MAX_BYTES_SESSION_AND_DATE];
|
||||||
|
|
||||||
|
/***** Reset calls for exams context *****/
|
||||||
|
Cfe_ResetCallsForExams (&CallsForExams);
|
||||||
|
|
||||||
|
/***** Get data of call for exam *****/
|
||||||
|
Cfe_AllocMemCallForExam (&CallsForExams);
|
||||||
|
Cfe_GetDataCallForExamFromDB (&CallsForExams,ExaCod);
|
||||||
|
|
||||||
|
/***** Session and date of the exam *****/
|
||||||
|
Cfe_BuildSessionAndDate (&CallsForExams,SessionAndDate);
|
||||||
|
snprintf (Title,TitleSize,"%s: %s",Txt_Call_for_exam,SessionAndDate);
|
||||||
|
|
||||||
|
/***** Free memory of the call for exam *****/
|
||||||
|
Cfe_FreeMemCallForExam (&CallsForExams);
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
// swad_call_for_exam_resource.h: links to calls for exams as program resources
|
||||||
|
|
||||||
|
#ifndef _SWAD_CFE_RSC
|
||||||
|
#define _SWAD_CFE_RSC
|
||||||
|
/*
|
||||||
|
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-2022 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 <stddef.h> // For size_t
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/***************************** Public prototypes *****************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void Cfe_GetLinkToCallForExam (void);
|
||||||
|
void CfeRsc_WriteCallForExamInCrsProgram (long ExaCod,bool PutFormToGo,
|
||||||
|
const char *Icon,const char *IconTitle);
|
||||||
|
void CfeRsc_GetTitleFromExaCod (long ExaCod,char *Title,size_t TitleSize);
|
||||||
|
|
||||||
|
#endif
|
|
@ -606,10 +606,12 @@ TODO: Fix bug: error al enviar un mensaje a dos recipientes, error on duplicate
|
||||||
|
|
||||||
TODO: Attach pdf files in multimedia.
|
TODO: Attach pdf files in multimedia.
|
||||||
*/
|
*/
|
||||||
#define Log_PLATFORM_VERSION "SWAD 22.22 (2022-09-23)"
|
#define Log_PLATFORM_VERSION "SWAD 22.23 (2022-09-23)"
|
||||||
#define CSS_FILE "swad22.21.css"
|
#define CSS_FILE "swad22.22.1.css"
|
||||||
#define JS_FILE "swad21.100.js"
|
#define JS_FILE "swad21.100.js"
|
||||||
/*
|
/*
|
||||||
|
Version 22.23: Sep 23, 2022 New module swad_call_for_exam_resource. (331924 lines)
|
||||||
|
Version 22.22.1: Sep 23, 2022 Changes in layout of course program. (331875 lines)
|
||||||
Version 22.22: Sep 23, 2022 Course program open to teachers and students. (331856 lines)
|
Version 22.22: Sep 23, 2022 Course program open to teachers and students. (331856 lines)
|
||||||
Version 22.21: Sep 22, 2022 Changes in layout of course program. (331855 lines)
|
Version 22.21: Sep 22, 2022 Changes in layout of course program. (331855 lines)
|
||||||
Version 22.20: Sep 22, 2022 Hidden items are not shown in program. (331838 lines)
|
Version 22.20: Sep 22, 2022 Hidden items are not shown in program. (331838 lines)
|
||||||
|
|
|
@ -617,7 +617,7 @@ static void Prg_WriteRowItem (Prg_ListingType_t ListingType,
|
||||||
"");
|
"");
|
||||||
Dat_WriteLocalDateHMSFromUTC (Id,Item->TimeUTC[StartEndTime],
|
Dat_WriteLocalDateHMSFromUTC (Id,Item->TimeUTC[StartEndTime],
|
||||||
Gbl.Prefs.DateFormat,Dat_SEPARATOR_COMMA,
|
Gbl.Prefs.DateFormat,Dat_SEPARATOR_COMMA,
|
||||||
true,true,true,0x7);
|
true,true,true,0x6);
|
||||||
HTM_DIV_End ();
|
HTM_DIV_End ();
|
||||||
free (Id);
|
free (Id);
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
#include "swad_assignment_resource.h"
|
#include "swad_assignment_resource.h"
|
||||||
#include "swad_attendance.h"
|
#include "swad_attendance.h"
|
||||||
#include "swad_browser.h"
|
#include "swad_browser.h"
|
||||||
#include "swad_call_for_exam.h"
|
#include "swad_call_for_exam_resource.h"
|
||||||
#include "swad_error.h"
|
#include "swad_error.h"
|
||||||
#include "swad_exam.h"
|
#include "swad_exam.h"
|
||||||
#include "swad_form.h"
|
#include "swad_form.h"
|
||||||
|
@ -246,50 +246,55 @@ void PrgRsc_ListItemResources (Prg_ListingType_t ListingType,
|
||||||
EditingResourcesOfThisItem = EditingResources[ListingType] &&
|
EditingResourcesOfThisItem = EditingResources[ListingType] &&
|
||||||
(Item->Hierarchy.ItmCod == SelectedItmCod);
|
(Item->Hierarchy.ItmCod == SelectedItmCod);
|
||||||
|
|
||||||
if (asprintf (&Title,Txt_Resources_of_X,Item->Title) < 0)
|
if (Editing[ListingType])
|
||||||
Err_NotEnoughMemoryExit ();
|
{
|
||||||
Box_BoxBegin ("100%",Title,
|
if (asprintf (&Title,Txt_Resources_of_X,Item->Title) < 0)
|
||||||
Editing[ListingType] ? (EditingResourcesOfThisItem ? PrgRsc_PutIconsViewResources :
|
Err_NotEnoughMemoryExit ();
|
||||||
PrgRsc_PutIconsEditResources) :
|
Box_BoxBegin ("100%",Title,
|
||||||
NULL,
|
EditingResourcesOfThisItem ? PrgRsc_PutIconsViewResources :
|
||||||
Editing[ListingType] ? &Item->Hierarchy.ItmCod :
|
PrgRsc_PutIconsEditResources,
|
||||||
NULL,
|
&Item->Hierarchy.ItmCod,
|
||||||
Hlp_COURSE_Program,Box_NOT_CLOSABLE);
|
Hlp_COURSE_Program,Box_NOT_CLOSABLE);
|
||||||
free (Title);
|
free (Title);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Box_BoxBegin ("100%",NULL,
|
||||||
|
NULL,NULL,
|
||||||
|
NULL,Box_NOT_CLOSABLE);
|
||||||
|
|
||||||
/***** Table *****/
|
/***** Table *****/
|
||||||
HTM_TABLE_BeginWideMarginPadding (2);
|
HTM_TABLE_BeginWidePadding (2);
|
||||||
HTM_TBODY_Begin (NULL);
|
HTM_TBODY_Begin (NULL);
|
||||||
|
|
||||||
/***** Write all item resources *****/
|
/***** Write all item resources *****/
|
||||||
for (NumRsc = 0, The_ResetRowColor1 (1);
|
for (NumRsc = 0, The_ResetRowColor1 (1);
|
||||||
NumRsc < NumResources;
|
NumRsc < NumResources;
|
||||||
NumRsc++, The_ChangeRowColor1 (1))
|
NumRsc++, The_ChangeRowColor1 (1))
|
||||||
{
|
{
|
||||||
/* Get data of this item resource */
|
/* Get data of this item resource */
|
||||||
PrgRsc_GetDataOfResource (Item,&mysql_res);
|
PrgRsc_GetDataOfResource (Item,&mysql_res);
|
||||||
|
|
||||||
/* Show item */
|
/* Show item */
|
||||||
if (EditingResourcesOfThisItem)
|
if (EditingResourcesOfThisItem)
|
||||||
PrgRsc_WriteRowEditResource (NumRsc,NumResources,Item,
|
PrgRsc_WriteRowEditResource (NumRsc,NumResources,Item,
|
||||||
(ListingType == Prg_EDIT_RESOURCE_LINK &&
|
(ListingType == Prg_EDIT_RESOURCE_LINK &&
|
||||||
Item->Resource.Hierarchy.RscCod == SelectedRscCod)); // Edit this link?
|
Item->Resource.Hierarchy.RscCod == SelectedRscCod)); // Edit this link?
|
||||||
else
|
else
|
||||||
PrgRsc_WriteRowViewResource (NumRsc,Item);
|
PrgRsc_WriteRowViewResource (NumRsc,Item);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Form to create a new resource *****/
|
/***** Form to create a new resource *****/
|
||||||
if (EditingResourcesOfThisItem)
|
if (EditingResourcesOfThisItem)
|
||||||
{
|
{
|
||||||
Prg_ResetResource (Item);
|
Prg_ResetResource (Item);
|
||||||
PrgRsc_WriteRowNewResource (NumResources,Item,
|
PrgRsc_WriteRowNewResource (NumResources,Item,
|
||||||
(ListingType == Prg_EDIT_RESOURCE_LINK &&
|
(ListingType == Prg_EDIT_RESOURCE_LINK &&
|
||||||
Item->Resource.Hierarchy.RscCod == SelectedRscCod)); // Edit this link?
|
Item->Resource.Hierarchy.RscCod == SelectedRscCod)); // Edit this link?
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** End table *****/
|
/***** End table *****/
|
||||||
HTM_TBODY_End ();
|
HTM_TBODY_End ();
|
||||||
HTM_TABLE_End ();
|
HTM_TABLE_End ();
|
||||||
|
|
||||||
/***** End box *****/
|
/***** End box *****/
|
||||||
Box_BoxEnd ();
|
Box_BoxEnd ();
|
||||||
|
|
Loading…
Reference in New Issue