Version19.169.6

This commit is contained in:
acanas 2020-04-09 21:36:21 +02:00
parent 4a01070ca3
commit 6641a97413
21 changed files with 479 additions and 493 deletions

View File

@ -497,7 +497,7 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
#define Log_PLATFORM_VERSION "SWAD 19.169.5 (2020-04-08)"
#define Log_PLATFORM_VERSION "SWAD 19.169.6 (2020-04-08)"
#define CSS_FILE "swad19.146.css"
#define JS_FILE "swad19.153.js"
/*
@ -548,6 +548,7 @@ Funci
// TODO: Oresti Baños: cambiar ojos por candados en descriptores para prohibir/permitir y dejar los ojos para poder elegir descriptores
// TODO: Integrar pull requests con traducciones del alemán del usuario eruedin en GitHub
Version 19.169.6: Apr 08, 2020 Mark some parameters as unused (functions from S to Z). (284836 lines)
Version 19.169.5: Apr 08, 2020 Mark some parameters as unused (functions from O to R). (284854 lines)
Version 19.169.4: Apr 08, 2020 Mark some parameters as unused (functions from I to N). (284903 lines)
Version 19.169.3: Apr 08, 2020 Mark some parameters as unused (functions from D to I). (284929 lines)

View File

@ -392,7 +392,7 @@ static void For_GetParamsForums (struct For_Forums *Forums);
static void For_SetForumType (struct For_Forums *Forums);
static void For_RestrictAccess (const struct For_Forums *Forums);
static void For_WriteFormForumPst (const struct For_Forums *Forums,
static void For_WriteFormForumPst (struct For_Forums *Forums,
bool IsReply,const char *Subject);
static void For_UpdateNumUsrsNotifiedByEMailAboutPost (long PstCod,unsigned NumUsrsToBeNotifiedByEMail);
@ -1024,7 +1024,7 @@ static void For_ShowPostsOfAThread (struct For_Forums *Forums,
"%s: %s",
Txt_Thread,Thr.Subject);
Box_BoxBegin (NULL,FrameTitle,
For_PutIconNewPost,&Gbl,
For_PutIconNewPost,Forums,
Hlp_MESSAGES_Forums_posts,Box_NOT_CLOSABLE);
/***** Get posts of a thread from database *****/
@ -1167,7 +1167,7 @@ static void For_PutIconNewPost (void *Forums)
if (Forums)
Ico_PutContextualIconToAdd (For_ActionsSeePstFor[((struct For_Forums *) Forums)->ForumSelected.Type],
For_NEW_POST_SECTION_ID,
For_PutAllHiddenParamsNewPost,&Gbl,
For_PutAllHiddenParamsNewPost,Forums,
Txt_New_post);
}
@ -3847,7 +3847,7 @@ static void For_RestrictAccess (const struct For_Forums *Forums)
/********************** Show an area to write a message **********************/
/*****************************************************************************/
static void For_WriteFormForumPst (const struct For_Forums *Forums,
static void For_WriteFormForumPst (struct For_Forums *Forums,
bool IsReply,const char *Subject)
{
extern const char *Hlp_MESSAGES_Forums_new_post;
@ -3874,13 +3874,13 @@ static void For_WriteFormForumPst (const struct For_Forums *Forums,
{
Frm_StartFormAnchor (For_ActionsRecRepFor[Forums->ForumSelected.Type],
For_FORUM_POSTS_SECTION_ID);
For_PutAllHiddenParamsNewPost (&Gbl);
For_PutAllHiddenParamsNewPost (Forums);
}
else // Form to write the first post of a new thread
{
Frm_StartFormAnchor (For_ActionsRecThrFor[Forums->ForumSelected.Type],
For_FORUM_POSTS_SECTION_ID);
For_PutAllHiddenParamsNewThread (&Gbl);
For_PutAllHiddenParamsNewThread (Forums);
}
/***** Subject and content *****/
@ -4173,14 +4173,14 @@ void For_RequestRemoveThread (void)
if (Subject[0])
Ale_ShowAlertAndButton (For_ActionsDelThrFor[Forums.ForumSelected.Type],
For_FORUM_THREADS_SECTION_ID,NULL,
For_PutAllHiddenParamsRemThread,&Gbl,
For_PutAllHiddenParamsRemThread,&Forums,
Btn_REMOVE_BUTTON,Txt_Remove_thread,
Ale_QUESTION,Txt_Do_you_really_want_to_remove_the_entire_thread_X,
Subject);
else
Ale_ShowAlertAndButton (For_ActionsDelThrFor[Forums.ForumSelected.Type],
For_FORUM_THREADS_SECTION_ID,NULL,
For_PutAllHiddenParamsRemThread,&Gbl,
For_PutAllHiddenParamsRemThread,&Forums,
Btn_REMOVE_BUTTON,Txt_Remove_thread,
Ale_QUESTION,Txt_Do_you_really_want_to_remove_the_entire_thread);
HTM_SECTION_End ();

View File

@ -1897,7 +1897,7 @@ static void Gam_ListGameQuestions (struct Gam_Games *Games,struct Gam_Game *Game
Games->GamCod = Game->GamCod;
if (ICanEditQuestions)
Box_BoxBegin (NULL,Txt_Questions,
Gam_PutIconToAddNewQuestions,&Gbl,
Gam_PutIconToAddNewQuestions,Games,
Hlp_ASSESSMENT_Games_questions,Box_NOT_CLOSABLE);
else
Box_BoxBegin (NULL,Txt_Questions,
@ -2119,11 +2119,10 @@ static void Gam_PutIconToAddNewQuestions (void *Games)
{
extern const char *Txt_Add_questions;
if (Games)
/***** Put form to create a new question *****/
Ico_PutContextualIconToAdd (ActAddOneGamQst,NULL,
Gam_PutParams,Games,
Txt_Add_questions);
/***** Put form to create a new question *****/
Ico_PutContextualIconToAdd (ActAddOneGamQst,NULL,
Gam_PutParams,Games,
Txt_Add_questions);
}
/*****************************************************************************/
@ -2289,7 +2288,7 @@ void Gam_RequestRemoveQst (void)
Games.GamCod = Game.GamCod;
Games.QstInd = QstInd;
Ale_ShowAlertAndButton (ActRemGamQst,NULL,NULL,
Gam_PutParamsOneQst,&Gbl,
Gam_PutParamsOneQst,&Games,
Btn_REMOVE_BUTTON,Txt_Remove_question,
Ale_QUESTION,Txt_Do_you_really_want_to_remove_the_question_X,
QstInd);

View File

@ -520,55 +520,16 @@ struct Globals
} ZIP;
} FileBrowser; // Struct used for a file browser
struct Prj_Projects Prjs;
struct
{
Usr_Who_t Who;
long NotCod; // Used as parameter about social note to be edited, removed...
long PubCod; // Used as parameter about social publishing to be edited, removed...
} Timeline;
struct TL_Timeline Timeline;
struct Msg_Messages Msg;
struct
{
struct
{
struct TT_Range Range;
unsigned HoursPerDay; // From start hour to end hour
unsigned SecondsPerInterval;
unsigned IntervalsPerHour;
unsigned IntervalsPerDay;
unsigned IntervalsBeforeStartHour;
} Config;
TT_TimeTableType_t Type;
TT_TimeTableView_t View;
unsigned Weekday;
unsigned Interval;
unsigned Column;
TT_ClassType_t ClassType;
unsigned DurationIntervals;
char Info[TT_MAX_BYTES_INFO + 1];
// char Place[TT_MAX_BYTES_PLACE + 1];
long GrpCod; // Group code (-1 if no group selected)
struct
{
bool PutIconEditCrsTT;
bool PutIconEditOfficeHours;
bool PutIconPrint;
} ContextualIcons;
} TimeTable;
struct TT_Timetable Timetable;
struct
{
struct DateTime DateIni; // TODO: Remove in future versions
struct DateTime DateEnd; // TODO: Remove in future versions
time_t TimeUTC[Dat_NUM_START_END_TIME];
} DateRange;
struct
{
bool LstIsRead; // Is the list already read from database, or it needs to be read?
unsigned Num; // Number of surveys
long *LstSvyCods; // List of survey codes
Dat_StartEndTime_t SelectedOrder;
unsigned CurrentPage;
} Svys;
struct Svy_Surveys Svys;
struct Sta_Stats Stat;
/* Cache */

View File

@ -117,7 +117,7 @@ void Ico_PutIconsToSelectIconSet (void)
char Icon[PATH_MAX + 1];
Box_BoxBegin (NULL,Txt_Icons,
Ico_PutIconsIconSet,&Gbl,
Ico_PutIconsIconSet,NULL,
Hlp_PROFILE_Settings_icons,Box_NOT_CLOSABLE);
Set_StartSettingsHead ();
Set_StartOneSettingSelector ();

View File

@ -1906,7 +1906,7 @@ void Ntf_PutFormChangeNotifSentByEMail (void)
/***** Begin box *****/
Box_BoxBegin (NULL,Txt_Notifications,
Ntf_PutIconsNotif,&Gbl,
Ntf_PutIconsNotif,NULL,
Hlp_PROFILE_Settings_notifications,Box_NOT_CLOSABLE);
/***** Begin form *****/

View File

@ -1304,8 +1304,8 @@ static void Rec_ShowRecordOneTchCrs (void)
if (ShowOfficeHours)
{
HTM_DIV_Begin ("class=\"REC_RIGHT\"");
Gbl.TimeTable.Type = TT_TUTORING_TIMETABLE;
Box_BoxBegin (Width,Txt_TIMETABLE_TYPES[Gbl.TimeTable.Type],
Gbl.Timetable.Type = TT_TUTORING_TIMETABLE;
Box_BoxBegin (Width,Txt_TIMETABLE_TYPES[Gbl.Timetable.Type],
NULL,NULL,
Hlp_USERS_Teachers_timetable,Box_NOT_CLOSABLE);
TT_ShowTimeTable (Gbl.Usrs.Other.UsrDat.UsrCod);
@ -1426,8 +1426,8 @@ static void Rec_ListRecordsTchs (Rec_SharedRecordViewType_t TypeOfView)
if (ShowOfficeHours)
{
HTM_DIV_Begin ("class=\"REC_RIGHT\"");
Gbl.TimeTable.Type = TT_TUTORING_TIMETABLE;
Box_BoxBegin (Width,Txt_TIMETABLE_TYPES[Gbl.TimeTable.Type],
Gbl.Timetable.Type = TT_TUTORING_TIMETABLE;
Box_BoxBegin (Width,Txt_TIMETABLE_TYPES[Gbl.Timetable.Type],
NULL,NULL,
Hlp_USERS_Teachers_timetable,Box_NOT_CLOSABLE);
TT_ShowTimeTable (UsrDat.UsrCod);

View File

@ -177,10 +177,10 @@ void Sco_PutSelectorScope (const char *ParamName,bool SendOnChange)
/********************** Put hidden parameter scope ***************************/
/*****************************************************************************/
void Sco_PutParamCurrentScope (void *Args)
void Sco_PutParamCurrentScope (void *Scope)
{
if (Args)
Sco_PutParamScope ("ScopeUsr",Gbl.Scope.Current);
if (Scope)
Sco_PutParamScope ("ScopeUsr",*((Hie_Level_t *) Scope));
}
void Sco_PutParamScope (const char *ParamName,Hie_Level_t Scope)

View File

@ -44,7 +44,7 @@
/*****************************************************************************/
void Sco_PutSelectorScope (const char *ParamName,bool SendOnChange);
void Sco_PutParamCurrentScope (void *Args);
void Sco_PutParamCurrentScope (void *Scope);
void Sco_PutParamScope (const char *ParamName,Hie_Level_t Scope);
void Sco_GetScope (const char *ParamName);
void Sco_AdjustScope (void);

View File

@ -89,28 +89,25 @@ struct SurveyQuestion // Must be initialized to 0 before using it
/***************************** Private variables *****************************/
/*****************************************************************************/
long Svy_CurrentSvyCod; // Used as parameter in contextual links
long Svy_CurrentQstCod; // Used as parameter in contextual links
/*****************************************************************************/
/***************************** Private prototypes ****************************/
/*****************************************************************************/
static void Svy_ListAllSurveys (void);
static bool Svy_CheckIfICanCreateSvy (void);
static void Svy_PutIconsListSurveys (void *Args);
static void Svy_PutIconToCreateNewSvy (void);
static void Svy_PutIconsListSurveys (void *Surveys);
static void Svy_PutIconToCreateNewSvy (struct Svy_Surveys *Surveys);
static void Svy_PutButtonToCreateNewSvy (void);
static void Svy_PutParamsToCreateNewSvy (void *Args);
static void Svy_ParamsWhichGroupsToShow (void *Args);
static void Svy_PutParamsToCreateNewSvy (void *Surveys);
static void Svy_ParamsWhichGroupsToShow (void *Surveys);
static void Svy_ShowOneSurvey (long SvyCod,bool ShowOnlyThisSvyComplete);
static void Svy_WriteAuthor (struct Survey *Svy);
static void Svy_WriteStatus (struct Survey *Svy);
static void Svy_WriteAuthor (struct Svy_Survey *Svy);
static void Svy_WriteStatus (struct Svy_Survey *Svy);
static void Svy_GetParamSvyOrder (void);
static void Svy_PutFormsToRemEditOneSvy (const struct Survey *Svy,
static void Svy_PutFormsToRemEditOneSvy (const struct Svy_Survey *Svy,
const char *Anchor);
static void Svy_PutParams (void *Args);
static void Svy_PutParams (void *Surveys);
static void Svy_GetListSurveys (void);
@ -123,17 +120,17 @@ static long Svy_GetParamSvyCod (void);
static void Svy_PutButtonToResetSurvey (void);
static bool Svy_CheckIfSimilarSurveyExists (struct Survey *Svy);
static void Svy_SetDefaultAndAllowedScope (struct Survey *Svy);
static bool Svy_CheckIfSimilarSurveyExists (struct Svy_Survey *Svy);
static void Svy_SetDefaultAndAllowedScope (struct Svy_Survey *Svy);
static void Svy_ShowLstGrpsToEditSurvey (long SvyCod);
static void Svy_UpdateNumUsrsNotifiedByEMailAboutSurvey (long SvyCod,
unsigned NumUsrsToBeNotifiedByEMail);
static void Svy_CreateSurvey (struct Survey *Svy,const char *Txt);
static void Svy_UpdateSurvey (struct Survey *Svy,const char *Txt);
static void Svy_CreateSurvey (struct Svy_Survey *Svy,const char *Txt);
static void Svy_UpdateSurvey (struct Svy_Survey *Svy,const char *Txt);
static bool Svy_CheckIfSvyIsAssociatedToGrps (long SvyCod);
static void Svy_RemoveAllTheGrpsAssociatedToAndSurvey (long SvyCod);
static void Svy_CreateGrps (long SvyCod);
static void Svy_GetAndWriteNamesOfGrpsAssociatedToSvy (struct Survey *Svy);
static void Svy_GetAndWriteNamesOfGrpsAssociatedToSvy (struct Svy_Survey *Svy);
static bool Svy_CheckIfICanDoThisSurveyBasedOnGrps (long SvyCod);
static unsigned Svy_GetNumQstsSvy (long SvyCod);
@ -152,18 +149,18 @@ static void Svy_FreeTextChoiceAnswer (struct SurveyQuestion *SvyQst,unsigned Num
static unsigned Svy_GetQstIndFromQstCod (long QstCod);
static unsigned Svy_GetNextQuestionIndexInSvy (long SvyCod);
static void Svy_ListSvyQuestions (struct Survey *Svy);
static void Svy_PutParamsToEditQuestion (void *Args);
static void Svy_PutIconToAddNewQuestion (void *Args);
static void Svy_ListSvyQuestions (struct Svy_Survey *Svy);
static void Svy_PutParamsToEditQuestion (void *Surveys);
static void Svy_PutIconToAddNewQuestion (void *Surveys);
static void Svy_PutButtonToCreateNewQuestion (void);
static void Svy_WriteQstStem (const char *Stem);
static void Svy_WriteAnswersOfAQst (struct Survey *Svy,
static void Svy_WriteAnswersOfAQst (struct Svy_Survey *Svy,
struct SurveyQuestion *SvyQst,
bool PutFormAnswerSurvey);
static void Svy_DrawBarNumUsrs (unsigned NumUsrs,unsigned MaxUsrs);
static void Svy_PutIconToRemoveOneQst (void *Args);
static void Svy_PutParamsRemoveOneQst (void *Args);
static void Svy_PutIconToRemoveOneQst (void *Surveys);
static void Svy_PutParamsRemoveOneQst (void *Surveys);
static void Svy_ReceiveAndStoreUserAnswersToASurvey (long SvyCod);
static void Svy_IncreaseAnswerInDB (long QstCod,unsigned AnsInd);
@ -219,7 +216,7 @@ static void Svy_ListAllSurveys (void)
/***** Begin box *****/
Box_BoxBegin ("100%",Txt_Surveys,
Svy_PutIconsListSurveys,&Gbl,
Svy_PutIconsListSurveys,&Gbl.Svys,
Hlp_ASSESSMENT_Surveys,Box_NOT_CLOSABLE);
/***** Select whether show only my groups or all groups *****/
@ -227,7 +224,7 @@ static void Svy_ListAllSurveys (void)
{
Set_StartSettingsHead ();
Grp_ShowFormToSelWhichGrps (ActSeeAllSvy,
Svy_ParamsWhichGroupsToShow,&Gbl);
Svy_ParamsWhichGroupsToShow,&Gbl.Svys);
Set_EndSettingsHead ();
}
@ -328,29 +325,26 @@ static bool Svy_CheckIfICanCreateSvy (void)
/***************** Put contextual icons in list of surveys *******************/
/*****************************************************************************/
static void Svy_PutIconsListSurveys (void *Args)
static void Svy_PutIconsListSurveys (void *Surveys)
{
if (Args)
{
/***** Put icon to create a new survey *****/
if (Svy_CheckIfICanCreateSvy ())
Svy_PutIconToCreateNewSvy ();
/***** Put icon to create a new survey *****/
if (Svy_CheckIfICanCreateSvy ())
Svy_PutIconToCreateNewSvy ((struct Svy_Surveys *) Surveys);
/***** Put icon to show a figure *****/
Fig_PutIconToShowFigure (Fig_SURVEYS);
}
/***** Put icon to show a figure *****/
Fig_PutIconToShowFigure (Fig_SURVEYS);
}
/*****************************************************************************/
/********************** Put icon to create a new survey **********************/
/*****************************************************************************/
static void Svy_PutIconToCreateNewSvy (void)
static void Svy_PutIconToCreateNewSvy (struct Svy_Surveys *Surveys)
{
extern const char *Txt_New_survey;
Ico_PutContextualIconToAdd (ActFrmNewSvy,NULL,
Svy_PutParamsToCreateNewSvy,&Gbl,
Svy_PutParamsToCreateNewSvy,Surveys,
Txt_New_survey);
}
@ -363,7 +357,7 @@ static void Svy_PutButtonToCreateNewSvy (void)
extern const char *Txt_New_survey;
Frm_StartForm (ActFrmNewSvy);
Svy_PutParamsToCreateNewSvy (&Gbl);
Svy_PutParamsToCreateNewSvy (&Gbl.Svys);
Btn_PutConfirmButton (Txt_New_survey);
Frm_EndForm ();
}
@ -372,16 +366,16 @@ static void Svy_PutButtonToCreateNewSvy (void)
/******************* Put parameters to create a new survey *******************/
/*****************************************************************************/
static void Svy_PutParamsToCreateNewSvy (void *Args)
static void Svy_PutParamsToCreateNewSvy (void *Surveys)
{
Grp_WhichGroups_t WhichGroups;
if (Args)
if (Surveys)
{
Svy_PutHiddenParamSvyOrder ();
Svy_PutHiddenParamSvyOrder (((struct Svy_Surveys *) Surveys)->SelectedOrder);
WhichGroups = Grp_GetParamWhichGroups ();
Grp_PutParamWhichGroups (&WhichGroups);
Pag_PutHiddenParamPagNum (Pag_SURVEYS,Gbl.Svys.CurrentPage);
Pag_PutHiddenParamPagNum (Pag_SURVEYS,((struct Svy_Surveys *) Surveys)->CurrentPage);
}
}
@ -389,12 +383,12 @@ static void Svy_PutParamsToCreateNewSvy (void *Args)
/**************** Put params to select which groups to show ******************/
/*****************************************************************************/
static void Svy_ParamsWhichGroupsToShow (void *Args)
static void Svy_ParamsWhichGroupsToShow (void *Surveys)
{
if (Args)
if (Surveys)
{
Svy_PutHiddenParamSvyOrder ();
Pag_PutHiddenParamPagNum (Pag_SURVEYS,Gbl.Svys.CurrentPage);
Svy_PutHiddenParamSvyOrder (((struct Svy_Surveys *) Surveys)->SelectedOrder);
Pag_PutHiddenParamPagNum (Pag_SURVEYS,((struct Svy_Surveys *) Surveys)->CurrentPage);
}
}
@ -404,7 +398,7 @@ static void Svy_ParamsWhichGroupsToShow (void *Args)
void Svy_SeeOneSurvey (void)
{
struct Survey Svy;
struct Svy_Survey Svy;
/***** Get parameters *****/
Svy_GetParamSvyOrder ();
@ -443,7 +437,7 @@ static void Svy_ShowOneSurvey (long SvyCod,bool ShowOnlyThisSvyComplete)
static unsigned UniqueId = 0;
char *Id;
Grp_WhichGroups_t WhichGroups;
struct Survey Svy;
struct Svy_Survey Svy;
char Txt[Cns_MAX_BYTES_TEXT + 1];
/***** Begin box *****/
@ -532,7 +526,7 @@ static void Svy_ShowOneSurvey (long SvyCod,bool ShowOnlyThisSvyComplete)
HTM_ARTICLE_Begin (Anchor);
Frm_StartForm (ActSeeSvy);
Svy_PutParamSvyCod (SvyCod);
Svy_PutHiddenParamSvyOrder ();
Svy_PutHiddenParamSvyOrder (Gbl.Svys.SelectedOrder);
WhichGroups = Grp_GetParamWhichGroups ();
Grp_PutParamWhichGroups (&WhichGroups);
Pag_PutHiddenParamPagNum (Pag_SURVEYS,Gbl.Svys.CurrentPage);
@ -574,7 +568,7 @@ static void Svy_ShowOneSurvey (long SvyCod,bool ShowOnlyThisSvyComplete)
Frm_StartForm (ActSeeSvy);
Svy_PutParamSvyCod (Svy.SvyCod);
Svy_PutHiddenParamSvyOrder ();
Svy_PutHiddenParamSvyOrder (Gbl.Svys.SelectedOrder);
WhichGroups = Grp_GetParamWhichGroups ();
Grp_PutParamWhichGroups (&WhichGroups);
Pag_PutHiddenParamPagNum (Pag_SURVEYS,Gbl.Svys.CurrentPage);
@ -590,7 +584,7 @@ static void Svy_ShowOneSurvey (long SvyCod,bool ShowOnlyThisSvyComplete)
Frm_StartForm (ActSeeSvy);
Svy_PutParamSvyCod (Svy.SvyCod);
Svy_PutHiddenParamSvyOrder ();
Svy_PutHiddenParamSvyOrder (Gbl.Svys.SelectedOrder);
WhichGroups = Grp_GetParamWhichGroups ();
Grp_PutParamWhichGroups (&WhichGroups);
Pag_PutHiddenParamPagNum (Pag_SURVEYS,Gbl.Svys.CurrentPage);
@ -716,7 +710,7 @@ static void Svy_ShowOneSurvey (long SvyCod,bool ShowOnlyThisSvyComplete)
/*********************** Write the author of a survey ************************/
/*****************************************************************************/
static void Svy_WriteAuthor (struct Survey *Svy)
static void Svy_WriteAuthor (struct Svy_Survey *Svy)
{
Usr_WriteAuthor1Line (Svy->UsrCod,!Svy->Status.Visible);
}
@ -725,7 +719,7 @@ static void Svy_WriteAuthor (struct Survey *Svy)
/************************ Write status of a survey ***************************/
/*****************************************************************************/
static void Svy_WriteStatus (struct Survey *Svy)
static void Svy_WriteStatus (struct Svy_Survey *Svy)
{
extern const char *Txt_Hidden_survey;
extern const char *Txt_Visible_survey;
@ -843,61 +837,61 @@ static void Svy_GetParamSvyOrder (void)
/***** Put a hidden parameter with the type of order in list of surveys ******/
/*****************************************************************************/
void Svy_PutHiddenParamSvyOrder (void)
void Svy_PutHiddenParamSvyOrder (Dat_StartEndTime_t SelectedOrder)
{
Dat_PutHiddenParamOrder (Gbl.Svys.SelectedOrder);
Dat_PutHiddenParamOrder (SelectedOrder);
}
/*****************************************************************************/
/******************* Put a link (form) to edit one survey ********************/
/*****************************************************************************/
static void Svy_PutFormsToRemEditOneSvy (const struct Survey *Svy,
static void Svy_PutFormsToRemEditOneSvy (const struct Svy_Survey *Svy,
const char *Anchor)
{
extern const char *Txt_Reset;
Svy_CurrentSvyCod = Svy->SvyCod; // Used as parameters in contextual links
Gbl.Svys.SvyCod = Svy->SvyCod; // Used as parameters in contextual links
/***** Put form to remove survey *****/
Ico_PutContextualIconToRemove (ActReqRemSvy,
Svy_PutParams,&Gbl);
Svy_PutParams,&Gbl.Svys);
/***** Put form to reset survey *****/
Lay_PutContextualLinkOnlyIcon (ActReqRstSvy,NULL,
Svy_PutParams,&Gbl,
Svy_PutParams,&Gbl.Svys,
"recycle.svg",
Txt_Reset);
/***** Put form to hide/show survey *****/
if (Svy->Status.Visible)
Ico_PutContextualIconToHide (ActHidSvy,Anchor,
Svy_PutParams,&Gbl);
Svy_PutParams,&Gbl.Svys);
else
Ico_PutContextualIconToUnhide (ActShoSvy,Anchor,
Svy_PutParams,&Gbl);
Svy_PutParams,&Gbl.Svys);
/***** Put form to edit survey *****/
Ico_PutContextualIconToEdit (ActEdiOneSvy,NULL,
Svy_PutParams,&Gbl);
Svy_PutParams,&Gbl.Svys);
}
/*****************************************************************************/
/********************** Params used to edit a survey *************************/
/*****************************************************************************/
static void Svy_PutParams (void *Args)
static void Svy_PutParams (void *Surveys)
{
Grp_WhichGroups_t WhichGroups;
if (Args)
if (Surveys)
{
if (Svy_CurrentSvyCod > 0)
Svy_PutParamSvyCod (Svy_CurrentSvyCod);
Dat_PutHiddenParamOrder (Gbl.Svys.SelectedOrder);
if (Gbl.Svys.SvyCod > 0)
Svy_PutParamSvyCod (Gbl.Svys.SvyCod);
Dat_PutHiddenParamOrder (((struct Svy_Surveys *) Surveys)->SelectedOrder);
WhichGroups = Grp_GetParamWhichGroups ();
Grp_PutParamWhichGroups (&WhichGroups);
Pag_PutHiddenParamPagNum (Pag_SURVEYS,Gbl.Svys.CurrentPage);
Pag_PutHiddenParamPagNum (Pag_SURVEYS,((struct Svy_Surveys *) Surveys)->CurrentPage);
}
}
@ -1226,7 +1220,7 @@ static void Svy_SetAllowedAndHiddenScopes (unsigned *ScopesAllowed,
/********************* Get survey data using its code ************************/
/*****************************************************************************/
void Svy_GetDataOfSurveyByCod (struct Survey *Svy)
void Svy_GetDataOfSurveyByCod (struct Svy_Survey *Svy)
{
MYSQL_RES *mysql_res;
MYSQL_ROW row;
@ -1554,7 +1548,7 @@ void Svy_AskRemSurvey (void)
{
extern const char *Txt_Do_you_really_want_to_remove_the_survey_X;
extern const char *Txt_Remove_survey;
struct Survey Svy;
struct Svy_Survey Svy;
/***** Get parameters *****/
Svy_GetParamSvyOrder ();
@ -1571,9 +1565,9 @@ void Svy_AskRemSurvey (void)
Lay_NoPermissionExit ();
/***** Show question and button to remove survey *****/
Svy_CurrentSvyCod = Svy.SvyCod;
Gbl.Svys.SvyCod = Svy.SvyCod;
Ale_ShowAlertAndButton (ActRemSvy,NULL,NULL,
Svy_PutParams,&Gbl,
Svy_PutParams,&Gbl.Svys,
Btn_REMOVE_BUTTON,Txt_Remove_survey,
Ale_QUESTION,Txt_Do_you_really_want_to_remove_the_survey_X,
Svy.Title);
@ -1589,7 +1583,7 @@ void Svy_AskRemSurvey (void)
void Svy_RemoveSurvey (void)
{
extern const char *Txt_Survey_X_removed;
struct Survey Svy;
struct Svy_Survey Svy;
/***** Get parameters *****/
Svy_GetParamSvyOrder ();
@ -1649,7 +1643,7 @@ void Svy_RemoveSurvey (void)
void Svy_AskResetSurvey (void)
{
extern const char *Txt_Do_you_really_want_to_reset_the_survey_X;
struct Survey Svy;
struct Svy_Survey Svy;
/***** Get parameters *****/
Svy_GetParamSvyOrder ();
@ -1670,7 +1664,7 @@ void Svy_AskResetSurvey (void)
Svy.Title);
/***** Button of confirmation of reset *****/
Svy_CurrentSvyCod = Svy.SvyCod;
Gbl.Svys.SvyCod = Svy.SvyCod;
Svy_PutButtonToResetSurvey ();
/***** Show surveys again *****/
@ -1686,7 +1680,7 @@ static void Svy_PutButtonToResetSurvey (void)
extern const char *Txt_Reset_survey;
Frm_StartForm (ActRstSvy);
Svy_PutParams (&Gbl);
Svy_PutParams (&Gbl.Svys);
Btn_PutRemoveButton (Txt_Reset_survey);
Frm_EndForm ();
}
@ -1698,7 +1692,7 @@ static void Svy_PutButtonToResetSurvey (void)
void Svy_ResetSurvey (void)
{
extern const char *Txt_Survey_X_reset;
struct Survey Svy;
struct Svy_Survey Svy;
/***** Get parameters *****/
Svy_GetParamSvyOrder ();
@ -1740,7 +1734,7 @@ void Svy_ResetSurvey (void)
void Svy_HideSurvey (void)
{
struct Survey Svy;
struct Svy_Survey Svy;
/***** Get parameters *****/
Svy_GetParamSvyOrder ();
@ -1771,7 +1765,7 @@ void Svy_HideSurvey (void)
void Svy_UnhideSurvey (void)
{
struct Survey Svy;
struct Svy_Survey Svy;
/***** Get parameters *****/
Svy_GetParamSvyOrder ();
@ -1800,7 +1794,7 @@ void Svy_UnhideSurvey (void)
/******************* Check if the title of a survey exists *******************/
/*****************************************************************************/
static bool Svy_CheckIfSimilarSurveyExists (struct Survey *Svy)
static bool Svy_CheckIfSimilarSurveyExists (struct Svy_Survey *Svy)
{
/***** Get number of surveys with a field value from database *****/
return (DB_QueryCOUNT ("can not get similar surveys",
@ -1828,7 +1822,7 @@ void Svy_RequestCreatOrEditSvy (void)
extern const char *Txt_Users;
extern const char *Txt_Create_survey;
extern const char *Txt_Save_changes;
struct Survey Svy;
struct Svy_Survey Svy;
bool ItsANewSurvey;
char Txt[Cns_MAX_BYTES_TEXT + 1];
static const Dat_SetHMS SetHMS[Dat_NUM_START_END_TIME] =
@ -1882,10 +1876,10 @@ void Svy_RequestCreatOrEditSvy (void)
}
/***** Begin form *****/
Svy_CurrentSvyCod = Svy.SvyCod;
Gbl.Svys.SvyCod = Svy.SvyCod;
Frm_StartForm (ItsANewSurvey ? ActNewSvy :
ActChgSvy);
Svy_PutParams (&Gbl);
Svy_PutParams (&Gbl.Svys);
/***** Begin box and table *****/
if (ItsANewSurvey)
@ -1992,7 +1986,7 @@ void Svy_RequestCreatOrEditSvy (void)
/****** Set default and allowed scopes depending on logged user's role *******/
/*****************************************************************************/
static void Svy_SetDefaultAndAllowedScope (struct Survey *Svy)
static void Svy_SetDefaultAndAllowedScope (struct Svy_Survey *Svy)
{
bool ICanEdit = false;
@ -2136,8 +2130,8 @@ void Svy_RecFormSurvey (void)
{
extern const char *Txt_Already_existed_a_survey_with_the_title_X;
extern const char *Txt_You_must_specify_the_title_of_the_survey;
struct Survey OldSvy;
struct Survey NewSvy;
struct Svy_Survey OldSvy;
struct Svy_Survey NewSvy;
bool ItsANewSurvey;
bool NewSurveyIsCorrect = true;
unsigned NumUsrsToBeNotifiedByEMail;
@ -2293,7 +2287,7 @@ static void Svy_UpdateNumUsrsNotifiedByEMailAboutSurvey (long SvyCod,
/*************************** Create a new survey *****************************/
/*****************************************************************************/
static void Svy_CreateSurvey (struct Survey *Svy,const char *Txt)
static void Svy_CreateSurvey (struct Svy_Survey *Svy,const char *Txt)
{
extern const char *Txt_Created_new_survey_X;
@ -2327,7 +2321,7 @@ static void Svy_CreateSurvey (struct Survey *Svy,const char *Txt)
/************************* Update an existing survey *************************/
/*****************************************************************************/
static void Svy_UpdateSurvey (struct Survey *Svy,const char *Txt)
static void Svy_UpdateSurvey (struct Svy_Survey *Svy,const char *Txt)
{
extern const char *Txt_The_survey_has_been_modified;
@ -2450,7 +2444,7 @@ static void Svy_CreateGrps (long SvyCod)
/************ Get and write the names of the groups of a survey **************/
/*****************************************************************************/
static void Svy_GetAndWriteNamesOfGrpsAssociatedToSvy (struct Survey *Svy)
static void Svy_GetAndWriteNamesOfGrpsAssociatedToSvy (struct Svy_Survey *Svy)
{
extern const char *Txt_Group;
extern const char *Txt_Groups;
@ -2705,13 +2699,13 @@ static void Svy_ShowFormEditOneQst (long SvyCod,struct SurveyQuestion *SvyQst,
if (SvyQst->QstCod > 0) // If the question already has assigned a code
{
/* Parameters for contextual icon */
Svy_CurrentSvyCod = SvyCod;
Svy_CurrentQstCod = SvyQst->QstCod;
Gbl.Svys.SvyCod = SvyCod;
Gbl.Svys.QstCod = SvyQst->QstCod;
if (asprintf (&Title,"%s %u",Txt_Question,SvyQst->QstInd + 1) < 0) // Question index may be 0, 1, 2, 3,...
Lay_NotEnoughMemoryExit ();
Box_BoxBegin (NULL,Title,
Svy_PutIconToRemoveOneQst,&Gbl,
Svy_PutIconToRemoveOneQst,&Gbl.Svys,
NULL,Box_NOT_CLOSABLE);
free (Title);
}
@ -3201,7 +3195,7 @@ static unsigned Svy_GetNextQuestionIndexInSvy (long SvyCod)
/************************ List the questions of a survey *********************/
/*****************************************************************************/
static void Svy_ListSvyQuestions (struct Survey *Svy)
static void Svy_ListSvyQuestions (struct Svy_Survey *Svy)
{
extern const char *Hlp_ASSESSMENT_Surveys_questions;
extern const char *Txt_Questions;
@ -3229,10 +3223,10 @@ static void Svy_ListSvyQuestions (struct Survey *Svy)
Svy->SvyCod);
/***** Begin box *****/
Svy_CurrentSvyCod = Svy->SvyCod;
Gbl.Svys.SvyCod = Svy->SvyCod;
if (Svy->Status.ICanEdit)
Box_BoxBegin (NULL,Txt_Questions,
Svy_PutIconToAddNewQuestion,&Gbl,
Svy_PutIconToAddNewQuestion,&Gbl.Svys,
Hlp_ASSESSMENT_Surveys_questions,Box_NOT_CLOSABLE);
else
Box_BoxBegin (NULL,Txt_Questions,
@ -3290,10 +3284,10 @@ static void Svy_ListSvyQuestions (struct Survey *Svy)
Frm_EndForm ();
/* Write icon to edit the question */
Svy_CurrentSvyCod = Svy->SvyCod;
Svy_CurrentQstCod = SvyQst.QstCod;
Gbl.Svys.SvyCod = Svy->SvyCod;
Gbl.Svys.QstCod = SvyQst.QstCod;
Ico_PutContextualIconToEdit (ActEdiOneSvyQst,NULL,
Svy_PutParamsToEditQuestion,&Gbl);
Svy_PutParamsToEditQuestion,&Gbl.Svys);
HTM_TD_End ();
}
@ -3351,12 +3345,12 @@ static void Svy_ListSvyQuestions (struct Survey *Svy)
/******************** Put parameters to edit a question **********************/
/*****************************************************************************/
static void Svy_PutParamsToEditQuestion (void *Args)
static void Svy_PutParamsToEditQuestion (void *Surveys)
{
if (Args)
if (Surveys)
{
Svy_PutParamSvyCod (Svy_CurrentSvyCod);
Svy_PutParamQstCod (Svy_CurrentQstCod);
Svy_PutParamSvyCod (((struct Svy_Surveys *) Surveys)->SvyCod);
Svy_PutParamQstCod (((struct Svy_Surveys *) Surveys)->QstCod);
}
}
@ -3364,15 +3358,14 @@ static void Svy_PutParamsToEditQuestion (void *Args)
/***************** Put icon to add a new question to survey ******************/
/*****************************************************************************/
static void Svy_PutIconToAddNewQuestion (void *Args)
static void Svy_PutIconToAddNewQuestion (void *Surveys)
{
extern const char *Txt_New_question;
if (Args)
/***** Put form to create a new question *****/
Ico_PutContextualIconToAdd (ActEdiOneSvyQst,NULL,
Svy_PutParams,&Gbl,
Txt_New_question);
/***** Put form to create a new question *****/
Ico_PutContextualIconToAdd (ActEdiOneSvyQst,NULL,
Svy_PutParams,Surveys,
Txt_New_question);
}
/*****************************************************************************/
@ -3384,7 +3377,7 @@ static void Svy_PutButtonToCreateNewQuestion (void)
extern const char *Txt_New_question;
Frm_StartForm (ActEdiOneSvyQst);
Svy_PutParams (&Gbl);
Svy_PutParams (&Gbl.Svys);
Btn_PutConfirmButton (Txt_New_question);
Frm_EndForm ();
}
@ -3418,7 +3411,7 @@ static void Svy_WriteQstStem (const char *Stem)
/************** Get and write the answers of a survey question ***************/
/*****************************************************************************/
static void Svy_WriteAnswersOfAQst (struct Survey *Svy,
static void Svy_WriteAnswersOfAQst (struct Svy_Survey *Svy,
struct SurveyQuestion *SvyQst,
bool PutFormAnswerSurvey)
{
@ -3572,23 +3565,22 @@ static void Svy_DrawBarNumUsrs (unsigned NumUsrs,unsigned MaxUsrs)
/********************* Put icon to remove one question ***********************/
/*****************************************************************************/
static void Svy_PutIconToRemoveOneQst (void *Args)
static void Svy_PutIconToRemoveOneQst (void *Surveys)
{
if (Args)
Ico_PutContextualIconToRemove (ActReqRemSvyQst,
Svy_PutParamsRemoveOneQst,Args);
Ico_PutContextualIconToRemove (ActReqRemSvyQst,
Svy_PutParamsRemoveOneQst,Surveys);
}
/*****************************************************************************/
/****************** Put parameter to remove one question *********************/
/*****************************************************************************/
static void Svy_PutParamsRemoveOneQst (void *Args)
static void Svy_PutParamsRemoveOneQst (void *Surveys)
{
if (Args)
if (Surveys)
{
Svy_PutParamSvyCod (Svy_CurrentSvyCod);
Svy_PutParamQstCod (Svy_CurrentQstCod);
Svy_PutParamSvyCod (((struct Svy_Surveys *) Surveys)->SvyCod);
Svy_PutParamQstCod (((struct Svy_Surveys *) Surveys)->QstCod);
}
}
@ -3619,10 +3611,10 @@ void Svy_RequestRemoveQst (void)
SvyQst.QstInd = Svy_GetQstIndFromQstCod (SvyQst.QstCod);
/***** Show question and button to remove question *****/
Svy_CurrentSvyCod = SvyCod;
Svy_CurrentQstCod = SvyQst.QstCod;
Gbl.Svys.SvyCod = SvyCod;
Gbl.Svys.QstCod = SvyQst.QstCod;
Ale_ShowAlertAndButton (ActRemSvyQst,NULL,NULL,
Svy_PutParamsRemoveOneQst,&Gbl,
Svy_PutParamsRemoveOneQst,&Gbl.Svys,
Btn_REMOVE_BUTTON,Txt_Remove_question,
Ale_QUESTION,Txt_Do_you_really_want_to_remove_the_question_X,
(long) SvyQst.QstInd + 1);
@ -3688,7 +3680,7 @@ void Svy_ReceiveSurveyAnswers (void)
{
extern const char *Txt_You_already_answered_this_survey_before;
extern const char *Txt_Thanks_for_answering_the_survey;
struct Survey Svy;
struct Svy_Survey Svy;
/***** Get survey code *****/
if ((Svy.SvyCod = Svy_GetParamSvyCod ()) == -1L)

View File

@ -43,7 +43,18 @@ typedef enum
Svy_END_TIME = 1,
} Svy_StartOrEndTime_t;
struct Survey
struct Svy_Surveys
{
bool LstIsRead; // Is the list already read from database, or it needs to be read?
unsigned Num; // Number of surveys
long *LstSvyCods; // List of survey codes
Dat_StartEndTime_t SelectedOrder;
unsigned CurrentPage;
long SvyCod;
long QstCod;
};
struct Svy_Survey
{
long SvyCod;
Hie_Level_t Scope;
@ -83,10 +94,10 @@ typedef enum
void Svy_SeeAllSurveys (void);
void Svy_SeeOneSurvey (void);
void Svy_PutHiddenParamSvyOrder (void);
void Svy_PutHiddenParamSvyOrder (Dat_StartEndTime_t SelectedOrder);
void Svy_RequestCreatOrEditSvy (void);
void Svy_GetDataOfSurveyByCod (struct Survey *Svy);
void Svy_GetDataOfSurveyByFolder (struct Survey *Svy);
void Svy_GetDataOfSurveyByCod (struct Svy_Survey *Svy);
void Svy_GetDataOfSurveyByFolder (struct Svy_Survey *Svy);
void Svy_FreeListSurveys (void);
void Svy_GetNotifSurvey (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
char **ContentStr,

View File

@ -105,7 +105,7 @@ static void Syl_ShowSyllabus (bool PutIconToEdit);
static void Syl_ShowRowSyllabus (unsigned NumItem,
int Level,int *CodItem,const char *Text,bool NewItem);
static void Syl_PutFormItemSyllabus (bool NewItem,unsigned NumItem,int Level,int *CodItem,const char *Text);
static void Syl_PutParamNumItem (void *Args);
static void Syl_PutParamNumItem (void *ParamNumItem);
static void Syl_WriteNumItem (char *StrDst,FILE *FileTgt,int Level,int *CodItem);
@ -608,7 +608,7 @@ static void Syl_ShowRowSyllabus (unsigned NumItem,
{
Frm_StartForm (Gbl.Crs.Info.Type == Inf_LECTURES ? ActDelItmSylLec :
ActDelItmSylPra);
Syl_PutParamNumItem (&Gbl);
Syl_PutParamNumItem (&Gbl.Syllabus.ParamNumItem);
Ico_PutIconRemove ();
Frm_EndForm ();
}
@ -622,7 +622,7 @@ static void Syl_ShowRowSyllabus (unsigned NumItem,
Lay_PutContextualLinkOnlyIcon (Gbl.Crs.Info.Type == Inf_LECTURES ? ActUp_IteSylLec :
ActUp_IteSylPra,
NULL,
Syl_PutParamNumItem,&Gbl,
Syl_PutParamNumItem,&Gbl.Syllabus.ParamNumItem,
"arrow-up.svg",
Str_BuildStringStr (Syl_LstItemsSyllabus.Lst[NumItem].HasChildren ? Txt_Move_up_X_and_its_subsections :
Txt_Move_up_X,
@ -641,7 +641,7 @@ static void Syl_ShowRowSyllabus (unsigned NumItem,
Lay_PutContextualLinkOnlyIcon (Gbl.Crs.Info.Type == Inf_LECTURES ? ActDwnIteSylLec :
ActDwnIteSylPra,
NULL,
Syl_PutParamNumItem,&Gbl,
Syl_PutParamNumItem,&Gbl.Syllabus.ParamNumItem,
"arrow-down.svg",
Str_BuildStringStr (Syl_LstItemsSyllabus.Lst[NumItem].HasChildren ? Txt_Move_down_X_and_its_subsections :
Txt_Move_down_X,
@ -659,7 +659,7 @@ static void Syl_ShowRowSyllabus (unsigned NumItem,
Lay_PutContextualLinkOnlyIcon (Gbl.Crs.Info.Type == Inf_LECTURES ? ActRgtIteSylLec :
ActRgtIteSylPra,
NULL,
Syl_PutParamNumItem,&Gbl,
Syl_PutParamNumItem,&Gbl.Syllabus.ParamNumItem,
"arrow-left.svg",
Str_BuildStringStr (Txt_Increase_level_of_X,
StrItemCod));
@ -677,7 +677,7 @@ static void Syl_ShowRowSyllabus (unsigned NumItem,
Lay_PutContextualLinkOnlyIcon (Gbl.Crs.Info.Type == Inf_LECTURES ? ActLftIteSylLec :
ActLftIteSylPra,
NULL,
Syl_PutParamNumItem,&Gbl,
Syl_PutParamNumItem,&Gbl.Syllabus.ParamNumItem,
"arrow-right.svg",
Str_BuildStringStr (Txt_Decrease_level_of_X,
StrItemCod));
@ -837,7 +837,7 @@ static void Syl_PutFormItemSyllabus (bool NewItem,unsigned NumItem,int Level,int
(Gbl.Crs.Info.Type == Inf_LECTURES ? ActModIteSylLec :
ActModIteSylPra));
Gbl.Syllabus.ParamNumItem = NumItem;
Syl_PutParamNumItem (&Gbl);
Syl_PutParamNumItem (&Gbl.Syllabus.ParamNumItem);
HTM_INPUT_TEXT ("Txt",Syl_MAX_CHARS_TEXT_ITEM,Text,true,
"size=\"60\" placeholder=\"%s\"%s",
Txt_Enter_a_new_item_here,
@ -851,10 +851,10 @@ static void Syl_PutFormItemSyllabus (bool NewItem,unsigned NumItem,int Level,int
/***** Write parameter with the number of an item in a syllabus form *********/
/*****************************************************************************/
static void Syl_PutParamNumItem (void *Args)
static void Syl_PutParamNumItem (void *ParamNumItem)
{
if (Args)
Par_PutHiddenParamUnsigned (NULL,"NumI",Gbl.Syllabus.ParamNumItem);
if (ParamNumItem)
Par_PutHiddenParamUnsigned (NULL,"NumI",*((unsigned *) ParamNumItem));
}
/*****************************************************************************/

View File

@ -67,7 +67,7 @@ extern struct Globals Gbl; // All the global parameters and variables must be in
/*****************************************************************************/
static void SysCfg_Configuration (bool PrintView);
static void SysCfg_PutIconToPrint (void *Args);
static void SysCfg_PutIconToPrint (__attribute__((unused)) void *Args);
static void SysCfg_GetCoordAndZoom (struct Coordinates *Coord,unsigned *Zoom);
static void SysCfg_Map (void);
static void SysCfg_Platform (void);
@ -117,7 +117,7 @@ static void SysCfg_Configuration (bool PrintView)
NULL,Box_NOT_CLOSABLE);
else
Box_BoxBegin (NULL,Cfg_PLATFORM_SHORT_NAME,
SysCfg_PutIconToPrint,&Gbl,
SysCfg_PutIconToPrint,NULL,
Hlp_SYSTEM_Information,Box_NOT_CLOSABLE);
/**************************** Left part ***********************************/
@ -185,11 +185,10 @@ static void SysCfg_Configuration (bool PrintView)
/************* Put icon to print the configuration of a country **************/
/*****************************************************************************/
static void SysCfg_PutIconToPrint (void *Args)
static void SysCfg_PutIconToPrint (__attribute__((unused)) void *Args)
{
if (Args)
Ico_PutContextualIconToPrint (ActPrnSysInf,
NULL,NULL);
Ico_PutContextualIconToPrint (ActPrnSysInf,
NULL,NULL);
}
/*****************************************************************************/

View File

@ -145,7 +145,9 @@ static void TstExa_StoreOneExamQstInDB (const struct TstExa_Exam *Exam,
unsigned NumQst);
static void Tst_UpdateQstScoreInDB (const struct TstExa_Exam *Exam,unsigned NumQst);
static void TstExa_ShowUsrsExams (void *Args);
static void TstExa_PutFormToSelectUsrsToViewUsrsExams (__attribute__((unused)) void *Args);
static void TstExa_ShowUsrsExams (__attribute__((unused)) void *Args);
static void TstExa_ShowHeaderExams (void);
static void TstExa_ShowExams (struct UsrData *UsrDat);
static void TstExa_ShowExamsSummaryRow (bool ItsMe,
@ -1451,20 +1453,24 @@ static void Tst_UpdateQstScoreInDB (const struct TstExa_Exam *Exam,unsigned NumQ
/************* Select users and dates to show their test exams ***************/
/*****************************************************************************/
void TstExa_SelUsrsToViewUsrsExams (void *Args)
void TstExa_SelUsrsToViewUsrsExams (void)
{
TstExa_PutFormToSelectUsrsToViewUsrsExams (NULL);
}
static void TstExa_PutFormToSelectUsrsToViewUsrsExams (__attribute__((unused)) void *Args)
{
extern const char *Hlp_ASSESSMENT_Tests_results;
extern const char *Txt_Results;
extern const char *Txt_View_test_results;
if (Args)
Usr_PutFormToSelectUsrsToGoToAct (&Gbl.Usrs.Selected,
ActSeeUsrTstRes,
NULL,NULL,
Txt_Results,
Hlp_ASSESSMENT_Tests_results,
Txt_View_test_results,
true); // Put form with date range
Usr_PutFormToSelectUsrsToGoToAct (&Gbl.Usrs.Selected,
ActSeeUsrTstRes,
NULL,NULL,
Txt_Results,
Hlp_ASSESSMENT_Tests_results,
Txt_View_test_results,
true); // Put form with date range
}
/*****************************************************************************/
@ -1533,23 +1539,20 @@ void TstExa_ShowMyExams (void)
void TstExa_GetUsrsAndShowExams (void)
{
Usr_GetSelectedUsrsAndGoToAct (&Gbl.Usrs.Selected,
TstExa_ShowUsrsExams,&Gbl,
TstExa_SelUsrsToViewUsrsExams,&Gbl);
TstExa_ShowUsrsExams,NULL,
TstExa_PutFormToSelectUsrsToViewUsrsExams,NULL);
}
/*****************************************************************************/
/********************* Show test exams for several users *********************/
/*****************************************************************************/
static void TstExa_ShowUsrsExams (void *Args)
static void TstExa_ShowUsrsExams (__attribute__((unused)) void *Args)
{
extern const char *Hlp_ASSESSMENT_Tests_results;
extern const char *Txt_Results;
const char *Ptr;
if (!Args)
return;
/***** Get starting and ending dates *****/
Dat_GetIniEndDatesFromForm ();

View File

@ -86,7 +86,7 @@ void TstExa_ComputeAndShowGrade (unsigned NumQsts,double Score,double MaxGrade);
double TstExa_ComputeGrade (unsigned NumQsts,double Score,double MaxGrade);
void TstExa_ShowGrade (double Grade,double MaxGrade);
void TstExa_SelUsrsToViewUsrsExams (void *Args);
void TstExa_SelUsrsToViewUsrsExams (void);
void TstExa_SelDatesToSeeMyExams (void);
void TstExa_ShowMyExams (void);
void TstExa_GetUsrsAndShowExams (void);

View File

@ -333,7 +333,7 @@ static void TL_CreateNotifToAuthor (long AuthorCod,long PubCod,
Ntf_NotifyEvent_t NotifyEvent);
static void TL_RequestRemovalNote (void);
static void TL_PutParamsRemoveNote (void *Args);
static void TL_PutParamsRemoveNote (void *Timeline);
static void TL_RemoveNote (void);
static void TL_RemoveNoteMediaAndDBEntries (struct TL_Note *SocNot);
@ -341,7 +341,7 @@ static long TL_GetNotCodOfPublication (long PubCod);
static long TL_GetPubCodOfOriginalNote (long NotCod);
static void TL_RequestRemovalComment (void);
static void TL_PutParamsRemoveCommment (void *Args);
static void TL_PutParamsRemoveComment (void *Timeline);
static void TL_RemoveComment (void);
static void TL_RemoveCommentMediaAndDBEntries (long PubCod);
@ -4071,11 +4071,11 @@ static void TL_RequestRemovalNote (void)
Gbl.Timeline.NotCod = SocNot.NotCod; // Note to be removed
if (Gbl.Usrs.Other.UsrDat.UsrCod > 0)
Ale_ShowAlertAndButton2 (ActRemSocPubUsr,"timeline",NULL,
TL_PutParamsRemoveNote,&Gbl,
TL_PutParamsRemoveNote,&Gbl.Timeline,
Btn_REMOVE_BUTTON,Txt_Remove);
else
Ale_ShowAlertAndButton2 (ActRemSocPubGbl,NULL,NULL,
TL_PutParamsRemoveNote,&Gbl,
TL_PutParamsRemoveNote,&Gbl.Timeline,
Btn_REMOVE_BUTTON,Txt_Remove);
}
}
@ -4087,15 +4087,15 @@ static void TL_RequestRemovalNote (void)
/********************* Put parameters to remove a note ***********************/
/*****************************************************************************/
static void TL_PutParamsRemoveNote (void *Args)
static void TL_PutParamsRemoveNote (void *Timeline)
{
if (Args)
if (Timeline)
{
if (Gbl.Usrs.Other.UsrDat.UsrCod > 0)
Usr_PutParamOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EncryptedUsrCod);
else
Usr_PutHiddenParamWho (Gbl.Timeline.Who);
TL_PutHiddenParamNotCod (Gbl.Timeline.NotCod);
Usr_PutHiddenParamWho (((struct TL_Timeline *) Timeline)->Who);
TL_PutHiddenParamNotCod (((struct TL_Timeline *) Timeline)->NotCod);
}
}
@ -4384,11 +4384,11 @@ static void TL_RequestRemovalComment (void)
Gbl.Timeline.PubCod = SocCom.PubCod; // Publication to be removed
if (Gbl.Usrs.Other.UsrDat.UsrCod > 0)
Ale_ShowAlertAndButton2 (ActRemSocComUsr,"timeline",NULL,
TL_PutParamsRemoveCommment,&Gbl,
TL_PutParamsRemoveComment,&Gbl.Timeline,
Btn_REMOVE_BUTTON,Txt_Remove);
else
Ale_ShowAlertAndButton2 (ActRemSocComGbl,NULL,NULL,
TL_PutParamsRemoveCommment,&Gbl,
TL_PutParamsRemoveComment,&Gbl.Timeline,
Btn_REMOVE_BUTTON,Txt_Remove);
}
}
@ -4403,15 +4403,15 @@ static void TL_RequestRemovalComment (void)
/******************** Put parameters to remove a comment *********************/
/*****************************************************************************/
static void TL_PutParamsRemoveCommment (void *Args)
static void TL_PutParamsRemoveComment (void *Timeline)
{
if (Args)
if (Timeline)
{
if (Gbl.Usrs.Other.UsrDat.UsrCod > 0)
Usr_PutParamOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EncryptedUsrCod);
else
Usr_PutHiddenParamWho (Gbl.Timeline.Who);
TL_PutHiddenParamPubCod (Gbl.Timeline.PubCod);
Usr_PutHiddenParamWho (((struct TL_Timeline *) Timeline)->Who);
TL_PutHiddenParamPubCod (((struct TL_Timeline *) Timeline)->PubCod);
}
}

View File

@ -107,6 +107,13 @@ struct TL_Publication
TL_TopMessage_t TopMessage; // Used to show feedback on the action made
};
struct TL_Timeline
{
Usr_Who_t Who;
long NotCod; // Used as parameter about social note to be edited, removed...
long PubCod; // Used as parameter about social publishing to be edited, removed...
};
/*****************************************************************************/
/****************************** Public prototypes ****************************/
/*****************************************************************************/

View File

@ -129,11 +129,11 @@ static void TT_FreeTimeTable (void);
static void TT_ShowTimeTableGrpsSelected (void);
static void TT_GetParamsTimeTable (void);
static void TT_PutContextualIcons (void *Args);
static void TT_PutContextualIcons (void *Timetable);
static void TT_PutFormToSelectWhichGroupsToShow (void);
static void TT_PutIconToViewCrsTT (void *Args);
static void TT_PutIconToViewMyTT (void *Args);
static void TT_PutIconToViewCrsTT (__attribute__((unused)) void *Args);
static void TT_PutIconToViewMyTT (__attribute__((unused)) void *Args);
static void TT_WriteCrsTimeTableIntoDB (long CrsCod);
static void TT_WriteTutTimeTableIntoDB (long UsrCod);
@ -163,38 +163,38 @@ static void TT_TimeTableConfigureIntervalsAndAllocateTimeTable (void)
{
unsigned Weekday;
if (Gbl.TimeTable.Config.Range.Hours.End >
Gbl.TimeTable.Config.Range.Hours.Start)
if (Gbl.Timetable.Config.Range.Hours.End >
Gbl.Timetable.Config.Range.Hours.Start)
{
/***** Configuration of timetable depending on hours and resolution *****/
Gbl.TimeTable.Config.HoursPerDay = Gbl.TimeTable.Config.Range.Hours.End -
Gbl.TimeTable.Config.Range.Hours.Start; // From start hour to end hour
Gbl.TimeTable.Config.SecondsPerInterval = Gbl.TimeTable.Config.Range.MinutesPerInterval *
Gbl.Timetable.Config.HoursPerDay = Gbl.Timetable.Config.Range.Hours.End -
Gbl.Timetable.Config.Range.Hours.Start; // From start hour to end hour
Gbl.Timetable.Config.SecondsPerInterval = Gbl.Timetable.Config.Range.MinutesPerInterval *
TT_SECONDS_PER_MINUTE;
Gbl.TimeTable.Config.IntervalsPerHour = TT_MINUTES_PER_HOUR /
Gbl.TimeTable.Config.Range.MinutesPerInterval;
Gbl.TimeTable.Config.IntervalsPerDay = Gbl.TimeTable.Config.IntervalsPerHour *
Gbl.TimeTable.Config.HoursPerDay;
Gbl.TimeTable.Config.IntervalsBeforeStartHour = Gbl.TimeTable.Config.IntervalsPerHour *
Gbl.TimeTable.Config.Range.Hours.Start;
Gbl.Timetable.Config.IntervalsPerHour = TT_MINUTES_PER_HOUR /
Gbl.Timetable.Config.Range.MinutesPerInterval;
Gbl.Timetable.Config.IntervalsPerDay = Gbl.Timetable.Config.IntervalsPerHour *
Gbl.Timetable.Config.HoursPerDay;
Gbl.Timetable.Config.IntervalsBeforeStartHour = Gbl.Timetable.Config.IntervalsPerHour *
Gbl.Timetable.Config.Range.Hours.Start;
/***** Allocate memory for timetable *****/
for (Weekday = 0;
Weekday < TT_DAYS_PER_WEEK;
Weekday++)
if ((TT_TimeTable[Weekday] = (struct TT_Cell *)
malloc (Gbl.TimeTable.Config.IntervalsPerDay *
malloc (Gbl.Timetable.Config.IntervalsPerDay *
sizeof (struct TT_Cell))) == NULL)
Lay_ShowErrorAndExit ("Error allocating memory for timetable.");
}
else
{
/***** Table is empty *****/
Gbl.TimeTable.Config.HoursPerDay = 0;
Gbl.TimeTable.Config.SecondsPerInterval = 0;
Gbl.TimeTable.Config.IntervalsPerHour = 0;
Gbl.TimeTable.Config.IntervalsPerDay = 0;
Gbl.TimeTable.Config.IntervalsBeforeStartHour = 0;
Gbl.Timetable.Config.HoursPerDay = 0;
Gbl.Timetable.Config.SecondsPerInterval = 0;
Gbl.Timetable.Config.IntervalsPerHour = 0;
Gbl.Timetable.Config.IntervalsPerDay = 0;
Gbl.Timetable.Config.IntervalsBeforeStartHour = 0;
/***** Clear timetable in order to not try to free it *****/
for (Weekday = 0;
@ -257,21 +257,21 @@ static void TT_GetParamsTimeTable (void)
unsigned Minutes;
/***** Get day (0: monday, 1: tuesday,..., 6: sunday *****/
Gbl.TimeTable.Weekday = (unsigned)
Gbl.Timetable.Weekday = (unsigned)
Par_GetParToUnsignedLong ("TTDay",
0,
TT_DAYS_PER_WEEK - 1,
0);
/***** Get hour *****/
Gbl.TimeTable.Interval = (unsigned)
Gbl.Timetable.Interval = (unsigned)
Par_GetParToUnsignedLong ("TTInt",
0,
Gbl.TimeTable.Config.IntervalsPerDay - 1,
Gbl.Timetable.Config.IntervalsPerDay - 1,
0);
/***** Get number of column *****/
Gbl.TimeTable.Column = (unsigned)
Gbl.Timetable.Column = (unsigned)
Par_GetParToUnsignedLong ("TTCol",
0,
TT_MAX_COLUMNS_PER_CELL - 1,
@ -279,26 +279,26 @@ static void TT_GetParamsTimeTable (void)
/***** Get class type *****/
Par_GetParToText ("TTTyp",StrClassType,TT_MAX_BYTES_STR_CLASS_TYPE);
for (Gbl.TimeTable.ClassType = (TT_ClassType_t) 0;
Gbl.TimeTable.ClassType <= (TT_ClassType_t) (TT_NUM_CLASS_TYPES - 1);
Gbl.TimeTable.ClassType++)
if (!strcmp (StrClassType,TT_ClassTypeDB[Gbl.TimeTable.ClassType]))
for (Gbl.Timetable.ClassType = (TT_ClassType_t) 0;
Gbl.Timetable.ClassType <= (TT_ClassType_t) (TT_NUM_CLASS_TYPES - 1);
Gbl.Timetable.ClassType++)
if (!strcmp (StrClassType,TT_ClassTypeDB[Gbl.Timetable.ClassType]))
break;
if (Gbl.TimeTable.ClassType > (TT_ClassType_t) (TT_NUM_CLASS_TYPES - 1))
if (Gbl.Timetable.ClassType > (TT_ClassType_t) (TT_NUM_CLASS_TYPES - 1))
Lay_ShowErrorAndExit ("Type of timetable cell is missing.");
/***** Get class duration *****/
Par_GetParToText ("TTDur",StrDuration,TT_MAX_BYTES_STR_DURATION);
if (sscanf (StrDuration,"%u:%u",&Hours,&Minutes) != 2)
Lay_ShowErrorAndExit ("Duration is missing.");
Gbl.TimeTable.DurationIntervals = Hours * Gbl.TimeTable.Config.IntervalsPerHour +
Minutes / Gbl.TimeTable.Config.Range.MinutesPerInterval;
Gbl.Timetable.DurationIntervals = Hours * Gbl.Timetable.Config.IntervalsPerHour +
Minutes / Gbl.Timetable.Config.Range.MinutesPerInterval;
/***** Get group code *****/
Gbl.TimeTable.GrpCod = Par_GetParToLong ("TTGrp");
Gbl.Timetable.GrpCod = Par_GetParToLong ("TTGrp");
/***** Get info *****/
Par_GetParToText ("TTInf",Gbl.TimeTable.Info,TT_MAX_BYTES_INFO);
Par_GetParToText ("TTInf",Gbl.Timetable.Info,TT_MAX_BYTES_INFO);
}
/*****************************************************************************/
@ -332,42 +332,42 @@ void TT_ShowClassTimeTable (void)
case ActSeeCrsTT:
case ActPrnCrsTT:
case ActChgCrsTT1stDay:
Gbl.TimeTable.Type = TT_COURSE_TIMETABLE;
Gbl.Timetable.Type = TT_COURSE_TIMETABLE;
break;
case ActSeeMyTT:
case ActPrnMyTT:
case ActChgMyTT1stDay:
Gbl.TimeTable.Type = TT_MY_TIMETABLE;
Gbl.Timetable.Type = TT_MY_TIMETABLE;
break;
default:
Lay_ShowErrorAndExit ("Wrong action.");
}
Gbl.TimeTable.ContextualIcons.PutIconEditCrsTT = (Gbl.TimeTable.Type == TT_COURSE_TIMETABLE &&
Gbl.Timetable.ContextualIcons.PutIconEditCrsTT = (Gbl.Timetable.Type == TT_COURSE_TIMETABLE &&
!PrintView &&
Gbl.Usrs.Me.Role.Logged >= Rol_TCH);
Gbl.TimeTable.ContextualIcons.PutIconEditOfficeHours = (Gbl.TimeTable.Type == TT_MY_TIMETABLE &&
Gbl.Timetable.ContextualIcons.PutIconEditOfficeHours = (Gbl.Timetable.Type == TT_MY_TIMETABLE &&
!PrintView &&
(Gbl.Usrs.Me.Role.Available & (1 << Rol_TCH)));
Gbl.TimeTable.ContextualIcons.PutIconPrint = !PrintView;
Gbl.Timetable.ContextualIcons.PutIconPrint = !PrintView;
/***** Get whether to show only my groups or all groups *****/
Grp_GetParamWhichGroups ();
/***** Begin box *****/
if (Gbl.TimeTable.ContextualIcons.PutIconEditCrsTT ||
Gbl.TimeTable.ContextualIcons.PutIconEditOfficeHours ||
Gbl.TimeTable.ContextualIcons.PutIconPrint)
Box_BoxBegin ("100%",Txt_TIMETABLE_TYPES[Gbl.TimeTable.Type],
TT_PutContextualIcons,&Gbl,
Help[Gbl.TimeTable.Type],Box_NOT_CLOSABLE);
if (Gbl.Timetable.ContextualIcons.PutIconEditCrsTT ||
Gbl.Timetable.ContextualIcons.PutIconEditOfficeHours ||
Gbl.Timetable.ContextualIcons.PutIconPrint)
Box_BoxBegin ("100%",Txt_TIMETABLE_TYPES[Gbl.Timetable.Type],
TT_PutContextualIcons,&Gbl.Timetable,
Help[Gbl.Timetable.Type],Box_NOT_CLOSABLE);
else
Box_BoxBegin ("100%",Txt_TIMETABLE_TYPES[Gbl.TimeTable.Type],
Box_BoxBegin ("100%",Txt_TIMETABLE_TYPES[Gbl.Timetable.Type],
NULL,NULL,
Help[Gbl.TimeTable.Type],Box_NOT_CLOSABLE);
Help[Gbl.Timetable.Type],Box_NOT_CLOSABLE);
/***** Start time table drawing *****/
if (Gbl.TimeTable.Type == TT_COURSE_TIMETABLE)
if (Gbl.Timetable.Type == TT_COURSE_TIMETABLE)
Lay_WriteHeaderClassPhoto (PrintView,false,
Gbl.Hierarchy.Ins.InsCod,Gbl.Hierarchy.Deg.DegCod,Gbl.Hierarchy.Crs.CrsCod);
@ -380,14 +380,14 @@ void TT_ShowClassTimeTable (void)
Set_StartSettingsHead ();
/* Select whether show only my groups or all groups */
if ( Gbl.TimeTable.Type == TT_MY_TIMETABLE ||
(Gbl.TimeTable.Type == TT_COURSE_TIMETABLE &&
if ( Gbl.Timetable.Type == TT_MY_TIMETABLE ||
(Gbl.Timetable.Type == TT_COURSE_TIMETABLE &&
Gbl.Crs.Grps.NumGrps))
TT_PutFormToSelectWhichGroupsToShow ();
/* Show form to change first day of week */
WhichGroups = Grp_GetParamWhichGroups ();
Cal_ShowFormToSelFirstDayOfWeek (ActChgTT1stDay[Gbl.TimeTable.Type],
Cal_ShowFormToSelFirstDayOfWeek (ActChgTT1stDay[Gbl.Timetable.Type],
Grp_PutParamWhichGroups,&WhichGroups);
Set_EndSettingsHead ();
@ -404,24 +404,25 @@ void TT_ShowClassTimeTable (void)
/***************** Put contextual icons above the time table *****************/
/*****************************************************************************/
static void TT_PutContextualIcons (void *Args)
static void TT_PutContextualIcons (void *Timetable)
{
Grp_WhichGroups_t WhichGroups;
if (Args)
if (Timetable)
{
WhichGroups = Grp_GetParamWhichGroups ();
if (Gbl.TimeTable.ContextualIcons.PutIconEditCrsTT)
if (((struct TT_Timetable *) Timetable)->ContextualIcons.PutIconEditCrsTT)
Ico_PutContextualIconToEdit (ActEdiCrsTT,NULL,
Grp_PutParamWhichGroups,&WhichGroups);
if (Gbl.TimeTable.ContextualIcons.PutIconEditOfficeHours)
if (((struct TT_Timetable *) Timetable)->ContextualIcons.PutIconEditOfficeHours)
Ico_PutContextualIconToEdit (ActEdiTut,NULL,
NULL,NULL);
if (Gbl.TimeTable.ContextualIcons.PutIconPrint)
Ico_PutContextualIconToPrint (Gbl.TimeTable.Type == TT_COURSE_TIMETABLE ? ActPrnCrsTT :
ActPrnMyTT,
if (((struct TT_Timetable *) Timetable)->ContextualIcons.PutIconPrint)
Ico_PutContextualIconToPrint (((struct TT_Timetable *) Timetable)->Type == TT_COURSE_TIMETABLE ? ActPrnCrsTT :
ActPrnMyTT,
Grp_PutParamWhichGroups,&WhichGroups);
}
}
@ -439,7 +440,7 @@ static void TT_PutFormToSelectWhichGroupsToShow (void)
[TT_TUTORING_TIMETABLE] = ActUnk,
};
Grp_ShowFormToSelWhichGrps (ActSeeTT[Gbl.TimeTable.Type],
Grp_ShowFormToSelWhichGrps (ActSeeTT[Gbl.Timetable.Type],
NULL,NULL);
}
@ -453,9 +454,9 @@ void TT_EditCrsTimeTable (void)
extern const char *Txt_TIMETABLE_TYPES[TT_NUM_TIMETABLE_TYPES];
/***** Editable time table *****/
Gbl.TimeTable.Type = TT_COURSE_TIMETABLE;
Box_BoxBegin ("100%",Txt_TIMETABLE_TYPES[Gbl.TimeTable.Type],
TT_PutIconToViewCrsTT,&Gbl,
Gbl.Timetable.Type = TT_COURSE_TIMETABLE;
Box_BoxBegin ("100%",Txt_TIMETABLE_TYPES[Gbl.Timetable.Type],
TT_PutIconToViewCrsTT,NULL,
Hlp_COURSE_Timetable,Box_NOT_CLOSABLE);
TT_ShowTimeTable (Gbl.Usrs.Me.UsrDat.UsrCod);
Box_BoxEnd ();
@ -471,9 +472,9 @@ void TT_EditMyTutTimeTable (void)
extern const char *Txt_TIMETABLE_TYPES[TT_NUM_TIMETABLE_TYPES];
/***** Time table *****/
Gbl.TimeTable.Type = TT_TUTORING_TIMETABLE;
Box_BoxBegin ("100%",Txt_TIMETABLE_TYPES[Gbl.TimeTable.Type],
TT_PutIconToViewMyTT,&Gbl,
Gbl.Timetable.Type = TT_TUTORING_TIMETABLE;
Box_BoxBegin ("100%",Txt_TIMETABLE_TYPES[Gbl.Timetable.Type],
TT_PutIconToViewMyTT,NULL,
Hlp_PROFILE_Timetable,Box_NOT_CLOSABLE);
TT_ShowTimeTable (Gbl.Usrs.Me.UsrDat.UsrCod);
Box_BoxEnd ();
@ -483,22 +484,20 @@ void TT_EditMyTutTimeTable (void)
/********************** Put icon to view course timetable ********************/
/*****************************************************************************/
static void TT_PutIconToViewCrsTT (void *Args)
static void TT_PutIconToViewCrsTT (__attribute__((unused)) void *Args)
{
if (Args)
Ico_PutContextualIconToView (ActSeeCrsTT,
NULL,NULL);
Ico_PutContextualIconToView (ActSeeCrsTT,
NULL,NULL);
}
/*****************************************************************************/
/************************ Put icon to view my timetable **********************/
/*****************************************************************************/
static void TT_PutIconToViewMyTT (void *Args)
static void TT_PutIconToViewMyTT (__attribute__((unused)) void *Args)
{
if (Args)
Ico_PutContextualIconToView (ActSeeMyTT,
NULL,NULL);
Ico_PutContextualIconToView (ActSeeMyTT,
NULL,NULL);
}
/*****************************************************************************/
@ -510,31 +509,31 @@ void TT_ShowTimeTable (long UsrCod)
extern const char *Txt_The_timetable_is_empty;
/***** Set type of view depending on current action *****/
Gbl.TimeTable.View = TT_CRS_VIEW;
Gbl.Timetable.View = TT_CRS_VIEW;
switch (Gbl.Action.Act)
{
case ActSeeCrsTT: case ActPrnCrsTT: case ActChgCrsTT1stDay:
case ActSeeMyTT: case ActPrnMyTT: case ActChgMyTT1stDay:
Gbl.TimeTable.View = TT_CRS_VIEW;
Gbl.Timetable.View = TT_CRS_VIEW;
break;
case ActSeeRecOneTch: case ActSeeRecSevTch:
Gbl.TimeTable.View = TT_TUT_VIEW;
Gbl.Timetable.View = TT_TUT_VIEW;
break;
case ActEdiCrsTT: case ActChgCrsTT:
Gbl.TimeTable.View = TT_CRS_EDIT;
Gbl.Timetable.View = TT_CRS_EDIT;
break;
case ActEdiTut: case ActChgTut:
Gbl.TimeTable.View = TT_TUT_EDIT;
Gbl.Timetable.View = TT_TUT_EDIT;
break;
}
/***** If editing ==> configure and allocate timetable *****/
if (Gbl.TimeTable.View == TT_CRS_EDIT ||
Gbl.TimeTable.View == TT_TUT_EDIT)
if (Gbl.Timetable.View == TT_CRS_EDIT ||
Gbl.Timetable.View == TT_TUT_EDIT)
{
Gbl.TimeTable.Config.Range.Hours.Start = TT_START_HOUR; // Day starts at this hour
Gbl.TimeTable.Config.Range.Hours.End = TT_END_HOUR; // Day ends at this hour
Gbl.TimeTable.Config.Range.MinutesPerInterval = TT_MinutesPerInterval[0]; // The smallest interval
Gbl.Timetable.Config.Range.Hours.Start = TT_START_HOUR; // Day starts at this hour
Gbl.Timetable.Config.Range.Hours.End = TT_END_HOUR; // Day ends at this hour
Gbl.Timetable.Config.Range.MinutesPerInterval = TT_MinutesPerInterval[0]; // The smallest interval
TT_TimeTableConfigureIntervalsAndAllocateTimeTable ();
}
/* If viewing (not editing) ==>
@ -554,7 +553,7 @@ void TT_ShowTimeTable (long UsrCod)
TT_ModifTimeTable ();
/* Write a new timetable in database */
switch (Gbl.TimeTable.Type)
switch (Gbl.Timetable.Type)
{
case TT_COURSE_TIMETABLE:
TT_WriteCrsTimeTableIntoDB (Gbl.Hierarchy.Crs.CrsCod);
@ -571,7 +570,7 @@ void TT_ShowTimeTable (long UsrCod)
}
/***** Draw timetable *****/
if (Gbl.TimeTable.Config.HoursPerDay)
if (Gbl.Timetable.Config.HoursPerDay)
TT_DrawTimeTable ();
else
Ale_ShowAlert (Ale_INFO,Txt_The_timetable_is_empty);
@ -601,11 +600,11 @@ static void TT_WriteCrsTimeTableIntoDB (long CrsCod)
for (Weekday = 0;
Weekday < TT_DAYS_PER_WEEK;
Weekday++)
for (Interval = 0, Hour = Gbl.TimeTable.Config.Range.Hours.Start, Min = 0;
Interval < Gbl.TimeTable.Config.IntervalsPerDay;
for (Interval = 0, Hour = Gbl.Timetable.Config.Range.Hours.Start, Min = 0;
Interval < Gbl.Timetable.Config.IntervalsPerDay;
Interval++,
Hour += (Min + Gbl.TimeTable.Config.Range.MinutesPerInterval) / TT_SECONDS_PER_MINUTE,
Min = (Min + Gbl.TimeTable.Config.Range.MinutesPerInterval) % TT_SECONDS_PER_MINUTE)
Hour += (Min + Gbl.Timetable.Config.Range.MinutesPerInterval) / TT_SECONDS_PER_MINUTE,
Min = (Min + Gbl.Timetable.Config.Range.MinutesPerInterval) % TT_SECONDS_PER_MINUTE)
for (Column = 0;
Column < TT_MAX_COLUMNS_PER_CELL;
Column++)
@ -623,7 +622,7 @@ static void TT_WriteCrsTimeTableIntoDB (long CrsCod)
Weekday,
Hour,Min,
TT_TimeTable[Weekday][Interval].Columns[Column].DurationIntervals *
Gbl.TimeTable.Config.SecondsPerInterval,
Gbl.Timetable.Config.SecondsPerInterval,
TT_ClassTypeDB[TT_TimeTable[Weekday][Interval].Columns[Column].ClassType],
TT_TimeTable[Weekday][Interval].Columns[Column].Info);
}
@ -649,11 +648,11 @@ static void TT_WriteTutTimeTableIntoDB (long UsrCod)
for (Weekday = 0;
Weekday < TT_DAYS_PER_WEEK;
Weekday++)
for (Interval = 0, Hour = Gbl.TimeTable.Config.Range.Hours.Start, Min = 0;
Interval < Gbl.TimeTable.Config.IntervalsPerDay;
for (Interval = 0, Hour = Gbl.Timetable.Config.Range.Hours.Start, Min = 0;
Interval < Gbl.Timetable.Config.IntervalsPerDay;
Interval++,
Hour += (Min + Gbl.TimeTable.Config.Range.MinutesPerInterval) / TT_SECONDS_PER_MINUTE,
Min = (Min + Gbl.TimeTable.Config.Range.MinutesPerInterval) % TT_SECONDS_PER_MINUTE)
Hour += (Min + Gbl.Timetable.Config.Range.MinutesPerInterval) / TT_SECONDS_PER_MINUTE,
Min = (Min + Gbl.Timetable.Config.Range.MinutesPerInterval) % TT_SECONDS_PER_MINUTE)
for (Column = 0;
Column < TT_MAX_COLUMNS_PER_CELL;
Column++)
@ -668,7 +667,7 @@ static void TT_WriteTutTimeTableIntoDB (long UsrCod)
Weekday,
Hour,Min,
TT_TimeTable[Weekday][Interval].Columns[Column].DurationIntervals *
Gbl.TimeTable.Config.SecondsPerInterval,
Gbl.Timetable.Config.SecondsPerInterval,
TT_TimeTable[Weekday][Interval].Columns[Column].Info);
}
@ -699,7 +698,7 @@ static void TT_FillTimeTableFromDB (long UsrCod)
bool Found;
/***** Get timetable from database *****/
switch (Gbl.TimeTable.Type)
switch (Gbl.Timetable.Type)
{
case TT_MY_TIMETABLE:
switch (Gbl.Crs.Grps.WhichGrps)
@ -829,13 +828,13 @@ static void TT_FillTimeTableFromDB (long UsrCod)
/***** If viewing (not editing) ==>
calculate range of hours and resolution *****/
if (Gbl.TimeTable.View == TT_CRS_VIEW ||
Gbl.TimeTable.View == TT_TUT_VIEW)
if (Gbl.Timetable.View == TT_CRS_VIEW ||
Gbl.Timetable.View == TT_TUT_VIEW)
{
/* Initialize hours and resolution for timetable */
Gbl.TimeTable.Config.Range.Hours.Start = TT_END_HOUR; // Initialized to maximum hour
Gbl.TimeTable.Config.Range.Hours.End = TT_START_HOUR; // Initialized to minimum hour
Gbl.TimeTable.Config.Range.MinutesPerInterval = TT_MinutesPerInterval[TT_NUM_RESOLUTIONS - 1]; // The longest interval
Gbl.Timetable.Config.Range.Hours.Start = TT_END_HOUR; // Initialized to maximum hour
Gbl.Timetable.Config.Range.Hours.End = TT_START_HOUR; // Initialized to minimum hour
Gbl.Timetable.Config.Range.MinutesPerInterval = TT_MinutesPerInterval[TT_NUM_RESOLUTIONS - 1]; // The longest interval
for (NumRow = 0;
NumRow < NumRows;
@ -854,12 +853,12 @@ static void TT_FillTimeTableFromDB (long UsrCod)
/* Compute hours and resolution */
TT_CalculateRangeCell (StartTimeSeconds,EndTimeSeconds,&RangeCell);
if (RangeCell.Hours.Start < Gbl.TimeTable.Config.Range.Hours.Start)
Gbl.TimeTable.Config.Range.Hours.Start = RangeCell.Hours.Start;
if (RangeCell.Hours.End > Gbl.TimeTable.Config.Range.Hours.End)
Gbl.TimeTable.Config.Range.Hours.End = RangeCell.Hours.End;
if (RangeCell.MinutesPerInterval < Gbl.TimeTable.Config.Range.MinutesPerInterval)
Gbl.TimeTable.Config.Range.MinutesPerInterval = RangeCell.MinutesPerInterval;
if (RangeCell.Hours.Start < Gbl.Timetable.Config.Range.Hours.Start)
Gbl.Timetable.Config.Range.Hours.Start = RangeCell.Hours.Start;
if (RangeCell.Hours.End > Gbl.Timetable.Config.Range.Hours.End)
Gbl.Timetable.Config.Range.Hours.End = RangeCell.Hours.End;
if (RangeCell.MinutesPerInterval < Gbl.Timetable.Config.Range.MinutesPerInterval)
Gbl.Timetable.Config.Range.MinutesPerInterval = RangeCell.MinutesPerInterval;
}
mysql_data_seek (mysql_res,0);
@ -869,14 +868,14 @@ static void TT_FillTimeTableFromDB (long UsrCod)
}
/***** Build the table by filling it from database *****/
if (Gbl.TimeTable.Config.HoursPerDay)
if (Gbl.Timetable.Config.HoursPerDay)
{
/***** Initialize timetable to all free *****/
for (Weekday = 0;
Weekday < TT_DAYS_PER_WEEK;
Weekday++)
for (Interval = 0;
Interval < Gbl.TimeTable.Config.IntervalsPerDay;
Interval < Gbl.Timetable.Config.IntervalsPerDay;
Interval++)
{
TT_TimeTable[Weekday][Interval].NumColumns = 0;
@ -911,20 +910,20 @@ static void TT_FillTimeTableFromDB (long UsrCod)
if (sscanf (row[1],"%u",&StartTimeSeconds) != 1)
Lay_ShowErrorAndExit ("Wrong start time in timetable.");
Interval = StartTimeSeconds /
Gbl.TimeTable.Config.SecondsPerInterval;
if (Interval < Gbl.TimeTable.Config.IntervalsBeforeStartHour)
Gbl.Timetable.Config.SecondsPerInterval;
if (Interval < Gbl.Timetable.Config.IntervalsBeforeStartHour)
Lay_ShowErrorAndExit ("Wrong start time in timetable.");
Interval -= Gbl.TimeTable.Config.IntervalsBeforeStartHour;
Interval -= Gbl.Timetable.Config.IntervalsBeforeStartHour;
/* Duration formatted as seconds (row[2])
--> Duration in number of intervals */
if (sscanf (row[2],"%u",&DurationSeconds) != 1)
Lay_ShowErrorAndExit ("Wrong duration in timetable.");
DurationNumIntervals = DurationSeconds /
Gbl.TimeTable.Config.SecondsPerInterval;
Gbl.Timetable.Config.SecondsPerInterval;
/* Type of class (row[4]) */
switch (Gbl.TimeTable.Type)
switch (Gbl.Timetable.Type)
{
case TT_COURSE_TIMETABLE:
case TT_MY_TIMETABLE:
@ -966,7 +965,7 @@ static void TT_FillTimeTableFromDB (long UsrCod)
TimeTableHasSpaceForThisClass = true;
for (i = Interval + 1;
i < Interval + DurationNumIntervals &&
i < Gbl.TimeTable.Config.IntervalsPerDay;
i < Gbl.Timetable.Config.IntervalsPerDay;
i++)
if (TT_TimeTable[Weekday][i].Columns[FirstFreeColumn].IntervalType != TT_FREE_INTERVAL)
{
@ -981,7 +980,7 @@ static void TT_FillTimeTableFromDB (long UsrCod)
TT_TimeTable[Weekday][Interval].Columns[FirstFreeColumn].IntervalType = TT_FIRST_INTERVAL;
for (i = Interval + 1;
i < Interval + DurationNumIntervals &&
i < Gbl.TimeTable.Config.IntervalsPerDay;
i < Gbl.Timetable.Config.IntervalsPerDay;
i++)
{
TT_TimeTable[Weekday][i].Columns[FirstFreeColumn].IntervalType = TT_NEXT_INTERVAL;
@ -989,19 +988,19 @@ static void TT_FillTimeTableFromDB (long UsrCod)
}
/* Course (row[6]) and info (row[3])*/
switch (Gbl.TimeTable.Type)
switch (Gbl.Timetable.Type)
{
case TT_MY_TIMETABLE:
case TT_COURSE_TIMETABLE:
/* Group code (row[5]) */
if (Gbl.TimeTable.Type == TT_MY_TIMETABLE ||
Gbl.TimeTable.Type == TT_COURSE_TIMETABLE)
if (Gbl.Timetable.Type == TT_MY_TIMETABLE ||
Gbl.Timetable.Type == TT_COURSE_TIMETABLE)
if (sscanf (row[5],"%ld",&TT_TimeTable[Weekday][Interval].Columns[FirstFreeColumn].GrpCod) != 1)
TT_TimeTable[Weekday][Interval].Columns[FirstFreeColumn].GrpCod = -1;
/* Course code (row[6]) */
TT_TimeTable[Weekday][Interval].Columns[FirstFreeColumn].CrsCod =
(Gbl.TimeTable.Type == TT_MY_TIMETABLE ? Str_ConvertStrCodToLongCod (row[6]) :
(Gbl.Timetable.Type == TT_MY_TIMETABLE ? Str_ConvertStrCodToLongCod (row[6]) :
Gbl.Hierarchy.Crs.CrsCod);
/* falls through */
/* no break */
@ -1103,29 +1102,29 @@ static unsigned TT_CalculateMinutesPerInterval (unsigned Seconds)
static void TT_ModifTimeTable (void)
{
if (TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].IntervalType == TT_FIRST_INTERVAL)
if (TT_TimeTable[Gbl.Timetable.Weekday][Gbl.Timetable.Interval].Columns[Gbl.Timetable.Column].IntervalType == TT_FIRST_INTERVAL)
{
/***** Free this cell *****/
TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].GrpCod = -1L;
TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].IntervalType = TT_FREE_INTERVAL;
TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].ClassType = TT_FREE;
TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].DurationIntervals = 0;
TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].Info[0] = '\0';
TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].NumColumns--;
TT_TimeTable[Gbl.Timetable.Weekday][Gbl.Timetable.Interval].Columns[Gbl.Timetable.Column].GrpCod = -1L;
TT_TimeTable[Gbl.Timetable.Weekday][Gbl.Timetable.Interval].Columns[Gbl.Timetable.Column].IntervalType = TT_FREE_INTERVAL;
TT_TimeTable[Gbl.Timetable.Weekday][Gbl.Timetable.Interval].Columns[Gbl.Timetable.Column].ClassType = TT_FREE;
TT_TimeTable[Gbl.Timetable.Weekday][Gbl.Timetable.Interval].Columns[Gbl.Timetable.Column].DurationIntervals = 0;
TT_TimeTable[Gbl.Timetable.Weekday][Gbl.Timetable.Interval].Columns[Gbl.Timetable.Column].Info[0] = '\0';
TT_TimeTable[Gbl.Timetable.Weekday][Gbl.Timetable.Interval].NumColumns--;
}
if (Gbl.TimeTable.ClassType != TT_FREE &&
Gbl.TimeTable.DurationIntervals > 0 &&
TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].NumColumns < TT_MAX_COLUMNS_PER_CELL)
if (Gbl.Timetable.ClassType != TT_FREE &&
Gbl.Timetable.DurationIntervals > 0 &&
TT_TimeTable[Gbl.Timetable.Weekday][Gbl.Timetable.Interval].NumColumns < TT_MAX_COLUMNS_PER_CELL)
{
/***** Change this cell *****/
TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].NumColumns++;
TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].GrpCod = Gbl.TimeTable.GrpCod;
TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].IntervalType = TT_FIRST_INTERVAL;
TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].ClassType = Gbl.TimeTable.ClassType;
TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].DurationIntervals = Gbl.TimeTable.DurationIntervals;
Str_Copy (TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].Info,
Gbl.TimeTable.Info,
TT_TimeTable[Gbl.Timetable.Weekday][Gbl.Timetable.Interval].NumColumns++;
TT_TimeTable[Gbl.Timetable.Weekday][Gbl.Timetable.Interval].Columns[Gbl.Timetable.Column].GrpCod = Gbl.Timetable.GrpCod;
TT_TimeTable[Gbl.Timetable.Weekday][Gbl.Timetable.Interval].Columns[Gbl.Timetable.Column].IntervalType = TT_FIRST_INTERVAL;
TT_TimeTable[Gbl.Timetable.Weekday][Gbl.Timetable.Interval].Columns[Gbl.Timetable.Column].ClassType = Gbl.Timetable.ClassType;
TT_TimeTable[Gbl.Timetable.Weekday][Gbl.Timetable.Interval].Columns[Gbl.Timetable.Column].DurationIntervals = Gbl.Timetable.DurationIntervals;
Str_Copy (TT_TimeTable[Gbl.Timetable.Weekday][Gbl.Timetable.Interval].Columns[Gbl.Timetable.Column].Info,
Gbl.Timetable.Info,
TT_MAX_BYTES_INFO);
}
}
@ -1156,7 +1155,7 @@ static void TT_DrawTimeTable (void)
HTM_TD_Begin ("rowspan=\"2\" class=\"TT_HOUR_BIG RM\" style=\"width:%u%%;\"",
TT_PERCENT_WIDTH_OF_AN_HOUR_COLUMN);
HTM_TxtF ("%02u:00",Gbl.TimeTable.Config.Range.Hours.Start);
HTM_TxtF ("%02u:00",Gbl.Timetable.Config.Range.Hours.Start);
HTM_TD_End ();
TT_DrawCellAlignTimeTable ();
@ -1165,7 +1164,7 @@ static void TT_DrawTimeTable (void)
HTM_TD_Begin ("rowspan=\"2\" class=\"TT_HOUR_BIG LM\" style=\"width:%u%%;\"",
TT_PERCENT_WIDTH_OF_AN_HOUR_COLUMN);
HTM_TxtF ("%02u:00",Gbl.TimeTable.Config.Range.Hours.Start);
HTM_TxtF ("%02u:00",Gbl.Timetable.Config.Range.Hours.Start);
HTM_TD_End ();
HTM_TR_End ();
@ -1176,18 +1175,18 @@ static void TT_DrawTimeTable (void)
Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS);
/***** Write the table row by row *****/
for (Interval = 0, Min = Gbl.TimeTable.Config.Range.MinutesPerInterval;
Interval < Gbl.TimeTable.Config.IntervalsPerDay;
for (Interval = 0, Min = Gbl.Timetable.Config.Range.MinutesPerInterval;
Interval < Gbl.Timetable.Config.IntervalsPerDay;
Interval++,
Min = (Min + Gbl.TimeTable.Config.Range.MinutesPerInterval) %
Min = (Min + Gbl.Timetable.Config.Range.MinutesPerInterval) %
TT_SECONDS_PER_MINUTE)
{
HTM_TR_Begin (NULL);
/* Left hour:minutes cell */
if (Interval % 2)
TT_TimeTableDrawHourCell (Gbl.TimeTable.Config.Range.Hours.Start +
(Interval + 2) / Gbl.TimeTable.Config.IntervalsPerHour,
TT_TimeTableDrawHourCell (Gbl.Timetable.Config.Range.Hours.Start +
(Interval + 2) / Gbl.Timetable.Config.IntervalsPerHour,
Min,
"RM");
@ -1210,15 +1209,15 @@ static void TT_DrawTimeTable (void)
ColumnsToDraw = TT_CalculateColsToDrawInCell (true, // Top call, non recursive
Weekday,Interval);
if (ColumnsToDraw == 0 &&
(Gbl.TimeTable.View == TT_CRS_VIEW ||
Gbl.TimeTable.View == TT_TUT_VIEW))
(Gbl.Timetable.View == TT_CRS_VIEW ||
Gbl.Timetable.View == TT_TUT_VIEW))
ColumnsToDraw = 1;
// If editing and there's place for more columns,
// a potential new column is added at the end of each day
ColumnsToDrawIncludingExtraColumn = ColumnsToDraw;
if (ColumnsToDraw < TT_MAX_COLUMNS_PER_CELL &&
(Gbl.TimeTable.View == TT_CRS_EDIT ||
Gbl.TimeTable.View == TT_TUT_EDIT))
(Gbl.Timetable.View == TT_CRS_EDIT ||
Gbl.Timetable.View == TT_TUT_EDIT))
ColumnsToDrawIncludingExtraColumn++;
/* Draw cells */
@ -1256,8 +1255,8 @@ static void TT_DrawTimeTable (void)
/* Right hour:minutes cell */
if (Interval % 2)
TT_TimeTableDrawHourCell (Gbl.TimeTable.Config.Range.Hours.Start +
(Interval + 2) / Gbl.TimeTable.Config.IntervalsPerHour,
TT_TimeTableDrawHourCell (Gbl.Timetable.Config.Range.Hours.Start +
(Interval + 2) / Gbl.Timetable.Config.IntervalsPerHour,
Min,
"LM");
@ -1372,7 +1371,7 @@ static unsigned TT_CalculateColsToDrawInCell (bool TopCall,
if (TopCall) // Top call, non recursive call
/****** Allocate space to store list of intervals already checked
and initialize to false by using calloc *****/
if ((TT_IntervalsChecked = (bool *) calloc (Gbl.TimeTable.Config.IntervalsPerDay,
if ((TT_IntervalsChecked = (bool *) calloc (Gbl.Timetable.Config.IntervalsPerDay,
sizeof (bool))) == NULL)
Lay_ShowErrorAndExit ("Error allocating memory for timetable.");
@ -1498,8 +1497,8 @@ static void TT_TimeTableDrawCell (unsigned Weekday,unsigned Interval,unsigned Co
/***** If group code > 0, a group is selected ==> get group data *****/
if (IntervalType == TT_FIRST_INTERVAL &&
(Gbl.TimeTable.View == TT_CRS_VIEW ||
Gbl.TimeTable.View == TT_CRS_EDIT) &&
(Gbl.Timetable.View == TT_CRS_VIEW ||
Gbl.Timetable.View == TT_CRS_EDIT) &&
GrpCod > 0)
{
/* Get group data */
@ -1549,13 +1548,13 @@ static void TT_TimeTableDrawCell (unsigned Weekday,unsigned Interval,unsigned Co
free (ClassStr);
/***** Form to modify this cell *****/
if (Gbl.TimeTable.View == TT_CRS_EDIT)
if (Gbl.Timetable.View == TT_CRS_EDIT)
Frm_StartForm (ActChgCrsTT);
else if (Gbl.TimeTable.View == TT_TUT_EDIT)
else if (Gbl.Timetable.View == TT_TUT_EDIT)
Frm_StartForm (ActChgTut);
/***** Draw cell depending on type of view *****/
switch (Gbl.TimeTable.View)
switch (Gbl.Timetable.View)
{
case TT_CRS_VIEW: // View course timetable
case TT_TUT_VIEW: // View tutoring timetable
@ -1565,7 +1564,7 @@ static void TT_TimeTableDrawCell (unsigned Weekday,unsigned Interval,unsigned Co
HTM_DIV_Begin ("class=\"TT_CELL TT_TXT\"");
/***** Course name *****/
if (Gbl.TimeTable.Type == TT_MY_TIMETABLE)
if (Gbl.Timetable.Type == TT_MY_TIMETABLE)
{
Crs.CrsCod = CrsCod;
Crs_GetDataOfCourseByCod (&Crs);
@ -1581,12 +1580,12 @@ static void TT_TimeTableDrawCell (unsigned Weekday,unsigned Interval,unsigned Co
/***** Type of class and duration *****/
HTM_TxtF ("%s (%u:%02u)",
Txt_TIMETABLE_CLASS_TYPES[ClassType],
(DurationNumIntervals / Gbl.TimeTable.Config.IntervalsPerHour), // Hours
(DurationNumIntervals % Gbl.TimeTable.Config.IntervalsPerHour) *
Gbl.TimeTable.Config.Range.MinutesPerInterval); // Minutes
(DurationNumIntervals / Gbl.Timetable.Config.IntervalsPerHour), // Hours
(DurationNumIntervals % Gbl.Timetable.Config.IntervalsPerHour) *
Gbl.Timetable.Config.Range.MinutesPerInterval); // Minutes
/***** Group *****/
if (Gbl.TimeTable.View == TT_CRS_VIEW &&
if (Gbl.Timetable.View == TT_CRS_VIEW &&
GrpCod > 0)
{
HTM_BR ();
@ -1631,8 +1630,8 @@ static void TT_TimeTableDrawCell (unsigned Weekday,unsigned Interval,unsigned Co
CT <= (TT_ClassType_t) (TT_NUM_CLASS_TYPES - 1);
CT++)
if ((CT == TT_FREE) ||
((Gbl.TimeTable.View == TT_CRS_EDIT) && (CT == TT_LECTURE || CT == TT_PRACTICAL)) ||
((Gbl.TimeTable.View == TT_TUT_EDIT) && (CT == TT_TUTORING)))
((Gbl.Timetable.View == TT_CRS_EDIT) && (CT == TT_LECTURE || CT == TT_PRACTICAL)) ||
((Gbl.Timetable.View == TT_TUT_EDIT) && (CT == TT_TUTORING)))
HTM_OPTION (HTM_Type_STRING,TT_ClassTypeDB[CT],
CT == ClassType,false,
"%s",Txt_TIMETABLE_CLASS_TYPES[CT]);
@ -1641,17 +1640,17 @@ static void TT_TimeTableDrawCell (unsigned Weekday,unsigned Interval,unsigned Co
if (IntervalType == TT_FREE_INTERVAL)
{
for (i = Interval + 1;
i < Gbl.TimeTable.Config.IntervalsPerDay;
i < Gbl.Timetable.Config.IntervalsPerDay;
i++)
if (TT_TimeTable[Weekday][i].NumColumns == TT_MAX_COLUMNS_PER_CELL)
break;
MaxDuration = i - Interval;
Dur = (MaxDuration >= Gbl.TimeTable.Config.IntervalsPerHour) ? Gbl.TimeTable.Config.IntervalsPerHour : // MaxDuration >= 1h ==> Dur = 1h
Dur = (MaxDuration >= Gbl.Timetable.Config.IntervalsPerHour) ? Gbl.Timetable.Config.IntervalsPerHour : // MaxDuration >= 1h ==> Dur = 1h
MaxDuration; // MaxDuration < 1h ==> Dur = MaxDuration
if (asprintf (&TTDur,"%u:%02u",
(Dur / Gbl.TimeTable.Config.IntervalsPerHour), // Hours
(Dur % Gbl.TimeTable.Config.IntervalsPerHour) *
Gbl.TimeTable.Config.Range.MinutesPerInterval) < 0) // Minutes
(Dur / Gbl.Timetable.Config.IntervalsPerHour), // Hours
(Dur % Gbl.Timetable.Config.IntervalsPerHour) *
Gbl.Timetable.Config.Range.MinutesPerInterval) < 0) // Minutes
Lay_NotEnoughMemoryExit ();
Par_PutHiddenParamString (NULL,"TTDur",TTDur);
free (TTDur);
@ -1662,7 +1661,7 @@ static void TT_TimeTableDrawCell (unsigned Weekday,unsigned Interval,unsigned Co
HTM_SELECT_Begin (true,
"name=\"TTDur\" class=\"TT_DUR\"");
for (i = Interval + TT_TimeTable[Weekday][Interval].Columns[Column].DurationIntervals;
i < Gbl.TimeTable.Config.IntervalsPerDay;
i < Gbl.Timetable.Config.IntervalsPerDay;
i++)
if (TT_TimeTable[Weekday][i].NumColumns == TT_MAX_COLUMNS_PER_CELL)
break;
@ -1674,9 +1673,9 @@ static void TT_TimeTableDrawCell (unsigned Weekday,unsigned Interval,unsigned Co
Dur++)
{
if (asprintf (&TTDur,"%u:%02u",
(Dur / Gbl.TimeTable.Config.IntervalsPerHour), // Hours
(Dur % Gbl.TimeTable.Config.IntervalsPerHour) *
Gbl.TimeTable.Config.Range.MinutesPerInterval) < 0) // Minutes
(Dur / Gbl.Timetable.Config.IntervalsPerHour), // Hours
(Dur % Gbl.Timetable.Config.IntervalsPerHour) *
Gbl.Timetable.Config.Range.MinutesPerInterval) < 0) // Minutes
Lay_NotEnoughMemoryExit ();
HTM_OPTION (HTM_Type_STRING,TTDur,
Dur == DurationNumIntervals,false,
@ -1685,7 +1684,7 @@ static void TT_TimeTableDrawCell (unsigned Weekday,unsigned Interval,unsigned Co
}
HTM_SELECT_End ();
if (Gbl.TimeTable.View == TT_CRS_EDIT)
if (Gbl.Timetable.View == TT_CRS_EDIT)
{
/***** Group *****/
HTM_BR ();
@ -1758,8 +1757,8 @@ static void TT_TimeTableDrawCell (unsigned Weekday,unsigned Interval,unsigned Co
}
/***** End form *****/
if (Gbl.TimeTable.View == TT_CRS_EDIT ||
Gbl.TimeTable.View == TT_TUT_EDIT)
if (Gbl.Timetable.View == TT_CRS_EDIT ||
Gbl.Timetable.View == TT_TUT_EDIT)
Frm_EndForm ();
/***** End cell *****/

View File

@ -78,6 +78,34 @@ struct TT_Range
unsigned MinutesPerInterval; // 5, 15 or 30 minutes
};
struct TT_Timetable
{
struct
{
struct TT_Range Range;
unsigned HoursPerDay; // From start hour to end hour
unsigned SecondsPerInterval;
unsigned IntervalsPerHour;
unsigned IntervalsPerDay;
unsigned IntervalsBeforeStartHour;
} Config;
TT_TimeTableType_t Type;
TT_TimeTableView_t View;
unsigned Weekday;
unsigned Interval;
unsigned Column;
TT_ClassType_t ClassType;
unsigned DurationIntervals;
char Info[TT_MAX_BYTES_INFO + 1];
long GrpCod; // Group code (-1 if no group selected)
struct
{
bool PutIconEditCrsTT;
bool PutIconEditOfficeHours;
bool PutIconPrint;
} ContextualIcons;
};
/*****************************************************************************/
/****************************** Public prototypes ****************************/
/*****************************************************************************/

View File

@ -155,7 +155,7 @@ extern struct Globals Gbl;
/****************************** Private variables ****************************/
/*****************************************************************************/
static void (*Usr_FuncParamsBigList) (); // Used to pass pointer to function
static void (*Usr_FuncParamsBigList) (void *Args); // Used to pass pointer to function
/*****************************************************************************/
/***************************** Private prototypes ****************************/
@ -179,7 +179,7 @@ static void Usr_ShowAlertThereAreMoreThanOneUsr (void);
static void Usr_SetMyPrefsAndRoles (void);
static void Usr_PutLinkToLogOut (void *Args);
static void Usr_PutLinkToLogOut (__attribute__((unused)) void *Args);
static void Usr_InsertMyLastData (void);
@ -257,9 +257,9 @@ static void Usr_ShowOneListUsrsOption (Usr_ListUsrsOption_t ListUsrsAction,
const char *Label);
static Usr_ListUsrsOption_t Usr_GetListUsrsOption (Usr_ListUsrsOption_t DefaultAction);
static void Usr_PutIconsListGsts (void *Args);
static void Usr_PutIconsListStds (void *Args);
static void Usr_PutIconsListTchs (void *Args);
static void Usr_PutIconsListGsts (__attribute__((unused)) void *Args);
static void Usr_PutIconsListStds (__attribute__((unused)) void *Args);
static void Usr_PutIconsListTchs (__attribute__((unused)) void *Args);
static void Usr_PutIconToPrintGsts (void);
static void Usr_PutIconToPrintStds (void);
@ -267,9 +267,9 @@ static void Usr_PutIconToPrintTchs (void);
static void Usr_PutIconToShowGstsAllData (void);
static void Usr_PutIconToShowStdsAllData (void);
static void Usr_PutIconToShowTchsAllData (void);
static void Usr_ShowGstsAllDataParams (void *Args);
static void Usr_ShowStdsAllDataParams (void *Args);
static void Usr_ShowTchsAllDataParams (void *Args);
static void Usr_ShowGstsAllDataParams (__attribute__((unused)) void *Args);
static void Usr_ShowStdsAllDataParams (__attribute__((unused)) void *Args);
static void Usr_ShowTchsAllDataParams (__attribute__((unused)) void *Args);
static void Usr_DrawClassPhoto (Usr_ClassPhotoType_t ClassPhotoType,
Rol_Role_t Role,
@ -3527,7 +3527,7 @@ void Usr_ShowFormsLogoutAndRole (void)
/***** Begin box *****/
Box_BoxBegin (NULL,Txt_Session,
Usr_PutLinkToLogOut,&Gbl,
Usr_PutLinkToLogOut,NULL,
Hlp_PROFILE_Session_role,Box_NOT_CLOSABLE);
/***** Put a form to change my role *****/
@ -3557,16 +3557,15 @@ void Usr_ShowFormsLogoutAndRole (void)
/************** Put an icon (form) to close the current session **************/
/*****************************************************************************/
static void Usr_PutLinkToLogOut (void *Args)
static void Usr_PutLinkToLogOut (__attribute__((unused)) void *Args)
{
extern const char *Txt_Log_out;
if (Args)
/***** Put form to log out *****/
Lay_PutContextualLinkOnlyIcon (ActLogOut,NULL,
NULL,NULL,
"sign-out-alt-red.svg",
Txt_Log_out);
/***** Put form to log out *****/
Lay_PutContextualLinkOnlyIcon (ActLogOut,NULL,
NULL,NULL,
"sign-out-alt-red.svg",
Txt_Log_out);
}
/*****************************************************************************/
@ -5686,7 +5685,7 @@ static void Usr_PutParamsConfirmIWantToSeeBigList (void *Args)
Grp_PutParamsCodGrps ();
Usr_PutParamsPrefsAboutUsrList ();
if (Usr_FuncParamsBigList)
Usr_FuncParamsBigList ();
Usr_FuncParamsBigList (Args);
Par_PutHiddenParamChar ("ShowBigList",'Y');
}
}
@ -7568,7 +7567,7 @@ void Usr_ListDataAdms (void)
HTM_DIV_Begin ("class=\"PREF_CONT\"");
HTM_DIV_Begin ("class=\"PREF_OFF\"");
Frm_StartForm (ActLstOth);
Sco_PutParamCurrentScope (&Gbl);
Sco_PutParamCurrentScope (&Gbl.Scope.Current);
Usr_PutCheckboxListWithPhotos ();
Frm_EndForm ();
HTM_DIV_End ();
@ -8016,7 +8015,7 @@ void Usr_SeeGuests (void)
/***** Begin box *****/
Box_BoxBegin (NULL,Txt_ROLES_PLURAL_Abc[Rol_GST][Usr_SEX_UNKNOWN],
Usr_PutIconsListGsts,&Gbl,
Usr_PutIconsListGsts,NULL,
Hlp_USERS_Guests,Box_NOT_CLOSABLE);
/***** Form to select scope *****/
@ -8039,11 +8038,11 @@ void Usr_SeeGuests (void)
if (Gbl.Usrs.LstUsrs[Rol_GST].NumUsrs)
{
if (Usr_GetIfShowBigList (Gbl.Usrs.LstUsrs[Rol_GST].NumUsrs,
Sco_PutParamCurrentScope,&Gbl,
Sco_PutParamCurrentScope,&Gbl.Scope.Current,
NULL))
{
/***** Form to select type of list of users *****/
Usr_ShowFormsToSelectUsrListType (Sco_PutParamCurrentScope,&Gbl);
Usr_ShowFormsToSelectUsrListType (Sco_PutParamCurrentScope,&Gbl.Scope.Current);
/***** Draw a class photo with guests *****/
if (Gbl.Usrs.Me.ListType == Usr_LIST_AS_CLASS_PHOTO)
@ -8159,7 +8158,7 @@ void Usr_SeeStudents (void)
/***** Begin box *****/
Box_BoxBegin (NULL,Txt_ROLES_PLURAL_Abc[Rol_STD][Usr_SEX_UNKNOWN],
Usr_PutIconsListStds,&Gbl,
Usr_PutIconsListStds,NULL,
Hlp_USERS_Students,Box_NOT_CLOSABLE);
/***** Form to select scope *****/
@ -8185,7 +8184,7 @@ void Usr_SeeStudents (void)
/***** Form to select groups *****/
if (Gbl.Scope.Current == Hie_CRS)
Grp_ShowFormToSelectSeveralGroups (Sco_PutParamCurrentScope,&Gbl,
Grp_ShowFormToSelectSeveralGroups (Sco_PutParamCurrentScope,&Gbl.Scope.Current,
Grp_MY_GROUPS);
/***** Start section with user list *****/
@ -8194,11 +8193,11 @@ void Usr_SeeStudents (void)
if (Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs)
{
if (Usr_GetIfShowBigList (Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs,
Sco_PutParamCurrentScope,&Gbl,
Sco_PutParamCurrentScope,&Gbl.Scope.Current,
NULL))
{
/***** Form to select type of list of users *****/
Usr_ShowFormsToSelectUsrListType (Sco_PutParamCurrentScope,&Gbl);
Usr_ShowFormsToSelectUsrListType (Sco_PutParamCurrentScope,&Gbl.Scope.Current);
/***** Draw a class photo with students of the course *****/
if (Gbl.Usrs.Me.ListType == Usr_LIST_AS_CLASS_PHOTO)
@ -8346,7 +8345,7 @@ void Usr_SeeTeachers (void)
/***** Begin box *****/
Box_BoxBegin (NULL,Txt_ROLES_PLURAL_Abc[Rol_TCH][Usr_SEX_UNKNOWN],
Usr_PutIconsListTchs,&Gbl,
Usr_PutIconsListTchs,NULL,
Hlp_USERS_Teachers,Box_NOT_CLOSABLE);
/***** Form to select scope *****/
@ -8362,7 +8361,7 @@ void Usr_SeeTeachers (void)
/***** Form to select groups *****/
if (Gbl.Scope.Current == Hie_CRS)
Grp_ShowFormToSelectSeveralGroups (Sco_PutParamCurrentScope,&Gbl,
Grp_ShowFormToSelectSeveralGroups (Sco_PutParamCurrentScope,&Gbl.Scope.Current,
Grp_MY_GROUPS);
/***** Start section with user list *****/
@ -8371,11 +8370,11 @@ void Usr_SeeTeachers (void)
if (NumUsrs)
{
if (Usr_GetIfShowBigList (NumUsrs,
Sco_PutParamCurrentScope,&Gbl,
Sco_PutParamCurrentScope,&Gbl.Scope.Current,
NULL))
{
/***** Form to select type of list of users *****/
Usr_ShowFormsToSelectUsrListType (Sco_PutParamCurrentScope,&Gbl);
Usr_ShowFormsToSelectUsrListType (Sco_PutParamCurrentScope,&Gbl.Scope.Current);
/***** Draw a class photo with teachers of the course *****/
if (Gbl.Usrs.Me.ListType == Usr_LIST_AS_CLASS_PHOTO)
@ -8763,35 +8762,32 @@ static Usr_ListUsrsOption_t Usr_GetListUsrsOption (Usr_ListUsrsOption_t DefaultA
/***************** Put contextual icons in list of guests ********************/
/*****************************************************************************/
static void Usr_PutIconsListGsts (void *Args)
static void Usr_PutIconsListGsts (__attribute__((unused)) void *Args)
{
if (Args)
switch (Gbl.Usrs.Me.ListType)
{
switch (Gbl.Usrs.Me.ListType)
{
case Usr_LIST_AS_CLASS_PHOTO:
if (Gbl.Usrs.LstUsrs[Rol_GST].NumUsrs)
/***** Put icon to print guests *****/
Usr_PutIconToPrintGsts ();
break;
case Usr_LIST_AS_LISTING:
/***** Put icon to show all data of guests *****/
Usr_PutIconToShowGstsAllData ();
break;
default:
break;
}
/***** Put icon to show a figure *****/
Fig_PutIconToShowFigure (Fig_USERS);
case Usr_LIST_AS_CLASS_PHOTO:
if (Gbl.Usrs.LstUsrs[Rol_GST].NumUsrs)
/***** Put icon to print guests *****/
Usr_PutIconToPrintGsts ();
break;
case Usr_LIST_AS_LISTING:
/***** Put icon to show all data of guests *****/
Usr_PutIconToShowGstsAllData ();
break;
default:
break;
}
/***** Put icon to show a figure *****/
Fig_PutIconToShowFigure (Fig_USERS);
}
/*****************************************************************************/
/**************** Put contextual icons in list of students *******************/
/*****************************************************************************/
static void Usr_PutIconsListStds (void *Args)
static void Usr_PutIconsListStds (__attribute__((unused)) void *Args)
{
if (Args)
{
@ -8819,7 +8815,7 @@ static void Usr_PutIconsListStds (void *Args)
/**************** Put contextual icons in list of teachers *******************/
/*****************************************************************************/
static void Usr_PutIconsListTchs (void *Args)
static void Usr_PutIconsListTchs (__attribute__((unused)) void *Args)
{
if (Args)
{
@ -8850,19 +8846,19 @@ static void Usr_PutIconsListTchs (void *Args)
static void Usr_PutIconToPrintGsts (void)
{
Ico_PutContextualIconToPrint (ActPrnGstPho,
Usr_ShowGstsAllDataParams,&Gbl);
Usr_ShowGstsAllDataParams,NULL);
}
static void Usr_PutIconToPrintStds (void)
{
Ico_PutContextualIconToPrint (ActPrnStdPho,
Usr_ShowStdsAllDataParams,&Gbl);
Usr_ShowStdsAllDataParams,NULL);
}
static void Usr_PutIconToPrintTchs (void)
{
Ico_PutContextualIconToPrint (ActPrnTchPho,
Usr_ShowTchsAllDataParams,&Gbl);
Usr_ShowTchsAllDataParams,NULL);
}
/*****************************************************************************/
@ -8874,7 +8870,7 @@ static void Usr_PutIconToShowGstsAllData (void)
extern const char *Txt_Show_all_data_in_a_table;
Lay_PutContextualLinkOnlyIcon (ActLstGstAll,NULL,
Usr_ShowGstsAllDataParams,&Gbl,
Usr_ShowGstsAllDataParams,NULL,
"table.svg",
Txt_Show_all_data_in_a_table);
}
@ -8884,7 +8880,7 @@ static void Usr_PutIconToShowStdsAllData (void)
extern const char *Txt_Show_all_data_in_a_table;
Lay_PutContextualLinkOnlyIcon (ActLstStdAll,NULL,
Usr_ShowStdsAllDataParams,&Gbl,
Usr_ShowStdsAllDataParams,NULL,
"table.svg",
Txt_Show_all_data_in_a_table);
}
@ -8894,33 +8890,26 @@ static void Usr_PutIconToShowTchsAllData (void)
extern const char *Txt_Show_all_data_in_a_table;
Lay_PutContextualLinkOnlyIcon (ActLstTchAll,NULL,
Usr_ShowTchsAllDataParams,&Gbl,
Usr_ShowTchsAllDataParams,NULL,
"table.svg",
Txt_Show_all_data_in_a_table);
}
static void Usr_ShowGstsAllDataParams (void *Args)
static void Usr_ShowGstsAllDataParams (__attribute__((unused)) void *Args)
{
if (Args)
Usr_PutParamListWithPhotos ();
Usr_PutParamListWithPhotos ();
}
static void Usr_ShowStdsAllDataParams (void *Args)
static void Usr_ShowStdsAllDataParams (__attribute__((unused)) void *Args)
{
if (Args)
{
Grp_PutParamsCodGrps ();
Usr_PutParamListWithPhotos ();
}
Grp_PutParamsCodGrps ();
Usr_PutParamListWithPhotos ();
}
static void Usr_ShowTchsAllDataParams (void *Args)
static void Usr_ShowTchsAllDataParams (__attribute__((unused)) void *Args)
{
if (Args)
{
Sco_PutParamCurrentScope (&Gbl);
Usr_PutParamListWithPhotos ();
}
Sco_PutParamCurrentScope (&Gbl.Scope.Current);
Usr_PutParamListWithPhotos ();
}
/*****************************************************************************/

View File

@ -74,7 +74,7 @@ extern struct Globals Gbl;
/***************************** Private prototypes ****************************/
/*****************************************************************************/
static void ZIP_PutLinkToCreateZIPAsgWrkParams (void *Args);
static void ZIP_PutLinkToCreateZIPAsgWrkParams (__attribute__((unused)) void *Args);
static void ZIP_CreateTmpDirForCompression (void);
static void ZIP_CreateDirCompressionUsr (struct UsrData *UsrDat);
@ -93,19 +93,16 @@ void ZIP_PutLinkToCreateZIPAsgWrk (void)
extern const char *Txt_Create_ZIP_file;
Lay_PutContextualLinkIconText (ActAdmAsgWrkCrs,NULL,
ZIP_PutLinkToCreateZIPAsgWrkParams,&Gbl,
ZIP_PutLinkToCreateZIPAsgWrkParams,NULL,
"download.svg",
Txt_Create_ZIP_file);
}
static void ZIP_PutLinkToCreateZIPAsgWrkParams (void *Args)
static void ZIP_PutLinkToCreateZIPAsgWrkParams (__attribute__((unused)) void *Args)
{
if (Args)
{
Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
Brw_PutHiddenParamFullTreeIfSelected (&Gbl.FileBrowser.FullTree);
Par_PutHiddenParamChar ("CreateZIP",'Y');
}
Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
Brw_PutHiddenParamFullTreeIfSelected (&Gbl.FileBrowser.FullTree);
Par_PutHiddenParamChar ("CreateZIP",'Y');
}
/*****************************************************************************/