mirror of https://github.com/acanas/swad-core.git
Version 15.18
This commit is contained in:
parent
633b5b4ee2
commit
26baa58280
|
@ -403,6 +403,7 @@ hr.YELLOW_SEPARA {height:0; border-top:0; border-bottom:#BD4815 dotted 1px;}
|
||||||
|
|
||||||
/*********************************** Icons ***********************************/
|
/*********************************** Icons ***********************************/
|
||||||
.ICON16x16 {width:20px; height:20px; vertical-align:middle;}
|
.ICON16x16 {width:20px; height:20px; vertical-align:middle;}
|
||||||
|
.ICON16x12B {width:20px; height:15px; vertical-align:middle; display:block;}
|
||||||
.ICON16x16B {width:20px; height:20px; vertical-align:middle; display:block;}
|
.ICON16x16B {width:20px; height:20px; vertical-align:middle; display:block;}
|
||||||
.ICON20x20 {width:25px; height:25px; vertical-align:middle;}
|
.ICON20x20 {width:25px; height:25px; vertical-align:middle;}
|
||||||
.ICON28x28 {width:32px; height:32px; vertical-align:middle;}
|
.ICON28x28 {width:32px; height:32px; vertical-align:middle;}
|
||||||
|
|
|
@ -370,6 +370,7 @@ form {margin:0; display:inline;}
|
||||||
|
|
||||||
/*********************************** Icons ***********************************/
|
/*********************************** Icons ***********************************/
|
||||||
.ICON16x16 {width:20px; height:20px; vertical-align:middle;}
|
.ICON16x16 {width:20px; height:20px; vertical-align:middle;}
|
||||||
|
.ICON16x12B {width:20px; height:15px; vertical-align:middle; display:block;}
|
||||||
.ICON16x16B {width:20px; height:20px; vertical-align:middle; display:block;}
|
.ICON16x16B {width:20px; height:20px; vertical-align:middle; display:block;}
|
||||||
.ICON20x20 {width:25px; height:25px; vertical-align:middle;}
|
.ICON20x20 {width:25px; height:25px; vertical-align:middle;}
|
||||||
.ICON32x32 {width:40px; height:40px; vertical-align:middle;}
|
.ICON32x32 {width:40px; height:40px; vertical-align:middle;}
|
||||||
|
|
59
js/swad.js
59
js/swad.js
|
@ -35,30 +35,55 @@ var countClockConnected = 0;
|
||||||
// Write a date in client local time
|
// Write a date in client local time
|
||||||
function writeLocalDateFromUTC(id,secsSince1970UTC) {
|
function writeLocalDateFromUTC(id,secsSince1970UTC) {
|
||||||
var d = new Date;
|
var d = new Date;
|
||||||
|
var Yea;
|
||||||
|
var Mon;
|
||||||
|
var Day;
|
||||||
|
var StrMon;
|
||||||
|
var StrDay;
|
||||||
|
|
||||||
d.setTime(secsSince1970UTC * 1000);
|
d.setTime(secsSince1970UTC * 1000);
|
||||||
document.getElementById(id).innerHTML = d.toLocaleDateString();
|
Yea = d.getFullYear();
|
||||||
|
Mon = d.getMonth() + 1;
|
||||||
|
Day = d.getDate();
|
||||||
|
StrMon = ((Mon < 10) ? '0' : '') + Mon;
|
||||||
|
StrDay = ((Day < 10) ? '0' : '') + Day;
|
||||||
|
document.getElementById(id).innerHTML = Yea + '/' + StrMon + '/' + StrDay;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write a date-time in client local time
|
/*************** Write a date-time in client local time **********************/
|
||||||
function writeLocalDateTimeFromUTC(id,secsSince1970UTC) {
|
// - id is the id of the HTML element in which date-time will be written
|
||||||
|
// - secsSince1970UTC is the date-time to write in UTC UNIX time format
|
||||||
|
// - separator is HTML code to write between date and time
|
||||||
|
|
||||||
|
function writeLocalDateTimeFromUTC(id,secsSince1970UTC,separator) {
|
||||||
var d = new Date;
|
var d = new Date;
|
||||||
var H;
|
var Yea;
|
||||||
var M;
|
var Mon;
|
||||||
var S;
|
var Day;
|
||||||
var StrH;
|
var Hou;
|
||||||
var StrM;
|
var Min;
|
||||||
var StrS;
|
var Sec;
|
||||||
|
var StrMon;
|
||||||
|
var StrDay;
|
||||||
|
var StrHou;
|
||||||
|
var StrMin;
|
||||||
|
var StrSec;
|
||||||
|
|
||||||
d.setTime(secsSince1970UTC * 1000);
|
d.setTime(secsSince1970UTC * 1000);
|
||||||
H = d.getHours();
|
Yea = d.getFullYear();
|
||||||
M = d.getMinutes();
|
Mon = d.getMonth() + 1;
|
||||||
S = d.getSeconds();
|
Day = d.getDate();
|
||||||
StrH = ((H < 10) ? '0' : '') + H;
|
Hou = d.getHours();
|
||||||
StrM = ((M < 10) ? '0' : '') + M;
|
Min = d.getMinutes();
|
||||||
StrS = ((S < 10) ? '0' : '') + S;
|
Sec = d.getSeconds();
|
||||||
document.getElementById(id).innerHTML = d.toLocaleDateString() + '<br />' +
|
StrMon = ((Mon < 10) ? '0' : '') + Mon;
|
||||||
StrH + ':' + StrM + ':' + StrS;
|
StrDay = ((Day < 10) ? '0' : '') + Day;
|
||||||
|
StrHou = ((Hou < 10) ? '0' : '') + Hou;
|
||||||
|
StrMin = ((Min < 10) ? '0' : '') + Min;
|
||||||
|
StrSec = ((Sec < 10) ? '0' : '') + Sec;
|
||||||
|
document.getElementById(id).innerHTML = Yea + '/' + StrMon + '/' + StrDay +
|
||||||
|
separator +
|
||||||
|
StrHou + ':' + StrMin + ':' + StrSec;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set local date-time form fields from UTC time
|
// Set local date-time form fields from UTC time
|
||||||
|
|
|
@ -241,9 +241,9 @@ static void Asg_ShowOneAssignment (long AsgCod)
|
||||||
/* Start date/time */
|
/* Start date/time */
|
||||||
UniqueId++;
|
UniqueId++;
|
||||||
fprintf (Gbl.F.Out,"<tr>"
|
fprintf (Gbl.F.Out,"<tr>"
|
||||||
"<td id=\"asg_date%u\" class=\"%s LEFT_TOP COLOR%u\">"
|
"<td id=\"asg_date_start_%u\" class=\"%s LEFT_TOP COLOR%u\">"
|
||||||
"<script type=\"text/javascript\">"
|
"<script type=\"text/javascript\">"
|
||||||
"writeLocalDateTimeFromUTC('asg_date%u',%ld);"
|
"writeLocalDateTimeFromUTC('asg_date_start_%u',%ld,'<br />');"
|
||||||
"</script>"
|
"</script>"
|
||||||
"</td>",
|
"</td>",
|
||||||
UniqueId,
|
UniqueId,
|
||||||
|
@ -256,9 +256,9 @@ static void Asg_ShowOneAssignment (long AsgCod)
|
||||||
|
|
||||||
/* End date/time */
|
/* End date/time */
|
||||||
UniqueId++;
|
UniqueId++;
|
||||||
fprintf (Gbl.F.Out,"<td id=\"asg_date%u\" class=\"%s LEFT_TOP COLOR%u\">"
|
fprintf (Gbl.F.Out,"<td id=\"asg_date_end_%u\" class=\"%s LEFT_TOP COLOR%u\">"
|
||||||
"<script type=\"text/javascript\">"
|
"<script type=\"text/javascript\">"
|
||||||
"writeLocalDateTimeFromUTC('asg_date%u',%ld);"
|
"writeLocalDateTimeFromUTC('asg_date_end_%u',%ld,'<br />');"
|
||||||
"</script>"
|
"</script>"
|
||||||
"</td>",
|
"</td>",
|
||||||
UniqueId,
|
UniqueId,
|
||||||
|
@ -685,11 +685,11 @@ static void Asg_GetDataOfAssignment (struct Assignment *Asg,const char *Query)
|
||||||
/* Get author of the assignment (row[2]) */
|
/* Get author of the assignment (row[2]) */
|
||||||
Asg->UsrCod = Str_ConvertStrCodToLongCod (row[2]);
|
Asg->UsrCod = Str_ConvertStrCodToLongCod (row[2]);
|
||||||
|
|
||||||
/* Get start date (row[3] holds the start date in YYYYMMDDHHMMSS format) */
|
/* Get start date (row[3] holds the start UTC time) */
|
||||||
Asg->TimeUTC[Asg_START_TIME] = Dat_GetUNIXTimeFromStr (row[3]);
|
Asg->TimeUTC[Asg_START_TIME] = Dat_GetUNIXTimeFromStr (row[3]);
|
||||||
|
|
||||||
/* Get end date (row[4] holds the end date in YYYYMMDDHHMMSS format) */
|
/* Get end date (row[4] holds the end UTC time) */
|
||||||
Asg->TimeUTC[Asg_END_TIME] = Dat_GetUNIXTimeFromStr (row[4]);
|
Asg->TimeUTC[Asg_END_TIME ] = Dat_GetUNIXTimeFromStr (row[4]);
|
||||||
|
|
||||||
/* Get whether the assignment is open or closed (row(5)) */
|
/* Get whether the assignment is open or closed (row(5)) */
|
||||||
Asg->Open = (row[5][0] == '1');
|
Asg->Open = (row[5][0] == '1');
|
||||||
|
@ -1099,7 +1099,8 @@ void Asg_RequestCreatOrEditAsg (void)
|
||||||
/* Date-time */
|
/* Date-time */
|
||||||
Dat_WriteFormClientLocalDateTime (Id[StartOrEndTime],
|
Dat_WriteFormClientLocalDateTime (Id[StartOrEndTime],
|
||||||
Asg.TimeUTC[StartOrEndTime],
|
Asg.TimeUTC[StartOrEndTime],
|
||||||
Gbl.Now.Date.Year-1,Gbl.Now.Date.Year+1,
|
Gbl.Now.Date.Year - 1,
|
||||||
|
Gbl.Now.Date.Year + 1,
|
||||||
false,false);
|
false,false);
|
||||||
|
|
||||||
fprintf (Gbl.F.Out,"</td>"
|
fprintf (Gbl.F.Out,"</td>"
|
||||||
|
@ -1216,8 +1217,11 @@ void Asg_RecFormAssignment (void)
|
||||||
extern const char *Txt_Already_existed_an_assignment_with_the_title_X;
|
extern const char *Txt_Already_existed_an_assignment_with_the_title_X;
|
||||||
extern const char *Txt_Already_existed_an_assignment_with_the_folder_X;
|
extern const char *Txt_Already_existed_an_assignment_with_the_folder_X;
|
||||||
extern const char *Txt_You_must_specify_the_title_of_the_assignment;
|
extern const char *Txt_You_must_specify_the_title_of_the_assignment;
|
||||||
|
extern const char *Txt_Created_new_assignment_X;
|
||||||
|
extern const char *Txt_The_assignment_has_been_modified;
|
||||||
extern const char *Txt_You_can_not_disable_file_uploading_once_folders_have_been_created;
|
extern const char *Txt_You_can_not_disable_file_uploading_once_folders_have_been_created;
|
||||||
struct Assignment OldAsg,NewAsg;
|
struct Assignment OldAsg;
|
||||||
|
struct Assignment NewAsg;
|
||||||
bool ItsANewAssignment;
|
bool ItsANewAssignment;
|
||||||
bool NewAssignmentIsCorrect = true;
|
bool NewAssignmentIsCorrect = true;
|
||||||
unsigned NumUsrsToBeNotifiedByEMail;
|
unsigned NumUsrsToBeNotifiedByEMail;
|
||||||
|
@ -1311,14 +1315,25 @@ void Asg_RecFormAssignment (void)
|
||||||
Grp_GetParCodsSeveralGrpsToEditAsgAttOrSvy ();
|
Grp_GetParCodsSeveralGrpsToEditAsgAttOrSvy ();
|
||||||
|
|
||||||
if (ItsANewAssignment)
|
if (ItsANewAssignment)
|
||||||
|
{
|
||||||
Asg_CreateAssignment (&NewAsg,Txt); // Add new assignment to database
|
Asg_CreateAssignment (&NewAsg,Txt); // Add new assignment to database
|
||||||
|
|
||||||
|
/***** Write success message *****/
|
||||||
|
sprintf (Gbl.Message,Txt_Created_new_assignment_X,NewAsg.Title);
|
||||||
|
Lay_ShowAlert (Lay_SUCCESS,Gbl.Message);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (OldAsg.Folder[0] && NewAsg.Folder[0])
|
if (OldAsg.Folder[0] && NewAsg.Folder[0])
|
||||||
if (strcmp (OldAsg.Folder,NewAsg.Folder)) // Folder name has changed
|
if (strcmp (OldAsg.Folder,NewAsg.Folder)) // Folder name has changed
|
||||||
NewAssignmentIsCorrect = Brw_UpdateFoldersAssigmentsIfExistForAllUsrs (OldAsg.Folder,NewAsg.Folder);
|
NewAssignmentIsCorrect = Brw_UpdateFoldersAssigmentsIfExistForAllUsrs (OldAsg.Folder,NewAsg.Folder);
|
||||||
if (NewAssignmentIsCorrect)
|
if (NewAssignmentIsCorrect)
|
||||||
|
{
|
||||||
Asg_UpdateAssignment (&NewAsg,Txt);
|
Asg_UpdateAssignment (&NewAsg,Txt);
|
||||||
|
|
||||||
|
/***** Write success message *****/
|
||||||
|
Lay_ShowAlert (Lay_SUCCESS,Txt_The_assignment_has_been_modified);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Free memory for list of selected groups */
|
/* Free memory for list of selected groups */
|
||||||
|
@ -1358,7 +1373,6 @@ static void Asg_UpdateNumUsrsNotifiedByEMailAboutAssignment (long AsgCod,unsigne
|
||||||
|
|
||||||
static void Asg_CreateAssignment (struct Assignment *Asg,const char *Txt)
|
static void Asg_CreateAssignment (struct Assignment *Asg,const char *Txt)
|
||||||
{
|
{
|
||||||
extern const char *Txt_Created_new_assignment_X;
|
|
||||||
char Query[1024+Cns_MAX_BYTES_TEXT];
|
char Query[1024+Cns_MAX_BYTES_TEXT];
|
||||||
|
|
||||||
/***** Create a new assignment *****/
|
/***** Create a new assignment *****/
|
||||||
|
@ -1379,11 +1393,6 @@ static void Asg_CreateAssignment (struct Assignment *Asg,const char *Txt)
|
||||||
/***** Create groups *****/
|
/***** Create groups *****/
|
||||||
if (Gbl.CurrentCrs.Grps.LstGrpsSel.NumGrps)
|
if (Gbl.CurrentCrs.Grps.LstGrpsSel.NumGrps)
|
||||||
Asg_CreateGrps (Asg->AsgCod);
|
Asg_CreateGrps (Asg->AsgCod);
|
||||||
|
|
||||||
/***** Write success message *****/
|
|
||||||
sprintf (Gbl.Message,Txt_Created_new_assignment_X,
|
|
||||||
Asg->Title);
|
|
||||||
Lay_ShowAlert (Lay_SUCCESS,Gbl.Message);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -1392,7 +1401,6 @@ static void Asg_CreateAssignment (struct Assignment *Asg,const char *Txt)
|
||||||
|
|
||||||
static void Asg_UpdateAssignment (struct Assignment *Asg,const char *Txt)
|
static void Asg_UpdateAssignment (struct Assignment *Asg,const char *Txt)
|
||||||
{
|
{
|
||||||
extern const char *Txt_The_assignment_has_been_modified;
|
|
||||||
char Query[1024+Cns_MAX_BYTES_TEXT];
|
char Query[1024+Cns_MAX_BYTES_TEXT];
|
||||||
|
|
||||||
/***** Update the data of the assignment *****/
|
/***** Update the data of the assignment *****/
|
||||||
|
@ -1416,9 +1424,6 @@ static void Asg_UpdateAssignment (struct Assignment *Asg,const char *Txt)
|
||||||
/* Create new groups */
|
/* Create new groups */
|
||||||
if (Gbl.CurrentCrs.Grps.LstGrpsSel.NumGrps)
|
if (Gbl.CurrentCrs.Grps.LstGrpsSel.NumGrps)
|
||||||
Asg_CreateGrps (Asg->AsgCod);
|
Asg_CreateGrps (Asg->AsgCod);
|
||||||
|
|
||||||
/***** Write success message *****/
|
|
||||||
Lay_ShowAlert (Lay_SUCCESS,Txt_The_assignment_has_been_modified);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -258,6 +258,7 @@ static void Att_PutFormToSelectWhichGroupsToShow (void)
|
||||||
static void Att_ShowOneAttEvent (struct AttendanceEvent *Att,bool ShowOnlyThisAttEventComplete)
|
static void Att_ShowOneAttEvent (struct AttendanceEvent *Att,bool ShowOnlyThisAttEventComplete)
|
||||||
{
|
{
|
||||||
extern const char *Txt_View_event;
|
extern const char *Txt_View_event;
|
||||||
|
static unsigned UniqueId = 0;
|
||||||
char Txt[Cns_MAX_BYTES_TEXT+1];
|
char Txt[Cns_MAX_BYTES_TEXT+1];
|
||||||
|
|
||||||
/***** Get data of this attendance event *****/
|
/***** Get data of this attendance event *****/
|
||||||
|
@ -265,8 +266,10 @@ static void Att_ShowOneAttEvent (struct AttendanceEvent *Att,bool ShowOnlyThisAt
|
||||||
Att_GetNumStdsTotalWhoAreInAttEvent (Att);
|
Att_GetNumStdsTotalWhoAreInAttEvent (Att);
|
||||||
|
|
||||||
/***** Start date/time *****/
|
/***** Start date/time *****/
|
||||||
|
UniqueId++;
|
||||||
fprintf (Gbl.F.Out,"<tr>" \
|
fprintf (Gbl.F.Out,"<tr>" \
|
||||||
"<td class=\"%s LEFT_TOP",
|
"<td id=\"att_date_start_%u\" class=\"%s LEFT_TOP",
|
||||||
|
UniqueId,
|
||||||
Att->Hidden ? (Att->Open ? "DATE_GREEN_LIGHT" :
|
Att->Hidden ? (Att->Open ? "DATE_GREEN_LIGHT" :
|
||||||
"DATE_RED_LIGHT") :
|
"DATE_RED_LIGHT") :
|
||||||
(Att->Open ? "DATE_GREEN" :
|
(Att->Open ? "DATE_GREEN" :
|
||||||
|
@ -274,17 +277,15 @@ static void Att_ShowOneAttEvent (struct AttendanceEvent *Att,bool ShowOnlyThisAt
|
||||||
if (!ShowOnlyThisAttEventComplete)
|
if (!ShowOnlyThisAttEventComplete)
|
||||||
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
|
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
|
||||||
fprintf (Gbl.F.Out,"\">"
|
fprintf (Gbl.F.Out,"\">"
|
||||||
"%02u/%02u/%02u<br />"
|
"<script type=\"text/javascript\">"
|
||||||
"%02u:%02u h"
|
"writeLocalDateTimeFromUTC('att_date_start_%u',%ld,'<br />');"
|
||||||
|
"</script>"
|
||||||
"</td>",
|
"</td>",
|
||||||
Att->DateTimes[Att_START_TIME].Date.Day,
|
UniqueId,Att->TimeUTC[Att_START_TIME]);
|
||||||
Att->DateTimes[Att_START_TIME].Date.Month,
|
|
||||||
Att->DateTimes[Att_START_TIME].Date.Year % 100,
|
|
||||||
Att->DateTimes[Att_START_TIME].Time.Hour,
|
|
||||||
Att->DateTimes[Att_START_TIME].Time.Minute);
|
|
||||||
|
|
||||||
/***** End date/time *****/
|
/***** End date/time *****/
|
||||||
fprintf (Gbl.F.Out,"<td class=\"%s LEFT_TOP",
|
fprintf (Gbl.F.Out,"<td id=\"att_date_end_%u\" class=\"%s LEFT_TOP",
|
||||||
|
UniqueId,
|
||||||
Att->Hidden ? (Att->Open ? "DATE_GREEN_LIGHT" :
|
Att->Hidden ? (Att->Open ? "DATE_GREEN_LIGHT" :
|
||||||
"DATE_RED_LIGHT") :
|
"DATE_RED_LIGHT") :
|
||||||
(Att->Open ? "DATE_GREEN" :
|
(Att->Open ? "DATE_GREEN" :
|
||||||
|
@ -292,14 +293,11 @@ static void Att_ShowOneAttEvent (struct AttendanceEvent *Att,bool ShowOnlyThisAt
|
||||||
if (!ShowOnlyThisAttEventComplete)
|
if (!ShowOnlyThisAttEventComplete)
|
||||||
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
|
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
|
||||||
fprintf (Gbl.F.Out,"\">"
|
fprintf (Gbl.F.Out,"\">"
|
||||||
"%02u/%02u/%02u<br />"
|
"<script type=\"text/javascript\">"
|
||||||
"%02u:%02u h"
|
"writeLocalDateTimeFromUTC('att_date_end_%u',%ld,'<br />');"
|
||||||
|
"</script>"
|
||||||
"</td>",
|
"</td>",
|
||||||
Att->DateTimes[Att_END_TIME ].Date.Day,
|
UniqueId,Att->TimeUTC[Att_END_TIME]);
|
||||||
Att->DateTimes[Att_END_TIME ].Date.Month,
|
|
||||||
Att->DateTimes[Att_END_TIME ].Date.Year % 100,
|
|
||||||
Att->DateTimes[Att_END_TIME ].Time.Hour,
|
|
||||||
Att->DateTimes[Att_END_TIME ].Time.Minute);
|
|
||||||
|
|
||||||
/***** Attendance event title *****/
|
/***** Attendance event title *****/
|
||||||
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP");
|
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP");
|
||||||
|
@ -640,8 +638,8 @@ bool Att_GetDataOfAttEventByCod (struct AttendanceEvent *Att)
|
||||||
|
|
||||||
/***** Build query *****/
|
/***** Build query *****/
|
||||||
sprintf (Query,"SELECT AttCod,CrsCod,Hidden,UsrCod,"
|
sprintf (Query,"SELECT AttCod,CrsCod,Hidden,UsrCod,"
|
||||||
"DATE_FORMAT(StartTime,'%%Y%%m%%d%%H%%i%%S'),"
|
"UNIX_TIMESTAMP(StartTime),"
|
||||||
"DATE_FORMAT(EndTime,'%%Y%%m%%d%%H%%i%%S'),"
|
"UNIX_TIMESTAMP(EndTime),"
|
||||||
"NOW() BETWEEN StartTime AND EndTime,"
|
"NOW() BETWEEN StartTime AND EndTime,"
|
||||||
"CommentTchVisible,"
|
"CommentTchVisible,"
|
||||||
"Title"
|
"Title"
|
||||||
|
@ -650,9 +648,8 @@ bool Att_GetDataOfAttEventByCod (struct AttendanceEvent *Att)
|
||||||
Att->AttCod);
|
Att->AttCod);
|
||||||
|
|
||||||
/***** Clear data *****/
|
/***** Clear data *****/
|
||||||
Att->DateTimes[Att_START_TIME].Date.Day =
|
Att->TimeUTC[Att_START_TIME] =
|
||||||
Att->DateTimes[Att_START_TIME].Date.Month =
|
Att->TimeUTC[Att_END_TIME ] = (time_t) 0;
|
||||||
Att->DateTimes[Att_START_TIME].Date.Year = 0;
|
|
||||||
Att->Title[0] = '\0';
|
Att->Title[0] = '\0';
|
||||||
|
|
||||||
/***** Get data of attendance event from database *****/
|
/***** Get data of attendance event from database *****/
|
||||||
|
@ -673,13 +670,11 @@ bool Att_GetDataOfAttEventByCod (struct AttendanceEvent *Att)
|
||||||
/* Get author of the attendance event (row[3]) */
|
/* Get author of the attendance event (row[3]) */
|
||||||
Att->UsrCod = Str_ConvertStrCodToLongCod (row[3]);
|
Att->UsrCod = Str_ConvertStrCodToLongCod (row[3]);
|
||||||
|
|
||||||
/* Get start date (row[4] holds the start date in YYYYMMDDHHMMSS format) */
|
/* Get start date (row[4] holds the start UTC time) */
|
||||||
if (!(Dat_GetDateTimeFromYYYYMMDDHHMMSS (&(Att->DateTimes[Att_START_TIME]),row[4])))
|
Att->TimeUTC[Att_START_TIME] = Dat_GetUNIXTimeFromStr (row[4]);
|
||||||
Lay_ShowErrorAndExit ("Error when reading start date of attendance event.");
|
|
||||||
|
|
||||||
/* Get end date (row[5] holds the end date in YYYYMMDDHHMMSS format) */
|
/* Get end date (row[5] holds the end UTC time) */
|
||||||
if (!(Dat_GetDateTimeFromYYYYMMDDHHMMSS (&(Att->DateTimes[Att_END_TIME]),row[5])))
|
Att->TimeUTC[Att_END_TIME ] = Dat_GetUNIXTimeFromStr (row[5]);
|
||||||
Lay_ShowErrorAndExit ("Error when reading end date of attendance event.");
|
|
||||||
|
|
||||||
/* Get whether the attendance event is open or closed (row(6)) */
|
/* Get whether the attendance event is open or closed (row(6)) */
|
||||||
Att->Open = (row[6][0] == '1');
|
Att->Open = (row[6][0] == '1');
|
||||||
|
@ -753,22 +748,14 @@ static void Att_GetAttEventTxtFromDB (long AttCod,char *Txt)
|
||||||
|
|
||||||
void Att_GetNotifAttEvent (char *SummaryStr,char **ContentStr,long AttCod,unsigned MaxChars,bool GetContent)
|
void Att_GetNotifAttEvent (char *SummaryStr,char **ContentStr,long AttCod,unsigned MaxChars,bool GetContent)
|
||||||
{
|
{
|
||||||
extern const char *Txt_Start_date;
|
|
||||||
extern const char *Txt_End_date;
|
|
||||||
char Query[512];
|
char Query[512];
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
struct DateTime DateTimes[Att_NUM_DATES];
|
|
||||||
|
|
||||||
SummaryStr[0] = '\0'; // Return nothing on error
|
SummaryStr[0] = '\0'; // Return nothing on error
|
||||||
|
|
||||||
/***** Build query *****/
|
/***** Build query *****/
|
||||||
sprintf (Query,"SELECT Title,"
|
sprintf (Query,"SELECT Title,Txt FROM att_events WHERE AttCod='%ld'",
|
||||||
"DATE_FORMAT(StartTime,'%%Y%%m%%d%%H%%i%%S'),"
|
|
||||||
"DATE_FORMAT(EndTime,'%%Y%%m%%d%%H%%i%%S'),"
|
|
||||||
"Txt"
|
|
||||||
" FROM att_events"
|
|
||||||
" WHERE AttCod='%ld'",
|
|
||||||
AttCod);
|
AttCod);
|
||||||
if (!mysql_query (&Gbl.mysql,Query))
|
if (!mysql_query (&Gbl.mysql,Query))
|
||||||
if ((mysql_res = mysql_store_result (&Gbl.mysql)) != NULL)
|
if ((mysql_res = mysql_store_result (&Gbl.mysql)) != NULL)
|
||||||
|
@ -789,30 +776,7 @@ void Att_GetNotifAttEvent (char *SummaryStr,char **ContentStr,long AttCod,unsign
|
||||||
{
|
{
|
||||||
if ((*ContentStr = (char *) malloc (512+Cns_MAX_BYTES_TEXT)) == NULL)
|
if ((*ContentStr = (char *) malloc (512+Cns_MAX_BYTES_TEXT)) == NULL)
|
||||||
Lay_ShowErrorAndExit ("Error allocating memory for notification content.");
|
Lay_ShowErrorAndExit ("Error allocating memory for notification content.");
|
||||||
(*ContentStr)[0] = '\0'; // Return nothing on error
|
strcpy (*ContentStr,row[1]);
|
||||||
|
|
||||||
/* Get start date (row[1] holds the start date in YYYYMMDDHHMMSS format) */
|
|
||||||
if (!(Dat_GetDateTimeFromYYYYMMDDHHMMSS (&DateTimes[Att_START_TIME],row[1])))
|
|
||||||
Lay_ShowErrorAndExit ("Error when reading start date of attendance event.");
|
|
||||||
|
|
||||||
/* Get end date (row[2] holds the end date in YYYYMMDDHHMMSS format) */
|
|
||||||
if (!(Dat_GetDateTimeFromYYYYMMDDHHMMSS (&DateTimes[Att_END_TIME ],row[2])))
|
|
||||||
Lay_ShowErrorAndExit ("Error when reading end date of attendance event.");
|
|
||||||
|
|
||||||
sprintf (*ContentStr,"%s: %02u/%02u/%04u %02u:%02u<br />%s: %02u/%02u/%04u %02u:%02u<br />%s",
|
|
||||||
Txt_Start_date,
|
|
||||||
DateTimes[Att_START_TIME].Date.Day,
|
|
||||||
DateTimes[Att_START_TIME].Date.Month,
|
|
||||||
DateTimes[Att_START_TIME].Date.Year,
|
|
||||||
DateTimes[Att_START_TIME].Time.Hour,
|
|
||||||
DateTimes[Att_START_TIME].Time.Minute,
|
|
||||||
Txt_End_date,
|
|
||||||
DateTimes[Att_END_TIME].Date.Day,
|
|
||||||
DateTimes[Att_END_TIME].Date.Month,
|
|
||||||
DateTimes[Att_END_TIME].Date.Year,
|
|
||||||
DateTimes[Att_END_TIME].Time.Hour,
|
|
||||||
DateTimes[Att_END_TIME].Time.Minute,
|
|
||||||
row[3]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mysql_free_result (mysql_res);
|
mysql_free_result (mysql_res);
|
||||||
|
@ -1023,8 +987,6 @@ void Att_RequestCreatOrEditAttEvent (void)
|
||||||
bool ItsANewAttEvent;
|
bool ItsANewAttEvent;
|
||||||
Att_StartOrEndTime_t StartOrEndTime;
|
Att_StartOrEndTime_t StartOrEndTime;
|
||||||
const char *Id[Att_NUM_DATES] = {"Start","End"};
|
const char *Id[Att_NUM_DATES] = {"Start","End"};
|
||||||
const char *NameSelectHour [Att_NUM_DATES] = {"StartHour" ,"EndHour" };
|
|
||||||
const char *NameSelectMinute[Att_NUM_DATES] = {"StartMinute","EndMinute"};
|
|
||||||
const char *Dates[Att_NUM_DATES] = {Txt_Start_date,Txt_End_date};
|
const char *Dates[Att_NUM_DATES] = {Txt_Start_date,Txt_End_date};
|
||||||
char Txt[Cns_MAX_BYTES_TEXT+1];
|
char Txt[Cns_MAX_BYTES_TEXT+1];
|
||||||
|
|
||||||
|
@ -1041,18 +1003,8 @@ void Att_RequestCreatOrEditAttEvent (void)
|
||||||
{
|
{
|
||||||
/* Initialize to empty attendance event */
|
/* Initialize to empty attendance event */
|
||||||
Att.AttCod = -1L;
|
Att.AttCod = -1L;
|
||||||
Att.DateTimes[Att_START_TIME].Date.Day = Gbl.Now.Date.Day;
|
Att.TimeUTC[Asg_START_TIME] = Gbl.TimeStartExecution;
|
||||||
Att.DateTimes[Att_START_TIME].Date.Month = Gbl.Now.Date.Month;
|
Att.TimeUTC[Asg_END_TIME ] = Gbl.TimeStartExecution + (2 * 60 * 60); // +2 hours
|
||||||
Att.DateTimes[Att_START_TIME].Date.Year = Gbl.Now.Date.Year;
|
|
||||||
Att.DateTimes[Att_START_TIME].Time.Hour = Gbl.Now.Time.Hour;
|
|
||||||
Att.DateTimes[Att_START_TIME].Time.Minute = Gbl.Now.Time.Minute;
|
|
||||||
Att.DateTimes[Att_START_TIME].Time.Second = Gbl.Now.Time.Second;
|
|
||||||
|
|
||||||
Att.DateTimes[Att_END_TIME ].Date.Day = Gbl.Now.Date.Day;
|
|
||||||
Att.DateTimes[Att_END_TIME ].Date.Month = Gbl.Now.Date.Month;
|
|
||||||
Att.DateTimes[Att_END_TIME ].Date.Year = Gbl.Now.Date.Year;
|
|
||||||
Att.DateTimes[Att_END_TIME ].Time.Hour = 23;
|
|
||||||
Att.DateTimes[Att_END_TIME ].Time.Minute = 59;
|
|
||||||
Att.Open = true;
|
Att.Open = true;
|
||||||
Att.Title[0] = '\0';
|
Att.Title[0] = '\0';
|
||||||
}
|
}
|
||||||
|
@ -1107,22 +1059,15 @@ void Att_RequestCreatOrEditAttEvent (void)
|
||||||
"<table class=\"CELLS_PAD_2\">"
|
"<table class=\"CELLS_PAD_2\">"
|
||||||
"<tr>"
|
"<tr>"
|
||||||
"<td class=\"LEFT_TOP\">",
|
"<td class=\"LEFT_TOP\">",
|
||||||
The_ClassForm[Gbl.Prefs.Theme],Dates[StartOrEndTime]);
|
The_ClassForm[Gbl.Prefs.Theme],
|
||||||
|
Dates[StartOrEndTime]);
|
||||||
|
|
||||||
/* Date */
|
/* Date-time */
|
||||||
Dat_WriteFormDate (Gbl.Now.Date.Year-1,Gbl.Now.Date.Year+1,
|
Dat_WriteFormClientLocalDateTime (Id[StartOrEndTime],
|
||||||
Id[StartOrEndTime],
|
Att.TimeUTC[StartOrEndTime],
|
||||||
&(Att.DateTimes[StartOrEndTime].Date),
|
Gbl.Now.Date.Year - 1,
|
||||||
false,false);
|
Gbl.Now.Date.Year + 1,
|
||||||
|
false,false);
|
||||||
fprintf (Gbl.F.Out,"</td>"
|
|
||||||
"<td class=\"LEFT_TOP\">");
|
|
||||||
|
|
||||||
/* Time */
|
|
||||||
Dat_WriteFormHourMinute (NameSelectHour [StartOrEndTime],
|
|
||||||
NameSelectMinute[StartOrEndTime],
|
|
||||||
&(Att.DateTimes[StartOrEndTime].Time),
|
|
||||||
false,false);
|
|
||||||
|
|
||||||
fprintf (Gbl.F.Out,"</td>"
|
fprintf (Gbl.F.Out,"</td>"
|
||||||
"</tr></table></td>"
|
"</tr></table></td>"
|
||||||
|
@ -1246,7 +1191,8 @@ void Att_RecFormAttEvent (void)
|
||||||
extern const char *Txt_You_must_specify_the_title_of_the_event;
|
extern const char *Txt_You_must_specify_the_title_of_the_event;
|
||||||
extern const char *Txt_Created_new_event_X;
|
extern const char *Txt_Created_new_event_X;
|
||||||
extern const char *Txt_The_event_has_been_modified;
|
extern const char *Txt_The_event_has_been_modified;
|
||||||
struct AttendanceEvent OldAtt,NewAtt;
|
struct AttendanceEvent OldAtt;
|
||||||
|
struct AttendanceEvent NewAtt;
|
||||||
char YN[1+1];
|
char YN[1+1];
|
||||||
bool ItsANewAttEvent;
|
bool ItsANewAttEvent;
|
||||||
bool NewAttEventIsCorrect = true;
|
bool NewAttEventIsCorrect = true;
|
||||||
|
@ -1262,25 +1208,9 @@ void Att_RecFormAttEvent (void)
|
||||||
Att_GetDataOfAttEventByCodAndCheckCrs (&OldAtt);
|
Att_GetDataOfAttEventByCodAndCheckCrs (&OldAtt);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Get start date *****/
|
/***** Get start/end date-times *****/
|
||||||
Dat_GetDateFromForm ("StartDay","StartMonth","StartYear",
|
NewAtt.TimeUTC[Asg_START_TIME] = Dat_GetTimeUTCFromForm ("StartTimeUTC");
|
||||||
&(NewAtt.DateTimes[Att_START_TIME].Date.Day),
|
NewAtt.TimeUTC[Asg_END_TIME ] = Dat_GetTimeUTCFromForm ("EndTimeUTC" );
|
||||||
&(NewAtt.DateTimes[Att_START_TIME].Date.Month),
|
|
||||||
&(NewAtt.DateTimes[Att_START_TIME].Date.Year));
|
|
||||||
Dat_GetHourMinuteFromForm ("StartHour","StartMinute",
|
|
||||||
&(NewAtt.DateTimes[Att_START_TIME].Time.Hour),
|
|
||||||
&(NewAtt.DateTimes[Att_START_TIME].Time.Minute));
|
|
||||||
NewAtt.DateTimes[Att_START_TIME].Time.Second = 0;
|
|
||||||
|
|
||||||
/***** Get end date *****/
|
|
||||||
Dat_GetDateFromForm ("EndDay","EndMonth","EndYear",
|
|
||||||
&(NewAtt.DateTimes[Att_END_TIME].Date.Day),
|
|
||||||
&(NewAtt.DateTimes[Att_END_TIME].Date.Month),
|
|
||||||
&(NewAtt.DateTimes[Att_END_TIME].Date.Year));
|
|
||||||
Dat_GetHourMinuteFromForm ("EndHour","EndMinute",
|
|
||||||
&(NewAtt.DateTimes[Att_END_TIME].Time.Hour),
|
|
||||||
&(NewAtt.DateTimes[Att_END_TIME].Time.Minute));
|
|
||||||
NewAtt.DateTimes[Att_END_TIME].Time.Second = 59;
|
|
||||||
|
|
||||||
/***** Get boolean parameter that indicates if teacher's comments are visible by students *****/
|
/***** Get boolean parameter that indicates if teacher's comments are visible by students *****/
|
||||||
Par_GetParToText ("CommentTchVisible",YN,1);
|
Par_GetParToText ("CommentTchVisible",YN,1);
|
||||||
|
@ -1293,26 +1223,10 @@ void Att_RecFormAttEvent (void)
|
||||||
Par_GetParToHTML ("Txt",Txt,Cns_MAX_BYTES_TEXT); // Store in HTML format (not rigorous)
|
Par_GetParToHTML ("Txt",Txt,Cns_MAX_BYTES_TEXT); // Store in HTML format (not rigorous)
|
||||||
|
|
||||||
/***** Adjust dates *****/
|
/***** Adjust dates *****/
|
||||||
if (NewAtt.DateTimes[Att_START_TIME].Date.Day == 0 ||
|
if (NewAtt.TimeUTC[Asg_START_TIME] == 0)
|
||||||
NewAtt.DateTimes[Att_START_TIME].Date.Month == 0 ||
|
NewAtt.TimeUTC[Asg_START_TIME] = Gbl.TimeStartExecution;
|
||||||
NewAtt.DateTimes[Att_START_TIME].Date.Year == 0)
|
if (NewAtt.TimeUTC[Asg_END_TIME] == 0)
|
||||||
{
|
NewAtt.TimeUTC[Asg_END_TIME] = NewAtt.TimeUTC[Asg_START_TIME] + 2*60*60; // +2 hours
|
||||||
NewAtt.DateTimes[Att_START_TIME].Date.Day = Gbl.Now.Date.Day;
|
|
||||||
NewAtt.DateTimes[Att_START_TIME].Date.Month = Gbl.Now.Date.Month;
|
|
||||||
NewAtt.DateTimes[Att_START_TIME].Date.Year = Gbl.Now.Date.Year;
|
|
||||||
NewAtt.DateTimes[Att_START_TIME].Time.Hour = Gbl.Now.Time.Hour;
|
|
||||||
NewAtt.DateTimes[Att_START_TIME].Time.Minute = Gbl.Now.Time.Minute;
|
|
||||||
}
|
|
||||||
if (NewAtt.DateTimes[Att_END_TIME].Date.Day == 0 ||
|
|
||||||
NewAtt.DateTimes[Att_END_TIME].Date.Month == 0 ||
|
|
||||||
NewAtt.DateTimes[Att_END_TIME].Date.Year == 0)
|
|
||||||
{
|
|
||||||
NewAtt.DateTimes[Att_END_TIME].Date.Day = Gbl.Now.Date.Day;
|
|
||||||
NewAtt.DateTimes[Att_END_TIME].Date.Month = Gbl.Now.Date.Month;
|
|
||||||
NewAtt.DateTimes[Att_END_TIME].Date.Year = Gbl.Now.Date.Year;
|
|
||||||
NewAtt.DateTimes[Att_END_TIME].Time.Hour = 23;
|
|
||||||
NewAtt.DateTimes[Att_END_TIME].Time.Minute = 59;
|
|
||||||
}
|
|
||||||
|
|
||||||
/***** Check if title is correct *****/
|
/***** Check if title is correct *****/
|
||||||
if (NewAtt.Title[0]) // If there's an attendance event title
|
if (NewAtt.Title[0]) // If there's an attendance event title
|
||||||
|
@ -1374,21 +1288,12 @@ void Att_CreateAttEvent (struct AttendanceEvent *Att,const char *Txt)
|
||||||
|
|
||||||
/***** Create a new attendance event *****/
|
/***** Create a new attendance event *****/
|
||||||
sprintf (Query,"INSERT INTO att_events (CrsCod,UsrCod,StartTime,EndTime,CommentTchVisible,Title,Txt)"
|
sprintf (Query,"INSERT INTO att_events (CrsCod,UsrCod,StartTime,EndTime,CommentTchVisible,Title,Txt)"
|
||||||
" VALUES ('%ld','%ld','%04u%02u%02u%02u%02u%02u','%04u%02u%02u%02u%02u%02u','%c','%s','%s')",
|
" VALUES ('%ld','%ld',FROM_UNIXTIME('%ld'),FROM_UNIXTIME('%ld'),"
|
||||||
|
"'%c','%s','%s')",
|
||||||
Gbl.CurrentCrs.Crs.CrsCod,
|
Gbl.CurrentCrs.Crs.CrsCod,
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||||
Att->DateTimes[Att_START_TIME].Date.Year,
|
Att->TimeUTC[Asg_START_TIME],
|
||||||
Att->DateTimes[Att_START_TIME].Date.Month,
|
Att->TimeUTC[Asg_END_TIME ],
|
||||||
Att->DateTimes[Att_START_TIME].Date.Day,
|
|
||||||
Att->DateTimes[Att_START_TIME].Time.Hour,
|
|
||||||
Att->DateTimes[Att_START_TIME].Time.Minute,
|
|
||||||
Att->DateTimes[Att_START_TIME].Time.Second,
|
|
||||||
Att->DateTimes[Att_END_TIME ].Date.Year,
|
|
||||||
Att->DateTimes[Att_END_TIME ].Date.Month,
|
|
||||||
Att->DateTimes[Att_END_TIME ].Date.Day,
|
|
||||||
Att->DateTimes[Att_END_TIME ].Time.Hour,
|
|
||||||
Att->DateTimes[Att_END_TIME ].Time.Minute,
|
|
||||||
Att->DateTimes[Att_END_TIME ].Time.Second,
|
|
||||||
Att->CommentTchVisible ? 'Y' :
|
Att->CommentTchVisible ? 'Y' :
|
||||||
'N',
|
'N',
|
||||||
Att->Title,
|
Att->Title,
|
||||||
|
@ -1409,22 +1314,13 @@ void Att_UpdateAttEvent (struct AttendanceEvent *Att,const char *Txt)
|
||||||
char Query[1024+Cns_MAX_BYTES_TEXT];
|
char Query[1024+Cns_MAX_BYTES_TEXT];
|
||||||
|
|
||||||
/***** Update the data of the attendance event *****/
|
/***** Update the data of the attendance event *****/
|
||||||
sprintf (Query,"UPDATE att_events"
|
sprintf (Query,"UPDATE att_events SET "
|
||||||
" SET StartTime='%04u%02u%02u%02u%02u%02u',EndTime='%04u%02u%02u%02u%02u%02u',"
|
"StartTime=FROM_UNIXTIME('%ld'),"
|
||||||
|
"EndTime=FROM_UNIXTIME('%ld'),"
|
||||||
"CommentTchVisible='%c',Title='%s',Txt='%s'"
|
"CommentTchVisible='%c',Title='%s',Txt='%s'"
|
||||||
" WHERE AttCod='%ld' AND CrsCod='%ld'",
|
" WHERE AttCod='%ld' AND CrsCod='%ld'",
|
||||||
Att->DateTimes[Att_START_TIME].Date.Year,
|
Att->TimeUTC[Asg_START_TIME],
|
||||||
Att->DateTimes[Att_START_TIME].Date.Month,
|
Att->TimeUTC[Asg_END_TIME ],
|
||||||
Att->DateTimes[Att_START_TIME].Date.Day,
|
|
||||||
Att->DateTimes[Att_START_TIME].Time.Hour,
|
|
||||||
Att->DateTimes[Att_START_TIME].Time.Minute,
|
|
||||||
Att->DateTimes[Att_START_TIME].Time.Second,
|
|
||||||
Att->DateTimes[Att_END_TIME ].Date.Year,
|
|
||||||
Att->DateTimes[Att_END_TIME ].Date.Month,
|
|
||||||
Att->DateTimes[Att_END_TIME ].Date.Day ,
|
|
||||||
Att->DateTimes[Att_END_TIME ].Time.Hour,
|
|
||||||
Att->DateTimes[Att_END_TIME ].Time.Minute,
|
|
||||||
Att->DateTimes[Att_END_TIME ].Time.Second,
|
|
||||||
Att->CommentTchVisible ? 'Y' :
|
Att->CommentTchVisible ? 'Y' :
|
||||||
'N',
|
'N',
|
||||||
Att->Title,
|
Att->Title,
|
||||||
|
@ -2923,6 +2819,7 @@ static void Att_ListEventsToSelect (void)
|
||||||
extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
|
extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
|
||||||
extern const char *Txt_Update_attendance_according_to_selected_events;
|
extern const char *Txt_Update_attendance_according_to_selected_events;
|
||||||
extern const char *Txt_Update_attendance;
|
extern const char *Txt_Update_attendance;
|
||||||
|
static unsigned UniqueId = 0;
|
||||||
unsigned NumAttEvent;
|
unsigned NumAttEvent;
|
||||||
|
|
||||||
/***** Start form to update the attendance
|
/***** Start form to update the attendance
|
||||||
|
@ -2954,6 +2851,8 @@ static void Att_ListEventsToSelect (void)
|
||||||
NumAttEvent < Gbl.AttEvents.Num;
|
NumAttEvent < Gbl.AttEvents.Num;
|
||||||
NumAttEvent++)
|
NumAttEvent++)
|
||||||
{
|
{
|
||||||
|
UniqueId++;
|
||||||
|
|
||||||
/* Get data of the attendance event from database */
|
/* Get data of the attendance event from database */
|
||||||
Att_GetDataOfAttEventByCodAndCheckCrs (&Gbl.AttEvents.Lst[NumAttEvent]);
|
Att_GetDataOfAttEventByCodAndCheckCrs (&Gbl.AttEvents.Lst[NumAttEvent]);
|
||||||
Att_GetNumStdsTotalWhoAreInAttEvent (&Gbl.AttEvents.Lst[NumAttEvent]);
|
Att_GetNumStdsTotalWhoAreInAttEvent (&Gbl.AttEvents.Lst[NumAttEvent]);
|
||||||
|
@ -2972,7 +2871,10 @@ static void Att_ListEventsToSelect (void)
|
||||||
"%u:"
|
"%u:"
|
||||||
"</td>"
|
"</td>"
|
||||||
"<td class=\"DAT LEFT_MIDDLE COLOR%u\">"
|
"<td class=\"DAT LEFT_MIDDLE COLOR%u\">"
|
||||||
"%02u/%02u/%04u %02u:%02u h %s"
|
"<span id=\"att_date_start_%u\"></span> %s"
|
||||||
|
"<script type=\"text/javascript\">"
|
||||||
|
"writeLocalDateTimeFromUTC('att_date_start_%u',%ld,' ');"
|
||||||
|
"</script>"
|
||||||
"</td>"
|
"</td>"
|
||||||
"<td class=\"DAT RIGHT_MIDDLE COLOR%u\">"
|
"<td class=\"DAT RIGHT_MIDDLE COLOR%u\">"
|
||||||
"%u"
|
"%u"
|
||||||
|
@ -2981,12 +2883,9 @@ static void Att_ListEventsToSelect (void)
|
||||||
Gbl.RowEvenOdd,
|
Gbl.RowEvenOdd,
|
||||||
NumAttEvent + 1,
|
NumAttEvent + 1,
|
||||||
Gbl.RowEvenOdd,
|
Gbl.RowEvenOdd,
|
||||||
Gbl.AttEvents.Lst[NumAttEvent].DateTimes[Att_START_TIME].Date.Day,
|
UniqueId,
|
||||||
Gbl.AttEvents.Lst[NumAttEvent].DateTimes[Att_START_TIME].Date.Month,
|
|
||||||
Gbl.AttEvents.Lst[NumAttEvent].DateTimes[Att_START_TIME].Date.Year,
|
|
||||||
Gbl.AttEvents.Lst[NumAttEvent].DateTimes[Att_START_TIME].Time.Hour,
|
|
||||||
Gbl.AttEvents.Lst[NumAttEvent].DateTimes[Att_START_TIME].Time.Minute,
|
|
||||||
Gbl.AttEvents.Lst[NumAttEvent].Title,
|
Gbl.AttEvents.Lst[NumAttEvent].Title,
|
||||||
|
UniqueId,Gbl.AttEvents.Lst[NumAttEvent].TimeUTC[Att_START_TIME],
|
||||||
Gbl.RowEvenOdd,
|
Gbl.RowEvenOdd,
|
||||||
Gbl.AttEvents.Lst[NumAttEvent].NumStdsTotal);
|
Gbl.AttEvents.Lst[NumAttEvent].NumStdsTotal);
|
||||||
|
|
||||||
|
@ -3275,6 +3174,7 @@ static void Att_ListAttEventsForAStd (unsigned NumStd,struct UsrData *UsrDat)
|
||||||
extern const char *Txt_Absent;
|
extern const char *Txt_Absent;
|
||||||
extern const char *Txt_Student_comment;
|
extern const char *Txt_Student_comment;
|
||||||
extern const char *Txt_Teachers_comment;
|
extern const char *Txt_Teachers_comment;
|
||||||
|
static unsigned UniqueId = 0;
|
||||||
char PhotoURL[PATH_MAX+1];
|
char PhotoURL[PATH_MAX+1];
|
||||||
bool ShowPhoto;
|
bool ShowPhoto;
|
||||||
unsigned NumAttEvent;
|
unsigned NumAttEvent;
|
||||||
|
@ -3341,6 +3241,7 @@ static void Att_ListAttEventsForAStd (unsigned NumStd,struct UsrData *UsrDat)
|
||||||
Present = Att_CheckIfUsrIsPresentInAttEventAndGetComments (Gbl.AttEvents.Lst[NumAttEvent].AttCod,UsrDat->UsrCod,CommentStd,CommentTch);
|
Present = Att_CheckIfUsrIsPresentInAttEventAndGetComments (Gbl.AttEvents.Lst[NumAttEvent].AttCod,UsrDat->UsrCod,CommentStd,CommentTch);
|
||||||
|
|
||||||
/***** Write a row for this event *****/
|
/***** Write a row for this event *****/
|
||||||
|
UniqueId++;
|
||||||
fprintf (Gbl.F.Out,"<tr>"
|
fprintf (Gbl.F.Out,"<tr>"
|
||||||
"<td class=\"COLOR%u\"></td>"
|
"<td class=\"COLOR%u\"></td>"
|
||||||
"<td class=\"DAT RIGHT_MIDDLE COLOR%u\">"
|
"<td class=\"DAT RIGHT_MIDDLE COLOR%u\">"
|
||||||
|
@ -3349,7 +3250,11 @@ static void Att_ListAttEventsForAStd (unsigned NumStd,struct UsrData *UsrDat)
|
||||||
"<td class=\"DAT LEFT_MIDDLE COLOR%u\">"
|
"<td class=\"DAT LEFT_MIDDLE COLOR%u\">"
|
||||||
"<img src=\"%s/%s16x16.gif\""
|
"<img src=\"%s/%s16x16.gif\""
|
||||||
" alt=\"%s\" title=\"%s\" class=\"ICON16x16\" />"
|
" alt=\"%s\" title=\"%s\" class=\"ICON16x16\" />"
|
||||||
" %02u/%02u/%04u %02u:%02u h %s</td>"
|
"<span id=\"att_date_start_%u\"></span> %s"
|
||||||
|
"<script type=\"text/javascript\">"
|
||||||
|
"writeLocalDateTimeFromUTC('att_date_start_%u',%ld,' ');"
|
||||||
|
"</script>"
|
||||||
|
"</td>"
|
||||||
"</tr>",
|
"</tr>",
|
||||||
Gbl.RowEvenOdd,
|
Gbl.RowEvenOdd,
|
||||||
Gbl.RowEvenOdd,
|
Gbl.RowEvenOdd,
|
||||||
|
@ -3362,12 +3267,9 @@ static void Att_ListAttEventsForAStd (unsigned NumStd,struct UsrData *UsrDat)
|
||||||
Txt_Absent,
|
Txt_Absent,
|
||||||
Present ? Txt_Present :
|
Present ? Txt_Present :
|
||||||
Txt_Absent,
|
Txt_Absent,
|
||||||
Gbl.AttEvents.Lst[NumAttEvent].DateTimes[Att_START_TIME].Date.Day,
|
UniqueId,
|
||||||
Gbl.AttEvents.Lst[NumAttEvent].DateTimes[Att_START_TIME].Date.Month,
|
Gbl.AttEvents.Lst[NumAttEvent].Title,
|
||||||
Gbl.AttEvents.Lst[NumAttEvent].DateTimes[Att_START_TIME].Date.Year,
|
UniqueId,Gbl.AttEvents.Lst[NumAttEvent].TimeUTC[Att_START_TIME]);
|
||||||
Gbl.AttEvents.Lst[NumAttEvent].DateTimes[Att_START_TIME].Time.Hour,
|
|
||||||
Gbl.AttEvents.Lst[NumAttEvent].DateTimes[Att_START_TIME].Time.Minute,
|
|
||||||
Gbl.AttEvents.Lst[NumAttEvent].Title);
|
|
||||||
|
|
||||||
/***** Write comments for this student *****/
|
/***** Write comments for this student *****/
|
||||||
if (CommentStd[0] ||
|
if (CommentStd[0] ||
|
||||||
|
|
|
@ -49,7 +49,7 @@ struct AttendanceEvent
|
||||||
long CrsCod;
|
long CrsCod;
|
||||||
bool Hidden;
|
bool Hidden;
|
||||||
long UsrCod;
|
long UsrCod;
|
||||||
struct DateTime DateTimes[Att_NUM_DATES];
|
time_t TimeUTC[Att_NUM_DATES];
|
||||||
bool Open;
|
bool Open;
|
||||||
char Title[Att_MAX_LENGTH_ATTENDANCE_EVENT_TITLE+1];
|
char Title[Att_MAX_LENGTH_ATTENDANCE_EVENT_TITLE+1];
|
||||||
bool CommentTchVisible;
|
bool CommentTchVisible;
|
||||||
|
|
|
@ -108,11 +108,13 @@
|
||||||
/****************************** Public constants *****************************/
|
/****************************** Public constants *****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define Log_PLATFORM_VERSION "SWAD 15.17.3 (2015/10/23)"
|
#define Log_PLATFORM_VERSION "SWAD 15.18 (2015/10/23)"
|
||||||
|
|
||||||
// Number of lines (includes comments but not blank lines) has been got with the following command:
|
// Number of lines (includes comments but not blank lines) has been got with the following command:
|
||||||
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
|
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
|
||||||
/*
|
/*
|
||||||
|
Version 15.18: Oct 23, 2015 Attendance date-times are displayed in client local date-time.
|
||||||
|
Changes in JavaScript functions related to date-time. (186403 lines)
|
||||||
Version 15.17.3: Oct 23, 2015 Changes in JavaScript functions related to date-time. (186477 lines)
|
Version 15.17.3: Oct 23, 2015 Changes in JavaScript functions related to date-time. (186477 lines)
|
||||||
Version 15.17.2: Oct 23, 2015 Code refactoring related to forms. (186472 lines)
|
Version 15.17.2: Oct 23, 2015 Code refactoring related to forms. (186472 lines)
|
||||||
Version 15.17.1: Oct 23, 2015 Code refactoring related to dates and JavaScript. (186407 lines)
|
Version 15.17.1: Oct 23, 2015 Code refactoring related to dates and JavaScript. (186407 lines)
|
||||||
|
|
|
@ -5783,7 +5783,7 @@ static void Brw_WriteDatesAssignment (void)
|
||||||
Gbl.FileBrowser.Asg.Open ? "ASG_LST_DATE_GREEN" :
|
Gbl.FileBrowser.Asg.Open ? "ASG_LST_DATE_GREEN" :
|
||||||
"ASG_LST_DATE_RED");
|
"ASG_LST_DATE_RED");
|
||||||
fprintf (Gbl.F.Out,"<script type=\"text/javascript\">"
|
fprintf (Gbl.F.Out,"<script type=\"text/javascript\">"
|
||||||
"writeLocalDateTimeFromUTC('asg_start_date%u',%ld);"
|
"writeLocalDateTimeFromUTC('asg_start_date%u',%ld,' ');"
|
||||||
"</script>",
|
"</script>",
|
||||||
UniqueId,
|
UniqueId,
|
||||||
(long) Gbl.FileBrowser.Asg.TimeUTC[Asg_START_TIME]);
|
(long) Gbl.FileBrowser.Asg.TimeUTC[Asg_START_TIME]);
|
||||||
|
@ -5793,7 +5793,7 @@ static void Brw_WriteDatesAssignment (void)
|
||||||
fprintf (Gbl.F.Out,"<td class=\"RIGHT_MIDDLE\" style=\"width:20px;\">"
|
fprintf (Gbl.F.Out,"<td class=\"RIGHT_MIDDLE\" style=\"width:20px;\">"
|
||||||
"<img src=\"%s/arrow%s16x12.gif\""
|
"<img src=\"%s/arrow%s16x12.gif\""
|
||||||
" alt=\"\" title=\"\""
|
" alt=\"\" title=\"\""
|
||||||
" class=\"ICON16x16B\" />"
|
" class=\"ICON16x12B\" />"
|
||||||
"</td>",
|
"</td>",
|
||||||
Gbl.Prefs.IconsURL,
|
Gbl.Prefs.IconsURL,
|
||||||
Gbl.FileBrowser.Asg.Open ? "green" :
|
Gbl.FileBrowser.Asg.Open ? "green" :
|
||||||
|
@ -5805,7 +5805,7 @@ static void Brw_WriteDatesAssignment (void)
|
||||||
Gbl.FileBrowser.Asg.Open ? "ASG_LST_DATE_GREEN" :
|
Gbl.FileBrowser.Asg.Open ? "ASG_LST_DATE_GREEN" :
|
||||||
"ASG_LST_DATE_RED");
|
"ASG_LST_DATE_RED");
|
||||||
fprintf (Gbl.F.Out,"<script type=\"text/javascript\">"
|
fprintf (Gbl.F.Out,"<script type=\"text/javascript\">"
|
||||||
"writeLocalDateTimeFromUTC('asg_end_date%u',%ld);"
|
"writeLocalDateTimeFromUTC('asg_end_date%u',%ld,' ');"
|
||||||
"</script>",
|
"</script>",
|
||||||
UniqueId,
|
UniqueId,
|
||||||
(long) Gbl.FileBrowser.Asg.TimeUTC[Asg_END_TIME]);
|
(long) Gbl.FileBrowser.Asg.TimeUTC[Asg_END_TIME]);
|
||||||
|
@ -8986,7 +8986,7 @@ void Brw_ShowFileMetadata (void)
|
||||||
The_ClassForm[Gbl.Prefs.Theme],Txt_Date_of_creation);
|
The_ClassForm[Gbl.Prefs.Theme],Txt_Date_of_creation);
|
||||||
|
|
||||||
fprintf (Gbl.F.Out,"<script type=\"text/javascript\">"
|
fprintf (Gbl.F.Out,"<script type=\"text/javascript\">"
|
||||||
"writeLocalDateTimeFromUTC('filedate',%ld);"
|
"writeLocalDateTimeFromUTC('filedate',%ld,' ');"
|
||||||
"</script>",
|
"</script>",
|
||||||
(long) FileMetadata.Time);
|
(long) FileMetadata.Time);
|
||||||
|
|
||||||
|
|
|
@ -2087,7 +2087,6 @@ int swad__sendAttendanceEvent (struct soap *soap,
|
||||||
{
|
{
|
||||||
int ReturnCode;
|
int ReturnCode;
|
||||||
struct AttendanceEvent Att;
|
struct AttendanceEvent Att;
|
||||||
time_t StartOrEndTime;
|
|
||||||
bool ItsANewAttEvent;
|
bool ItsANewAttEvent;
|
||||||
const char *Ptr;
|
const char *Ptr;
|
||||||
char LongStr[1+10+1];
|
char LongStr[1+10+1];
|
||||||
|
@ -2151,24 +2150,10 @@ int swad__sendAttendanceEvent (struct soap *soap,
|
||||||
Att.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod;
|
Att.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod;
|
||||||
|
|
||||||
/* startTime */
|
/* startTime */
|
||||||
StartOrEndTime = (time_t) startTime;
|
Att.TimeUTC[Att_START_TIME] = (time_t) startTime;
|
||||||
Dat_GetLocalTimeFromClock (&StartOrEndTime);
|
|
||||||
Att.DateTimes[Att_START_TIME].Date.Year = Gbl.tblock->tm_year + 1900;
|
|
||||||
Att.DateTimes[Att_START_TIME].Date.Month = Gbl.tblock->tm_mon + 1;
|
|
||||||
Att.DateTimes[Att_START_TIME].Date.Day = Gbl.tblock->tm_mday;
|
|
||||||
Att.DateTimes[Att_START_TIME].Time.Hour = Gbl.tblock->tm_hour;
|
|
||||||
Att.DateTimes[Att_START_TIME].Time.Minute = Gbl.tblock->tm_min;
|
|
||||||
Att.DateTimes[Att_START_TIME].Time.Second = Gbl.tblock->tm_sec;
|
|
||||||
|
|
||||||
/* endTime */
|
/* endTime */
|
||||||
StartOrEndTime = (time_t) endTime;
|
Att.TimeUTC[Att_END_TIME ] = (time_t) endTime;
|
||||||
Dat_GetLocalTimeFromClock (&StartOrEndTime);
|
|
||||||
Att.DateTimes[Att_END_TIME].Date.Year = Gbl.tblock->tm_year + 1900;
|
|
||||||
Att.DateTimes[Att_END_TIME].Date.Month = Gbl.tblock->tm_mon + 1;
|
|
||||||
Att.DateTimes[Att_END_TIME].Date.Day = Gbl.tblock->tm_mday;
|
|
||||||
Att.DateTimes[Att_END_TIME].Time.Hour = Gbl.tblock->tm_hour;
|
|
||||||
Att.DateTimes[Att_END_TIME].Time.Minute = Gbl.tblock->tm_min;
|
|
||||||
Att.DateTimes[Att_END_TIME].Time.Second = Gbl.tblock->tm_sec;
|
|
||||||
|
|
||||||
/* Are teacher's comments visible? */
|
/* Are teacher's comments visible? */
|
||||||
Att.CommentTchVisible = (commentsTeachersVisible ? true :
|
Att.CommentTchVisible = (commentsTeachersVisible ? true :
|
||||||
|
|
Loading…
Reference in New Issue