Version19.134.1

This commit is contained in:
Antonio Cañas Vargas 2020-02-26 19:35:33 +01:00
parent 2156852d42
commit 6b437f020d
19 changed files with 220 additions and 191 deletions

View File

@ -398,16 +398,16 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
[ActChgCrsYeaCfg ] = {1573,-1,TabUnk,ActSeeCrsInf ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,CrsCfg_ChangeCrsYear ,CrsCfg_ContEditAfterChgCrs ,NULL}, [ActChgCrsYeaCfg ] = {1573,-1,TabUnk,ActSeeCrsInf ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,CrsCfg_ChangeCrsYear ,CrsCfg_ContEditAfterChgCrs ,NULL},
[ActEdiCrsInf ] = { 848,-1,TabUnk,ActSeeCrsInf ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_FormsToSelSendInfo ,NULL}, [ActEdiCrsInf ] = { 848,-1,TabUnk,ActSeeCrsInf ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_FormsToSelSendInfo ,NULL},
[ActFrmNewPrgIte ] = {1822,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_RequestCreatOrEditPrgItem ,NULL}, [ActFrmNewPrgItm ] = {1822,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_RequestCreatOrEditPrgItem ,NULL},
[ActEdiOnePrgIte ] = {1823,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_RequestCreatOrEditPrgItem ,NULL}, [ActEdiOnePrgItm ] = {1823,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_RequestCreatOrEditPrgItem ,NULL},
[ActNewPrgIte ] = {1825,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_RecFormPrgItem ,NULL}, [ActNewPrgItm ] = {1825,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_RecFormPrgItem ,NULL},
[ActChgPrgIte ] = {1826,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_RecFormPrgItem ,NULL}, [ActChgPrgItm ] = {1826,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_RecFormPrgItem ,NULL},
[ActReqRemPrgIte ] = {1827,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_ReqRemPrgItem ,NULL}, [ActReqRemPrgItm ] = {1827,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_ReqRemPrgItem ,NULL},
[ActRemPrgIte ] = {1828,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_RemovePrgItem ,NULL}, [ActRemPrgItm ] = {1828,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_RemovePrgItem ,NULL},
[ActHidPrgIte ] = {1829,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_HidePrgItem ,NULL}, [ActHidPrgItm ] = {1829,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_HidePrgItem ,NULL},
[ActShoPrgIte ] = {1830,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_ShowPrgItem ,NULL}, [ActShoPrgItm ] = {1830,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_ShowPrgItem ,NULL},
[ActUp_PrgIte ] = {1831,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_MoveUpPrgItem ,NULL}, [ActUp_PrgItm ] = {1831,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_MoveUpPrgItem ,NULL},
[ActDwnPrgIte ] = {1832,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_MoveDownPrgItem ,NULL}, [ActDwnPrgItm ] = {1832,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_MoveDownPrgItem ,NULL},
[ActEdiTchGui ] = { 785,-1,TabUnk,ActSeeTchGui ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_FormsToSelSendInfo ,NULL}, [ActEdiTchGui ] = { 785,-1,TabUnk,ActSeeTchGui ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_FormsToSelSendInfo ,NULL},
@ -3549,17 +3549,17 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
ActPrnSysInf, // #1819 ActPrnSysInf, // #1819
ActMtn, // #1820 ActMtn, // #1820
ActSeePrg, // #1821 ActSeePrg, // #1821
ActFrmNewPrgIte, // #1822 ActFrmNewPrgItm, // #1822
ActEdiOnePrgIte, // #1823 ActEdiOnePrgItm, // #1823
-1, // #1824 -1, // #1824
ActNewPrgIte, // #1825 ActNewPrgItm, // #1825
ActChgPrgIte, // #1826 ActChgPrgItm, // #1826
ActReqRemPrgIte, // #1827 ActReqRemPrgItm, // #1827
ActRemPrgIte, // #1828 ActRemPrgItm, // #1828
ActHidPrgIte, // #1829 ActHidPrgItm, // #1829
ActShoPrgIte, // #1830 ActShoPrgItm, // #1830
ActUp_PrgIte, // #1832 ActUp_PrgItm, // #1832
ActDwnPrgIte, // #1833 ActDwnPrgItm, // #1833
}; };
/*****************************************************************************/ /*****************************************************************************/

View File

@ -384,16 +384,16 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to
#define ActChgInsCrsCodCfg (ActChgCrsSta + 13) #define ActChgInsCrsCodCfg (ActChgCrsSta + 13)
#define ActChgCrsYeaCfg (ActChgCrsSta + 14) #define ActChgCrsYeaCfg (ActChgCrsSta + 14)
#define ActEdiCrsInf (ActChgCrsSta + 15) #define ActEdiCrsInf (ActChgCrsSta + 15)
#define ActFrmNewPrgIte (ActChgCrsSta + 16) #define ActFrmNewPrgItm (ActChgCrsSta + 16)
#define ActEdiOnePrgIte (ActChgCrsSta + 17) #define ActEdiOnePrgItm (ActChgCrsSta + 17)
#define ActNewPrgIte (ActChgCrsSta + 18) #define ActNewPrgItm (ActChgCrsSta + 18)
#define ActChgPrgIte (ActChgCrsSta + 19) #define ActChgPrgItm (ActChgCrsSta + 19)
#define ActReqRemPrgIte (ActChgCrsSta + 20) #define ActReqRemPrgItm (ActChgCrsSta + 20)
#define ActRemPrgIte (ActChgCrsSta + 21) #define ActRemPrgItm (ActChgCrsSta + 21)
#define ActHidPrgIte (ActChgCrsSta + 22) #define ActHidPrgItm (ActChgCrsSta + 22)
#define ActShoPrgIte (ActChgCrsSta + 23) #define ActShoPrgItm (ActChgCrsSta + 23)
#define ActUp_PrgIte (ActChgCrsSta + 24) #define ActUp_PrgItm (ActChgCrsSta + 24)
#define ActDwnPrgIte (ActChgCrsSta + 25) #define ActDwnPrgItm (ActChgCrsSta + 25)
#define ActEdiTchGui (ActChgCrsSta + 26) #define ActEdiTchGui (ActChgCrsSta + 26)
#define ActSeeSylLec (ActChgCrsSta + 27) #define ActSeeSylLec (ActChgCrsSta + 27)
#define ActSeeSylPra (ActChgCrsSta + 28) #define ActSeeSylPra (ActChgCrsSta + 28)

View File

@ -1453,6 +1453,11 @@ void Agd_RequestCreatOrEditEvent (void)
struct AgendaEvent AgdEvent; struct AgendaEvent AgdEvent;
bool ItsANewEvent; bool ItsANewEvent;
char Txt[Cns_MAX_BYTES_TEXT + 1]; char Txt[Cns_MAX_BYTES_TEXT + 1];
static const Dat_SetHMS SetHMS[Dat_NUM_START_END_TIME] =
{
Dat_HMS_TO_000000,
Dat_HMS_TO_235959
};
/***** Get parameters *****/ /***** Get parameters *****/
Agd_GetParams (Agd_MY_AGENDA); Agd_GetParams (Agd_MY_AGENDA);
@ -1534,7 +1539,8 @@ void Agd_RequestCreatOrEditEvent (void)
/***** Start and end dates *****/ /***** Start and end dates *****/
Dat_PutFormStartEndClientLocalDateTimes (AgdEvent.TimeUTC, Dat_PutFormStartEndClientLocalDateTimes (AgdEvent.TimeUTC,
Dat_FORM_SECONDS_OFF); Dat_FORM_SECONDS_OFF,
SetHMS);
/***** Text *****/ /***** Text *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);

View File

@ -1106,6 +1106,11 @@ void Asg_RequestCreatOrEditAsg (void)
struct Assignment Asg; struct Assignment Asg;
bool ItsANewAssignment; bool ItsANewAssignment;
char Txt[Cns_MAX_BYTES_TEXT + 1]; char Txt[Cns_MAX_BYTES_TEXT + 1];
static const Dat_SetHMS SetHMS[Dat_NUM_START_END_TIME] =
{
Dat_HMS_TO_000000,
Dat_HMS_TO_235959
};
/***** Get parameters *****/ /***** Get parameters *****/
Asg_GetParamAsgOrder (); Asg_GetParamAsgOrder ();
@ -1178,7 +1183,9 @@ void Asg_RequestCreatOrEditAsg (void)
HTM_TR_End (); HTM_TR_End ();
/***** Assignment start and end dates *****/ /***** Assignment start and end dates *****/
Dat_PutFormStartEndClientLocalDateTimes (Asg.TimeUTC,Dat_FORM_SECONDS_ON); Dat_PutFormStartEndClientLocalDateTimes (Asg.TimeUTC,
Dat_FORM_SECONDS_ON,
SetHMS);
/***** Send work? *****/ /***** Send work? *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);

View File

@ -1013,6 +1013,11 @@ void Att_RequestCreatOrEditAttEvent (void)
struct AttendanceEvent Att; struct AttendanceEvent Att;
bool ItsANewAttEvent; bool ItsANewAttEvent;
char Description[Cns_MAX_BYTES_TEXT + 1]; char Description[Cns_MAX_BYTES_TEXT + 1];
static const Dat_SetHMS SetHMS[Dat_NUM_START_END_TIME] =
{
Dat_HMS_DO_NOT_SET,
Dat_HMS_DO_NOT_SET
};
/***** Get parameters *****/ /***** Get parameters *****/
Att_GetParamAttOrder (); Att_GetParamAttOrder ();
@ -1085,7 +1090,9 @@ void Att_RequestCreatOrEditAttEvent (void)
HTM_TR_End (); HTM_TR_End ();
/***** Assignment start and end dates *****/ /***** Assignment start and end dates *****/
Dat_PutFormStartEndClientLocalDateTimes (Att.TimeUTC,Dat_FORM_SECONDS_ON); Dat_PutFormStartEndClientLocalDateTimes (Att.TimeUTC,
Dat_FORM_SECONDS_ON,
SetHMS);
/***** Visibility of comments *****/ /***** Visibility of comments *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);

View File

@ -497,7 +497,7 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD: En OpenSWAD:
ps2pdf source.ps destination.pdf ps2pdf source.ps destination.pdf
*/ */
#define Log_PLATFORM_VERSION "SWAD 19.134 (2020-02-26)" #define Log_PLATFORM_VERSION "SWAD 19.134.1 (2020-02-26)"
#define CSS_FILE "swad19.133.1.css" #define CSS_FILE "swad19.133.1.css"
#define JS_FILE "swad19.91.1.js" #define JS_FILE "swad19.91.1.js"
/* /*
@ -522,13 +522,13 @@ Param
// TODO: En la lista de conectados central, poner el logo de la institución a la que pertenece el usuario // TODO: En la lista de conectados central, poner el logo de la institución a la que pertenece el usuario
// TODO: Miguel Damas: por defecto, marcar "Permitir que los profesores..." en los test (que ya esté marcado en lugar de desmarcado) // TODO: Miguel Damas: por defecto, marcar "Permitir que los profesores..." en los test (que ya esté marcado en lugar de desmarcado)
// TODO: Si el alumno ha marcado "Permitir que los profesores...", entonces pedir confirmación al pulsar el botón azul, para evitar que se envíe por error antes de tiempo // TODO: Si el alumno ha marcado "Permitir que los profesores...", entonces pedir confirmación al pulsar el botón azul, para evitar que se envíe por error antes de tiempo
// TODO: Order program items on indexes
Version 19.134.1: Feb 26, 2020 Order course program items by indexes. (282022 lines)
Version 19.134: Feb 26, 2020 Move up and down a course program item. Not finished. (281991 lines) Version 19.134: Feb 26, 2020 Move up and down a course program item. Not finished. (281991 lines)
5 changes necessary in database: 5 changes necessary in database:
ALTER TABLE prg_items CHANGE COLUMN PrgIteCod ItmCod INT NOT NULL AUTO_INCREMENT; ALTER TABLE prg_items CHANGE COLUMN PrgItmCod ItmCod INT NOT NULL AUTO_INCREMENT;
ALTER TABLE prg_items ADD COLUMN ItmInd INT NOT NULL DEFAULT 0 AFTER ItmCod; ALTER TABLE prg_items ADD COLUMN ItmInd INT NOT NULL DEFAULT 0 AFTER ItmCod;
ALTER TABLE prg_grp CHANGE COLUMN PrgIteCod ItmCod INT NOT NULL; ALTER TABLE prg_grp CHANGE COLUMN PrgItmCod ItmCod INT NOT NULL;
Only if you use MyISAM: Only if you use MyISAM:
ALTER TABLE prg_items ENGINE=MyISAM; ALTER TABLE prg_items ENGINE=MyISAM;
ALTER TABLE prg_grp ENGINE=MyISAM; ALTER TABLE prg_grp ENGINE=MyISAM;
@ -544,8 +544,8 @@ ALTER TABLE prg_grp ENGINE=MyISAM;
Version 19.130.1: Feb 24, 2020 Fixed bugs related to database. (281259 lines) Version 19.130.1: Feb 24, 2020 Fixed bugs related to database. (281259 lines)
Version 19.130: Feb 20, 2020 New module swad_program. (281273 lines) Version 19.130: Feb 20, 2020 New module swad_program. (281273 lines)
2 changes necessary in database: 2 changes necessary in database:
CREATE TABLE IF NOT EXISTS prg_grp (PrgIteCod INT NOT NULL,GrpCod INT NOT NULL,UNIQUE INDEX(PrgIteCod,GrpCod)); CREATE TABLE IF NOT EXISTS prg_grp (PrgItmCod INT NOT NULL,GrpCod INT NOT NULL,UNIQUE INDEX(PrgItmCod,GrpCod));
CREATE TABLE IF NOT EXISTS prg_items (PrgIteCod INT NOT NULL AUTO_INCREMENT,CrsCod INT NOT NULL DEFAULT -1,Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',UsrCod INT NOT NULL,StartTime DATETIME NOT NULL,EndTime DATETIME NOT NULL,Title VARCHAR(2047) NOT NULL,Txt TEXT NOT NULL,UNIQUE INDEX(PrgIteCod),INDEX(CrsCod,Hidden)); CREATE TABLE IF NOT EXISTS prg_items (PrgItmCod INT NOT NULL AUTO_INCREMENT,CrsCod INT NOT NULL DEFAULT -1,Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',UsrCod INT NOT NULL,StartTime DATETIME NOT NULL,EndTime DATETIME NOT NULL,Title VARCHAR(2047) NOT NULL,Txt TEXT NOT NULL,UNIQUE INDEX(PrgItmCod),INDEX(CrsCod,Hidden));
Version 19.129: Feb 20, 2020 New option for schedule in course. (279240 lines) Version 19.129: Feb 20, 2020 New option for schedule in course. (279240 lines)
Copy the following icons to icon public directory: Copy the following icons to icon public directory:

View File

@ -422,7 +422,7 @@ void Dat_ConvDateToDateStr (struct Date *Date,char StrDate[Cns_MAX_BYTES_DATE +
/*************** Show forms to enter initial and ending dates ****************/ /*************** Show forms to enter initial and ending dates ****************/
/*****************************************************************************/ /*****************************************************************************/
void Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (bool SetHMS000000To235959) void Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (const Dat_SetHMS SetHMS[Dat_NUM_START_END_TIME])
{ {
extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME]; extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME];
extern const char *Txt_Yesterday; extern const char *Txt_Yesterday;
@ -432,7 +432,7 @@ void Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (bool SetHMS00000
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
/* Label */ /* Label */
Frm_LabelColumn ("RM",NULL,Txt_START_END_TIME[Dat_START_TIME]); Frm_LabelColumn ("RM","",Txt_START_END_TIME[Dat_START_TIME]);
/* Data (date-time) */ /* Data (date-time) */
HTM_TD_Begin ("class=\"LM\""); HTM_TD_Begin ("class=\"LM\"");
@ -442,9 +442,8 @@ void Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (bool SetHMS00000
Cfg_LOG_START_YEAR, Cfg_LOG_START_YEAR,
Gbl.Now.Date.Year, Gbl.Now.Date.Year,
Dat_FORM_SECONDS_ON, Dat_FORM_SECONDS_ON,
SetHMS000000To235959 ? Dat_HMS_TO_000000 : // Set hour, minute and second to 00:00:00 SetHMS[Dat_START_TIME],
Dat_HMS_DO_NOT_SET, // Don't set hour, minute and second to 00:00:00 false); // Don't submit on change
false); // Don't submit on change
/* "Yesterday" and "Today" buttons */ /* "Yesterday" and "Today" buttons */
HTM_NBSP (); HTM_NBSP ();
@ -460,7 +459,7 @@ void Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (bool SetHMS00000
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
/* Label */ /* Label */
Frm_LabelColumn ("RM",NULL,Txt_START_END_TIME[Dat_END_TIME]); Frm_LabelColumn ("RM","",Txt_START_END_TIME[Dat_END_TIME]);
/* Data (date-time) */ /* Data (date-time) */
HTM_TD_Begin ("class=\"LM\""); HTM_TD_Begin ("class=\"LM\"");
@ -470,9 +469,8 @@ void Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (bool SetHMS00000
Cfg_LOG_START_YEAR, Cfg_LOG_START_YEAR,
Gbl.Now.Date.Year, Gbl.Now.Date.Year,
Dat_FORM_SECONDS_ON, Dat_FORM_SECONDS_ON,
SetHMS000000To235959 ? Dat_HMS_TO_235959 : // Set hour, minute and second to 23:59:59 SetHMS[Dat_END_TIME],
Dat_HMS_DO_NOT_SET, // Don't set hour, minute and second false); // Don't submit on change
false); // Don't submit on change
HTM_TD_End (); HTM_TD_End ();
HTM_TR_End (); HTM_TR_End ();
@ -483,7 +481,8 @@ void Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (bool SetHMS00000
/*****************************************************************************/ /*****************************************************************************/
void Dat_PutFormStartEndClientLocalDateTimes (time_t TimeUTC[2], void Dat_PutFormStartEndClientLocalDateTimes (time_t TimeUTC[2],
Dat_FormSeconds FormSeconds) Dat_FormSeconds FormSeconds,
const Dat_SetHMS SetHMS[Dat_NUM_START_END_TIME])
{ {
extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME]; extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME];
Dat_StartEndTime_t StartEndTime; Dat_StartEndTime_t StartEndTime;
@ -501,7 +500,7 @@ void Dat_PutFormStartEndClientLocalDateTimes (time_t TimeUTC[2],
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
/* Label */ /* Label */
Frm_LabelColumn ("RM",NULL,Txt_START_END_TIME[StartEndTime]); Frm_LabelColumn ("RM","",Txt_START_END_TIME[StartEndTime]);
/* Data */ /* Data */
HTM_TD_Begin ("class=\"LM\""); HTM_TD_Begin ("class=\"LM\"");
@ -511,8 +510,8 @@ void Dat_PutFormStartEndClientLocalDateTimes (time_t TimeUTC[2],
Cfg_LOG_START_YEAR, Cfg_LOG_START_YEAR,
Gbl.Now.Date.Year + 1, Gbl.Now.Date.Year + 1,
FormSeconds, FormSeconds,
Dat_HMS_DO_NOT_SET, // Don't set hour, minute and second SetHMS[StartEndTime], // Set hour, minute and second?
false); // Don't submit on change false); // Don't submit on change
HTM_TD_End (); HTM_TD_End ();
HTM_TR_End (); HTM_TR_End ();

View File

@ -143,9 +143,10 @@ void Dat_ShowClientLocalTime (void);
struct tm *Dat_GetLocalTimeFromClock (const time_t *timep); struct tm *Dat_GetLocalTimeFromClock (const time_t *timep);
void Dat_ConvDateToDateStr (struct Date *Date,char StrDate[Cns_MAX_BYTES_DATE + 1]); void Dat_ConvDateToDateStr (struct Date *Date,char StrDate[Cns_MAX_BYTES_DATE + 1]);
void Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (bool SetHMS000000To235959); void Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (const Dat_SetHMS SetHMS[Dat_NUM_START_END_TIME]);
void Dat_PutFormStartEndClientLocalDateTimes (time_t TimeUTC[2], void Dat_PutFormStartEndClientLocalDateTimes (time_t TimeUTC[2],
Dat_FormSeconds FormSeconds); Dat_FormSeconds FormSeconds,
const Dat_SetHMS SetHMS[Dat_NUM_START_END_TIME]);
void Dat_WriteFormClientLocalDateTimeFromTimeUTC (const char *Id, void Dat_WriteFormClientLocalDateTimeFromTimeUTC (const char *Id,
const char *ParamName, const char *ParamName,

View File

@ -300,7 +300,6 @@ void Gbl_InitializeGlobals (void)
Gbl.Prg.LstIsRead = false; // List is not read Gbl.Prg.LstIsRead = false; // List is not read
Gbl.Prg.Num = 0; Gbl.Prg.Num = 0;
Gbl.Prg.LstItmCods = NULL; Gbl.Prg.LstItmCods = NULL;
Gbl.Prg.SelectedOrder = Prg_ORDER_DEFAULT;
Gbl.Asgs.LstIsRead = false; // List is not read Gbl.Asgs.LstIsRead = false; // List is not read
Gbl.Asgs.Num = 0; Gbl.Asgs.Num = 0;

View File

@ -543,8 +543,6 @@ struct Globals
bool LstIsRead; // Is the list already read from database, or it needs to be read? bool LstIsRead; // Is the list already read from database, or it needs to be read?
unsigned Num; // Number of items unsigned Num; // Number of items
long *LstItmCods; // List of items codes long *LstItmCods; // List of items codes
Dat_StartEndTime_t SelectedOrder;
// long ItmCodToEdit; // Used as parameter in contextual links
unsigned CurrentPage; unsigned CurrentPage;
} Prg; } Prg;
struct struct

View File

@ -170,7 +170,6 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
case Pag_COURSE_PROGRAM: case Pag_COURSE_PROGRAM:
Frm_StartFormAnchor (ActSeePrg,Pagination->Anchor); Frm_StartFormAnchor (ActSeePrg,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,1); Pag_PutHiddenParamPagNum (WhatPaginate,1);
Prg_PutHiddenParamPrgOrder ();
Grp_PutParamWhichGrps (); Grp_PutParamWhichGrps ();
break; break;
case Pag_ASSIGNMENTS: case Pag_ASSIGNMENTS:
@ -290,7 +289,6 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
case Pag_COURSE_PROGRAM: case Pag_COURSE_PROGRAM:
Frm_StartFormAnchor (ActSeePrg,Pagination->Anchor); Frm_StartFormAnchor (ActSeePrg,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,1); Pag_PutHiddenParamPagNum (WhatPaginate,1);
Prg_PutHiddenParamPrgOrder ();
Grp_PutParamWhichGrps (); Grp_PutParamWhichGrps ();
break; break;
case Pag_ASSIGNMENTS: case Pag_ASSIGNMENTS:
@ -396,7 +394,6 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
case Pag_COURSE_PROGRAM: case Pag_COURSE_PROGRAM:
Frm_StartFormAnchor (ActSeePrg,Pagination->Anchor); Frm_StartFormAnchor (ActSeePrg,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->LeftPage); Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->LeftPage);
Prg_PutHiddenParamPrgOrder ();
Grp_PutParamWhichGrps (); Grp_PutParamWhichGrps ();
break; break;
case Pag_ASSIGNMENTS: case Pag_ASSIGNMENTS:
@ -514,7 +511,6 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
case Pag_COURSE_PROGRAM: case Pag_COURSE_PROGRAM:
Frm_StartFormAnchor (ActSeePrg,Pagination->Anchor); Frm_StartFormAnchor (ActSeePrg,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,NumPage); Pag_PutHiddenParamPagNum (WhatPaginate,NumPage);
Prg_PutHiddenParamPrgOrder ();
Grp_PutParamWhichGrps (); Grp_PutParamWhichGrps ();
break; break;
case Pag_ASSIGNMENTS: case Pag_ASSIGNMENTS:
@ -619,7 +615,6 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
case Pag_COURSE_PROGRAM: case Pag_COURSE_PROGRAM:
Frm_StartFormAnchor (ActSeePrg,Pagination->Anchor); Frm_StartFormAnchor (ActSeePrg,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->RightPage); Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->RightPage);
Prg_PutHiddenParamPrgOrder ();
Grp_PutParamWhichGrps (); Grp_PutParamWhichGrps ();
break; break;
case Pag_ASSIGNMENTS: case Pag_ASSIGNMENTS:
@ -725,7 +720,6 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
case Pag_COURSE_PROGRAM: case Pag_COURSE_PROGRAM:
Frm_StartFormAnchor (ActSeePrg,Pagination->Anchor); Frm_StartFormAnchor (ActSeePrg,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->NumPags); Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->NumPags);
Prg_PutHiddenParamPrgOrder ();
Grp_PutParamWhichGrps (); Grp_PutParamWhichGrps ();
break; break;
case Pag_ASSIGNMENTS: case Pag_ASSIGNMENTS:

View File

@ -73,7 +73,7 @@ unsigned Prg_CurrentItmInd; // Used as parameter in contextual links
/*****************************************************************************/ /*****************************************************************************/
static void Prg_ShowAllItems (void); static void Prg_ShowAllItems (void);
static void Prg_PutHeadForSeeing (bool PrintView); static void Prg_PutHeadForSeeing (void);
static bool Prg_CheckIfICanCreateItems (void); static bool Prg_CheckIfICanCreateItems (void);
static void Prg_PutIconsListItems (void); static void Prg_PutIconsListItems (void);
static void Prg_PutIconToCreateNewItem (void); static void Prg_PutIconToCreateNewItem (void);
@ -83,7 +83,6 @@ static void Prg_ShowOneItem (long ItmCod,
unsigned ItmInd,unsigned MaxItmInd, unsigned ItmInd,unsigned MaxItmInd,
bool PrintView); bool PrintView);
static void Prg_WritePrgItemAuthor (struct ProgramItem *Item); static void Prg_WritePrgItemAuthor (struct ProgramItem *Item);
static void Prg_GetParamPrgOrder (void);
static void Prg_PutFormsToRemEditOnePrgItem (const struct ProgramItem *Item, static void Prg_PutFormsToRemEditOnePrgItem (const struct ProgramItem *Item,
unsigned ItmInd,unsigned MaxItmInd, unsigned ItmInd,unsigned MaxItmInd,
@ -128,7 +127,6 @@ static bool Prg_CheckIfIBelongToCrsOrGrpsThisItem (long ItmCod);
void Prg_SeeCourseProgram (void) void Prg_SeeCourseProgram (void)
{ {
/***** Get parameters *****/ /***** Get parameters *****/
Prg_GetParamPrgOrder ();
Grp_GetParamWhichGrps (); Grp_GetParamWhichGrps ();
Gbl.Prg.CurrentPage = Pag_GetParamPagNum (Pag_COURSE_PROGRAM); Gbl.Prg.CurrentPage = Pag_GetParamPagNum (Pag_COURSE_PROGRAM);
@ -178,15 +176,15 @@ static void Prg_ShowAllItems (void)
{ {
/***** Table head *****/ /***** Table head *****/
HTM_TABLE_BeginWideMarginPadding (2); HTM_TABLE_BeginWideMarginPadding (2);
Prg_PutHeadForSeeing (false); // Not print view Prg_PutHeadForSeeing ();
/***** Write all the program items *****/ /***** Write all the program items *****/
for (NumItem = Pagination.FirstItemVisible; for (NumItem = Pagination.FirstItemVisible;
NumItem <= Pagination.LastItemVisible; NumItem <= Pagination.LastItemVisible;
NumItem++) NumItem++)
Prg_ShowOneItem (Gbl.Prg.LstItmCods[NumItem - 1], Prg_ShowOneItem (Gbl.Prg.LstItmCods[NumItem - 1],
NumItem,Gbl.Prg.Num, NumItem,Gbl.Prg.Num,
false); // Not print view false); // Not print view
/***** End table *****/ /***** End table *****/
HTM_TABLE_End (); HTM_TABLE_End ();
@ -214,44 +212,17 @@ static void Prg_ShowAllItems (void)
/***************** Write header with fields of a program item ****************/ /***************** Write header with fields of a program item ****************/
/*****************************************************************************/ /*****************************************************************************/
static void Prg_PutHeadForSeeing (bool PrintView) static void Prg_PutHeadForSeeing (void)
{ {
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_START_END_TIME[Dat_NUM_START_END_TIME];
extern const char *Txt_Item; extern const char *Txt_Item;
Dat_StartEndTime_t Order;
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
HTM_TH (1,1,"CONTEXT_COL",NULL); // Column for contextual icons HTM_TH (1,1,"CONTEXT_COL",NULL); // Column for contextual icons
HTM_TH (1,1,"LM",Txt_Item); HTM_TH (1,1,"LM",Txt_Item);
for (Order = Dat_START_TIME; HTM_TH (1,1,"LM",Txt_START_END_TIME[Dat_START_TIME]);
Order <= Dat_END_TIME; HTM_TH (1,1,"LM",Txt_START_END_TIME[Dat_END_TIME ]);
Order++)
{
HTM_TH_Begin (1,1,"LM");
if (!PrintView)
{
Frm_StartForm (ActSeePrg);
Grp_PutParamWhichGrps ();
Pag_PutHiddenParamPagNum (Pag_COURSE_PROGRAM,Gbl.Prg.CurrentPage);
Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Order);
HTM_BUTTON_SUBMIT_Begin (Txt_START_END_TIME_HELP[Order],"BT_LINK TIT_TBL",NULL);
if (Order == Gbl.Prg.SelectedOrder)
HTM_U_Begin ();
}
HTM_Txt (Txt_START_END_TIME[Order]);
if (!PrintView)
{
if (Order == Gbl.Prg.SelectedOrder)
HTM_U_End ();
HTM_BUTTON_End ();
Frm_EndForm ();
}
HTM_TH_End ();
}
HTM_TR_End (); HTM_TR_End ();
} }
@ -292,7 +263,7 @@ static void Prg_PutIconToCreateNewItem (void)
/***** Put form to create a new program item *****/ /***** Put form to create a new program item *****/
Prg_SetCurrentItmCod (-1L); Prg_SetCurrentItmCod (-1L);
Prg_SetCurrentItmInd (0); Prg_SetCurrentItmInd (0);
Ico_PutContextualIconToAdd (ActFrmNewPrgIte,NULL,Prg_PutParams, Ico_PutContextualIconToAdd (ActFrmNewPrgItm,NULL,Prg_PutParams,
Txt_New_item); Txt_New_item);
} }
@ -306,7 +277,7 @@ static void Prg_PutButtonToCreateNewItem (void)
Prg_SetCurrentItmCod (-1L); Prg_SetCurrentItmCod (-1L);
Prg_SetCurrentItmInd (0); Prg_SetCurrentItmInd (0);
Frm_StartForm (ActFrmNewPrgIte); Frm_StartForm (ActFrmNewPrgItm);
Prg_PutParams (); Prg_PutParams ();
Btn_PutConfirmButton (Txt_New_item); Btn_PutConfirmButton (Txt_New_item);
Frm_EndForm (); Frm_EndForm ();
@ -318,7 +289,6 @@ static void Prg_PutButtonToCreateNewItem (void)
static void Prg_ParamsWhichGroupsToShow (void) static void Prg_ParamsWhichGroupsToShow (void)
{ {
Prg_PutHiddenParamPrgOrder ();
Pag_PutHiddenParamPagNum (Pag_COURSE_PROGRAM,Gbl.Prg.CurrentPage); Pag_PutHiddenParamPagNum (Pag_COURSE_PROGRAM,Gbl.Prg.CurrentPage);
} }
@ -452,28 +422,6 @@ static void Prg_WritePrgItemAuthor (struct ProgramItem *Item)
Usr_WriteAuthor1Line (Item->UsrCod,Item->Hidden); Usr_WriteAuthor1Line (Item->UsrCod,Item->Hidden);
} }
/*****************************************************************************/
/******* Get parameter with the type or order in list of program items *******/
/*****************************************************************************/
static void Prg_GetParamPrgOrder (void)
{
Gbl.Prg.SelectedOrder = (Dat_StartEndTime_t)
Par_GetParToUnsignedLong ("Order",
0,
Dat_NUM_START_END_TIME - 1,
(unsigned long) Prg_ORDER_DEFAULT);
}
/*****************************************************************************/
/** Put a hidden parameter with the type of order in list of program items ***/
/*****************************************************************************/
void Prg_PutHiddenParamPrgOrder (void)
{
Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Gbl.Prg.SelectedOrder);
}
/*****************************************************************************/ /*****************************************************************************/
/**************** Put a link (form) to edit one program item *****************/ /**************** Put a link (form) to edit one program item *****************/
/*****************************************************************************/ /*****************************************************************************/
@ -500,18 +448,18 @@ static void Prg_PutFormsToRemEditOnePrgItem (const struct ProgramItem *Item,
case Rol_TCH: case Rol_TCH:
case Rol_SYS_ADM: case Rol_SYS_ADM:
/***** Put form to remove program item *****/ /***** Put form to remove program item *****/
Ico_PutContextualIconToRemove (ActReqRemPrgIte,Prg_PutParams); Ico_PutContextualIconToRemove (ActReqRemPrgItm,Prg_PutParams);
/***** Put form to hide/show program item *****/ /***** Put form to hide/show program item *****/
if (Item->Hidden) if (Item->Hidden)
Ico_PutContextualIconToUnhide (ActShoPrgIte,Anchor,Prg_PutParams); Ico_PutContextualIconToUnhide (ActShoPrgItm,Anchor,Prg_PutParams);
else else
Ico_PutContextualIconToHide (ActHidPrgIte,Anchor,Prg_PutParams); Ico_PutContextualIconToHide (ActHidPrgItm,Anchor,Prg_PutParams);
/***** Put icon to move up the item *****/ /***** Put icon to move up the item *****/
if (ItmInd > 1) if (ItmInd > 1)
{ {
Lay_PutContextualLinkOnlyIcon (ActUp_PrgIte,NULL,Prg_PutParams, Lay_PutContextualLinkOnlyIcon (ActUp_PrgItm,NULL,Prg_PutParams,
"arrow-up.svg", "arrow-up.svg",
Str_BuildStringStr (Txt_Move_up_X, Str_BuildStringStr (Txt_Move_up_X,
StrItemIndex)); StrItemIndex));
@ -523,7 +471,7 @@ static void Prg_PutFormsToRemEditOnePrgItem (const struct ProgramItem *Item,
/***** Put icon to move down the item *****/ /***** Put icon to move down the item *****/
if (ItmInd < MaxItmInd) if (ItmInd < MaxItmInd)
{ {
Lay_PutContextualLinkOnlyIcon (ActDwnPrgIte,NULL,Prg_PutParams, Lay_PutContextualLinkOnlyIcon (ActDwnPrgItm,NULL,Prg_PutParams,
"arrow-down.svg", "arrow-down.svg",
Str_BuildStringStr (Txt_Move_down_X, Str_BuildStringStr (Txt_Move_down_X,
StrItemIndex)); StrItemIndex));
@ -533,7 +481,7 @@ static void Prg_PutFormsToRemEditOnePrgItem (const struct ProgramItem *Item,
Ico_PutIconOff ("arrow-down.svg",Txt_Movement_not_allowed); Ico_PutIconOff ("arrow-down.svg",Txt_Movement_not_allowed);
/***** Put form to edit program item *****/ /***** Put form to edit program item *****/
Ico_PutContextualIconToEdit (ActEdiOnePrgIte,Prg_PutParams); Ico_PutContextualIconToEdit (ActEdiOnePrgItm,Prg_PutParams);
break; break;
case Rol_STD: case Rol_STD:
case Rol_NET: case Rol_NET:
@ -580,7 +528,6 @@ static void Prg_PutParams (void)
Prg_PutParamItmCod (CurrentItmCod); Prg_PutParamItmCod (CurrentItmCod);
if (CurrentItmInd > 0) if (CurrentItmInd > 0)
Prg_PutParamItmInd (CurrentItmInd); Prg_PutParamItmInd (CurrentItmInd);
Prg_PutHiddenParamPrgOrder ();
Grp_PutParamWhichGrps (); Grp_PutParamWhichGrps ();
Pag_PutHiddenParamPagNum (Pag_COURSE_PROGRAM,Gbl.Prg.CurrentPage); Pag_PutHiddenParamPagNum (Pag_COURSE_PROGRAM,Gbl.Prg.CurrentPage);
} }
@ -628,15 +575,10 @@ void Prg_GetListPrgItems (void)
[Rol_INS_ADM] = " AND Hidden='N'", [Rol_INS_ADM] = " AND Hidden='N'",
[Rol_SYS_ADM] = "", [Rol_SYS_ADM] = "",
}; };
static const char *OrderBySubQuery[Dat_NUM_START_END_TIME] =
{
[Dat_START_TIME] = "StartTime DESC,EndTime DESC,Title DESC",
[Dat_END_TIME ] = "EndTime DESC,StartTime DESC,Title DESC",
};
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
unsigned long NumRows; unsigned long NumRows;
unsigned NumAsg; unsigned NumItem;
if (Gbl.Prg.LstIsRead) if (Gbl.Prg.LstIsRead)
Prg_FreeListItems (); Prg_FreeListItems ();
@ -647,23 +589,24 @@ void Prg_GetListPrgItems (void)
"SELECT ItmCod" "SELECT ItmCod"
" FROM prg_items" " FROM prg_items"
" WHERE CrsCod=%ld%s" " WHERE CrsCod=%ld%s"
" AND (ItmCod NOT IN (SELECT ItmCod FROM prg_grp) OR" " AND "
" ItmCod IN (SELECT prg_grp.ItmCod FROM prg_grp,crs_grp_usr" "(ItmCod NOT IN (SELECT ItmCod FROM prg_grp) OR"
" WHERE crs_grp_usr.UsrCod=%ld AND prg_grp.GrpCod=crs_grp_usr.GrpCod))" " ItmCod IN (SELECT prg_grp.ItmCod"
" ORDER BY %s", " FROM prg_grp,crs_grp_usr"
" WHERE crs_grp_usr.UsrCod=%ld"
" AND prg_grp.GrpCod=crs_grp_usr.GrpCod))"
" ORDER BY ItmInd",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
HiddenSubQuery[Gbl.Usrs.Me.Role.Logged], HiddenSubQuery[Gbl.Usrs.Me.Role.Logged],
Gbl.Usrs.Me.UsrDat.UsrCod, Gbl.Usrs.Me.UsrDat.UsrCod);
OrderBySubQuery[Gbl.Prg.SelectedOrder]);
else // Gbl.Crs.Grps.WhichGrps == Grp_ALL_GROUPS else // Gbl.Crs.Grps.WhichGrps == Grp_ALL_GROUPS
NumRows = DB_QuerySELECT (&mysql_res,"can not get program items", NumRows = DB_QuerySELECT (&mysql_res,"can not get program items",
"SELECT ItmCod" "SELECT ItmCod"
" FROM prg_items" " FROM prg_items"
" WHERE CrsCod=%ld%s" " WHERE CrsCod=%ld%s"
" ORDER BY %s", " ORDER BY ItmInd",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
HiddenSubQuery[Gbl.Usrs.Me.Role.Logged], HiddenSubQuery[Gbl.Usrs.Me.Role.Logged]);
OrderBySubQuery[Gbl.Prg.SelectedOrder]);
if (NumRows) // Items found... if (NumRows) // Items found...
{ {
@ -674,13 +617,13 @@ void Prg_GetListPrgItems (void)
Lay_NotEnoughMemoryExit (); Lay_NotEnoughMemoryExit ();
/***** Get the program items codes *****/ /***** Get the program items codes *****/
for (NumAsg = 0; for (NumItem = 0;
NumAsg < Gbl.Prg.Num; NumItem < Gbl.Prg.Num;
NumAsg++) NumItem++)
{ {
/* Get next program item code */ /* Get next program item code */
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
if ((Gbl.Prg.LstItmCods[NumAsg] = Str_ConvertStrCodToLongCod (row[0])) < 0) if ((Gbl.Prg.LstItmCods[NumItem] = Str_ConvertStrCodToLongCod (row[0])) < 0)
Lay_ShowErrorAndExit ("Error: wrong program item code."); Lay_ShowErrorAndExit ("Error: wrong program item code.");
} }
} }
@ -898,7 +841,6 @@ void Prg_ReqRemPrgItem (void)
struct ProgramItem Item; struct ProgramItem Item;
/***** Get parameters *****/ /***** Get parameters *****/
Prg_GetParamPrgOrder ();
Grp_GetParamWhichGrps (); Grp_GetParamWhichGrps ();
Gbl.Prg.CurrentPage = Pag_GetParamPagNum (Pag_COURSE_PROGRAM); Gbl.Prg.CurrentPage = Pag_GetParamPagNum (Pag_COURSE_PROGRAM);
@ -912,7 +854,7 @@ void Prg_ReqRemPrgItem (void)
/***** Show question and button to remove the program item *****/ /***** Show question and button to remove the program item *****/
Prg_SetCurrentItmCod (Item.ItmCod); Prg_SetCurrentItmCod (Item.ItmCod);
Prg_SetCurrentItmInd (Item.ItmInd); Prg_SetCurrentItmInd (Item.ItmInd);
Ale_ShowAlertAndButton (ActRemAsg,NULL,NULL,Prg_PutParams, Ale_ShowAlertAndButton (ActRemPrgItm,NULL,NULL,Prg_PutParams,
Btn_REMOVE_BUTTON,Txt_Remove_item, Btn_REMOVE_BUTTON,Txt_Remove_item,
Ale_QUESTION,Txt_Do_you_really_want_to_remove_the_item_X, Ale_QUESTION,Txt_Do_you_really_want_to_remove_the_item_X,
Item.Title); Item.Title);
@ -1256,11 +1198,14 @@ static long Prg_GetItmCodFromItmInd (unsigned ItmInd)
MYSQL_ROW row; MYSQL_ROW row;
long ItmCod; long ItmCod;
/***** Get item code of the item to be moved up *****/ /***** Get item code from item index *****/
if (!DB_QuerySELECT (&mysql_res,"can not get item code", if (!DB_QuerySELECT (&mysql_res,"can not get item code",
"SELECT QstCod FROM prg_items" "SELECT ItmCod" // row[0]
" WHERE CrsCod=%ld AND QstInd=%u", " FROM prg_items"
Gbl.Hierarchy.Crs.CrsCod,ItmInd)) " WHERE CrsCod=%ld"
" AND ItmInd=%u",
Gbl.Hierarchy.Crs.CrsCod,
ItmInd))
Lay_ShowErrorAndExit ("Error: wrong item index."); Lay_ShowErrorAndExit ("Error: wrong item index.");
/***** Get item code (row[0]) *****/ /***** Get item code (row[0]) *****/
@ -1306,9 +1251,13 @@ void Prg_RequestCreatOrEditPrgItem (void)
struct ProgramItem Item; struct ProgramItem Item;
bool ItsANewItem; bool ItsANewItem;
char Txt[Cns_MAX_BYTES_TEXT + 1]; char Txt[Cns_MAX_BYTES_TEXT + 1];
static const Dat_SetHMS SetHMS[Dat_NUM_START_END_TIME] =
{
Dat_HMS_TO_000000,
Dat_HMS_TO_235959
};
/***** Get parameters *****/ /***** Get parameters *****/
Prg_GetParamPrgOrder ();
Grp_GetParamWhichGrps (); Grp_GetParamWhichGrps ();
Gbl.Prg.CurrentPage = Pag_GetParamPagNum (Pag_COURSE_PROGRAM); Gbl.Prg.CurrentPage = Pag_GetParamPagNum (Pag_COURSE_PROGRAM);
@ -1319,12 +1268,10 @@ void Prg_RequestCreatOrEditPrgItem (void)
if (ItsANewItem) if (ItsANewItem)
{ {
/* Initialize to empty program item */ /* Initialize to empty program item */
Item.ItmCod = -1L; Prg_ResetItem (&Item);
Item.TimeUTC[Dat_START_TIME] = Gbl.StartExecutionTimeUTC; Item.TimeUTC[Dat_START_TIME] = Gbl.StartExecutionTimeUTC;
Item.TimeUTC[Dat_END_TIME ] = Gbl.StartExecutionTimeUTC + (2 * 60 * 60); // +2 hours Item.TimeUTC[Dat_END_TIME ] = Gbl.StartExecutionTimeUTC + (2 * 60 * 60); // +2 hours
Item.Open = true; Item.Open = true;
Item.Title[0] = '\0';
Item.IBelongToCrsOrGrps = false;
} }
else else
{ {
@ -1338,13 +1285,13 @@ void Prg_RequestCreatOrEditPrgItem (void)
/***** Begin form *****/ /***** Begin form *****/
if (ItsANewItem) if (ItsANewItem)
{ {
Frm_StartForm (ActNewPrgIte); Frm_StartForm (ActNewPrgItm);
Prg_SetCurrentItmCod (-1L); Prg_SetCurrentItmCod (-1L);
Prg_SetCurrentItmInd (0); Prg_SetCurrentItmInd (0);
} }
else else
{ {
Frm_StartForm (ActChgPrgIte); Frm_StartForm (ActChgPrgItm);
Prg_SetCurrentItmCod (Item.ItmCod); Prg_SetCurrentItmCod (Item.ItmCod);
Prg_SetCurrentItmInd (Item.ItmInd); Prg_SetCurrentItmInd (Item.ItmInd);
} }
@ -1377,10 +1324,12 @@ void Prg_RequestCreatOrEditPrgItem (void)
HTM_TR_End (); HTM_TR_End ();
/***** Schedule item start and end dates *****/ /***** Program item start and end dates *****/
Dat_PutFormStartEndClientLocalDateTimes (Item.TimeUTC,Dat_FORM_SECONDS_ON); Dat_PutFormStartEndClientLocalDateTimes (Item.TimeUTC,
Dat_FORM_SECONDS_ON,
SetHMS);
/***** Schedule item text *****/ /***** Program item text *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
/* Label */ /* Label */
@ -1579,14 +1528,26 @@ void Prg_RecFormPrgItem (void)
static void Prg_CreatePrgItem (struct ProgramItem *Item,const char *Txt) static void Prg_CreatePrgItem (struct ProgramItem *Item,const char *Txt)
{ {
unsigned MaxItmInd;
/***** Lock table to create program item *****/
DB_Query ("can not lock tables to create program item",
"LOCK TABLES prg_items WRITE");
Gbl.DB.LockedTables = true;
/***** Get maximum item index *****/
MaxItmInd = Prg_GetMaxItemIndex ();
/***** Create a new program item *****/ /***** Create a new program item *****/
Item->ItmInd = MaxItmInd + 1;
Item->ItmCod = Item->ItmCod =
DB_QueryINSERTandReturnCode ("can not create new program item", DB_QueryINSERTandReturnCode ("can not create new program item",
"INSERT INTO prg_items" "INSERT INTO prg_items"
" (CrsCod,UsrCod,StartTime,EndTime,Title,Txt)" " (ItmInd,CrsCod,UsrCod,StartTime,EndTime,Title,Txt)"
" VALUES" " VALUES"
" (%ld,%ld,FROM_UNIXTIME(%ld),FROM_UNIXTIME(%ld)," " (%u,%ld,%ld,FROM_UNIXTIME(%ld),FROM_UNIXTIME(%ld),"
"'%s','%s')", "'%s','%s')",
Item->ItmInd,
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
Gbl.Usrs.Me.UsrDat.UsrCod, Gbl.Usrs.Me.UsrDat.UsrCod,
Item->TimeUTC[Dat_START_TIME], Item->TimeUTC[Dat_START_TIME],
@ -1594,6 +1555,12 @@ static void Prg_CreatePrgItem (struct ProgramItem *Item,const char *Txt)
Item->Title, Item->Title,
Txt); Txt);
/***** Unlock table *****/
Gbl.DB.LockedTables = false; // Set to false before the following unlock...
// ...to not retry the unlock if error in unlocking
DB_Query ("can not unlock tables after moving items",
"UNLOCK TABLES");
/***** Create groups *****/ /***** Create groups *****/
if (Gbl.Crs.Grps.LstGrpsSel.NumGrps) if (Gbl.Crs.Grps.LstGrpsSel.NumGrps)
Prg_CreateGrps (Item->ItmCod); Prg_CreateGrps (Item->ItmCod);
@ -1733,12 +1700,15 @@ static void Prg_GetAndWriteNamesOfGrpsAssociatedToItem (struct ProgramItem *Item
/***** Get groups associated to a program item from database *****/ /***** Get groups associated to a program item from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get groups of a program item", NumRows = DB_QuerySELECT (&mysql_res,"can not get groups of a program item",
"SELECT crs_grp_types.GrpTypName,crs_grp.GrpName" "SELECT crs_grp_types.GrpTypName," // row[0]
" FROM prg_grp,crs_grp,crs_grp_types" "crs_grp.GrpName" // row[1]
" FROM prg_grp,crs_grp,"
"crs_grp_types"
" WHERE prg_grp.ItmCod=%ld" " WHERE prg_grp.ItmCod=%ld"
" AND prg_grp.GrpCod=crs_grp.GrpCod" " AND prg_grp.GrpCod=crs_grp.GrpCod"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod" " AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
" ORDER BY crs_grp_types.GrpTypName,crs_grp.GrpName", " ORDER BY crs_grp_types.GrpTypName,"
"crs_grp.GrpName",
Item->ItmCod); Item->ItmCod);
/***** Write heading *****/ /***** Write heading *****/

View File

@ -62,7 +62,6 @@ struct ProgramItem
void Prg_SeeCourseProgram (void); void Prg_SeeCourseProgram (void);
void Prg_PutHiddenParamPrgOrder (void);
void Prg_RequestCreatOrEditPrgItem (void); void Prg_RequestCreatOrEditPrgItem (void);
void Prg_GetListPrgItems (void); void Prg_GetListPrgItems (void);
void Prg_GetDataOfItemByCod (struct ProgramItem *PrgItem); void Prg_GetDataOfItemByCod (struct ProgramItem *PrgItem);
@ -76,7 +75,7 @@ void Prg_ShowPrgItem (void);
void Prg_MoveUpPrgItem (void); void Prg_MoveUpPrgItem (void);
void Prg_MoveDownPrgItem (void); void Prg_MoveDownPrgItem (void);
void Prg_RecFormPrgItem (void); void Prg_RecFormPrgItem (void);
bool Prg_CheckIfItemIsAssociatedToGrp (long PrgIteCod,long GrpCod); bool Prg_CheckIfItemIsAssociatedToGrp (long PrgItmCod,long GrpCod);
void Prg_RemoveGroup (long GrpCod); void Prg_RemoveGroup (long GrpCod);
void Prg_RemoveGroupsOfType (long GrpTypCod); void Prg_RemoveGroupsOfType (long GrpTypCod);
void Prg_RemoveCrsItems (long CrsCod); void Prg_RemoveCrsItems (long CrsCod);

View File

@ -202,6 +202,7 @@ void Sta_AskShowCrsHits (void)
Sta_MAX_ROWS_PER_PAGE, Sta_MAX_ROWS_PER_PAGE,
}; };
#define NUM_OPTIONS_ROWS_PER_PAGE (sizeof (RowsPerPage) / sizeof (RowsPerPage[0])) #define NUM_OPTIONS_ROWS_PER_PAGE (sizeof (RowsPerPage) / sizeof (RowsPerPage[0]))
Dat_SetHMS SetHMS[Dat_NUM_START_END_TIME];
unsigned NumTotalUsrs; unsigned NumTotalUsrs;
Sta_ClicksGroupedBy_t ClicksGroupedBy; Sta_ClicksGroupedBy_t ClicksGroupedBy;
unsigned ClicksGroupedByUnsigned; unsigned ClicksGroupedByUnsigned;
@ -278,7 +279,17 @@ void Sta_AskShowCrsHits (void)
HTM_TR_End (); HTM_TR_End ();
/***** Initial and final dates of the search *****/ /***** Initial and final dates of the search *****/
Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (Gbl.Action.Act == ActReqAccCrs); if (Gbl.Action.Act == ActReqAccCrs)
{
SetHMS[Dat_START_TIME] = Dat_HMS_TO_000000;
SetHMS[Dat_END_TIME ] = Dat_HMS_TO_235959;
}
else
{
SetHMS[Dat_START_TIME] = Dat_HMS_DO_NOT_SET;
SetHMS[Dat_END_TIME ] = Dat_HMS_DO_NOT_SET;
}
Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (SetHMS);
/***** Selection of action *****/ /***** Selection of action *****/
Sta_WriteSelectorAction (); Sta_WriteSelectorAction ();
@ -402,6 +413,7 @@ void Sta_AskShowGblHits (void)
extern const char *Txt_distributed_by; extern const char *Txt_distributed_by;
extern const char *Txt_STAT_CLICKS_GROUPED_BY[Sta_NUM_CLICKS_GROUPED_BY]; extern const char *Txt_STAT_CLICKS_GROUPED_BY[Sta_NUM_CLICKS_GROUPED_BY];
extern const char *Txt_Show_hits; extern const char *Txt_Show_hits;
Dat_SetHMS SetHMS[Dat_NUM_START_END_TIME];
Sta_Role_t RoleStat; Sta_Role_t RoleStat;
unsigned RoleStatUnsigned; unsigned RoleStatUnsigned;
Sta_ClicksGroupedBy_t ClicksGroupedBy; Sta_ClicksGroupedBy_t ClicksGroupedBy;
@ -421,7 +433,17 @@ void Sta_AskShowGblHits (void)
Hlp_ANALYTICS_Visits_global_visits,Box_NOT_CLOSABLE,2); Hlp_ANALYTICS_Visits_global_visits,Box_NOT_CLOSABLE,2);
/***** Start and end dates for the search *****/ /***** Start and end dates for the search *****/
Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (Gbl.Action.Act == ActReqAccGbl); if (Gbl.Action.Act == ActReqAccCrs)
{
SetHMS[Dat_START_TIME] = Dat_HMS_TO_000000;
SetHMS[Dat_END_TIME ] = Dat_HMS_TO_235959;
}
else
{
SetHMS[Dat_START_TIME] = Dat_HMS_DO_NOT_SET;
SetHMS[Dat_END_TIME ] = Dat_HMS_DO_NOT_SET;
}
Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (SetHMS);
/***** Users' roles whose accesses we want to see *****/ /***** Users' roles whose accesses we want to see *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);

View File

@ -1796,6 +1796,11 @@ void Svy_RequestCreatOrEditSvy (void)
struct Survey Svy; struct Survey Svy;
bool ItsANewSurvey; bool ItsANewSurvey;
char Txt[Cns_MAX_BYTES_TEXT + 1]; char Txt[Cns_MAX_BYTES_TEXT + 1];
static const Dat_SetHMS SetHMS[Dat_NUM_START_END_TIME] =
{
Dat_HMS_TO_000000,
Dat_HMS_TO_235959
};
/***** Get parameters *****/ /***** Get parameters *****/
Svy_GetParamSvyOrder (); Svy_GetParamSvyOrder ();
@ -1889,7 +1894,9 @@ void Svy_RequestCreatOrEditSvy (void)
HTM_TR_End (); HTM_TR_End ();
/***** Survey start and end dates *****/ /***** Survey start and end dates *****/
Dat_PutFormStartEndClientLocalDateTimes (Svy.TimeUTC,Dat_FORM_SECONDS_ON); Dat_PutFormStartEndClientLocalDateTimes (Svy.TimeUTC,
Dat_FORM_SECONDS_ON,
SetHMS);
/***** Survey text *****/ /***** Survey text *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);

View File

@ -1216,6 +1216,11 @@ void Tst_ShowFormAskEditTsts (void)
extern const char *Txt_Show_questions; extern const char *Txt_Show_questions;
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
unsigned long NumRows; unsigned long NumRows;
static const Dat_SetHMS SetHMS[Dat_NUM_START_END_TIME] =
{
Dat_HMS_DO_NOT_SET,
Dat_HMS_DO_NOT_SET
};
/***** Contextual menu *****/ /***** Contextual menu *****/
Mnu_ContextMenuBegin (); Mnu_ContextMenuBegin ();
@ -1241,7 +1246,7 @@ void Tst_ShowFormAskEditTsts (void)
Tst_ShowFormAnswerTypes (); Tst_ShowFormAnswerTypes ();
/***** Starting and ending dates in the search *****/ /***** Starting and ending dates in the search *****/
Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (false); Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (SetHMS);
HTM_TABLE_End (); HTM_TABLE_End ();
@ -1277,6 +1282,11 @@ void Tst_ShowFormAskSelectTstsForGame (void)
extern const char *Txt_Show_questions; extern const char *Txt_Show_questions;
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
unsigned long NumRows; unsigned long NumRows;
static const Dat_SetHMS SetHMS[Dat_NUM_START_END_TIME] =
{
Dat_HMS_DO_NOT_SET,
Dat_HMS_DO_NOT_SET
};
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Txt_Select_questions,NULL, Box_BoxBegin (NULL,Txt_Select_questions,NULL,
@ -1294,7 +1304,7 @@ void Tst_ShowFormAskSelectTstsForGame (void)
Tst_ShowFormSelTags (NumRows,mysql_res,false); Tst_ShowFormSelTags (NumRows,mysql_res,false);
/***** Starting and ending dates in the search *****/ /***** Starting and ending dates in the search *****/
Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (false); Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (SetHMS);
HTM_TABLE_End (); HTM_TABLE_End ();

View File

@ -117,6 +117,11 @@ void TsR_SelDatesToSeeMyTstResults (void)
extern const char *Hlp_ASSESSMENT_Tests_results; extern const char *Hlp_ASSESSMENT_Tests_results;
extern const char *Txt_Results; extern const char *Txt_Results;
extern const char *Txt_View_test_results; extern const char *Txt_View_test_results;
static const Dat_SetHMS SetHMS[Dat_NUM_START_END_TIME] =
{
Dat_HMS_DO_NOT_SET,
Dat_HMS_DO_NOT_SET
};
/***** Begin form *****/ /***** Begin form *****/
Frm_StartForm (ActSeeMyTstRes); Frm_StartForm (ActSeeMyTstRes);
@ -124,7 +129,7 @@ void TsR_SelDatesToSeeMyTstResults (void)
/***** Begin box and table *****/ /***** Begin box and table *****/
Box_BoxTableBegin (NULL,Txt_Results,NULL, Box_BoxTableBegin (NULL,Txt_Results,NULL,
Hlp_ASSESSMENT_Tests_results,Box_NOT_CLOSABLE,2); Hlp_ASSESSMENT_Tests_results,Box_NOT_CLOSABLE,2);
Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (false); Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (SetHMS);
/***** End table, send button and end box *****/ /***** End table, send button and end box *****/
Box_BoxTableWithButtonEnd (Btn_CONFIRM_BUTTON,Txt_View_test_results); Box_BoxTableWithButtonEnd (Btn_CONFIRM_BUTTON,Txt_View_test_results);

View File

@ -4787,7 +4787,7 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"" // Precisa de tradução "" // Precisa de tradução
#endif #endif
, ,
[ActFrmNewPrgIte] = [ActFrmNewPrgItm] =
#if L==1 // ca #if L==1 // ca
"" // Necessita traducció "" // Necessita traducció
#elif L==2 // de #elif L==2 // de
@ -4808,7 +4808,7 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"" // Precisa de tradução "" // Precisa de tradução
#endif #endif
, ,
[ActEdiOnePrgIte] = [ActEdiOnePrgItm] =
#if L==1 // ca #if L==1 // ca
"" // Necessita traducció "" // Necessita traducció
#elif L==2 // de #elif L==2 // de
@ -4829,7 +4829,7 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"" // Precisa de tradução "" // Precisa de tradução
#endif #endif
, ,
[ActNewPrgIte] = [ActNewPrgItm] =
#if L==1 // ca #if L==1 // ca
"" // Necessita traducció "" // Necessita traducció
#elif L==2 // de #elif L==2 // de
@ -4850,7 +4850,7 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"" // Precisa de tradução "" // Precisa de tradução
#endif #endif
, ,
[ActChgPrgIte] = [ActChgPrgItm] =
#if L==1 // ca #if L==1 // ca
"" // Necessita traducció "" // Necessita traducció
#elif L==2 // de #elif L==2 // de
@ -4871,7 +4871,7 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"" // Precisa de tradução "" // Precisa de tradução
#endif #endif
, ,
[ActReqRemPrgIte] = [ActReqRemPrgItm] =
#if L==1 // ca #if L==1 // ca
"" // Necessita traducció "" // Necessita traducció
#elif L==2 // de #elif L==2 // de
@ -4892,7 +4892,7 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"" // Precisa de tradução "" // Precisa de tradução
#endif #endif
, ,
[ActRemPrgIte] = [ActRemPrgItm] =
#if L==1 // ca #if L==1 // ca
"" // Necessita traducció "" // Necessita traducció
#elif L==2 // de #elif L==2 // de
@ -4913,7 +4913,7 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"" // Precisa de tradução "" // Precisa de tradução
#endif #endif
, ,
[ActHidPrgIte] = [ActHidPrgItm] =
#if L==1 // ca #if L==1 // ca
"" // Necessita traducció "" // Necessita traducció
#elif L==2 // de #elif L==2 // de
@ -4934,7 +4934,7 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"" // Precisa de tradução "" // Precisa de tradução
#endif #endif
, ,
[ActShoPrgIte] = [ActShoPrgItm] =
#if L==1 // ca #if L==1 // ca
"" // Necessita traducció "" // Necessita traducció
#elif L==2 // de #elif L==2 // de
@ -4955,7 +4955,7 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"" // Precisa de tradução "" // Precisa de tradução
#endif #endif
, ,
[ActUp_PrgIte] = [ActUp_PrgItm] =
#if L==1 // ca #if L==1 // ca
"" // Necessita traducció "" // Necessita traducció
#elif L==2 // de #elif L==2 // de
@ -4976,7 +4976,7 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"" // Precisa de tradução "" // Precisa de tradução
#endif #endif
, ,
[ActDwnPrgIte] = [ActDwnPrgItm] =
#if L==1 // ca #if L==1 // ca
"" // Necessita traducció "" // Necessita traducció
#elif L==2 // de #elif L==2 // de

View File

@ -6311,6 +6311,11 @@ void Usr_PutFormToSelectUsrsToGoToAct (struct SelectedUsrs *SelectedUsrs,
extern const char *Txt_Select_users; extern const char *Txt_Select_users;
extern const char *Txt_Users; extern const char *Txt_Users;
unsigned NumTotalUsrs; unsigned NumTotalUsrs;
static const Dat_SetHMS SetHMS[Dat_NUM_START_END_TIME] =
{
Dat_HMS_DO_NOT_SET,
Dat_HMS_DO_NOT_SET
};
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Title,NULL,HelpLink,Box_NOT_CLOSABLE); Box_BoxBegin (NULL,Title,NULL,HelpLink,Box_NOT_CLOSABLE);
@ -6385,7 +6390,7 @@ void Usr_PutFormToSelectUsrsToGoToAct (struct SelectedUsrs *SelectedUsrs,
/* Starting and ending dates in the search */ /* Starting and ending dates in the search */
if (PutFormDateRange) if (PutFormDateRange)
Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (false); Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (SetHMS);
HTM_TABLE_End (); HTM_TABLE_End ();