Version 20.51: Mar 18, 2021 Call for exam module renamed.

This commit is contained in:
acanas 2021-03-18 01:49:43 +01:00
parent 9ea76aeebd
commit 789b3697f5
25 changed files with 2473 additions and 2465 deletions

View File

@ -29,13 +29,13 @@
OBJS = swad_account.o swad_action.o swad_agenda.o swad_alert.o \ OBJS = swad_account.o swad_action.o swad_agenda.o swad_alert.o \
swad_announcement.o swad_API.o swad_assignment.o swad_attendance.o \ swad_announcement.o swad_API.o swad_assignment.o swad_attendance.o \
swad_banner.o swad_box.o swad_building.o swad_button.o \ swad_banner.o swad_box.o swad_building.o swad_button.o \
swad_calendar.o swad_center.o swad_center_config.o swad_chat.o \ swad_calendar.o swad_call_for_exam.o swad_center.o \
swad_config.o swad_connected.o swad_cookie.o swad_country.o \ swad_center_config.o swad_chat.o swad_config.o swad_connected.o \
swad_country_config.o swad_course.o \ swad_cookie.o swad_country.o swad_country_config.o swad_course.o \
swad_course_config.o swad_cryptography.o \ swad_course_config.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_type.o swad_department.o swad_duplicate.o \ swad_degree_type.o swad_department.o swad_duplicate.o \
swad_enrolment.o swad_exam.o swad_exam_announcement.o swad_exam_log.o \ swad_enrolment.o swad_exam.o swad_exam_log.o \
swad_exam_print.o swad_exam_result.o swad_exam_session.o \ swad_exam_print.o swad_exam_result.o swad_exam_session.o \
swad_exam_set.o \ swad_exam_set.o \
swad_figure.o swad_figure_cache.o swad_file.o swad_file_browser.o \ swad_figure.o swad_figure_cache.o swad_file.o swad_file_browser.o \

View File

@ -3272,13 +3272,13 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;}
/***************************** Exam announcement *****************************/ /***************************** Exam announcement *****************************/
/* Bottom space is used for signatures */ /* Bottom space is used for signatures */
.EXA_ANN_VISIBLE .CALL_FOR_EXAM_VISIBLE
{ {
box-sizing:border-box; box-sizing:border-box;
width:100%; width:100%;
padding:25px 25px 125px 25px; padding:25px 25px 125px 25px;
} }
.EXA_ANN_HIDDEN .CALL_FOR_EXAM_HIDDEN
{ {
box-sizing:border-box; box-sizing:border-box;
width:100%; width:100%;

View File

@ -10645,7 +10645,7 @@ UPDATE usr_data SET EmailNtfEvents=(((EmailNtfEvents & ~0x7F) << 1) | (EmailNtfE
/* Assessment tab */ /* Assessment tab */
Ntf_EVENT_ASSIGNMENT = 3, // old 3 Ntf_EVENT_ASSIGNMENT = 3, // old 3
Ntf_EVENT_EXAM_ANNOUNCEMENT = 4, // old 4 Ntf_EVENT_CALL_FOR_EXAM = 4, // old 4
Ntf_EVENT_MARKS_FILE = 5, // old 5 Ntf_EVENT_MARKS_FILE = 5, // old 5
/* Enrollment tab */ /* Enrollment tab */

View File

@ -160,7 +160,7 @@ void QR_LinkTo (unsigned Size,const char *ParamName,long Cod)
void QR_ExamAnnnouncement (void) void QR_ExamAnnnouncement (void)
{ {
extern const char *Txt_Link_to_announcement_of_exam; extern const char *Txt_Link_to_call_for_exam;
char *URL; char *URL;
/***** Show QR code with direct link to the exam announcement *****/ /***** Show QR code with direct link to the exam announcement *****/
@ -171,7 +171,7 @@ void QR_ExamAnnnouncement (void)
Cfg_URL_SWAD_CGI,Gbl.Hierarchy.Crs.CrsCod, Cfg_URL_SWAD_CGI,Gbl.Hierarchy.Crs.CrsCod,
Act_GetActCod (ActSeeAllExaAnn)) < 0) Act_GetActCod (ActSeeAllExaAnn)) < 0)
Lay_NotEnoughMemoryExit (); Lay_NotEnoughMemoryExit ();
HTM_IMG (URL,NULL,Txt_Link_to_announcement_of_exam, HTM_IMG (URL,NULL,Txt_Link_to_call_for_exam,
"style=\"width:250px;height:250px;\""); "style=\"width:250px;height:250px;\"");
free (URL); free (URL);

View File

@ -29,9 +29,9 @@
#include <stddef.h> // For NULL #include <stddef.h> // For NULL
#include <string.h> #include <string.h>
#include "swad_call_for_exam.h"
#include "swad_changelog.h" #include "swad_changelog.h"
#include "swad_database.h" #include "swad_database.h"
#include "swad_exam_announcement.h"
#include "swad_global.h" #include "swad_global.h"
#include "swad_notice.h" #include "swad_notice.h"
#include "swad_RSS.h" #include "swad_RSS.h"
@ -260,7 +260,7 @@ static void RSS_WriteExamAnnouncements (FILE *FileRSS,struct Crs_Course *Crs)
" WHERE CrsCod=%ld AND Status=%u AND ExamDate>=NOW()" " WHERE CrsCod=%ld AND Status=%u AND ExamDate>=NOW()"
" ORDER BY T", " ORDER BY T",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
(unsigned) ExaAnn_VISIBLE_EXAM_ANNOUNCEMENT); (unsigned) Cfe_VISIBLE_CALL_FOR_EXAM);
/***** Write items with notices *****/ /***** Write items with notices *****/
if (NumExamAnnouncements) if (NumExamAnnouncements)

View File

@ -32,6 +32,7 @@
#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_center_config.h" #include "swad_center_config.h"
#include "swad_config.h" #include "swad_config.h"
#include "swad_cookie.h" #include "swad_cookie.h"
@ -47,7 +48,6 @@
#include "swad_department.h" #include "swad_department.h"
#include "swad_duplicate.h" #include "swad_duplicate.h"
#include "swad_exam.h" #include "swad_exam.h"
#include "swad_exam_announcement.h"
#include "swad_exam_print.h" #include "swad_exam_print.h"
#include "swad_exam_result.h" #include "swad_exam_result.h"
#include "swad_exam_session.h" #include "swad_exam_session.h"
@ -554,7 +554,7 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
[ActSeeAss ] = { 15, 0,TabAss,ActSeeAss ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_ShowInfo ,"info" }, [ActSeeAss ] = { 15, 0,TabAss,ActSeeAss ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_ShowInfo ,"info" },
[ActSeeAsg ] = { 801, 1,TabAss,ActSeeAsg ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Asg_SeeAssignments ,"edit" }, [ActSeeAsg ] = { 801, 1,TabAss,ActSeeAsg ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Asg_SeeAssignments ,"edit" },
[ActSeePrj ] = {1674, 2,TabAss,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_SeeProjects ,"file-invoice" }, [ActSeePrj ] = {1674, 2,TabAss,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_SeeProjects ,"file-invoice" },
[ActSeeAllExaAnn ] = { 85, 3,TabAss,ActSeeAllExaAnn ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaAnn_ListExamAnnsSee ,"bullhorn" }, [ActSeeAllExaAnn ] = { 85, 3,TabAss,ActSeeAllExaAnn ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cfe_ListCallsForExamsSee ,"bullhorn" },
[ActEdiTstQst ] = { 104, 4,TabAss,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDates ,Tst_RequestEditTests ,"tasks" }, [ActEdiTstQst ] = { 104, 4,TabAss,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDates ,Tst_RequestEditTests ,"tasks" },
[ActReqTst ] = { 103, 5,TabAss,ActReqTst ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_RequestTest ,"check" }, [ActReqTst ] = { 103, 5,TabAss,ActReqTst ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_RequestTest ,"check" },
[ActSeeAllExa ] = {1848, 6,TabAss,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Exa_SeeAllExams ,"file-signature" }, [ActSeeAllExa ] = {1848, 6,TabAss,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Exa_SeeAllExams ,"file-signature" },
@ -656,15 +656,15 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
[ActChgDatAssPrj ] = {1733,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_ChgFileMetadata ,NULL}, [ActChgDatAssPrj ] = {1733,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_ChgFileMetadata ,NULL},
[ActDowAssPrj ] = {1734,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_DOWNLD_FILE,Brw_DownloadFile ,NULL ,NULL}, [ActDowAssPrj ] = {1734,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_DOWNLD_FILE,Brw_DownloadFile ,NULL ,NULL},
[ActSeeOneExaAnn ] = {1572,-1,TabUnk,ActSeeAllExaAnn ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaAnn_ListExamAnnsCod ,NULL}, [ActSeeOneCfe ] = {1572,-1,TabUnk,ActSeeAllExaAnn ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cfe_ListCallsForExamsCod ,NULL},
[ActSeeDatExaAnn ] = {1571,-1,TabUnk,ActSeeAllExaAnn ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaAnn_ListExamAnnsDay ,NULL}, [ActSeeDatCfe ] = {1571,-1,TabUnk,ActSeeAllExaAnn ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cfe_ListCallsForExamsDay ,NULL},
[ActEdiExaAnn ] = { 91,-1,TabUnk,ActSeeAllExaAnn ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaAnn_PutFrmEditAExamAnn ,NULL}, [ActEdiCfe ] = { 91,-1,TabUnk,ActSeeAllExaAnn ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cfe_PutFrmEditACallForExam ,NULL},
[ActRcvExaAnn ] = { 110,-1,TabUnk,ActSeeAllExaAnn ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,ExaAnn_ReceiveExamAnn1 ,ExaAnn_ReceiveExamAnn2 ,NULL}, [ActRcvCfe ] = { 110,-1,TabUnk,ActSeeAllExaAnn ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Cfe_ReceiveCallForExam1 ,Cfe_ReceiveCallForExam2 ,NULL},
[ActPrnExaAnn ] = { 179,-1,TabUnk,ActSeeAllExaAnn ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,NULL ,ExaAnn_PrintExamAnn ,NULL}, [ActPrnCfe ] = { 179,-1,TabUnk,ActSeeAllExaAnn ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,NULL ,Cfe_PrintCallForExam ,NULL},
[ActReqRemExaAnn ] = {1619,-1,TabUnk,ActSeeAllExaAnn ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaAnn_ReqRemoveExamAnn ,NULL}, [ActReqRemCfe ] = {1619,-1,TabUnk,ActSeeAllExaAnn ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cfe_ReqRemoveCallForExam ,NULL},
[ActRemExaAnn ] = { 187,-1,TabUnk,ActSeeAllExaAnn ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,ExaAnn_RemoveExamAnn1 ,ExaAnn_RemoveExamAnn2 ,NULL}, [ActRemCfe ] = { 187,-1,TabUnk,ActSeeAllExaAnn ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Cfe_RemoveCallForExam1 ,Cfe_RemoveCallForExam2 ,NULL},
[ActHidExaAnn ] = {1620,-1,TabUnk,ActSeeAllExaAnn ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,ExaAnn_HideExamAnn ,ExaAnn_ListExamAnnsEdit ,NULL}, [ActHidCfe ] = {1620,-1,TabUnk,ActSeeAllExaAnn ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Cfe_HideCallForExam ,Cfe_ListCallsForExamsEdit ,NULL},
[ActUnhExaAnn ] = {1621,-1,TabUnk,ActSeeAllExaAnn ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,ExaAnn_UnhideExamAnn ,ExaAnn_ListExamAnnsEdit ,NULL}, [ActUnhCfe ] = {1621,-1,TabUnk,ActSeeAllExaAnn ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Cfe_UnhideCallForExam ,Cfe_ListCallsForExamsEdit ,NULL},
[ActEdiOneTstQst ] = { 105,-1,TabUnk,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_ShowFormEditOneQst ,NULL}, [ActEdiOneTstQst ] = { 105,-1,TabUnk,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_ShowFormEditOneQst ,NULL},
[ActReqImpTstQst ] = {1007,-1,TabUnk,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TsI_ShowFormImportQstsFromXML ,NULL}, [ActReqImpTstQst ] = {1007,-1,TabUnk,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TsI_ShowFormImportQstsFromXML ,NULL},
@ -1913,7 +1913,7 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
ActReqRemAllStdCrs, // #88 ActReqRemAllStdCrs, // #88
ActSeeRecSevStd, // #89 ActSeeRecSevStd, // #89
ActDelSntMsg, // #90 ActDelSntMsg, // #90
ActEdiExaAnn, // #91 ActEdiCfe, // #91
-1, // #92 (obsolete action) -1, // #92 (obsolete action)
-1, // #93 (obsolete action) -1, // #93 (obsolete action)
-1, // #94 (obsolete action) -1, // #94 (obsolete action)
@ -1932,7 +1932,7 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
ActReqRemGrp, // #107 ActReqRemGrp, // #107
ActReqEdiGrp, // #108 ActReqEdiGrp, // #108
ActEdiFAQ, // #109 ActEdiFAQ, // #109
ActRcvExaAnn, // #110 ActRcvCfe, // #110
ActPrnRecSevStd, // #111 ActPrnRecSevStd, // #111
-1, // #112 (obsolete action) -1, // #112 (obsolete action)
-1, // #113 (obsolete action) -1, // #113 (obsolete action)
@ -2001,7 +2001,7 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
-1, // #176 (obsolete action) -1, // #176 (obsolete action)
-1, // #177 (obsolete action) -1, // #177 (obsolete action)
-1, // #178 (obsolete action) -1, // #178 (obsolete action)
ActPrnExaAnn, // #179 ActPrnCfe, // #179
-1, // #180 (obsolete action) -1, // #180 (obsolete action)
ActInsIteSylPra, // #181 ActInsIteSylPra, // #181
ActRcvURLCrsLnk, // #182 ActRcvURLCrsLnk, // #182
@ -2009,7 +2009,7 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
ActRcvPagAss, // #184 ActRcvPagAss, // #184
ActRcvPagBib, // #185 ActRcvPagBib, // #185
-1, // #186 (obsolete action) -1, // #186 (obsolete action)
ActRemExaAnn, // #187 ActRemCfe, // #187
-1, // #188 (obsolete action) -1, // #188 (obsolete action)
-1, // #189 (obsolete action) -1, // #189 (obsolete action)
-1, // #190 (obsolete action) -1, // #190 (obsolete action)
@ -3393,8 +3393,8 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
ActCnfID_Oth, // #1568 ActCnfID_Oth, // #1568
ActCnfID_Std, // #1569 ActCnfID_Std, // #1569
ActCnfID_Tch, // #1570 ActCnfID_Tch, // #1570
ActSeeDatExaAnn, // #1571 ActSeeDatCfe, // #1571
ActSeeOneExaAnn, // #1572 ActSeeOneCfe, // #1572
ActChgCrsYeaCfg, // #1573 ActChgCrsYeaCfg, // #1573
ActReqRemOthPho, // #1574 ActReqRemOthPho, // #1574
ActReqRemStdPho, // #1575 ActReqRemStdPho, // #1575
@ -3441,9 +3441,9 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
ActLogInUsrAgdLan, // #1616 ActLogInUsrAgdLan, // #1616
-1, // #1617 (obsolete action) -1, // #1617 (obsolete action)
ActPrnAgdQR, // #1618 ActPrnAgdQR, // #1618
ActReqRemExaAnn, // #1619 ActReqRemCfe, // #1619
ActHidExaAnn, // #1620 ActHidCfe, // #1620
ActUnhExaAnn, // #1621 ActUnhCfe, // #1621
ActSeeCal, // #1622 ActSeeCal, // #1622
ActPrnCal, // #1623 ActPrnCal, // #1623
ActChgCal1stDay, // #1624 ActChgCal1stDay, // #1624

View File

@ -618,15 +618,15 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to
#define ActChgDatAssPrj (ActChgCrsTT1stDay + 97) #define ActChgDatAssPrj (ActChgCrsTT1stDay + 97)
#define ActDowAssPrj (ActChgCrsTT1stDay + 98) #define ActDowAssPrj (ActChgCrsTT1stDay + 98)
#define ActSeeOneExaAnn (ActChgCrsTT1stDay + 99) #define ActSeeOneCfe (ActChgCrsTT1stDay + 99)
#define ActSeeDatExaAnn (ActChgCrsTT1stDay + 100) #define ActSeeDatCfe (ActChgCrsTT1stDay + 100)
#define ActEdiExaAnn (ActChgCrsTT1stDay + 101) #define ActEdiCfe (ActChgCrsTT1stDay + 101)
#define ActRcvExaAnn (ActChgCrsTT1stDay + 102) #define ActRcvCfe (ActChgCrsTT1stDay + 102)
#define ActPrnExaAnn (ActChgCrsTT1stDay + 103) #define ActPrnCfe (ActChgCrsTT1stDay + 103)
#define ActReqRemExaAnn (ActChgCrsTT1stDay + 104) #define ActReqRemCfe (ActChgCrsTT1stDay + 104)
#define ActRemExaAnn (ActChgCrsTT1stDay + 105) #define ActRemCfe (ActChgCrsTT1stDay + 105)
#define ActHidExaAnn (ActChgCrsTT1stDay + 106) #define ActHidCfe (ActChgCrsTT1stDay + 106)
#define ActUnhExaAnn (ActChgCrsTT1stDay + 107) #define ActUnhCfe (ActChgCrsTT1stDay + 107)
#define ActEdiOneTstQst (ActChgCrsTT1stDay + 108) #define ActEdiOneTstQst (ActChgCrsTT1stDay + 108)
#define ActReqImpTstQst (ActChgCrsTT1stDay + 109) #define ActReqImpTstQst (ActChgCrsTT1stDay + 109)

View File

@ -29,8 +29,8 @@
#include "swad_box.h" #include "swad_box.h"
#include "swad_calendar.h" #include "swad_calendar.h"
#include "swad_call_for_exam.h"
#include "swad_database.h" #include "swad_database.h"
#include "swad_exam_announcement.h"
#include "swad_figure.h" #include "swad_figure.h"
#include "swad_form.h" #include "swad_form.h"
#include "swad_global.h" #include "swad_global.h"
@ -219,7 +219,7 @@ void Cal_DrawCurrentMonth (void)
Lan_STR_LANG_ID[Gbl.Prefs.Language]); Lan_STR_LANG_ID[Gbl.Prefs.Language]);
Frm_SetParamsForm (ParamsStr,ActSeeCal,true); Frm_SetParamsForm (ParamsStr,ActSeeCal,true);
HTM_TxtF ("'%s',",ParamsStr); HTM_TxtF ("'%s',",ParamsStr);
Frm_SetParamsForm (ParamsStr,ActSeeDatExaAnn,true); Frm_SetParamsForm (ParamsStr,ActSeeDatCfe,true);
HTM_TxtF ("'%s');",ParamsStr); HTM_TxtF ("'%s');",ParamsStr);
HTM_SCRIPT_End (); HTM_SCRIPT_End ();
} }
@ -288,7 +288,7 @@ static void Cal_DrawCalendar (Act_Action_t ActionSeeCalendar,
Lan_STR_LANG_ID[Gbl.Prefs.Language]); Lan_STR_LANG_ID[Gbl.Prefs.Language]);
Frm_SetParamsForm (ParamsStr,ActionSeeCalendar,true); Frm_SetParamsForm (ParamsStr,ActionSeeCalendar,true);
HTM_TxtF ("'%s',",ParamsStr); HTM_TxtF ("'%s',",ParamsStr);
Frm_SetParamsForm (ParamsStr,ActSeeDatExaAnn,true); Frm_SetParamsForm (ParamsStr,ActSeeDatCfe,true);
HTM_TxtF ("'%s');",ParamsStr); HTM_TxtF ("'%s');",ParamsStr);
HTM_SCRIPT_End (); HTM_SCRIPT_End ();

1811
swad_call_for_exam.c Normal file

File diff suppressed because it is too large Load Diff

129
swad_call_for_exam.h Normal file
View File

@ -0,0 +1,129 @@
// swad_call_for_exam.h: calls for exams
#ifndef _SWAD_CFE
#define _SWAD_CFE
/*
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_constant.h"
#include "swad_course.h"
#include "swad_date.h"
#include "swad_notification.h"
/*****************************************************************************/
/************************** Public types and constants ***********************/
/*****************************************************************************/
#define Cfe_NUM_VIEWS 3
typedef enum
{
Cfe_NORMAL_VIEW,
Cfe_PRINT_VIEW,
Cfe_FORM_VIEW,
} Cfe_TypeViewCallForExam_t;
#define Cfe_NUM_STATUS 3
typedef enum
{
Cfe_VISIBLE_CALL_FOR_EXAM = 0,
Cfe_HIDDEN_CALL_FOR_EXAM = 1,
Cfe_DELETED_CALL_FOR_EXAM = 2,
} Cfe_Status_t; // Don't change these numbers because they are used in database
#define Cfe_STATUS_DEFAULT Cfe_VISIBLE_CALL_FOR_EXAM
#define Cfe_MAX_CHARS_SESSION (128 - 1) // 127
#define Cfe_MAX_BYTES_SESSION ((Cfe_MAX_CHARS_SESSION + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 2047
struct Cfe_CallForExam
{
long CrsCod;
Cfe_Status_t Status;
char CrsFullName[Cns_HIERARCHY_MAX_BYTES_FULL_NAME + 1];
unsigned Year; // Number of year (0 (N.A.), 1, 2, 3, 4, 5, 6) in the degree
char Session[Cfe_MAX_BYTES_SESSION + 1]; // Exam session is june, september, etc.
struct Date CallDate;
struct Date ExamDate;
struct Hour StartTime;
struct Hour Duration;
char *Place;
char *Mode;
char *Structure;
char *DocRequired;
char *MatRequired;
char *MatAllowed;
char *OtherInfo;
};
struct Cfe_ExamCodeAndDate
{
long ExaCod;
struct Date ExamDate;
};
struct Cfe_CallsForExams
{
unsigned NumCallsForExams; // Number of calls for exams in the list
struct Cfe_ExamCodeAndDate *Lst; // List of calls for exams
long NewExaCod; // New call for exam just created
long HighlightExaCod; // Call for exam to be highlighted
char HighlightDate[4 + 2 + 2 + 1]; // Date with calls for exams to be highlighted (in YYYYMMDD format)
long ExaCod; // Used to put contextual icons
const char *Anchor; // Used to put contextual icons
struct Cfe_CallForExam CallForExam;
};
/*****************************************************************************/
/***************************** Public prototypes *****************************/
/*****************************************************************************/
void Cfe_ResetCallsForExams (struct Cfe_CallsForExams *CallsForExams);
void Cfe_PutFrmEditACallForExam (void);
void Cfe_ReceiveCallForExam1 (void);
void Cfe_ReceiveCallForExam2 (void);
void Cfe_PrintCallForExam (void);
void Cfe_ReqRemoveCallForExam (void);
void Cfe_RemoveCallForExam1 (void);
void Cfe_RemoveCallForExam2 (void);
void Cfe_HideCallForExam (void);
void Cfe_UnhideCallForExam (void);
void Cfe_FreeListCallsForExams (struct Cfe_CallsForExams *CallsForExams);
void Cfe_ListCallsForExamsSee (void);
void Cfe_ListCallsForExamsEdit (void);
void Cfe_ListCallsForExamsCod (void);
void Cfe_ListCallsForExamsDay (void);
void Cfe_CreateListCallsForExams (struct Cfe_CallsForExams *CallsForExams);
void Cfe_PutHiddenParamExaCod (long ExaCod);
void Cfe_GetSummaryAndContentCallForExam (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
char **ContentStr,
long ExaCod,bool GetContent);
#endif

View File

@ -600,12 +600,14 @@ TODO: Salvador Romero Cort
TODO: FIX BUG, URGENT! En las fechas como parámetro Dat_WriteParamsIniEndDates(), por ejemplo al cambiar el color de la gráfica de accesos por día y hora, no se respeta la zona horaria. TODO: FIX BUG, URGENT! En las fechas como parámetro Dat_WriteParamsIniEndDates(), por ejemplo al cambiar el color de la gráfica de accesos por día y hora, no se respeta la zona horaria.
*/ */
#define Log_PLATFORM_VERSION "SWAD 20.50.11 (2021-03-17)" #define Log_PLATFORM_VERSION "SWAD 20.51 (2021-03-18)"
#define CSS_FILE "swad20.45.css" #define CSS_FILE "swad20.45.css"
#define JS_FILE "swad20.6.2.js" #define JS_FILE "swad20.6.2.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
Version 20.51: Mar 18, 2021 Call for exam module renamed. (307459 lines)
Version 20.50.11: Mar 17, 2021 Departments database table renamed. (307450 lines) Version 20.50.11: Mar 17, 2021 Departments database table renamed. (307450 lines)
1 change necessary in database: 1 change necessary in database:
RENAME TABLE departments TO dpt_departments; RENAME TABLE departments TO dpt_departments;

View File

@ -32,10 +32,10 @@
#include <string.h> // For string functions #include <string.h> // For string functions
#include "swad_attendance.h" #include "swad_attendance.h"
#include "swad_call_for_exam.h"
#include "swad_course.h" #include "swad_course.h"
#include "swad_course_config.h" #include "swad_course_config.h"
#include "swad_database.h" #include "swad_database.h"
#include "swad_exam_announcement.h"
#include "swad_figure.h" #include "swad_figure.h"
#include "swad_figure_cache.h" #include "swad_figure_cache.h"
#include "swad_form.h" #include "swad_form.h"
@ -1948,7 +1948,7 @@ static void Crs_EmptyCourseCompletely (long CrsCod)
DB_QueryUPDATE ("can not remove exam announcements of a course", DB_QueryUPDATE ("can not remove exam announcements of a course",
"UPDATE exam_announcements SET Status=%u" "UPDATE exam_announcements SET Status=%u"
" WHERE CrsCod=%ld", " WHERE CrsCod=%ld",
(unsigned) ExaAnn_DELETED_EXAM_ANNOUNCEMENT,CrsCod); (unsigned) Cfe_DELETED_CALL_FOR_EXAM,CrsCod);
/***** Remove course cards of the course *****/ /***** Remove course cards of the course *****/
/* Remove content of course cards */ /* Remove content of course cards */

View File

@ -1214,7 +1214,7 @@ mysql> DESCRIBE exam_announcements;
"NumNotif INT NOT NULL DEFAULT 0," "NumNotif INT NOT NULL DEFAULT 0,"
"CrsFullName VARCHAR(2047) NOT NULL," // Cns_HIERARCHY_MAX_BYTES_FULL_NAME "CrsFullName VARCHAR(2047) NOT NULL," // Cns_HIERARCHY_MAX_BYTES_FULL_NAME
"Year TINYINT NOT NULL," "Year TINYINT NOT NULL,"
"ExamSession VARCHAR(2047) NOT NULL," // ExaAnn_MAX_BYTES_SESSION "ExamSession VARCHAR(2047) NOT NULL," // Cfe_MAX_BYTES_SESSION
"CallDate DATETIME NOT NULL," "CallDate DATETIME NOT NULL,"
"ExamDate DATETIME NOT NULL," "ExamDate DATETIME NOT NULL,"
"Duration TIME NOT NULL," "Duration TIME NOT NULL,"

File diff suppressed because it is too large Load Diff

View File

@ -1,129 +0,0 @@
// swad_exam_announcement.h: exam announcements
#ifndef _SWAD_EXA_ANN
#define _SWAD_EXA_ANN
/*
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_constant.h"
#include "swad_course.h"
#include "swad_date.h"
#include "swad_notification.h"
/*****************************************************************************/
/************************** Public types and constants ***********************/
/*****************************************************************************/
#define ExaAnn_NUM_VIEWS 3
typedef enum
{
ExaAnn_NORMAL_VIEW,
ExaAnn_PRINT_VIEW,
ExaAnn_FORM_VIEW,
} ExaAnn_TypeViewExamAnnouncement_t;
#define ExaAnn_NUM_STATUS 3
typedef enum
{
ExaAnn_VISIBLE_EXAM_ANNOUNCEMENT = 0,
ExaAnn_HIDDEN_EXAM_ANNOUNCEMENT = 1,
ExaAnn_DELETED_EXAM_ANNOUNCEMENT = 2,
} ExaAnn_Status_t; // Don't change these numbers because they are used in database
#define ExaAnn_STATUS_DEFAULT ExaAnn_VISIBLE_EXAM_ANNOUNCEMENT
#define ExaAnn_MAX_CHARS_SESSION (128 - 1) // 127
#define ExaAnn_MAX_BYTES_SESSION ((ExaAnn_MAX_CHARS_SESSION + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 2047
struct ExaAnn_ExamAnnouncement
{
long CrsCod;
ExaAnn_Status_t Status;
char CrsFullName[Cns_HIERARCHY_MAX_BYTES_FULL_NAME + 1];
unsigned Year; // Number of year (0 (N.A.), 1, 2, 3, 4, 5, 6) in the degree
char Session[ExaAnn_MAX_BYTES_SESSION + 1]; // Exam session is june, september, etc.
struct Date CallDate;
struct Date ExamDate;
struct Hour StartTime;
struct Hour Duration;
char *Place;
char *Mode;
char *Structure;
char *DocRequired;
char *MatRequired;
char *MatAllowed;
char *OtherInfo;
};
struct ExaAnn_ExamCodeAndDate
{
long ExaCod;
struct Date ExamDate;
};
struct ExaAnn_ExamAnnouncements
{
unsigned NumExaAnns; // Number of announcements of exam in the list
struct ExaAnn_ExamCodeAndDate *Lst; // List of exam announcements
long NewExaCod; // New exam announcement just created
long HighlightExaCod; // Exam announcement to be highlighted
char HighlightDate[4 + 2 + 2 + 1]; // Date with exam announcements to be highlighted (in YYYYMMDD format)
long ExaCod; // Used to put contextual icons
const char *Anchor; // Used to put contextual icons
struct ExaAnn_ExamAnnouncement ExamAnn;
};
/*****************************************************************************/
/***************************** Public prototypes *****************************/
/*****************************************************************************/
void ExaAnn_ResetExamAnns (struct ExaAnn_ExamAnnouncements *ExamAnns);
void ExaAnn_PutFrmEditAExamAnn (void);
void ExaAnn_ReceiveExamAnn1 (void);
void ExaAnn_ReceiveExamAnn2 (void);
void ExaAnn_PrintExamAnn (void);
void ExaAnn_ReqRemoveExamAnn (void);
void ExaAnn_RemoveExamAnn1 (void);
void ExaAnn_RemoveExamAnn2 (void);
void ExaAnn_HideExamAnn (void);
void ExaAnn_UnhideExamAnn (void);
void ExaAnn_FreeListExamAnns (struct ExaAnn_ExamAnnouncements *ExamAnns);
void ExaAnn_ListExamAnnsSee (void);
void ExaAnn_ListExamAnnsEdit (void);
void ExaAnn_ListExamAnnsCod (void);
void ExaAnn_ListExamAnnsDay (void);
void ExaAnn_CreateListExamAnns (struct ExaAnn_ExamAnnouncements *ExamAnns);
void ExaAnn_PutHiddenParamExaCod (long ExaCod);
void ExaAnn_GetSummaryAndContentExamAnn (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
char **ContentStr,
long ExaCod,bool GetContent);
#endif

View File

@ -36,11 +36,10 @@
#include "swad_action.h" #include "swad_action.h"
#include "swad_API.h" #include "swad_API.h"
#include "swad_calendar.h" #include "swad_calendar.h"
#include "swad_room.h" #include "swad_call_for_exam.h"
#include "swad_config.h" #include "swad_config.h"
#include "swad_constant.h" #include "swad_constant.h"
#include "swad_department.h" #include "swad_department.h"
#include "swad_exam_announcement.h"
#include "swad_follow.h" #include "swad_follow.h"
#include "swad_global.h" #include "swad_global.h"
#include "swad_hierarchy.h" #include "swad_hierarchy.h"
@ -50,6 +49,7 @@
#include "swad_program.h" #include "swad_program.h"
#include "swad_project.h" #include "swad_project.h"
#include "swad_role.h" #include "swad_role.h"
#include "swad_room.h"
#include "swad_setting.h" #include "swad_setting.h"
#include "swad_statistic.h" #include "swad_statistic.h"
#include "swad_theme.h" #include "swad_theme.h"

View File

@ -1873,67 +1873,67 @@ const char *Hlp_ASSESSMENT_Surveys_questions =
"ASSESSMENT.Surveys.en#questions"; "ASSESSMENT.Surveys.en#questions";
#endif #endif
const char *Hlp_ASSESSMENT_Announcements = const char *Hlp_ASSESSMENT_Calls_for_exams =
#if L==1 #if L==1
"ASSESSMENT.Announcements.es"; "ASSESSMENT.Calls_for_exams.es";
#elif L==2 #elif L==2
"ASSESSMENT.Announcements.en"; "ASSESSMENT.Calls_for_exams.en";
#elif L==3 #elif L==3
"ASSESSMENT.Announcements.en"; "ASSESSMENT.Calls_for_exams.en";
#elif L==4 #elif L==4
"ASSESSMENT.Announcements.es"; "ASSESSMENT.Calls_for_exams.es";
#elif L==5 #elif L==5
"ASSESSMENT.Announcements.en"; "ASSESSMENT.Calls_for_exams.en";
#elif L==6 #elif L==6
"ASSESSMENT.Announcements.es"; "ASSESSMENT.Calls_for_exams.es";
#elif L==7 #elif L==7
"ASSESSMENT.Announcements.en"; "ASSESSMENT.Calls_for_exams.en";
#elif L==8 #elif L==8
"ASSESSMENT.Announcements.en"; "ASSESSMENT.Calls_for_exams.en";
#elif L==9 #elif L==9
"ASSESSMENT.Announcements.en"; "ASSESSMENT.Calls_for_exams.en";
#endif #endif
const char *Hlp_ASSESSMENT_Announcements_new_announcement = const char *Hlp_ASSESSMENT_Calls_for_exam_new_call =
#if L==1 #if L==1
"ASSESSMENT.Announcements.es#nueva-convocatoria"; "ASSESSMENT.Calls_for_exams.es#nueva-convocatoria";
#elif L==2 #elif L==2
"ASSESSMENT.Announcements.en#new-announcement"; "ASSESSMENT.Calls_for_exams.en#new-call";
#elif L==3 #elif L==3
"ASSESSMENT.Announcements.en#new-announcement"; "ASSESSMENT.Calls_for_exams.en#new-call";
#elif L==4 #elif L==4
"ASSESSMENT.Announcements.es#nueva-convocatoria"; "ASSESSMENT.Calls_for_exams.es#nueva-convocatoria";
#elif L==5 #elif L==5
"ASSESSMENT.Announcements.en#new-announcement"; "ASSESSMENT.Calls_for_exams.en#new-call";
#elif L==6 #elif L==6
"ASSESSMENT.Announcements.es#nueva-convocatoria"; "ASSESSMENT.Calls_for_exams.es#nueva-convocatoria";
#elif L==7 #elif L==7
"ASSESSMENT.Announcements.en#new-announcement"; "ASSESSMENT.Calls_for_exams.en#new-call";
#elif L==8 #elif L==8
"ASSESSMENT.Announcements.en#new-announcement"; "ASSESSMENT.Calls_for_exams.en#new-call";
#elif L==9 #elif L==9
"ASSESSMENT.Announcements.en#new-announcement"; "ASSESSMENT.Calls_for_exams.en#new-call";
#endif #endif
const char *Hlp_ASSESSMENT_Announcements_edit_announcement = const char *Hlp_ASSESSMENT_Announcements_edit_announcement =
#if L==1 #if L==1
"ASSESSMENT.Announcements.es#editar-convocatoria"; "ASSESSMENT.Calls_for_exams.es#editar-convocatoria";
#elif L==2 #elif L==2
"ASSESSMENT.Announcements.en#edit-announcement"; "ASSESSMENT.Calls_for_exams.en#edit-call";
#elif L==3 #elif L==3
"ASSESSMENT.Announcements.en#edit-announcement"; "ASSESSMENT.Calls_for_exams.en#edit-call";
#elif L==4 #elif L==4
"ASSESSMENT.Announcements.es#editar-convocatoria"; "ASSESSMENT.Calls_for_exams.es#editar-convocatoria";
#elif L==5 #elif L==5
"ASSESSMENT.Announcements.en#edit-announcement"; "ASSESSMENT.Calls_for_exams.en#edit-call";
#elif L==6 #elif L==6
"ASSESSMENT.Announcements.es#editar-convocatoria"; "ASSESSMENT.Calls_for_exams.es#editar-convocatoria";
#elif L==7 #elif L==7
"ASSESSMENT.Announcements.en#edit-announcement"; "ASSESSMENT.Calls_for_exams.en#edit-call";
#elif L==8 #elif L==8
"ASSESSMENT.Announcements.en#edit-announcement"; "ASSESSMENT.Calls_for_exams.en#edit-call";
#elif L==9 #elif L==9
"ASSESSMENT.Announcements.en#edit-announcement"; "ASSESSMENT.Calls_for_exams.en#edit-call";
#endif #endif
/***** FILES tab *****/ /***** FILES tab *****/

View File

@ -34,11 +34,11 @@
#include "swad_banner.h" #include "swad_banner.h"
#include "swad_box.h" #include "swad_box.h"
#include "swad_calendar.h" #include "swad_calendar.h"
#include "swad_call_for_exam.h"
#include "swad_changelog.h" #include "swad_changelog.h"
#include "swad_config.h" #include "swad_config.h"
#include "swad_connected.h" #include "swad_connected.h"
#include "swad_database.h" #include "swad_database.h"
#include "swad_exam_announcement.h"
#include "swad_exam_session.h" #include "swad_exam_session.h"
#include "swad_firewall.h" #include "swad_firewall.h"
#include "swad_follow.h" #include "swad_follow.h"
@ -495,7 +495,7 @@ static void Lay_WriteScripts (void)
extern const char *Txt_DAYS_SMALL[7]; extern const char *Txt_DAYS_SMALL[7];
extern const char *Txt_Exam_of_X; extern const char *Txt_Exam_of_X;
struct Hld_Holidays Holidays; struct Hld_Holidays Holidays;
struct ExaAnn_ExamAnnouncements ExamAnns; struct Cfe_CallsForExams ExamAnns;
unsigned DayOfWeek; /* 0, 1, 2, 3, 4, 5, 6 */ unsigned DayOfWeek; /* 0, 1, 2, 3, 4, 5, 6 */
unsigned NumHld; unsigned NumHld;
unsigned NumExamAnnouncement; // Number of exam announcement unsigned NumExamAnnouncement; // Number of exam announcement
@ -542,10 +542,10 @@ static void Lay_WriteScripts (void)
Hld_GetListHolidays (&Holidays); Hld_GetListHolidays (&Holidays);
/***** Reset exam announcements context *****/ /***** Reset exam announcements context *****/
ExaAnn_ResetExamAnns (&ExamAnns); Cfe_ResetCallsForExams (&ExamAnns);
/***** Create list of exam announcements *****/ /***** Create list of exam announcements *****/
ExaAnn_CreateListExamAnns (&ExamAnns); Cfe_CreateListCallsForExams (&ExamAnns);
/***** Write script to initialize variables used to draw months *****/ /***** Write script to initialize variables used to draw months *****/
HTM_SCRIPT_Begin (NULL,NULL); HTM_SCRIPT_Begin (NULL,NULL);
@ -579,7 +579,7 @@ static void Lay_WriteScripts (void)
HTM_TxtF ("\tvar LstExamAnnouncements = [];\n"); HTM_TxtF ("\tvar LstExamAnnouncements = [];\n");
for (NumExamAnnouncement = 0; for (NumExamAnnouncement = 0;
NumExamAnnouncement < ExamAnns.NumExaAnns; NumExamAnnouncement < ExamAnns.NumCallsForExams;
NumExamAnnouncement++) NumExamAnnouncement++)
HTM_TxtF ("LstExamAnnouncements.push({ ExaCod: %ld, Year: %u, Month: %u, Day: %u });\n", HTM_TxtF ("LstExamAnnouncements.push({ ExaCod: %ld, Year: %u, Month: %u, Day: %u });\n",
ExamAnns.Lst[NumExamAnnouncement].ExaCod, ExamAnns.Lst[NumExamAnnouncement].ExaCod,
@ -590,7 +590,7 @@ static void Lay_WriteScripts (void)
HTM_SCRIPT_End (); HTM_SCRIPT_End ();
/***** Free list of exam announcements *****/ /***** Free list of exam announcements *****/
ExaAnn_FreeListExamAnns (&ExamAnns); Cfe_FreeListCallsForExams (&ExamAnns);
/***** Free list of holidays *****/ /***** Free list of holidays *****/
Hld_FreeListHolidays (&Holidays); Hld_FreeListHolidays (&Holidays);

View File

@ -33,11 +33,11 @@
#include "swad_action.h" #include "swad_action.h"
#include "swad_box.h" #include "swad_box.h"
#include "swad_call_for_exam.h"
#include "swad_config.h" #include "swad_config.h"
#include "swad_config.h" #include "swad_config.h"
#include "swad_database.h" #include "swad_database.h"
#include "swad_enrolment.h" #include "swad_enrolment.h"
#include "swad_exam_announcement.h"
#include "swad_figure.h" #include "swad_figure.h"
#include "swad_follow.h" #include "swad_follow.h"
#include "swad_form.h" #include "swad_form.h"
@ -85,7 +85,7 @@ const char *Ntf_WSNotifyEvents[Ntf_NUM_NOTIFY_EVENTS] =
/* Assessment tab */ /* Assessment tab */
[Ntf_EVENT_ASSIGNMENT ] = "assignment", [Ntf_EVENT_ASSIGNMENT ] = "assignment",
[Ntf_EVENT_SURVEY ] = "survey", [Ntf_EVENT_SURVEY ] = "survey",
[Ntf_EVENT_EXAM_ANNOUNCEMENT] = "examAnnouncement", [Ntf_EVENT_CALL_FOR_EXAM] = "examAnnouncement",
/* Files tab */ /* Files tab */
[Ntf_EVENT_DOCUMENT_FILE ] = "documentFile", [Ntf_EVENT_DOCUMENT_FILE ] = "documentFile",
[Ntf_EVENT_TEACHERS_FILE ] = "teachersFile", [Ntf_EVENT_TEACHERS_FILE ] = "teachersFile",
@ -123,7 +123,7 @@ static const Act_Action_t Ntf_DefaultActions[Ntf_NUM_NOTIFY_EVENTS] =
/* Assessment tab */ /* Assessment tab */
[Ntf_EVENT_ASSIGNMENT ] = ActSeeAsg, [Ntf_EVENT_ASSIGNMENT ] = ActSeeAsg,
[Ntf_EVENT_SURVEY ] = ActSeeAllSvy, [Ntf_EVENT_SURVEY ] = ActSeeAllSvy,
[Ntf_EVENT_EXAM_ANNOUNCEMENT] = ActSeeAllExaAnn, [Ntf_EVENT_CALL_FOR_EXAM] = ActSeeAllExaAnn,
/* Files tab */ /* Files tab */
[Ntf_EVENT_DOCUMENT_FILE ] = ActSeeAdmDocCrsGrp, [Ntf_EVENT_DOCUMENT_FILE ] = ActSeeAdmDocCrsGrp,
[Ntf_EVENT_TEACHERS_FILE ] = ActAdmTchCrsGrp, [Ntf_EVENT_TEACHERS_FILE ] = ActAdmTchCrsGrp,
@ -166,7 +166,7 @@ static const char *Ntf_ParamNotifMeAboutNotifyEvents[Ntf_NUM_NOTIFY_EVENTS] =
/* Assessment tab */ /* Assessment tab */
[Ntf_EVENT_ASSIGNMENT ] = "NotifyNtfEventAssignment", [Ntf_EVENT_ASSIGNMENT ] = "NotifyNtfEventAssignment",
[Ntf_EVENT_SURVEY ] = "NotifyNtfEventSurvey", [Ntf_EVENT_SURVEY ] = "NotifyNtfEventSurvey",
[Ntf_EVENT_EXAM_ANNOUNCEMENT] = "NotifyNtfEventExamAnnouncement", [Ntf_EVENT_CALL_FOR_EXAM] = "NotifyNtfEventExamAnnouncement",
/* Files tab */ /* Files tab */
[Ntf_EVENT_DOCUMENT_FILE ] = "NotifyNtfEventDocumentFile", [Ntf_EVENT_DOCUMENT_FILE ] = "NotifyNtfEventDocumentFile",
[Ntf_EVENT_TEACHERS_FILE ] = "NotifyNtfEventTeachersFile", [Ntf_EVENT_TEACHERS_FILE ] = "NotifyNtfEventTeachersFile",
@ -205,7 +205,7 @@ static const char *Ntf_ParamEmailMeAboutNotifyEvents[Ntf_NUM_NOTIFY_EVENTS] =
/* Assessment tab */ /* Assessment tab */
[Ntf_EVENT_ASSIGNMENT ] = "EmailNtfEventAssignment", [Ntf_EVENT_ASSIGNMENT ] = "EmailNtfEventAssignment",
[Ntf_EVENT_SURVEY ] = "EmailNtfEventSurvey", [Ntf_EVENT_SURVEY ] = "EmailNtfEventSurvey",
[Ntf_EVENT_EXAM_ANNOUNCEMENT] = "EmailNtfEventExamAnnouncement", [Ntf_EVENT_CALL_FOR_EXAM] = "EmailNtfEventExamAnnouncement",
/* Files tab */ /* Files tab */
[Ntf_EVENT_DOCUMENT_FILE ] = "EmailNtfEventDocumentFile", [Ntf_EVENT_DOCUMENT_FILE ] = "EmailNtfEventDocumentFile",
[Ntf_EVENT_TEACHERS_FILE ] = "EmailNtfEventTeachersFile", [Ntf_EVENT_TEACHERS_FILE ] = "EmailNtfEventTeachersFile",
@ -244,7 +244,7 @@ static const char *Ntf_Icons[Ntf_NUM_NOTIFY_EVENTS] =
/* Assessment tab */ /* Assessment tab */
[Ntf_EVENT_ASSIGNMENT ] = "edit.svg", [Ntf_EVENT_ASSIGNMENT ] = "edit.svg",
[Ntf_EVENT_SURVEY ] = "poll.svg", [Ntf_EVENT_SURVEY ] = "poll.svg",
[Ntf_EVENT_EXAM_ANNOUNCEMENT] = "bullhorn.svg", [Ntf_EVENT_CALL_FOR_EXAM] = "bullhorn.svg",
/* Files tab */ /* Files tab */
[Ntf_EVENT_DOCUMENT_FILE ] = "file.svg", [Ntf_EVENT_DOCUMENT_FILE ] = "file.svg",
[Ntf_EVENT_TEACHERS_FILE ] = "file.svg", [Ntf_EVENT_TEACHERS_FILE ] = "file.svg",
@ -858,8 +858,8 @@ void Ntf_GetNotifSummaryAndContent (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
case Ntf_EVENT_ASSIGNMENT: case Ntf_EVENT_ASSIGNMENT:
Asg_GetNotifAssignment (SummaryStr,ContentStr,Cod,GetContent); Asg_GetNotifAssignment (SummaryStr,ContentStr,Cod,GetContent);
break; break;
case Ntf_EVENT_EXAM_ANNOUNCEMENT: case Ntf_EVENT_CALL_FOR_EXAM:
ExaAnn_GetSummaryAndContentExamAnn (SummaryStr,ContentStr,Cod,GetContent); Cfe_GetSummaryAndContentCallForExam (SummaryStr,ContentStr,Cod,GetContent);
break; break;
case Ntf_EVENT_MARKS_FILE: case Ntf_EVENT_MARKS_FILE:
Mrk_GetNotifMyMarks (SummaryStr,ContentStr,Cod,UsrCod,GetContent); Mrk_GetNotifMyMarks (SummaryStr,ContentStr,Cod,UsrCod,GetContent);
@ -1250,7 +1250,7 @@ unsigned Ntf_StoreNotifyEventsToAllUsrs (Ntf_NotifyEvent_t NotifyEvent,long Cod)
Cod,Cod,Gbl.Usrs.Me.UsrDat.UsrCod, Cod,Cod,Gbl.Usrs.Me.UsrDat.UsrCod,
Cod,Gbl.Usrs.Me.UsrDat.UsrCod); Cod,Gbl.Usrs.Me.UsrDat.UsrCod);
break; break;
case Ntf_EVENT_EXAM_ANNOUNCEMENT: case Ntf_EVENT_CALL_FOR_EXAM:
case Ntf_EVENT_NOTICE: case Ntf_EVENT_NOTICE:
NumRows = DB_QuerySELECT (&mysql_res,"can not get users" NumRows = DB_QuerySELECT (&mysql_res,"can not get users"
" to be notified", " to be notified",
@ -1708,7 +1708,7 @@ static void Ntf_SendPendingNotifByEMailToOneUsr (struct UsrData *ToUsrDat,unsign
case Ntf_EVENT_TEACHERS_FILE: case Ntf_EVENT_TEACHERS_FILE:
case Ntf_EVENT_SHARED_FILE: case Ntf_EVENT_SHARED_FILE:
case Ntf_EVENT_ASSIGNMENT: case Ntf_EVENT_ASSIGNMENT:
case Ntf_EVENT_EXAM_ANNOUNCEMENT: case Ntf_EVENT_CALL_FOR_EXAM:
case Ntf_EVENT_MARKS_FILE: case Ntf_EVENT_MARKS_FILE:
case Ntf_EVENT_ENROLMENT_STD: case Ntf_EVENT_ENROLMENT_STD:
case Ntf_EVENT_ENROLMENT_NET: case Ntf_EVENT_ENROLMENT_NET:

View File

@ -69,7 +69,7 @@ typedef enum // TODO: Change numbers (also in database)!!!!!!!!!!!!!!
/* Assessment tab */ /* Assessment tab */
Ntf_EVENT_ASSIGNMENT = 4, Ntf_EVENT_ASSIGNMENT = 4,
Ntf_EVENT_SURVEY = 19, Ntf_EVENT_SURVEY = 19,
Ntf_EVENT_EXAM_ANNOUNCEMENT = 5, Ntf_EVENT_CALL_FOR_EXAM = 5,
/* Files tab */ /* Files tab */
Ntf_EVENT_DOCUMENT_FILE = 1, Ntf_EVENT_DOCUMENT_FILE = 1,
Ntf_EVENT_TEACHERS_FILE = 2, Ntf_EVENT_TEACHERS_FILE = 2,

View File

@ -1761,48 +1761,6 @@ const char *Txt_Announcements =
"An&uacute;ncios"; "An&uacute;ncios";
#endif #endif
const char *Txt_Announcement_of_exam_removed =
#if L==1 // ca
"Convocat&ograve;ria d'examen eliminada.";
#elif L==2 // de
"Aufruf zur Pr&uuml;fung entfernt.";
#elif L==3 // en
"Announcement of exam removed.";
#elif L==4 // es
"Convocatoria de examen eliminada.";
#elif L==5 // fr
"Convocation pour l'examen supprim&eacute;.";
#elif L==6 // gn
"Convocatoria de examen eliminada."; // Okoteve traducción
#elif L==7 // it
"Appello d'esame rimosso.";
#elif L==8 // pl
"Ogloszenie egzamin usuniete.";
#elif L==9 // pt
"Chamada para exame removida.";
#endif
const char *Txt_Announcements_of_exams =
#if L==1 // ca
"Convocat&ograve;ries d'ex&agrave;mens";
#elif L==2 // de
"Aufrufe f&uuml;r Pr&uuml;fung";
#elif L==3 // en
"Announcements of exams";
#elif L==4 // es
"Convocatorias de ex&aacute;menes";
#elif L==5 // fr
"Convocations &agrave; examens";
#elif L==6 // gn
"Convocatorias de ex&aacute;menes"; // Okoteve traducción
#elif L==7 // it
"Appelli d'esame";
#elif L==8 // pl
"Ogloszenia egzamin&oacute;w";
#elif L==9 // pt
"Chamadas para exames";
#endif
const char *Txt_Another_building = const char *Txt_Another_building =
#if L==1 // ca #if L==1 // ca
"Un altre edifici"; "Un altre edifici";
@ -3492,6 +3450,321 @@ const char *Txt_Calendar =
"Calend&aacute;rio"; "Calend&aacute;rio";
#endif #endif
const char *Txt_CALL_FOR_EXAM =
#if L==1 // ca
"CONVOCAT&Ograve;RIA D'EXAMEN";
#elif L==2 // de
"PR&Uuml;FUNGSAUFRUF";
#elif L==3 // en
"CALL FOR EXAM";
#elif L==4 // es
"CONVOCATORIA DE EXAMEN";
#elif L==5 // fr
"CONVOCATION &Agrave; UN EXAMEN";
#elif L==6 // gn
"CONVOCATORIA DE EXAMEN"; // Okoteve traducción
#elif L==7 // it
"APPELLO D'ESAME";
#elif L==8 // pl
"OGLOSZENIE egzaminu";
#elif L==9 // pt
"CHAMADA DE EXAME";
#endif
const char *Txt_CALL_FOR_EXAM_Approximate_duration =
#if L==1 // ca
"Duraci&oacute;n aproximada"; // Necessita traduccio
#elif L==2 // de
"Voraussichtliche Dauer";
#elif L==3 // en
"Approximate duration";
#elif L==4 // es
"Duraci&oacute;n aproximada";
#elif L==5 // fr
"Dur&eacute;e approximative";
#elif L==6 // gn
"Duraci&oacute;n aproximada"; // Okoteve traducción
#elif L==7 // it
"Durata approssimativa";
#elif L==8 // pl
"Przyblizony czas trwania";
#elif L==9 // pt
"Dura&ccedil;&atilde;o aproximada";
#endif
const char *Txt_CALL_FOR_EXAM_Course =
#if L==1 // ca
"Assignatura";
#elif L==2 // de
"Kurs";
#elif L==3 // en
"Course";
#elif L==4 // es
"Asignatura";
#elif L==5 // fr
"Mati&egrave;re";
#elif L==6 // gn
"Mbo'esyry";
#elif L==7 // it
"Corso";
#elif L==8 // pl
"Kurs";
#elif L==9 // pt
"Disciplina";
#endif
const char *Txt_CALL_FOR_EXAM_Documentation_required =
#if L==1 // ca
"Documentaci&oacute;n exigida"; // Necessita traduccio
#elif L==2 // de
"Ausweis erforderlich";
#elif L==3 // en
"ID required";
#elif L==4 // es
"Documentaci&oacute;n exigida";
#elif L==5 // fr
"Pi&egrave;ce d'identité obligatoire";
#elif L==6 // gn
"Documentaci&oacute;n exigida"; // Okoteve traducción
#elif L==7 // it
"Documentazione richiesta";
#elif L==8 // pl
"ID wymagane";
#elif L==9 // pt
"Documenta&ccedil;&atilde;o necess&aacute;ria";
#endif
const char *Txt_CALL_FOR_EXAM_Exam_date =
#if L==1 // ca
"Fecha del examen"; // Necessita traduccio
#elif L==2 // de
"Pr&uuml;fungsdatum";
#elif L==3 // en
"Exam date";
#elif L==4 // es
"Fecha del examen";
#elif L==5 // fr
"Date de l'examen";
#elif L==6 // gn
"Fecha del examen"; // Okoteve traducción
#elif L==7 // it
"Data d'esame";
#elif L==8 // pl
"Termin egzaminu";
#elif L==9 // pt
"Exame data";
#endif
const char *Txt_CALL_FOR_EXAM_Material_allowed =
#if L==1 // ca
"Material permitido"; // Necessita traduccio
#elif L==2 // de
"Erlaubte Unterlagen";
#elif L==3 // en
"Material allowed";
#elif L==4 // es
"Material permitido";
#elif L==5 // fr
"Mat&eacute;riel autoris&eacute;";
#elif L==6 // gn
"Material permitido"; // Okoteve traducción
#elif L==7 // it
"Materiale permesso";
#elif L==8 // pl
"Material dozwolone";
#elif L==9 // pt
"Material autorizado";
#endif
const char *Txt_CALL_FOR_EXAM_Material_required =
#if L==1 // ca
"Material obligatorio"; // Necessita traduccio
#elif L==2 // de
"Erforderliche Unterlagen";
#elif L==3 // en
"Material required";
#elif L==4 // es
"Material obligatorio";
#elif L==5 // fr
"Mat&eacute;riel n&eacute;cessaire";
#elif L==6 // gn
"Material obligatorio"; // Okoteve traducción
#elif L==7 // it
"Materiale richiesto";
#elif L==8 // pl
"Materialy niezbedne do";
#elif L==9 // pt
"Material obrigat&oacute;rio";
#endif
const char *Txt_CALL_FOR_EXAM_Mode =
#if L==1 // ca
"Modalidad<br />(escrito, oral,&hellip;)"; // Necessita traduccio
#elif L==2 // de
"Pr&uuml;fungsart<br />(schriftlich, m&uuml;ndlich,&hellip;)";
#elif L==3 // en
"Mode<br />(written, oral,&hellip;)";
#elif L==4 // es
"Modalidad<br />(escrito, oral,&hellip;)";
#elif L==5 // fr
"Mode<br />(&eacute;crit, oral,&hellip;)";
#elif L==6 // gn
"Modalidad<br />(escrito, oral,&hellip;)"; // Okoteve traducción
#elif L==7 // it
"Modalit&agrave;<br />(scritto, orale,&hellip;)";
#elif L==8 // pl
"Tryb<br />(pisemnej, ustnej,&hellip;)";
#elif L==9 // pt
"Modalidade<br />(escrita, oral,&hellip;)";
#endif
const char *Txt_CALL_FOR_EXAM_Other_information =
#if L==1 // ca
"Otras indicaciones"; // Necessita traduccio
#elif L==2 // de
"Weitere Informationen";
#elif L==3 // en
"Other information";
#elif L==4 // es
"Otras indicaciones";
#elif L==5 // fr
"Autres informations";
#elif L==6 // gn
"Otras indicaciones"; // Okoteve traducción
#elif L==7 // it
"Altre informazioni";
#elif L==8 // pl
"Inne informacje";
#elif L==9 // pt
"Outras informa&ccedil;&otilde;es";
#endif
const char *Txt_CALL_FOR_EXAM_Place_of_exam =
#if L==1 // ca
"Lugar de realizaci&oacute;n"; // Necessita traduccio
#elif L==2 // de
"Pr&uuml;fungsort";
#elif L==3 // en
"Place of exam";
#elif L==4 // es
"Lugar de realizaci&oacute;n";
#elif L==5 // fr
"Lieu de l'examen";
#elif L==6 // gn
"Lugar de realizaci&oacute;n"; // Okoteve traducción
#elif L==7 // it
"Luogo d'esame";
#elif L==8 // pl
"Miejsce egzaminu";
#elif L==9 // pt
"Local do exame";
#endif
const char *Txt_CALL_FOR_EXAM_Session =
#if L==1 // ca
"Convocatoria<br />(junio, septiembre,&hellip;)"; // Necessita traduccio
#elif L==2 // de
"Einberufung<br />(Juni, September,&hellip;)";
#elif L==3 // en
"Session<br />(june, september,&hellip;)";
#elif L==4 // es
"Convocatoria<br />(junio, septiembre,&hellip;)";
#elif L==5 // fr
"P&eacute;riode<br />(juin, septembre,&hellip;)";
#elif L==6 // gn
"Convocatoria<br />(junio, septiembre,&hellip;)"; // Okoteve traducción
#elif L==7 // it
"Sessione<br />(giugno, settembre,&hellip;)";
#elif L==8 // pl
"Sesja<br />(czerwiec, wrzesien,&hellip;)";
#elif L==9 // pt
"Per&iacute;odo<br />(junho, setembro,&hellip;)";
#endif
const char *Txt_CALL_FOR_EXAM_Start_time =
#if L==1 // ca
"Hora de inicio"; // Necessita traduccio
#elif L==2 // de
"Beginn um";
#elif L==3 // en
"Start time";
#elif L==4 // es
"Hora de inicio";
#elif L==5 // fr
"Heure de d&eacute;but";
#elif L==6 // gn
"Hora de inicio"; // Okoteve traducción
#elif L==7 // it
"Ora d'inizio";
#elif L==8 // pl
"Czas rozpoczecia";
#elif L==9 // pt
"Hora de in&iacute;cio";
#endif
const char *Txt_CALL_FOR_EXAM_Structure_of_the_exam =
#if L==1 // ca
"Estructura del examen"; // Necessita traduccio
#elif L==2 // de
"Pr&uuml;fungsstruktur";
#elif L==3 // en
"Structure of the exam";
#elif L==4 // es
"Estructura del examen";
#elif L==5 // fr
"Structure de l'examen";
#elif L==6 // gn
"Estructura del examen"; // Okoteve traducción
#elif L==7 // it
"Struttura d'esame";
#elif L==8 // pl
"Struktura egzaminu";
#elif L==9 // pt
"Estrutura do exame";
#endif
const char *Txt_CALL_FOR_EXAM_Year_or_semester = // 1, 2, 3..., not 1984, 2038...
#if L==1 // ca
"Any o semestre";
#elif L==2 // de
"Jahr oder Semester";
#elif L==3 // en
"Year or semester";
#elif L==4 // es
"A&ntilde;o o semestre";
#elif L==5 // fr
"Ann&eacute;e ou semestre";
#elif L==6 // gn
"A&ntilde;o o semestre"; // Okoteve traducción
#elif L==7 // it
"Anno o semestre";
#elif L==8 // pl
"Rok lub semestr";
#elif L==9 // pt
"Ano ou semestre";
#endif
const char *Txt_Call_for_exam_removed =
#if L==1 // ca
"Convocat&ograve;ria d'examen eliminada.";
#elif L==2 // de
"Aufruf zur Pr&uuml;fung entfernt.";
#elif L==3 // en
"Call for exam removed.";
#elif L==4 // es
"Convocatoria de examen eliminada.";
#elif L==5 // fr
"Convocation pour l'examen supprim&eacute;.";
#elif L==6 // gn
"Convocatoria de examen eliminada."; // Okoteve traducción
#elif L==7 // it
"Appello d'esame rimosso.";
#elif L==8 // pl
"Ogloszenie egzamin usuniete.";
#elif L==9 // pt
"Chamada para exame removida.";
#endif
const char *Txt_Call_the_roll = const char *Txt_Call_the_roll =
#if L==1 // ca #if L==1 // ca
"Passar llista"; "Passar llista";
@ -3513,6 +3786,27 @@ const char *Txt_Call_the_roll =
"Lista de presen&ccedil;a"; "Lista de presen&ccedil;a";
#endif #endif
const char *Txt_Calls_for_exams =
#if L==1 // ca
"Convocat&ograve;ries d'ex&agrave;mens";
#elif L==2 // de
"Aufrufe f&uuml;r Pr&uuml;fung";
#elif L==3 // en
"Calls for exams";
#elif L==4 // es
"Convocatorias de ex&aacute;menes";
#elif L==5 // fr
"Convocations &agrave; examens";
#elif L==6 // gn
"Convocatorias de ex&aacute;menes"; // Okoteve traducción
#elif L==7 // it
"Appelli d'esame";
#elif L==8 // pl
"Ogloszenia egzamin&oacute;w";
#elif L==9 // pt
"Chamadas para exames";
#endif
const char *Txt_Can_not_create_the_folder_X_because_it_would_exceed_the_disk_quota = // Warning: it is very important to include %s in the following sentences const char *Txt_Can_not_create_the_folder_X_because_it_would_exceed_the_disk_quota = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca #if L==1 // ca
"No s'ha creat la carpeta <strong>%s</strong>" "No s'ha creat la carpeta <strong>%s</strong>"
@ -5094,7 +5388,6 @@ const char *Txt_Could_not_detect_any_face_in_front_position_ =
"N&atilde;o foi poss&iacute;vel detectar nenhum rosto na posi&ccedil;&atilde;o frontal."; "N&atilde;o foi poss&iacute;vel detectar nenhum rosto na posi&ccedil;&atilde;o frontal.";
#endif #endif
const char *Txt_Countdown = const char *Txt_Countdown =
#if L==1 // ca #if L==1 // ca
"Compte enrere"; "Compte enrere";
@ -6553,27 +6846,6 @@ const char *Txt_Create_ZIP_file =
"Criar arquivo ZIP"; "Criar arquivo ZIP";
#endif #endif
const char *Txt_Created_new_announcement_of_exam =
#if L==1 // ca
"Creada nueva convocatoria de examen."; // Necessita traduccio
#elif L==2 // de
"Neuer Aufruf zur Pr&uuml;fung erstellt.";
#elif L==3 // en
"Created new announcement of exam.";
#elif L==4 // es
"Creada nueva convocatoria de examen.";
#elif L==5 // fr
"Cr&eacute;&eacute; nouvelle convocation &agrave; un examen.";
#elif L==6 // gn
"Creada nueva convocatoria de examen."; // Okoteve traducción
#elif L==7 // it
"Creato nuovo appello d'esame.";
#elif L==8 // pl
"Utworzono nowe ogloszenie egzamin.";
#elif L==9 // pt
"Criado nova chamada para exame.";
#endif
const char *Txt_Created_new_assignment_X = // Warning: it is very important to include %s in the following sentences const char *Txt_Created_new_assignment_X = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca #if L==1 // ca
"Creada nova activitat <strong>%s</strong>."; "Creada nova activitat <strong>%s</strong>.";
@ -6637,6 +6909,27 @@ const char *Txt_Created_new_building_X = // Warning: it is very important to inc
"Criado novo edif&iacute;cio <strong>%s</strong>."; "Criado novo edif&iacute;cio <strong>%s</strong>.";
#endif #endif
const char *Txt_Created_new_call_for_exam =
#if L==1 // ca
"Creada nueva convocatoria de examen."; // Necessita traduccio
#elif L==2 // de
"Neuer Aufruf zur Pr&uuml;fung erstellt.";
#elif L==3 // en
"Created new call for exam.";
#elif L==4 // es
"Creada nueva convocatoria de examen.";
#elif L==5 // fr
"Cr&eacute;&eacute; nouvelle convocation &agrave; un examen.";
#elif L==6 // gn
"Creada nueva convocatoria de examen."; // Okoteve traducción
#elif L==7 // it
"Creato nuovo appello d'esame.";
#elif L==8 // pl
"Utworzono nowe ogloszenie egzamin.";
#elif L==9 // pt
"Criado nova chamada para exame.";
#endif
const char *Txt_Created_new_center_X = // Warning: it is very important to include %s in the following sentences const char *Txt_Created_new_center_X = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca #if L==1 // ca
"Creat nou center <strong>%s</strong>."; // Necessita traduccio "Creat nou center <strong>%s</strong>."; // Necessita traduccio
@ -9248,13 +9541,13 @@ const char *Txt_Do_you_really_want_to_remove_the_folder_X = // Warning: it is ve
" o diret&oacute;rio <strong>%s</strong> e todo o seu conte&uacute;do?"; " o diret&oacute;rio <strong>%s</strong> e todo o seu conte&uacute;do?";
#endif #endif
const char *Txt_Do_you_really_want_to_remove_the_following_announcement_of_exam = const char *Txt_Do_you_really_want_to_remove_the_following_call_for_exam =
#if L==1 // ca #if L==1 // ca
"De veres voleu eliminar la seg&uuml;ent convocat&ograve;ria d'examen?"; "De veres voleu eliminar la seg&uuml;ent convocat&ograve;ria d'examen?";
#elif L==2 // de #elif L==2 // de
"Wollen Sie wirklich, um die folgende Aufruf f&uuml;r Pr&uuml;fung?"; "Wollen Sie wirklich, um die folgende Aufruf f&uuml;r Pr&uuml;fung?";
#elif L==3 // en #elif L==3 // en
"Do you really want to remove the following announcement of exam?"; "Do you really want to remove the following call for exam?";
#elif L==4 // es #elif L==4 // es
"&iquest;Realmente desea eliminar la siguiente convocatoria de examen?"; "&iquest;Realmente desea eliminar la siguiente convocatoria de examen?";
#elif L==5 // fr #elif L==5 // fr
@ -11731,300 +12024,6 @@ const char *Txt_Exam =
"Exame"; "Exame";
#endif #endif
const char *Txt_EXAM_ANNOUNCEMENT =
#if L==1 // ca
"CONVOCAT&Ograve;RIA D'EXAMEN";
#elif L==2 // de
"PR&Uuml;FUNGSAUFRUF";
#elif L==3 // en
"ANNOUNCEMENT OF EXAM";
#elif L==4 // es
"CONVOCATORIA DE EXAMEN";
#elif L==5 // fr
"CONVOCATION &Agrave; UN EXAMEN";
#elif L==6 // gn
"CONVOCATORIA DE EXAMEN"; // Okoteve traducción
#elif L==7 // it
"APPELLO D'ESAME";
#elif L==8 // pl
"OGLOSZENIE egzaminu";
#elif L==9 // pt
"CHAMADA DE EXAME";
#endif
const char *Txt_EXAM_ANNOUNCEMENT_Approximate_duration =
#if L==1 // ca
"Duraci&oacute;n aproximada"; // Necessita traduccio
#elif L==2 // de
"Voraussichtliche Dauer";
#elif L==3 // en
"Approximate duration";
#elif L==4 // es
"Duraci&oacute;n aproximada";
#elif L==5 // fr
"Dur&eacute;e approximative";
#elif L==6 // gn
"Duraci&oacute;n aproximada"; // Okoteve traducción
#elif L==7 // it
"Durata approssimativa";
#elif L==8 // pl
"Przyblizony czas trwania";
#elif L==9 // pt
"Dura&ccedil;&atilde;o aproximada";
#endif
const char *Txt_EXAM_ANNOUNCEMENT_Course =
#if L==1 // ca
"Assignatura";
#elif L==2 // de
"Kurs";
#elif L==3 // en
"Course";
#elif L==4 // es
"Asignatura";
#elif L==5 // fr
"Mati&egrave;re";
#elif L==6 // gn
"Mbo'esyry";
#elif L==7 // it
"Corso";
#elif L==8 // pl
"Kurs";
#elif L==9 // pt
"Disciplina";
#endif
const char *Txt_EXAM_ANNOUNCEMENT_Documentation_required =
#if L==1 // ca
"Documentaci&oacute;n exigida"; // Necessita traduccio
#elif L==2 // de
"Ausweis erforderlich";
#elif L==3 // en
"ID required";
#elif L==4 // es
"Documentaci&oacute;n exigida";
#elif L==5 // fr
"Pi&egrave;ce d'identité obligatoire";
#elif L==6 // gn
"Documentaci&oacute;n exigida"; // Okoteve traducción
#elif L==7 // it
"Documentazione richiesta";
#elif L==8 // pl
"ID wymagane";
#elif L==9 // pt
"Documenta&ccedil;&atilde;o necess&aacute;ria";
#endif
const char *Txt_EXAM_ANNOUNCEMENT_Exam_date =
#if L==1 // ca
"Fecha del examen"; // Necessita traduccio
#elif L==2 // de
"Pr&uuml;fungsdatum";
#elif L==3 // en
"Exam date";
#elif L==4 // es
"Fecha del examen";
#elif L==5 // fr
"Date de l'examen";
#elif L==6 // gn
"Fecha del examen"; // Okoteve traducción
#elif L==7 // it
"Data d'esame";
#elif L==8 // pl
"Termin egzaminu";
#elif L==9 // pt
"Exame data";
#endif
const char *Txt_EXAM_ANNOUNCEMENT_Material_allowed =
#if L==1 // ca
"Material permitido"; // Necessita traduccio
#elif L==2 // de
"Erlaubte Unterlagen";
#elif L==3 // en
"Material allowed";
#elif L==4 // es
"Material permitido";
#elif L==5 // fr
"Mat&eacute;riel autoris&eacute;";
#elif L==6 // gn
"Material permitido"; // Okoteve traducción
#elif L==7 // it
"Materiale permesso";
#elif L==8 // pl
"Material dozwolone";
#elif L==9 // pt
"Material autorizado";
#endif
const char *Txt_EXAM_ANNOUNCEMENT_Material_required =
#if L==1 // ca
"Material obligatorio"; // Necessita traduccio
#elif L==2 // de
"Erforderliche Unterlagen";
#elif L==3 // en
"Material required";
#elif L==4 // es
"Material obligatorio";
#elif L==5 // fr
"Mat&eacute;riel n&eacute;cessaire";
#elif L==6 // gn
"Material obligatorio"; // Okoteve traducción
#elif L==7 // it
"Materiale richiesto";
#elif L==8 // pl
"Materialy niezbedne do";
#elif L==9 // pt
"Material obrigat&oacute;rio";
#endif
const char *Txt_EXAM_ANNOUNCEMENT_Mode =
#if L==1 // ca
"Modalidad<br />(escrito, oral,&hellip;)"; // Necessita traduccio
#elif L==2 // de
"Pr&uuml;fungsart<br />(schriftlich, m&uuml;ndlich,&hellip;)";
#elif L==3 // en
"Mode<br />(written, oral,&hellip;)";
#elif L==4 // es
"Modalidad<br />(escrito, oral,&hellip;)";
#elif L==5 // fr
"Mode<br />(&eacute;crit, oral,&hellip;)";
#elif L==6 // gn
"Modalidad<br />(escrito, oral,&hellip;)"; // Okoteve traducción
#elif L==7 // it
"Modalit&agrave;<br />(scritto, orale,&hellip;)";
#elif L==8 // pl
"Tryb<br />(pisemnej, ustnej,&hellip;)";
#elif L==9 // pt
"Modalidade<br />(escrita, oral,&hellip;)";
#endif
const char *Txt_EXAM_ANNOUNCEMENT_Other_information =
#if L==1 // ca
"Otras indicaciones"; // Necessita traduccio
#elif L==2 // de
"Weitere Informationen";
#elif L==3 // en
"Other information";
#elif L==4 // es
"Otras indicaciones";
#elif L==5 // fr
"Autres informations";
#elif L==6 // gn
"Otras indicaciones"; // Okoteve traducción
#elif L==7 // it
"Altre informazioni";
#elif L==8 // pl
"Inne informacje";
#elif L==9 // pt
"Outras informa&ccedil;&otilde;es";
#endif
const char *Txt_EXAM_ANNOUNCEMENT_Place_of_exam =
#if L==1 // ca
"Lugar de realizaci&oacute;n"; // Necessita traduccio
#elif L==2 // de
"Pr&uuml;fungsort";
#elif L==3 // en
"Place of exam";
#elif L==4 // es
"Lugar de realizaci&oacute;n";
#elif L==5 // fr
"Lieu de l'examen";
#elif L==6 // gn
"Lugar de realizaci&oacute;n"; // Okoteve traducción
#elif L==7 // it
"Luogo d'esame";
#elif L==8 // pl
"Miejsce egzaminu";
#elif L==9 // pt
"Local do exame";
#endif
const char *Txt_EXAM_ANNOUNCEMENT_Session =
#if L==1 // ca
"Convocatoria<br />(junio, septiembre,&hellip;)"; // Necessita traduccio
#elif L==2 // de
"Einberufung<br />(Juni, September,&hellip;)";
#elif L==3 // en
"Session<br />(june, september,&hellip;)";
#elif L==4 // es
"Convocatoria<br />(junio, septiembre,&hellip;)";
#elif L==5 // fr
"P&eacute;riode<br />(juin, septembre,&hellip;)";
#elif L==6 // gn
"Convocatoria<br />(junio, septiembre,&hellip;)"; // Okoteve traducción
#elif L==7 // it
"Sessione<br />(giugno, settembre,&hellip;)";
#elif L==8 // pl
"Sesja<br />(czerwiec, wrzesien,&hellip;)";
#elif L==9 // pt
"Per&iacute;odo<br />(junho, setembro,&hellip;)";
#endif
const char *Txt_EXAM_ANNOUNCEMENT_Start_time =
#if L==1 // ca
"Hora de inicio"; // Necessita traduccio
#elif L==2 // de
"Beginn um";
#elif L==3 // en
"Start time";
#elif L==4 // es
"Hora de inicio";
#elif L==5 // fr
"Heure de d&eacute;but";
#elif L==6 // gn
"Hora de inicio"; // Okoteve traducción
#elif L==7 // it
"Ora d'inizio";
#elif L==8 // pl
"Czas rozpoczecia";
#elif L==9 // pt
"Hora de in&iacute;cio";
#endif
const char *Txt_EXAM_ANNOUNCEMENT_Structure_of_the_exam =
#if L==1 // ca
"Estructura del examen"; // Necessita traduccio
#elif L==2 // de
"Pr&uuml;fungsstruktur";
#elif L==3 // en
"Structure of the exam";
#elif L==4 // es
"Estructura del examen";
#elif L==5 // fr
"Structure de l'examen";
#elif L==6 // gn
"Estructura del examen"; // Okoteve traducción
#elif L==7 // it
"Struttura d'esame";
#elif L==8 // pl
"Struktura egzaminu";
#elif L==9 // pt
"Estrutura do exame";
#endif
const char *Txt_EXAM_ANNOUNCEMENT_Year_or_semester = // 1, 2, 3..., not 1984, 2038...
#if L==1 // ca
"Any o semestre";
#elif L==2 // de
"Jahr oder Semester";
#elif L==3 // en
"Year or semester";
#elif L==4 // es
"A&ntilde;o o semestre";
#elif L==5 // fr
"Ann&eacute;e ou semestre";
#elif L==6 // gn
"A&ntilde;o o semestre"; // Okoteve traducción
#elif L==7 // it
"Anno o semestre";
#elif L==8 // pl
"Rok lub semestr";
#elif L==9 // pt
"Ano ou semestre";
#endif
const char *Txt_EXAM_LOG_ACTIONS[ExaLog_NUM_ACTIONS] = const char *Txt_EXAM_LOG_ACTIONS[ExaLog_NUM_ACTIONS] =
{ {
[ExaLog_UNKNOWN_ACTION] = [ExaLog_UNKNOWN_ACTION] =
@ -18567,13 +18566,13 @@ const char *Txt_Link_X_removed = // Warning: it is very important to include %s
"Liga&ccedil;&atilde;o <strong>%s</strong> removida."; "Liga&ccedil;&atilde;o <strong>%s</strong> removida.";
#endif #endif
const char *Txt_Link_to_announcement_of_exam = const char *Txt_Link_to_call_for_exam =
#if L==1 // ca #if L==1 // ca
"Enlla&ccedil; a convocat&ograve;ria d'examen"; "Enlla&ccedil; a convocat&ograve;ria d'examen";
#elif L==2 // de #elif L==2 // de
"Link zu Aufruf f&uuml;r Pr&uuml;fung"; "Link zu Aufruf f&uuml;r Pr&uuml;fung";
#elif L==3 // en #elif L==3 // en
"Link to announcement of exam"; "Link to call for exam";
#elif L==4 // es #elif L==4 // es
"Enlace a convocatoria de examen"; "Enlace a convocatoria de examen";
#elif L==5 // fr #elif L==5 // fr
@ -22282,7 +22281,7 @@ const char *Txt_MENU_SUBTITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
#elif L==2 // de #elif L==2 // de
"Pr&uuml;fungsaufruf" "Pr&uuml;fungsaufruf"
#elif L==3 // en #elif L==3 // en
"Announcements of exams" "Calls for exams"
#elif L==4 // es #elif L==4 // es
"Listado de convocatorias de ex&aacute;menes de esta asignatura" "Listado de convocatorias de ex&aacute;menes de esta asignatura"
#elif L==5 // fr #elif L==5 // fr
@ -25124,7 +25123,7 @@ const char *Txt_New_announcement =
"Novo an&uacute;ncio"; "Novo an&uacute;ncio";
#endif #endif
const char *Txt_New_announcement_OF_EXAM = const char *Txt_New_call_FOR_EXAM =
#if L==1 // ca #if L==1 // ca
"Nova convocat&ograve;ria"; "Nova convocat&ograve;ria";
#elif L==2 // de #elif L==2 // de
@ -26153,27 +26152,6 @@ const char *Txt_No_announcements =
"N&atilde;o h&aacute; an&uacute;ncios"; "N&atilde;o h&aacute; an&uacute;ncios";
#endif #endif
const char *Txt_No_announcements_of_exams_of_X = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"No hay convocatorias de examen de <strong>%s</strong>."; // Necessita traduccio
#elif L==2 // de
"Keine Aufrufe f&uuml;r Pr&uuml;fung von <strong>%s</strong>.";
#elif L==3 // en
"No announcements of exams of <strong>%s</strong>.";
#elif L==4 // es
"No hay convocatorias de examen de <strong>%s</strong>.";
#elif L==5 // fr
"Aucune convocation &agrave; un examen de <strong>%s</strong>.";
#elif L==6 // gn
"No hay convocatorias de examen de <strong>%s</strong>."; // Okoteve traducción
#elif L==7 // it
"Nessun appello d'esame di <strong>%s</strong>.";
#elif L==8 // pl
"Brak ogloszen egzamin&oacute;w <strong>%s</strong>.";
#elif L==9 // pt
"N&atilde;o chamadas para exame de <strong>%s</strong>.";
#endif
const char *Txt_No_assigned_building = const char *Txt_No_assigned_building =
#if L==1 // ca #if L==1 // ca
"Sense edifici assignat"; "Sense edifici assignat";
@ -26258,6 +26236,27 @@ const char *Txt_No_banners =
"N&atilde;o h&aacute; banners."; "N&atilde;o h&aacute; banners.";
#endif #endif
const char *Txt_No_calls_for_exams_of_X = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"No hay convocatorias de examen de <strong>%s</strong>."; // Necessita traduccio
#elif L==2 // de
"Keine Aufrufe f&uuml;r Pr&uuml;fung von <strong>%s</strong>.";
#elif L==3 // en
"No calls for exams of <strong>%s</strong>.";
#elif L==4 // es
"No hay convocatorias de examen de <strong>%s</strong>.";
#elif L==5 // fr
"Aucune convocation &agrave; un examen de <strong>%s</strong>.";
#elif L==6 // gn
"No hay convocatorias de examen de <strong>%s</strong>."; // Okoteve traducción
#elif L==7 // it
"Nessun appello d'esame di <strong>%s</strong>.";
#elif L==8 // pl
"Brak ogloszen egzamin&oacute;w <strong>%s</strong>.";
#elif L==9 // pt
"N&atilde;o chamadas para exame de <strong>%s</strong>.";
#endif
const char *Txt_no_course_of_origin = // Means: "message sent from any course" const char *Txt_no_course_of_origin = // Means: "message sent from any course"
#if L==1 // ca #if L==1 // ca
"sin asignatura de origen"; // Necessita traduccio "sin asignatura de origen"; // Necessita traduccio
@ -27793,13 +27792,13 @@ const char *Txt_NOTIFY_EVENTS_PLURAL[Ntf_NUM_NOTIFY_EVENTS] =
"Novas atividades" "Novas atividades"
#endif #endif
, ,
[Ntf_EVENT_EXAM_ANNOUNCEMENT] = [Ntf_EVENT_CALL_FOR_EXAM] =
#if L==1 // ca #if L==1 // ca
"Noves convocat&ograve;ries d'examen" "Noves convocat&ograve;ries d'examen"
#elif L==2 // de #elif L==2 // de
"Neue Aufrufe f&uuml;r Pr&uuml;fung" "Neue Aufrufe f&uuml;r Pr&uuml;fung"
#elif L==3 // en #elif L==3 // en
"New announcements of exam" "New calls for exam"
#elif L==4 // es #elif L==4 // es
"Nuevas convocatorias de examen" "Nuevas convocatorias de examen"
#elif L==5 // fr #elif L==5 // fr
@ -28237,13 +28236,13 @@ const char *Txt_NOTIFY_EVENTS_SINGULAR[Ntf_NUM_NOTIFY_EVENTS] =
"Atividade" "Atividade"
#endif #endif
, ,
[Ntf_EVENT_EXAM_ANNOUNCEMENT] = [Ntf_EVENT_CALL_FOR_EXAM] =
#if L==1 // ca #if L==1 // ca
"Convocat&ograve;ria d'examen" "Convocat&ograve;ria d'examen"
#elif L==2 // de #elif L==2 // de
"Aufrufe für Pr&uuml;fung" "Aufrufe für Pr&uuml;fung"
#elif L==3 // en #elif L==3 // en
"Announcement of exam" "Call for exam"
#elif L==4 // es #elif L==4 // es
"Convocatoria de examen" "Convocatoria de examen"
#elif L==5 // fr #elif L==5 // fr
@ -32851,13 +32850,13 @@ const char *Txt_Public_views =
"Acessos p&uacute;blicos"; "Acessos p&uacute;blicos";
#endif #endif
const char *Txt_Publish_announcement_OF_EXAM = const char *Txt_Publish_call_FOR_EXAM =
#if L==1 // ca #if L==1 // ca
"Publicar convocat&ograve;ria"; "Publicar convocat&ograve;ria";
#elif L==2 // de #elif L==2 // de
"Ver&ouml;ffentlichen Aufruf"; "Ver&ouml;ffentlichen Aufruf";
#elif L==3 // en #elif L==3 // en
"Publish announcement"; "Publish call";
#elif L==4 // es #elif L==4 // es
"Publicar convocatoria"; "Publicar convocatoria";
#elif L==5 // fr #elif L==5 // fr
@ -46252,27 +46251,6 @@ const char *Txt_The_alphabetical_code_X_is_not_correct = // Warning: it is very
"O c&oacute;digo alfab&eacute;tico ISO 3166-1 %s n&atilde;o est&aacute; correto."; "O c&oacute;digo alfab&eacute;tico ISO 3166-1 %s n&atilde;o est&aacute; correto.";
#endif #endif
const char *Txt_The_announcement_of_exam_has_been_successfully_updated =
#if L==1 // ca
"La convocat&ograve;ria d'examen s'ha actualitzat correctament.";
#elif L==2 // de
"Der Aufruf zur Pr&uuml;fung wurde erfolgreich aktualisiert.";
#elif L==3 // en
"The announcement of exam has been successfully updated.";
#elif L==4 // es
"La convocatoria de examen se ha actualizado correctamente.";
#elif L==5 // fr
"La convocation pour l'examen a &eacute;t&eacute; mis &agrave; jour avec succ&egrave;s.";
#elif L==6 // gn
"La convocatoria de examen se ha actualizado correctamente."; // Okoteve traducción
#elif L==7 // it
"L'apello d'esame &egrave; stata aggiornata con successo.";
#elif L==8 // pl
"Ogloszenie egzamin zosta&lstrok; pomy&sacute;lnie zaktualizowany.";
#elif L==9 // pt
"A chamada para exame foi atualizada com sucesso.";
#endif
const char *Txt_The_answers_of_the_question_with_code_X_will_appear_shuffled = // Warning: it is very important to include %ld in the following sentences const char *Txt_The_answers_of_the_question_with_code_X_will_appear_shuffled = // Warning: it is very important to include %ld in the following sentences
#if L==1 // ca #if L==1 // ca
"Las respuestas de la pregunta con c&oacute;digo <strong>%ld</strong>" "Las respuestas de la pregunta con c&oacute;digo <strong>%ld</strong>"
@ -46480,6 +46458,27 @@ const char *Txt_The_building_of_room_X_is_now_Y = // Warning: it is very importa
"O edif&iacute;cio da sala <strong>%s</strong> &eacute; agora <strong>%s</strong>."; "O edif&iacute;cio da sala <strong>%s</strong> &eacute; agora <strong>%s</strong>.";
#endif #endif
const char *Txt_The_call_for_exam_has_been_successfully_updated =
#if L==1 // ca
"La convocat&ograve;ria d'examen s'ha actualitzat correctament.";
#elif L==2 // de
"Der Aufruf zur Pr&uuml;fung wurde erfolgreich aktualisiert.";
#elif L==3 // en
"The call for exam has been successfully updated.";
#elif L==4 // es
"La convocatoria de examen se ha actualizado correctamente.";
#elif L==5 // fr
"La convocation pour l'examen a &eacute;t&eacute; mis &agrave; jour avec succ&egrave;s.";
#elif L==6 // gn
"La convocatoria de examen se ha actualizado correctamente."; // Okoteve traducción
#elif L==7 // it
"L'apello d'esame &egrave; stata aggiornata con successo.";
#elif L==8 // pl
"Ogloszenie egzamin zosta&lstrok; pomy&sacute;lnie zaktualizowany.";
#elif L==9 // pt
"A chamada para exame foi atualizada com sucesso.";
#endif
const char *Txt_The_capacity_of_room_X_has_not_changed = // Warning: it is very important to include %s in the following sentences const char *Txt_The_capacity_of_room_X_has_not_changed = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca #if L==1 // ca
"L'aforament de la sala <strong>%s</strong> no ha canviat."; "L'aforament de la sala <strong>%s</strong> no ha canviat.";
@ -52779,13 +52778,13 @@ const char *Txt_TIMELINE_NOTE[TL_NOT_NUM_NOTE_TYPES] =
"Arquivo compartilhado p&uacute;blico (disciplina)" "Arquivo compartilhado p&uacute;blico (disciplina)"
#endif #endif
, ,
[TL_NOTE_EXAM_ANNOUNCEMENT] = [TL_NOTE_CALL_FOR_EXAM] =
#if L==1 // ca #if L==1 // ca
"Convocat&ograve;ria d'examen" "Convocat&ograve;ria d'examen"
#elif L==2 // de #elif L==2 // de
"Aufrufe für Pr&uuml;fung" "Aufrufe für Pr&uuml;fung"
#elif L==3 // en #elif L==3 // en
"Announcement of exam" "Call for exam"
#elif L==4 // es #elif L==4 // es
"Convocatoria de examen" "Convocatoria de examen"
#elif L==5 // fr #elif L==5 // fr

View File

@ -9556,7 +9556,7 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"Download file from the assessment zone of a project" // Precisa de tradução "Download file from the assessment zone of a project" // Precisa de tradução
#endif #endif
, ,
[ActSeeOneExaAnn] = [ActSeeOneCfe] =
#if L==1 // ca #if L==1 // ca
"See one exam announcement" // Necessita traducció "See one exam announcement" // Necessita traducció
#elif L==2 // de #elif L==2 // de
@ -9577,7 +9577,7 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"See one exam announcement" // Precisa de tradução "See one exam announcement" // Precisa de tradução
#endif #endif
, ,
[ActSeeDatExaAnn] = [ActSeeDatCfe] =
#if L==1 // ca #if L==1 // ca
"See exam announcements of a given date" // Necessita traducció "See exam announcements of a given date" // Necessita traducció
#elif L==2 // de #elif L==2 // de
@ -9598,7 +9598,7 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"See exam announcements of a given date" // Precisa de tradução "See exam announcements of a given date" // Precisa de tradução
#endif #endif
, ,
[ActEdiExaAnn] = [ActEdiCfe] =
#if L==1 // ca #if L==1 // ca
"Edit an exam announcement" // Necessita traducció "Edit an exam announcement" // Necessita traducció
#elif L==2 // de #elif L==2 // de
@ -9619,7 +9619,7 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"Edit an exam announcement" // Precisa de tradução "Edit an exam announcement" // Precisa de tradução
#endif #endif
, ,
[ActRcvExaAnn] = [ActRcvCfe] =
#if L==1 // ca #if L==1 // ca
"Send an exam announcement" // Necessita traducció "Send an exam announcement" // Necessita traducció
#elif L==2 // de #elif L==2 // de
@ -9640,7 +9640,7 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"Send an exam announcement" // Precisa de tradução "Send an exam announcement" // Precisa de tradução
#endif #endif
, ,
[ActPrnExaAnn] = [ActPrnCfe] =
#if L==1 // ca #if L==1 // ca
"See an exam announcement ready to be printed" // Necessita traducció "See an exam announcement ready to be printed" // Necessita traducció
#elif L==2 // de #elif L==2 // de
@ -9661,7 +9661,7 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"See an exam announcement ready to be printed" // Precisa de tradução "See an exam announcement ready to be printed" // Precisa de tradução
#endif #endif
, ,
[ActReqRemExaAnn] = [ActReqRemCfe] =
#if L==1 // ca #if L==1 // ca
"Request removal of an exam announcement" // Necessita traducció "Request removal of an exam announcement" // Necessita traducció
#elif L==2 // de #elif L==2 // de
@ -9682,7 +9682,7 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"Request removal of an exam announcement" // Precisa de tradução "Request removal of an exam announcement" // Precisa de tradução
#endif #endif
, ,
[ActRemExaAnn] = [ActRemCfe] =
#if L==1 // ca #if L==1 // ca
"Remove exam announcement" // Necessita traducció "Remove exam announcement" // Necessita traducció
#elif L==2 // de #elif L==2 // de
@ -9703,7 +9703,7 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"Remove exam announcement" // Precisa de tradução "Remove exam announcement" // Precisa de tradução
#endif #endif
, ,
[ActHidExaAnn] = [ActHidCfe] =
#if L==1 // ca #if L==1 // ca
"Hide exam announcement" // Necessita traducció "Hide exam announcement" // Necessita traducció
#elif L==2 // de #elif L==2 // de
@ -9724,7 +9724,7 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"Hide exam announcement" // Precisa de tradução "Hide exam announcement" // Precisa de tradução
#endif #endif
, ,
[ActUnhExaAnn] = [ActUnhCfe] =
#if L==1 // ca #if L==1 // ca
"Unhide exam announcement" // Necessita traducció "Unhide exam announcement" // Necessita traducció
#elif L==2 // de #elif L==2 // de

View File

@ -469,12 +469,12 @@ const char *Txt_NOTIFY_EVENTS_SINGULAR_NO_HTML[Ntf_NUM_NOTIFY_EVENTS][1 + Lan_NU
[Lan_LANGUAGE_PL ] = "Nowe zadania", [Lan_LANGUAGE_PL ] = "Nowe zadania",
[Lan_LANGUAGE_PT ] = "Nova atividade", [Lan_LANGUAGE_PT ] = "Nova atividade",
}, },
[Ntf_EVENT_EXAM_ANNOUNCEMENT] = [Ntf_EVENT_CALL_FOR_EXAM] =
{ {
[Lan_LANGUAGE_UNKNOWN] = "", [Lan_LANGUAGE_UNKNOWN] = "",
[Lan_LANGUAGE_CA ] = "Nova convocatòria d'examen", [Lan_LANGUAGE_CA ] = "Nova convocatòria d'examen",
[Lan_LANGUAGE_DE ] = "Neue Aufrufe für Prüfung", [Lan_LANGUAGE_DE ] = "Neue Aufrufe für Prüfung",
[Lan_LANGUAGE_EN ] = "New announcement of exam", [Lan_LANGUAGE_EN ] = "New call for exam",
[Lan_LANGUAGE_ES ] = "Nueva convocatoria de examen", [Lan_LANGUAGE_ES ] = "Nueva convocatoria de examen",
[Lan_LANGUAGE_FR ] = "Nouvelle convocation à un examen", [Lan_LANGUAGE_FR ] = "Nouvelle convocation à un examen",
[Lan_LANGUAGE_GN ] = "Nueva convocatoria de examen", // Okoteve traducción [Lan_LANGUAGE_GN ] = "Nueva convocatoria de examen", // Okoteve traducción

View File

@ -31,8 +31,8 @@
#include "swad_alert.h" #include "swad_alert.h"
#include "swad_box.h" #include "swad_box.h"
#include "swad_call_for_exam.h"
#include "swad_course.h" #include "swad_course.h"
#include "swad_exam_announcement.h"
#include "swad_forum.h" #include "swad_forum.h"
#include "swad_global.h" #include "swad_global.h"
#include "swad_hierarchy.h" #include "swad_hierarchy.h"
@ -138,7 +138,7 @@ void Tml_Not_ShowHighlightedNote (struct Tml_Timeline *Timeline,
/* Assessment tab */ /* Assessment tab */
[Ntf_EVENT_ASSIGNMENT ] = Tml_TOP_MESSAGE_NONE, [Ntf_EVENT_ASSIGNMENT ] = Tml_TOP_MESSAGE_NONE,
[Ntf_EVENT_SURVEY ] = Tml_TOP_MESSAGE_NONE, [Ntf_EVENT_SURVEY ] = Tml_TOP_MESSAGE_NONE,
[Ntf_EVENT_EXAM_ANNOUNCEMENT] = Tml_TOP_MESSAGE_NONE, [Ntf_EVENT_CALL_FOR_EXAM] = Tml_TOP_MESSAGE_NONE,
/* Files tab */ /* Files tab */
[Ntf_EVENT_DOCUMENT_FILE ] = Tml_TOP_MESSAGE_NONE, [Ntf_EVENT_DOCUMENT_FILE ] = Tml_TOP_MESSAGE_NONE,
[Ntf_EVENT_TEACHERS_FILE ] = Tml_TOP_MESSAGE_NONE, [Ntf_EVENT_TEACHERS_FILE ] = Tml_TOP_MESSAGE_NONE,
@ -467,7 +467,7 @@ static void Tml_Not_GetLocationInHierarchy (const struct Tml_Not_Note *Not,
break; break;
case TL_NOTE_CRS_DOC_PUB_FILE: case TL_NOTE_CRS_DOC_PUB_FILE:
case TL_NOTE_CRS_SHA_PUB_FILE: case TL_NOTE_CRS_SHA_PUB_FILE:
case TL_NOTE_EXAM_ANNOUNCEMENT: case TL_NOTE_CALL_FOR_EXAM:
case TL_NOTE_NOTICE: case TL_NOTE_NOTICE:
/* Get course data */ /* Get course data */
Hie->Crs.CrsCod = Not->HieCod; Hie->Crs.CrsCod = Not->HieCod;
@ -524,7 +524,7 @@ static void Tml_Not_WriteLocationInHierarchy (const struct Tml_Not_Note *Not,
break; break;
case TL_NOTE_CRS_DOC_PUB_FILE: case TL_NOTE_CRS_DOC_PUB_FILE:
case TL_NOTE_CRS_SHA_PUB_FILE: case TL_NOTE_CRS_SHA_PUB_FILE:
case TL_NOTE_EXAM_ANNOUNCEMENT: case TL_NOTE_CALL_FOR_EXAM:
case TL_NOTE_NOTICE: case TL_NOTE_NOTICE:
/* Write location (course) in hierarchy */ /* Write location (course) in hierarchy */
HTM_DIV_Begin ("class=\"TL_LOC\""); HTM_DIV_Begin ("class=\"TL_LOC\"");
@ -572,7 +572,7 @@ static void Tml_Not_PutFormGoToAction (const struct Tml_Not_Note *Not,
[TL_NOTE_CRS_DOC_PUB_FILE ] = ActReqDatSeeDocCrs, [TL_NOTE_CRS_DOC_PUB_FILE ] = ActReqDatSeeDocCrs,
[TL_NOTE_CRS_SHA_PUB_FILE ] = ActReqDatShaCrs, [TL_NOTE_CRS_SHA_PUB_FILE ] = ActReqDatShaCrs,
/* Assessment tab */ /* Assessment tab */
[TL_NOTE_EXAM_ANNOUNCEMENT] = ActSeeOneExaAnn, [TL_NOTE_CALL_FOR_EXAM] = ActSeeOneCfe,
/* Users tab */ /* Users tab */
/* Messages tab */ /* Messages tab */
[TL_NOTE_NOTICE ] = ActSeeOneNot, [TL_NOTE_NOTICE ] = ActSeeOneNot,
@ -598,7 +598,7 @@ static void Tml_Not_PutFormGoToAction (const struct Tml_Not_Note *Not,
[TL_NOTE_CRS_DOC_PUB_FILE ] = "file.svg", [TL_NOTE_CRS_DOC_PUB_FILE ] = "file.svg",
[TL_NOTE_CRS_SHA_PUB_FILE ] = "file.svg", [TL_NOTE_CRS_SHA_PUB_FILE ] = "file.svg",
/* Assessment tab */ /* Assessment tab */
[TL_NOTE_EXAM_ANNOUNCEMENT] = "bullhorn.svg", [TL_NOTE_CALL_FOR_EXAM] = "bullhorn.svg",
/* Users tab */ /* Users tab */
/* Messages tab */ /* Messages tab */
[TL_NOTE_NOTICE ] = "sticky-note.svg", [TL_NOTE_NOTICE ] = "sticky-note.svg",
@ -658,12 +658,12 @@ static void Tml_Not_PutFormGoToAction (const struct Tml_Not_Note *Not,
if (Not->HieCod != Gbl.Hierarchy.Crs.CrsCod) // Not the current course if (Not->HieCod != Gbl.Hierarchy.Crs.CrsCod) // Not the current course
Crs_PutParamCrsCod (Not->HieCod); // Go to another course Crs_PutParamCrsCod (Not->HieCod); // Go to another course
break; break;
case TL_NOTE_EXAM_ANNOUNCEMENT: case TL_NOTE_CALL_FOR_EXAM:
Frm_SetAnchorStr (Not->Cod,&Anchor); Frm_SetAnchorStr (Not->Cod,&Anchor);
Frm_BeginFormUniqueAnchor (TL_DefaultActions[Not->NoteType], Frm_BeginFormUniqueAnchor (TL_DefaultActions[Not->NoteType],
Anchor); // Locate on this specific exam Anchor); // Locate on this specific exam
Frm_FreeAnchorStr (Anchor); Frm_FreeAnchorStr (Anchor);
ExaAnn_PutHiddenParamExaCod (Not->Cod); Cfe_PutHiddenParamExaCod (Not->Cod);
if (Not->HieCod != Gbl.Hierarchy.Crs.CrsCod) // Not the current course if (Not->HieCod != Gbl.Hierarchy.Crs.CrsCod) // Not the current course
Crs_PutParamCrsCod (Not->HieCod); // Go to another course Crs_PutParamCrsCod (Not->HieCod); // Go to another course
break; break;
@ -741,8 +741,8 @@ void Tml_Not_GetNoteSummary (const struct Tml_Not_Note *Not,
case TL_NOTE_CRS_SHA_PUB_FILE: case TL_NOTE_CRS_SHA_PUB_FILE:
Brw_GetSummaryAndContentOfFile (SummaryStr,NULL,Not->Cod,false); Brw_GetSummaryAndContentOfFile (SummaryStr,NULL,Not->Cod,false);
break; break;
case TL_NOTE_EXAM_ANNOUNCEMENT: case TL_NOTE_CALL_FOR_EXAM:
ExaAnn_GetSummaryAndContentExamAnn (SummaryStr,NULL,Not->Cod,false); Cfe_GetSummaryAndContentCallForExam (SummaryStr,NULL,Not->Cod,false);
break; break;
case TL_NOTE_POST: case TL_NOTE_POST:
// Not applicable // Not applicable
@ -916,7 +916,7 @@ void Tml_Not_StoreAndPublishNoteInternal (Tml_Not_NoteType_t NoteType,long Cod,
break; break;
case TL_NOTE_CRS_DOC_PUB_FILE: case TL_NOTE_CRS_DOC_PUB_FILE:
case TL_NOTE_CRS_SHA_PUB_FILE: case TL_NOTE_CRS_SHA_PUB_FILE:
case TL_NOTE_EXAM_ANNOUNCEMENT: case TL_NOTE_CALL_FOR_EXAM:
case TL_NOTE_NOTICE: case TL_NOTE_NOTICE:
HieCod = Gbl.Hierarchy.Crs.CrsCod; HieCod = Gbl.Hierarchy.Crs.CrsCod;
break; break;

View File

@ -58,7 +58,7 @@ typedef enum
TL_NOTE_CRS_DOC_PUB_FILE = 7, // Public file in documents of course TL_NOTE_CRS_DOC_PUB_FILE = 7, // Public file in documents of course
TL_NOTE_CRS_SHA_PUB_FILE = 8, // Public file in shared files of course TL_NOTE_CRS_SHA_PUB_FILE = 8, // Public file in shared files of course
/* Assessment tab */ /* Assessment tab */
TL_NOTE_EXAM_ANNOUNCEMENT = 9, // Exam announcement in a course TL_NOTE_CALL_FOR_EXAM = 9, // Exam announcement in a course
/* Users tab */ /* Users tab */
/* Messages tab */ /* Messages tab */
TL_NOTE_NOTICE = 12, // A public notice in a course TL_NOTE_NOTICE = 12, // A public notice in a course