mirror of https://github.com/acanas/swad-core.git
Version 16.101
This commit is contained in:
parent
4de0ee76b1
commit
d42ab47768
|
@ -163,6 +163,7 @@ function setLocalDateTimeFormFromUTC (id,TimeUTC) {
|
|||
var d;
|
||||
var Year;
|
||||
var YearIsValid = false;
|
||||
var Min;
|
||||
|
||||
if (TimeUTC) {
|
||||
d = new Date();
|
||||
|
@ -174,11 +175,18 @@ function setLocalDateTimeFormFromUTC (id,TimeUTC) {
|
|||
YearIsValid = true;
|
||||
}
|
||||
if (YearIsValid) {
|
||||
FormMon.options[d.getMonth() ].selected = true;
|
||||
FormDay.options[d.getDate()-1 ].selected = true;
|
||||
FormHou.options[d.getHours() ].selected = true;
|
||||
FormMin.options[d.getMinutes()].selected = true;
|
||||
FormSec.options[d.getSeconds()].selected = true;
|
||||
FormMon.options[d.getMonth() ].selected = true;
|
||||
FormDay.options[d.getDate()-1].selected = true;
|
||||
FormHou.options[d.getHours() ].selected = true;
|
||||
|
||||
Min = d.getMinutes();
|
||||
for (var i=FormMin.options.length-1; i>=0; i--)
|
||||
if (FormMin.options[i].value <= Min) {
|
||||
FormMin.options[i].selected = true;
|
||||
break;
|
||||
}
|
||||
if (FormSec)
|
||||
FormSec.options[d.getSeconds()].selected = true;
|
||||
}
|
||||
}
|
||||
|
|
@ -391,8 +391,8 @@ static void Agd_ShowEventsToday (Agd_AgendaType_t AgendaType)
|
|||
|
||||
static void Agd_WriteHeaderListEvents (Agd_AgendaType_t AgendaType)
|
||||
{
|
||||
extern const char *Txt_ASG_ATT_SVY_OR_AGD_HELP_ORDER[2];
|
||||
extern const char *Txt_ASG_ATT_SVY_OR_AGD_ORDER[2];
|
||||
extern const char *Txt_START_END_TIME_HELP[2];
|
||||
extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME];
|
||||
extern const char *Txt_Event;
|
||||
extern const char *Txt_Location;
|
||||
Agd_Order_t Order;
|
||||
|
@ -422,10 +422,10 @@ static void Agd_WriteHeaderListEvents (Agd_AgendaType_t AgendaType)
|
|||
}
|
||||
Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage);
|
||||
Par_PutHiddenParamUnsigned ("Order",(unsigned) Order);
|
||||
Act_LinkFormSubmit (Txt_ASG_ATT_SVY_OR_AGD_HELP_ORDER[Order],"TIT_TBL",NULL);
|
||||
Act_LinkFormSubmit (Txt_START_END_TIME_HELP[Order],"TIT_TBL",NULL);
|
||||
if (Order == Gbl.Agenda.SelectedOrderType)
|
||||
fprintf (Gbl.F.Out,"<u>");
|
||||
fprintf (Gbl.F.Out,"%s",Txt_ASG_ATT_SVY_OR_AGD_ORDER[Order]);
|
||||
fprintf (Gbl.F.Out,"%s",Txt_START_END_TIME[Order]);
|
||||
if (Order == Gbl.Agenda.SelectedOrderType)
|
||||
fprintf (Gbl.F.Out,"</u>");
|
||||
fprintf (Gbl.F.Out,"</a>");
|
||||
|
|
|
@ -114,13 +114,13 @@ static void Asg_ShowAllAssignments (void)
|
|||
{
|
||||
extern const char *Hlp_ASSESSMENT_Assignments;
|
||||
extern const char *Txt_Assignments;
|
||||
extern const char *Txt_ASG_ATT_SVY_OR_AGD_HELP_ORDER[2];
|
||||
extern const char *Txt_ASG_ATT_SVY_OR_AGD_ORDER[2];
|
||||
extern const char *Txt_START_END_TIME_HELP[Dat_NUM_START_END_TIME];
|
||||
extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME];
|
||||
extern const char *Txt_Assignment;
|
||||
extern const char *Txt_Upload_files_QUESTION;
|
||||
extern const char *Txt_Folder;
|
||||
extern const char *Txt_No_assignments;
|
||||
tAsgsOrderType Order;
|
||||
Dat_StartEndTime_t Order;
|
||||
struct Pagination Pagination;
|
||||
unsigned NumAsg;
|
||||
|
||||
|
@ -150,8 +150,8 @@ static void Asg_ShowAllAssignments (void)
|
|||
/***** Table head *****/
|
||||
fprintf (Gbl.F.Out,"<table class=\"FRAME_TBL_MARGIN CELLS_PAD_2\">"
|
||||
"<tr>");
|
||||
for (Order = Asg_ORDER_BY_START_DATE;
|
||||
Order <= Asg_ORDER_BY_END_DATE;
|
||||
for (Order = Dat_START_TIME;
|
||||
Order <= Dat_END_TIME;
|
||||
Order++)
|
||||
{
|
||||
fprintf (Gbl.F.Out,"<th class=\"LEFT_MIDDLE\">");
|
||||
|
@ -159,10 +159,10 @@ static void Asg_ShowAllAssignments (void)
|
|||
Grp_PutParamWhichGrps ();
|
||||
Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage);
|
||||
Par_PutHiddenParamUnsigned ("Order",(unsigned) Order);
|
||||
Act_LinkFormSubmit (Txt_ASG_ATT_SVY_OR_AGD_HELP_ORDER[Order],"TIT_TBL",NULL);
|
||||
Act_LinkFormSubmit (Txt_START_END_TIME_HELP[Order],"TIT_TBL",NULL);
|
||||
if (Order == Gbl.Asgs.SelectedOrderType)
|
||||
fprintf (Gbl.F.Out,"<u>");
|
||||
fprintf (Gbl.F.Out,"%s",Txt_ASG_ATT_SVY_OR_AGD_ORDER[Order]);
|
||||
fprintf (Gbl.F.Out,"%s",Txt_START_END_TIME[Order]);
|
||||
if (Order == Gbl.Asgs.SelectedOrderType)
|
||||
fprintf (Gbl.F.Out,"</u>");
|
||||
fprintf (Gbl.F.Out,"</a>");
|
||||
|
@ -326,7 +326,7 @@ static void Asg_ShowOneAssignment (long AsgCod)
|
|||
(Asg.Open ? "DATE_GREEN" :
|
||||
"DATE_RED"),
|
||||
Gbl.RowEvenOdd,
|
||||
UniqueId,Asg.TimeUTC[Asg_START_TIME],Txt_Today);
|
||||
UniqueId,Asg.TimeUTC[Dat_START_TIME],Txt_Today);
|
||||
|
||||
/* End date/time */
|
||||
UniqueId++;
|
||||
|
@ -342,7 +342,7 @@ static void Asg_ShowOneAssignment (long AsgCod)
|
|||
(Asg.Open ? "DATE_GREEN" :
|
||||
"DATE_RED"),
|
||||
Gbl.RowEvenOdd,
|
||||
UniqueId,Asg.TimeUTC[Asg_END_TIME],Txt_Today);
|
||||
UniqueId,Asg.TimeUTC[Dat_END_TIME],Txt_Today);
|
||||
|
||||
/* Assignment title */
|
||||
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP COLOR%u\">"
|
||||
|
@ -520,7 +520,7 @@ static void Asg_GetParamAsgOrderType (void)
|
|||
|
||||
Par_GetParToText ("Order",UnsignedStr,10);
|
||||
if (sscanf (UnsignedStr,"%u",&UnsignedNum) == 1)
|
||||
Gbl.Asgs.SelectedOrderType = (tAsgsOrderType) UnsignedNum;
|
||||
Gbl.Asgs.SelectedOrderType = (Dat_StartEndTime_t) UnsignedNum;
|
||||
else
|
||||
Gbl.Asgs.SelectedOrderType = Asg_DEFAULT_ORDER_TYPE;
|
||||
}
|
||||
|
@ -618,10 +618,10 @@ void Asg_GetListAssignments (void)
|
|||
}
|
||||
switch (Gbl.Asgs.SelectedOrderType)
|
||||
{
|
||||
case Asg_ORDER_BY_START_DATE:
|
||||
case Dat_START_TIME:
|
||||
sprintf (OrderBySubQuery,"StartTime DESC,EndTime DESC,Title DESC");
|
||||
break;
|
||||
case Asg_ORDER_BY_END_DATE:
|
||||
case Dat_END_TIME:
|
||||
sprintf (OrderBySubQuery,"EndTime DESC,StartTime DESC,Title DESC");
|
||||
break;
|
||||
}
|
||||
|
@ -731,8 +731,8 @@ static void Asg_GetDataOfAssignment (struct Assignment *Asg,const char *Query)
|
|||
Asg->AsgCod = -1L;
|
||||
Asg->Hidden = false;
|
||||
Asg->UsrCod = -1L;
|
||||
Asg->TimeUTC[Asg_START_TIME] =
|
||||
Asg->TimeUTC[Asg_END_TIME ] = (time_t) 0;
|
||||
Asg->TimeUTC[Dat_START_TIME] =
|
||||
Asg->TimeUTC[Dat_END_TIME ] = (time_t) 0;
|
||||
Asg->Open = false;
|
||||
Asg->Title[0] = '\0';
|
||||
Asg->SendWork = false;
|
||||
|
@ -757,10 +757,10 @@ static void Asg_GetDataOfAssignment (struct Assignment *Asg,const char *Query)
|
|||
Asg->UsrCod = Str_ConvertStrCodToLongCod (row[2]);
|
||||
|
||||
/* Get start date (row[3] holds the start UTC time) */
|
||||
Asg->TimeUTC[Asg_START_TIME] = Dat_GetUNIXTimeFromStr (row[3]);
|
||||
Asg->TimeUTC[Dat_START_TIME] = Dat_GetUNIXTimeFromStr (row[3]);
|
||||
|
||||
/* Get end date (row[4] holds the end UTC time) */
|
||||
Asg->TimeUTC[Asg_END_TIME ] = Dat_GetUNIXTimeFromStr (row[4]);
|
||||
Asg->TimeUTC[Dat_END_TIME ] = Dat_GetUNIXTimeFromStr (row[4]);
|
||||
|
||||
/* Get whether the assignment is open or closed (row(5)) */
|
||||
Asg->Open = (row[5][0] == '1');
|
||||
|
@ -1090,8 +1090,8 @@ void Asg_RequestCreatOrEditAsg (void)
|
|||
{
|
||||
/* Initialize to empty assignment */
|
||||
Asg.AsgCod = -1L;
|
||||
Asg.TimeUTC[Asg_START_TIME] = Gbl.StartExecutionTimeUTC;
|
||||
Asg.TimeUTC[Asg_END_TIME ] = Gbl.StartExecutionTimeUTC + (2 * 60 * 60); // +2 hours
|
||||
Asg.TimeUTC[Dat_START_TIME] = Gbl.StartExecutionTimeUTC;
|
||||
Asg.TimeUTC[Dat_END_TIME ] = Gbl.StartExecutionTimeUTC + (2 * 60 * 60); // +2 hours
|
||||
Asg.Open = true;
|
||||
Asg.Title[0] = '\0';
|
||||
Asg.SendWork = false;
|
||||
|
@ -1275,8 +1275,8 @@ void Asg_RecFormAssignment (void)
|
|||
}
|
||||
|
||||
/***** Get start/end date-times *****/
|
||||
NewAsg.TimeUTC[Asg_START_TIME] = Dat_GetTimeUTCFromForm ("StartTimeUTC");
|
||||
NewAsg.TimeUTC[Asg_END_TIME ] = Dat_GetTimeUTCFromForm ("EndTimeUTC" );
|
||||
NewAsg.TimeUTC[Dat_START_TIME] = Dat_GetTimeUTCFromForm ("StartTimeUTC");
|
||||
NewAsg.TimeUTC[Dat_END_TIME ] = Dat_GetTimeUTCFromForm ("EndTimeUTC" );
|
||||
|
||||
/***** Get assignment title *****/
|
||||
Par_GetParToText ("Title",NewAsg.Title,Asg_MAX_LENGTH_ASSIGNMENT_TITLE);
|
||||
|
@ -1290,10 +1290,10 @@ void Asg_RecFormAssignment (void)
|
|||
Par_GetParToHTML ("Txt",Txt,Cns_MAX_BYTES_TEXT); // Store in HTML format (not rigorous)
|
||||
|
||||
/***** Adjust dates *****/
|
||||
if (NewAsg.TimeUTC[Asg_START_TIME] == 0)
|
||||
NewAsg.TimeUTC[Asg_START_TIME] = Gbl.StartExecutionTimeUTC;
|
||||
if (NewAsg.TimeUTC[Asg_END_TIME] == 0)
|
||||
NewAsg.TimeUTC[Asg_END_TIME] = NewAsg.TimeUTC[Asg_START_TIME] + 2*60*60; // +2 hours
|
||||
if (NewAsg.TimeUTC[Dat_START_TIME] == 0)
|
||||
NewAsg.TimeUTC[Dat_START_TIME] = Gbl.StartExecutionTimeUTC;
|
||||
if (NewAsg.TimeUTC[Dat_END_TIME] == 0)
|
||||
NewAsg.TimeUTC[Dat_END_TIME] = NewAsg.TimeUTC[Dat_START_TIME] + 2*60*60; // +2 hours
|
||||
|
||||
/***** Check if title is correct *****/
|
||||
if (NewAsg.Title[0]) // If there's an assignment title
|
||||
|
@ -1420,8 +1420,8 @@ static void Asg_CreateAssignment (struct Assignment *Asg,const char *Txt)
|
|||
"'%s','%s','%s')",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||
Asg->TimeUTC[Asg_START_TIME],
|
||||
Asg->TimeUTC[Asg_END_TIME ],
|
||||
Asg->TimeUTC[Dat_START_TIME],
|
||||
Asg->TimeUTC[Dat_END_TIME ],
|
||||
Asg->Title,
|
||||
Asg->Folder,
|
||||
Txt);
|
||||
|
@ -1446,8 +1446,8 @@ static void Asg_UpdateAssignment (struct Assignment *Asg,const char *Txt)
|
|||
"EndTime=FROM_UNIXTIME('%ld'),"
|
||||
"Title='%s',Folder='%s',Txt='%s'"
|
||||
" WHERE AsgCod='%ld' AND CrsCod='%ld'",
|
||||
Asg->TimeUTC[Asg_START_TIME],
|
||||
Asg->TimeUTC[Asg_END_TIME ],
|
||||
Asg->TimeUTC[Dat_START_TIME],
|
||||
Asg->TimeUTC[Dat_END_TIME ],
|
||||
Asg->Title,
|
||||
Asg->Folder,
|
||||
Txt,
|
||||
|
|
|
@ -45,19 +45,12 @@ typedef enum
|
|||
Asg_SEND_WORK = 1,
|
||||
} Asg_SendWork_t;
|
||||
|
||||
#define Asg_NUM_DATES 2
|
||||
typedef enum
|
||||
{
|
||||
Asg_START_TIME = 0,
|
||||
Asg_END_TIME = 1,
|
||||
} Asg_StartOrEndTime_t;
|
||||
|
||||
struct Assignment
|
||||
{
|
||||
long AsgCod;
|
||||
bool Hidden;
|
||||
long UsrCod;
|
||||
time_t TimeUTC[Asg_NUM_DATES];
|
||||
time_t TimeUTC[Dat_NUM_START_END_TIME];
|
||||
bool Open;
|
||||
char Title[Asg_MAX_LENGTH_ASSIGNMENT_TITLE+1];
|
||||
Asg_SendWork_t SendWork;
|
||||
|
@ -68,13 +61,7 @@ struct Assignment
|
|||
// I belong to any of the groups)
|
||||
};
|
||||
|
||||
typedef enum
|
||||
{
|
||||
Asg_ORDER_BY_START_DATE = 0,
|
||||
Asg_ORDER_BY_END_DATE = 1,
|
||||
} tAsgsOrderType;
|
||||
|
||||
#define Asg_DEFAULT_ORDER_TYPE Asg_ORDER_BY_START_DATE
|
||||
#define Asg_DEFAULT_ORDER_TYPE Dat_START_TIME
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** Public prototypes *****************************/
|
||||
|
|
|
@ -194,12 +194,12 @@ static void Att_ShowAllAttEvents (void)
|
|||
{
|
||||
extern const char *Hlp_USERS_Attendance;
|
||||
extern const char *Txt_Events;
|
||||
extern const char *Txt_ASG_ATT_SVY_OR_AGD_HELP_ORDER[2];
|
||||
extern const char *Txt_ASG_ATT_SVY_OR_AGD_ORDER[2];
|
||||
extern const char *Txt_START_END_TIME_HELP[Dat_NUM_START_END_TIME];
|
||||
extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME];
|
||||
extern const char *Txt_Event;
|
||||
extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
|
||||
extern const char *Txt_No_events;
|
||||
Att_EventsOrderType_t Order;
|
||||
Dat_StartEndTime_t Order;
|
||||
struct Pagination Pagination;
|
||||
unsigned NumAttEvent;
|
||||
bool ICanEdit = (Gbl.Usrs.Me.LoggedRole == Rol_TEACHER ||
|
||||
|
@ -230,8 +230,8 @@ static void Att_ShowAllAttEvents (void)
|
|||
/***** Table head *****/
|
||||
fprintf (Gbl.F.Out,"<table class=\"FRAME_TBL_MARGIN CELLS_PAD_2\">"
|
||||
"<tr>");
|
||||
for (Order = Att_ORDER_BY_START_DATE;
|
||||
Order <= Att_ORDER_BY_END_DATE;
|
||||
for (Order = Dat_START_TIME;
|
||||
Order <= Dat_END_TIME;
|
||||
Order++)
|
||||
{
|
||||
fprintf (Gbl.F.Out,"<th class=\"LEFT_MIDDLE\">");
|
||||
|
@ -239,10 +239,10 @@ static void Att_ShowAllAttEvents (void)
|
|||
Grp_PutParamWhichGrps ();
|
||||
Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage);
|
||||
Par_PutHiddenParamUnsigned ("Order",(unsigned) Order);
|
||||
Act_LinkFormSubmit (Txt_ASG_ATT_SVY_OR_AGD_HELP_ORDER[Order],"TIT_TBL",NULL);
|
||||
Act_LinkFormSubmit (Txt_START_END_TIME_HELP[Order],"TIT_TBL",NULL);
|
||||
if (Order == Gbl.AttEvents.SelectedOrderType)
|
||||
fprintf (Gbl.F.Out,"<u>");
|
||||
fprintf (Gbl.F.Out,"%s",Txt_ASG_ATT_SVY_OR_AGD_ORDER[Order]);
|
||||
fprintf (Gbl.F.Out,"%s",Txt_START_END_TIME[Order]);
|
||||
if (Order == Gbl.AttEvents.SelectedOrderType)
|
||||
fprintf (Gbl.F.Out,"</u>");
|
||||
fprintf (Gbl.F.Out,"</a>");
|
||||
|
@ -520,7 +520,7 @@ static void Att_GetParamAttOrderType (void)
|
|||
|
||||
Par_GetParToText ("Order",UnsignedStr,10);
|
||||
if (sscanf (UnsignedStr,"%u",&UnsignedNum) == 1)
|
||||
Gbl.AttEvents.SelectedOrderType = (Att_EventsOrderType_t) UnsignedNum;
|
||||
Gbl.AttEvents.SelectedOrderType = (Dat_StartEndTime_t) UnsignedNum;
|
||||
else
|
||||
Gbl.AttEvents.SelectedOrderType = Att_DEFAULT_ORDER_TYPE;
|
||||
}
|
||||
|
@ -652,13 +652,13 @@ static void Att_GetListAttEvents (Att_OrderTime_t Order)
|
|||
}
|
||||
switch (Gbl.AttEvents.SelectedOrderType)
|
||||
{
|
||||
case Att_ORDER_BY_START_DATE:
|
||||
case Dat_START_TIME:
|
||||
if (Order == Att_NEWEST_FIRST)
|
||||
sprintf (OrderBySubQuery,"StartTime DESC,EndTime DESC,Title DESC");
|
||||
else
|
||||
sprintf (OrderBySubQuery,"StartTime,EndTime,Title");
|
||||
break;
|
||||
case Att_ORDER_BY_END_DATE:
|
||||
case Dat_END_TIME:
|
||||
if (Order == Att_NEWEST_FIRST)
|
||||
sprintf (OrderBySubQuery,"EndTime DESC,StartTime DESC,Title DESC");
|
||||
else
|
||||
|
|
|
@ -58,19 +58,13 @@ struct AttendanceEvent
|
|||
bool Selected; // I have selected this attendance event
|
||||
};
|
||||
|
||||
typedef enum
|
||||
{
|
||||
Att_ORDER_BY_START_DATE = 0,
|
||||
Att_ORDER_BY_END_DATE = 1,
|
||||
} Att_EventsOrderType_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
Att_NEWEST_FIRST,
|
||||
Att_OLDEST_FIRST,
|
||||
} Att_OrderTime_t;
|
||||
|
||||
#define Att_DEFAULT_ORDER_TYPE Att_ORDER_BY_START_DATE
|
||||
#define Att_DEFAULT_ORDER_TYPE Dat_START_TIME
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** Public prototypes *****************************/
|
||||
|
|
|
@ -187,13 +187,15 @@
|
|||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define Log_PLATFORM_VERSION "SWAD 16.100.1 (2016-12-13)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 16.101 (2016-12-14)"
|
||||
#define CSS_FILE "swad16.97.css"
|
||||
#define JS_FILE "swad16.99.js"
|
||||
#define JS_FILE "swad16.101.js"
|
||||
|
||||
// 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
|
||||
/*
|
||||
Version 16.101: Dec 14, 2016 Interval in range of times is 5 minutes when no seconds needed.
|
||||
Code refactoring related to start and end date-time. (210806 lines)
|
||||
Version 16.100.1: Dec 13, 2016 Fixed bugs checking if users share courses. (210828 lines)
|
||||
Version 16.100: Dec 13, 2016 Changes in layout of list of attendance events.
|
||||
Code refactoring related with roles. (210820 lines)
|
||||
|
|
81
swad_date.c
81
swad_date.c
|
@ -219,8 +219,7 @@ void Dat_ConvDateToDateStr (struct Date *Date,char *DateStr)
|
|||
void Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (void)
|
||||
{
|
||||
extern const char *The_ClassForm[The_NUM_THEMES];
|
||||
extern const char *Txt_Start_date;
|
||||
extern const char *Txt_End_date;
|
||||
extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME];
|
||||
extern const char *Txt_Yesterday;
|
||||
extern const char *Txt_Today;
|
||||
|
||||
|
@ -231,7 +230,7 @@ void Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (void)
|
|||
"</td>"
|
||||
"<td class=\"LEFT_MIDDLE\">",
|
||||
The_ClassForm[Gbl.Prefs.Theme],
|
||||
Txt_Start_date);
|
||||
Txt_START_END_TIME[Dat_START_TIME]);
|
||||
/* Date-time */
|
||||
Dat_WriteFormClientLocalDateTimeFromTimeUTC ("Start",
|
||||
"Start",
|
||||
|
@ -260,7 +259,7 @@ void Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (void)
|
|||
"</td>"
|
||||
"<td class=\"LEFT_MIDDLE\">",
|
||||
The_ClassForm[Gbl.Prefs.Theme],
|
||||
Txt_End_date);
|
||||
Txt_START_END_TIME[Dat_END_TIME]);
|
||||
/* Date-time */
|
||||
Dat_WriteFormClientLocalDateTimeFromTimeUTC ("End",
|
||||
"End",
|
||||
|
@ -282,23 +281,17 @@ void Dat_PutFormStartEndClientLocalDateTimes (time_t TimeUTC[2],
|
|||
Dat_FormSeconds FormSeconds)
|
||||
{
|
||||
extern const char *The_ClassForm[The_NUM_THEMES];
|
||||
extern const char *Txt_Start_date;
|
||||
extern const char *Txt_End_date;
|
||||
Asg_StartOrEndTime_t StartOrEndTime;
|
||||
const char *Id[Asg_NUM_DATES] =
|
||||
extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME];
|
||||
Dat_StartEndTime_t StartEndTime;
|
||||
const char *Id[Dat_NUM_START_END_TIME] =
|
||||
{
|
||||
"Start",
|
||||
"End"
|
||||
};
|
||||
const char *Dates[Asg_NUM_DATES] =
|
||||
{
|
||||
Txt_Start_date,
|
||||
Txt_End_date
|
||||
"Start", // Dat_START_TIME
|
||||
"End" // Dat_END_TIME
|
||||
};
|
||||
|
||||
for (StartOrEndTime = 0;
|
||||
StartOrEndTime <= 1;
|
||||
StartOrEndTime++)
|
||||
for (StartEndTime = Dat_START_TIME;
|
||||
StartEndTime <= Dat_END_TIME;
|
||||
StartEndTime++)
|
||||
{
|
||||
fprintf (Gbl.F.Out,"<tr>"
|
||||
"<td class=\"RIGHT_MIDDLE\">"
|
||||
|
@ -308,12 +301,12 @@ void Dat_PutFormStartEndClientLocalDateTimes (time_t TimeUTC[2],
|
|||
"<table class=\"CELLS_PAD_2\">"
|
||||
"<tr>"
|
||||
"<td class=\"LEFT_TOP\">",
|
||||
The_ClassForm[Gbl.Prefs.Theme],Dates[StartOrEndTime]);
|
||||
The_ClassForm[Gbl.Prefs.Theme],Txt_START_END_TIME[StartEndTime]);
|
||||
|
||||
/* Date-time */
|
||||
Dat_WriteFormClientLocalDateTimeFromTimeUTC (Id[StartOrEndTime],
|
||||
Id[StartOrEndTime],
|
||||
TimeUTC[StartOrEndTime],
|
||||
Dat_WriteFormClientLocalDateTimeFromTimeUTC (Id[StartEndTime],
|
||||
Id[StartEndTime],
|
||||
TimeUTC[StartEndTime],
|
||||
Gbl.Now.Date.Year - 1,
|
||||
Gbl.Now.Date.Year + 1,
|
||||
FormSeconds,
|
||||
|
@ -346,6 +339,12 @@ void Dat_WriteFormClientLocalDateTimeFromTimeUTC (const char *Id,
|
|||
unsigned Hour;
|
||||
unsigned Minute;
|
||||
unsigned Second;
|
||||
unsigned MinutesIInterval[Dat_NUM_FORM_SECONDS] =
|
||||
{
|
||||
5, // Dat_FORM_SECONDS_OFF
|
||||
1, // Dat_FORM_SECONDS_ON
|
||||
};
|
||||
|
||||
|
||||
/***** Start table *****/
|
||||
fprintf (Gbl.F.Out,"<table>"
|
||||
|
@ -432,11 +431,13 @@ void Dat_WriteFormClientLocalDateTimeFromTimeUTC (const char *Id,
|
|||
fprintf (Gbl.F.Out,"document.getElementById('%s').submit();",
|
||||
Gbl.Form.Id);
|
||||
fprintf (Gbl.F.Out,"\">");
|
||||
|
||||
for (Minute = 0;
|
||||
Minute <= 59;
|
||||
Minute++)
|
||||
Minute < 60;
|
||||
Minute += MinutesIInterval[FormSeconds])
|
||||
fprintf (Gbl.F.Out,"<option value=\"%u\">%02u '</option>",
|
||||
Minute,Minute);
|
||||
|
||||
fprintf (Gbl.F.Out,"</select>"
|
||||
"</td>");
|
||||
|
||||
|
@ -1130,10 +1131,10 @@ continue:
|
|||
|
||||
181f: ba 1f 85 eb 51 mov $0x51eb851f,%edx // 1374389535
|
||||
|
||||
1824: 8d 0c 70 lea (SumAux,Month,2),Sum // Sum = Day + Year + 2 + Month*2
|
||||
1824: 8d 0c 70 lea (SumAux,Month,2),n // n = Day + Year + 2 + Month*2
|
||||
1827: 89 f8 mov Year,%eax
|
||||
1829: c1 e8 02 shr $2,%eax // Year / 4
|
||||
182c: 01 c1 add %eax,Sum // Sum = Day + Year + 2 + Month*2 + Year/4
|
||||
182c: 01 c1 add %eax,n // n = Day + Year + 2 + Month*2 + Year/4
|
||||
182e: 89 f8 mov Year,%eax
|
||||
1830: bf 25 49 92 24 mov $0x24924925,%edi // 613566757
|
||||
1835: f7 e2 mul %edx // Year * 1374389535
|
||||
|
@ -1141,26 +1142,28 @@ continue:
|
|||
1837: 89 d0 mov %edx,%eax // (Year * 1374389535) / 2^32 = (Year * 2^32 * 2^5 / 100) / 2^32 = (Year * 2^5) / 100
|
||||
1839: c1 ea 05 shr $5,%edx // (Year * 1374389535) / 2^32 / 2^5 = Year / 100
|
||||
183c: c1 e8 07 shr $7,%eax // (Year * 1374389535) / 2^32 / 2^7 = Year / 400
|
||||
183f: 01 c1 add %eax,Sum // Sum = Day + Year + 2 + Month*2 + Year/4 + Year/400
|
||||
183f: 01 c1 add %eax,n // n = Day + Year + 2 + Month*2 + Year/4 + Year/400
|
||||
1841: 8d 44 76 03 lea 3(Month,Month,2),%eax // Month*3 + 3
|
||||
1845: 29 d1 sub %edx,Sum // Sum = Day + Year + 2 + Month*2 + Year/4 + Year/400 - Year/100
|
||||
1845: 29 d1 sub %edx,n // n = Day + Year + 2 + Month*2 + Year/4 + Year/400 - Year/100
|
||||
|
||||
1847: ba cd cc cc cc mov $0xcccccccd,%edx
|
||||
184c: f7 e2 mul %edx // (Month*3 + 3) * 3435973837
|
||||
184e: c1 ea 02 shr $2,%edx // (Month*3 + 3) * 3435973837 / 2^32 / 2^2 = (Month*3 + 3) / 5
|
||||
1851: 01 d1 add %edx,Sum // Sum = Day + Year + 2 + Month*2 + Year/4 + Year/400 - Year/100 + (Month*3 + 3) / 5
|
||||
1851: 01 d1 add %edx,n // n = Day + Year + 2 + Month*2 + Year/4 + Year/400 - Year/100 + (Month*3 + 3) / 5
|
||||
|
||||
1853: 89 c8 mov Sum,%eax
|
||||
1855: 89 ce mov Sum,%esi
|
||||
1853: 89 c8 mov n,%eax
|
||||
1855: 89 ce mov n,%esi
|
||||
|
||||
1857: f7 e7 mul %edi // edx = Sum * 613566757 / 2^32
|
||||
1859: 29 d6 sub %edx,%esi //
|
||||
185b: d1 ee shr %esi //
|
||||
185d: 01 f2 add %esi,%edx //
|
||||
185f: c1 ea 02 shr $2,%edx //
|
||||
1862: 8d 04 d5 00 00 00 00 lea 0(,%rdx,8),%eax //
|
||||
1869: 29 d0 sub %edx,%eax //
|
||||
186b: 29 c1 sub %eax,Sum // Sum % 7
|
||||
// Algorithm for remainder: https://doc.lagout.org/security/Hackers%20Delight.pdf, page 209
|
||||
|
||||
1857: f7 e7 mul %edi // edx = q = M*n/2**32
|
||||
1859: 29 d6 sub %edx,%esi // esi = t = n - q
|
||||
185b: d1 ee shr %esi // esi = t = (n - q)/2
|
||||
185d: 01 f2 add %esi,%edx // edx = t = (n - q)/2 + q = (n + q)/2
|
||||
185f: c1 ea 02 shr $2,%edx // edx = q = (n + q)/8 = (n+Mn/2**32)/8 = floor(n/7)
|
||||
1862: 8d 04 d5 00 00 00 00 lea 0(,%rdx,8),%eax // eax = q*8
|
||||
1869: 29 d0 sub %edx,%eax // eax = q*8-q = q*7
|
||||
186b: 29 c1 sub %eax,%ecx // ecx = r = n - q*7
|
||||
|
||||
186d: 83 c1 05 add $5,Mod // Mod += 5
|
||||
1870: 89 c8 mov Mod,%eax
|
||||
|
|
|
@ -77,6 +77,14 @@ typedef enum
|
|||
Dat_FUTURE = 2,
|
||||
} Dat_TimeStatus_t;
|
||||
|
||||
#define Dat_NUM_START_END_TIME 2
|
||||
typedef enum
|
||||
{
|
||||
Dat_START_TIME = 0,
|
||||
Dat_END_TIME = 1,
|
||||
} Dat_StartEndTime_t;
|
||||
|
||||
#define Dat_NUM_FORM_SECONDS 2
|
||||
typedef enum
|
||||
{
|
||||
Dat_FORM_SECONDS_OFF,
|
||||
|
|
|
@ -6155,7 +6155,7 @@ static void Brw_WriteDatesAssignment (void)
|
|||
"%ld,', ','%s',true,false,true);"
|
||||
"</script>",
|
||||
UniqueId,
|
||||
(long) Gbl.FileBrowser.Asg.TimeUTC[Asg_START_TIME],Txt_Today);
|
||||
(long) Gbl.FileBrowser.Asg.TimeUTC[Dat_START_TIME],Txt_Today);
|
||||
fprintf (Gbl.F.Out,"</span>");
|
||||
|
||||
/***** Arrow *****/
|
||||
|
@ -6176,7 +6176,7 @@ static void Brw_WriteDatesAssignment (void)
|
|||
"%ld,', ','%s',false,false,true);"
|
||||
"</script>",
|
||||
UniqueId,
|
||||
(long) Gbl.FileBrowser.Asg.TimeUTC[Asg_END_TIME],Txt_Today);
|
||||
(long) Gbl.FileBrowser.Asg.TimeUTC[Dat_END_TIME],Txt_Today);
|
||||
fprintf (Gbl.F.Out,"</span>");
|
||||
}
|
||||
else
|
||||
|
|
|
@ -550,7 +550,7 @@ struct Globals
|
|||
bool LstIsRead; // Is the list already read from database, or it needs to be read?
|
||||
unsigned Num; // Number of assignments
|
||||
long *LstAsgCods; // List of assigment codes
|
||||
tAsgsOrderType SelectedOrderType;
|
||||
Dat_StartEndTime_t SelectedOrderType;
|
||||
long AsgCodToEdit; // Used as parameter in contextual links
|
||||
} Asgs;
|
||||
struct
|
||||
|
@ -558,7 +558,7 @@ struct Globals
|
|||
bool LstIsRead; // Is the list already read from database, or it needs to be read?
|
||||
unsigned Num; // Number of attendance events
|
||||
struct AttendanceEvent *Lst; // List of attendance events
|
||||
Att_EventsOrderType_t SelectedOrderType;
|
||||
Dat_StartEndTime_t SelectedOrderType;
|
||||
long AttCod;
|
||||
bool ShowDetails;
|
||||
char *StrAttCodsSelected;
|
||||
|
|
|
@ -904,8 +904,7 @@ static void Hld_PutFormToCreateHoliday (void)
|
|||
extern const char *Txt_New_holiday;
|
||||
extern const char *Txt_Place;
|
||||
extern const char *Txt_Type;
|
||||
extern const char *Txt_Start_date;
|
||||
extern const char *Txt_End_date;
|
||||
extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME];
|
||||
extern const char *Txt_Holiday;
|
||||
extern const char *Txt_HOLIDAY_TYPES[Hld_NUM_TYPES_HOLIDAY];
|
||||
extern const char *Txt_Create_holiday;
|
||||
|
@ -942,8 +941,8 @@ static void Hld_PutFormToCreateHoliday (void)
|
|||
"</tr>",
|
||||
Txt_Place,
|
||||
Txt_Type,
|
||||
Txt_Start_date,
|
||||
Txt_End_date,
|
||||
Txt_START_END_TIME[Dat_START_TIME],
|
||||
Txt_START_END_TIME[Dat_END_TIME],
|
||||
Txt_Holiday);
|
||||
|
||||
/***** Holiday place *****/
|
||||
|
@ -1023,8 +1022,7 @@ static void Hld_PutHeadHolidays (void)
|
|||
extern const char *Txt_Code;
|
||||
extern const char *Txt_Place;
|
||||
extern const char *Txt_Type;
|
||||
extern const char *Txt_Start_date;
|
||||
extern const char *Txt_End_date;
|
||||
extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME];
|
||||
extern const char *Txt_Holiday;
|
||||
|
||||
fprintf (Gbl.F.Out,"<tr>"
|
||||
|
@ -1051,8 +1049,8 @@ static void Hld_PutHeadHolidays (void)
|
|||
Txt_Code,
|
||||
Txt_Place,
|
||||
Txt_Type,
|
||||
Txt_Start_date,
|
||||
Txt_End_date,
|
||||
Txt_START_END_TIME[Dat_START_TIME],
|
||||
Txt_START_END_TIME[Dat_END_TIME],
|
||||
Txt_Holiday);
|
||||
}
|
||||
|
||||
|
|
|
@ -187,8 +187,8 @@ static void Svy_ListAllSurveys (struct SurveyQuestion *SvyQst)
|
|||
{
|
||||
extern const char *Hlp_STATS_Surveys;
|
||||
extern const char *Txt_Surveys;
|
||||
extern const char *Txt_ASG_ATT_SVY_OR_AGD_HELP_ORDER[2];
|
||||
extern const char *Txt_ASG_ATT_SVY_OR_AGD_ORDER[2];
|
||||
extern const char *Txt_START_END_TIME_HELP[Dat_NUM_START_END_TIME];
|
||||
extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME];
|
||||
extern const char *Txt_Survey;
|
||||
extern const char *Txt_Status;
|
||||
extern const char *Txt_No_surveys;
|
||||
|
@ -237,10 +237,10 @@ static void Svy_ListAllSurveys (struct SurveyQuestion *SvyQst)
|
|||
Grp_PutParamWhichGrps ();
|
||||
Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage);
|
||||
Par_PutHiddenParamUnsigned ("Order",(unsigned) Order);
|
||||
Act_LinkFormSubmit (Txt_ASG_ATT_SVY_OR_AGD_HELP_ORDER[Order],"TIT_TBL",NULL);
|
||||
Act_LinkFormSubmit (Txt_START_END_TIME_HELP[Order],"TIT_TBL",NULL);
|
||||
if (Order == Gbl.Svys.SelectedOrderType)
|
||||
fprintf (Gbl.F.Out,"<u>");
|
||||
fprintf (Gbl.F.Out,"%s",Txt_ASG_ATT_SVY_OR_AGD_ORDER[Order]);
|
||||
fprintf (Gbl.F.Out,"%s",Txt_START_END_TIME[Order]);
|
||||
if (Order == Gbl.Svys.SelectedOrderType)
|
||||
fprintf (Gbl.F.Out,"</u>");
|
||||
fprintf (Gbl.F.Out,"</a>");
|
||||
|
@ -2163,8 +2163,8 @@ void Svy_RecFormSurvey (void)
|
|||
}
|
||||
|
||||
/***** Get start/end date-times *****/
|
||||
NewSvy.TimeUTC[Asg_START_TIME] = Dat_GetTimeUTCFromForm ("StartTimeUTC");
|
||||
NewSvy.TimeUTC[Asg_END_TIME ] = Dat_GetTimeUTCFromForm ("EndTimeUTC" );
|
||||
NewSvy.TimeUTC[Dat_START_TIME] = Dat_GetTimeUTCFromForm ("StartTimeUTC");
|
||||
NewSvy.TimeUTC[Dat_END_TIME ] = Dat_GetTimeUTCFromForm ("EndTimeUTC" );
|
||||
|
||||
/***** Get survey title *****/
|
||||
Par_GetParToText ("Title",NewSvy.Title,Svy_MAX_LENGTH_SURVEY_TITLE);
|
||||
|
|
25
swad_text.c
25
swad_text.c
|
@ -3036,7 +3036,7 @@ const char *Txt_Assignments_and_other_works =
|
|||
"Atividades e outros trabalhos";
|
||||
#endif
|
||||
|
||||
const char *Txt_ASG_ATT_SVY_OR_AGD_HELP_ORDER[2] =
|
||||
const char *Txt_START_END_TIME_HELP[Dat_NUM_START_END_TIME] =
|
||||
{
|
||||
#if L==1
|
||||
"Ordenar per data de començament"
|
||||
|
@ -3079,7 +3079,7 @@ const char *Txt_ASG_ATT_SVY_OR_AGD_HELP_ORDER[2] =
|
|||
#endif
|
||||
};
|
||||
|
||||
const char *Txt_ASG_ATT_SVY_OR_AGD_ORDER[2] =
|
||||
const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME] =
|
||||
{
|
||||
#if L==1
|
||||
"Inici"
|
||||
|
@ -37751,27 +37751,6 @@ const char *Txt_Source_of_information =
|
|||
"Fonte de informação";
|
||||
#endif
|
||||
|
||||
const char *Txt_Start_date =
|
||||
#if L==1
|
||||
"Data inicial";
|
||||
#elif L==2
|
||||
"Startdatum";
|
||||
#elif L==3
|
||||
"Start date";
|
||||
#elif L==4
|
||||
"Fecha inicial";
|
||||
#elif L==5
|
||||
"Date initiale";
|
||||
#elif L==6
|
||||
"Fecha inicial"; // Okoteve traducción
|
||||
#elif L==7
|
||||
"Data iniziale";
|
||||
#elif L==8
|
||||
"Data rozpoczęcia";
|
||||
#elif L==9
|
||||
"Data de início";
|
||||
#endif
|
||||
|
||||
const char *Txt_STAT_CLICKS_GROUPED_BY[Sta_NUM_CLICKS_GROUPED_BY] =
|
||||
{
|
||||
#if L==1
|
||||
|
|
Loading…
Reference in New Issue