From ceeeb8ba5b8e4e6d9c6f8665ce6209d4f71364ac Mon Sep 17 00:00:00 2001 From: acanas Date: Fri, 10 Apr 2020 19:14:08 +0200 Subject: [PATCH] Version19.170 --- swad_API.c | 4 +- swad_agenda.c | 12 +- swad_assignment.c | 23 +- swad_assignment.h | 11 + swad_attendance.c | 24 +- swad_attendance.h | 26 +- swad_changelog.h | 3 +- swad_file_browser.c | 34 +- swad_forum.c | 388 ++++++++++---------- swad_forum.h | 33 +- swad_game.c | 12 +- swad_global.c | 16 - swad_global.h | 16 +- swad_group.h | 15 + swad_message.c | 12 +- swad_notification.c | 13 +- swad_pagination.c | 285 +++++++-------- swad_pagination.h | 6 +- swad_project.c | 873 ++++++++++++++++++++++++++------------------ swad_project.h | 7 +- swad_record.c | 6 +- swad_survey.c | 12 +- swad_timeline.c | 10 +- 23 files changed, 999 insertions(+), 842 deletions(-) diff --git a/swad_API.c b/swad_API.c index 335a85650..93d7f3c26 100644 --- a/swad_API.c +++ b/swad_API.c @@ -5414,9 +5414,9 @@ int swad__getDirectoryTree (struct soap *soap, /* Initialize path to private directory */ Gbl.Hierarchy.Crs.CrsCod = (courseCode > 0) ? (long) courseCode : - -1L; + -1L; Gbl.Crs.Grps.GrpCod = (groupCode > 0) ? (long) groupCode : - -1L; + -1L; snprintf (Gbl.Crs.PathPriv,sizeof (Gbl.Crs.PathPriv), "%s/%ld", diff --git a/swad_agenda.c b/swad_agenda.c index f5e9713b8..76d24ac36 100644 --- a/swad_agenda.c +++ b/swad_agenda.c @@ -470,10 +470,8 @@ static void Agd_ShowEvents (Agd_AgendaType_t AgendaType) Gbl.Agenda.CurrentPage = (unsigned) Pagination.CurrentPage; /***** Write links to pages *****/ - Pag_WriteLinksToPagesCentered (WhatPaginate[AgendaType], - &Pagination, - (unsigned) Gbl.Agenda.SelectedOrder, - NULL,0); + Pag_WriteLinksToPagesCentered (WhatPaginate[AgendaType],&Pagination, + &Gbl.Agenda,-1L); if (Gbl.Agenda.Num) { @@ -496,10 +494,8 @@ static void Agd_ShowEvents (Agd_AgendaType_t AgendaType) Ale_ShowAlert (Ale_INFO,Txt_No_events); /***** Write again links to pages *****/ - Pag_WriteLinksToPagesCentered (WhatPaginate[AgendaType], - &Pagination, - (unsigned) Gbl.Agenda.SelectedOrder, - NULL,0); + Pag_WriteLinksToPagesCentered (WhatPaginate[AgendaType],&Pagination, + &Gbl.Agenda,-1L); /***** Button to create a new event *****/ if (AgendaType == Agd_MY_AGENDA) diff --git a/swad_assignment.c b/swad_assignment.c index b9ee1feee..d6db6f2fb 100644 --- a/swad_assignment.c +++ b/swad_assignment.c @@ -62,17 +62,6 @@ extern struct Globals Gbl; /***************************** Private variables *****************************/ /*****************************************************************************/ -struct Asg_Assignments - { - bool LstIsRead; // Is the list already read from database... - // ...or it needs to be read? - unsigned Num; // Number of assignments - long *LstAsgCods; // List of assigment codes - Dat_StartEndTime_t SelectedOrder; - long AsgCodToEdit; // Used as parameter in contextual links - unsigned CurrentPage; - }; - /*****************************************************************************/ /***************************** Private prototypes ****************************/ /*****************************************************************************/ @@ -184,10 +173,8 @@ static void Asg_ShowAllAssignments (struct Asg_Assignments *Assignments) } /***** Write links to pages *****/ - Pag_WriteLinksToPagesCentered (Pag_ASSIGNMENTS, - &Pagination, - (unsigned) Assignments->SelectedOrder, - NULL,0); + Pag_WriteLinksToPagesCentered (Pag_ASSIGNMENTS,&Pagination, + Assignments,-1L); if (Assignments->Num) { @@ -209,10 +196,8 @@ static void Asg_ShowAllAssignments (struct Asg_Assignments *Assignments) Ale_ShowAlert (Ale_INFO,Txt_No_assignments); /***** Write again links to pages *****/ - Pag_WriteLinksToPagesCentered (Pag_ASSIGNMENTS, - &Pagination, - (unsigned) Assignments->SelectedOrder, - NULL,0); + Pag_WriteLinksToPagesCentered (Pag_ASSIGNMENTS,&Pagination, + Assignments,-1L); /***** Button to create a new assignment *****/ if (Asg_CheckIfICanCreateAssignments ()) diff --git a/swad_assignment.h b/swad_assignment.h index 050283682..deed3b403 100644 --- a/swad_assignment.h +++ b/swad_assignment.h @@ -46,6 +46,17 @@ typedef enum Asg_SEND_WORK = 1, } Asg_SendWork_t; +struct Asg_Assignments + { + bool LstIsRead; // Is the list already read from database... + // ...or it needs to be read? + unsigned Num; // Number of assignments + long *LstAsgCods; // List of assigment codes + Dat_StartEndTime_t SelectedOrder; + long AsgCodToEdit; // Used as parameter in contextual links + unsigned CurrentPage; + }; + struct Asg_Assignment { long AsgCod; diff --git a/swad_attendance.c b/swad_attendance.c index 90fdc9cc6..507db70cc 100644 --- a/swad_attendance.c +++ b/swad_attendance.c @@ -72,18 +72,6 @@ typedef enum Att_PRNT_SEL_USR, // Print selected users } Att_TypeOfView_t; -struct Att_Events - { - bool LstIsRead; // Is the list already read from database, or it needs to be read? - unsigned Num; // Number of attendance events - struct Att_Event *Lst; // List of attendance events - Dat_StartEndTime_t SelectedOrder; - long AttCod; - bool ShowDetails; - char *StrAttCodsSelected; - unsigned CurrentPage; - }; - /*****************************************************************************/ /****************************** Private variables ****************************/ /*****************************************************************************/ @@ -267,10 +255,8 @@ static void Att_ShowAllAttEvents (struct Att_Events *Events) } /***** Write links to pages *****/ - Pag_WriteLinksToPagesCentered (Pag_ATT_EVENTS, - &Pagination, - (unsigned) Events->SelectedOrder, - NULL,0); + Pag_WriteLinksToPagesCentered (Pag_ATT_EVENTS,&Pagination, + Events,-1L); if (Events->Num) { @@ -321,10 +307,8 @@ static void Att_ShowAllAttEvents (struct Att_Events *Events) Ale_ShowAlert (Ale_INFO,Txt_No_events); /***** Write again links to pages *****/ - Pag_WriteLinksToPagesCentered (Pag_ATT_EVENTS, - &Pagination, - (unsigned) Events->SelectedOrder, - NULL,0); + Pag_WriteLinksToPagesCentered (Pag_ATT_EVENTS,&Pagination, + Events,-1L); /***** Button to create a new attendance event *****/ if (ICanEdit) diff --git a/swad_attendance.h b/swad_attendance.h index 1e98857f1..7ac2df763 100644 --- a/swad_attendance.h +++ b/swad_attendance.h @@ -44,6 +44,15 @@ typedef enum Att_END_TIME = 1, } Att_StartOrEndTime_t; +#define Att_NUM_ORDERS_NEWEST_OLDEST 2 +typedef enum + { + Att_NEWEST_FIRST, + Att_OLDEST_FIRST, + } Att_OrderNewestOldest_t; + +#define Att_ORDER_DEFAULT Dat_START_TIME + struct Att_Event { /* Fields stored in database */ @@ -62,14 +71,17 @@ struct Att_Event bool Selected; // I have selected this attendance event }; -#define Att_NUM_ORDERS_NEWEST_OLDEST 2 -typedef enum +struct Att_Events { - Att_NEWEST_FIRST, - Att_OLDEST_FIRST, - } Att_OrderNewestOldest_t; - -#define Att_ORDER_DEFAULT Dat_START_TIME + bool LstIsRead; // Is the list already read from database, or it needs to be read? + unsigned Num; // Number of attendance events + struct Att_Event *Lst; // List of attendance events + Dat_StartEndTime_t SelectedOrder; + long AttCod; + bool ShowDetails; + char *StrAttCodsSelected; + unsigned CurrentPage; + }; /*****************************************************************************/ /***************************** Public prototypes *****************************/ diff --git a/swad_changelog.h b/swad_changelog.h index c0cb023f0..5b83abe0e 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -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.6 (2020-04-08)" +#define Log_PLATFORM_VERSION "SWAD 19.170 (2020-04-09)" #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.170: Apr 09, 2020 Code refactoring in projects. (284941 lines) 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) diff --git a/swad_file_browser.c b/swad_file_browser.c index f0e40993f..70dcd7e7a 100644 --- a/swad_file_browser.c +++ b/swad_file_browser.c @@ -2087,7 +2087,7 @@ void Brw_GetParAndInitFileBrowser (void) /***** Get other parameters *****/ if (Brw_GetIfProjectFileBrowser ()) /* Get project code */ - Gbl.Prjs.PrjCod = Prj_GetParamPrjCod (); + Prj_SetPrjCod (Prj_GetParamPrjCod ()); else if (Brw_GetIfCrsAssigWorksFileBrowser ()) { /* Get lists of the selected users if not already got */ @@ -2334,7 +2334,7 @@ static void Brw_PutParamsFileBrowser (const char *PathInTree,const char *FilFolL Grp_PutParamGrpCod (Gbl.Crs.Grps.GrpCod); else if (Brw_GetIfProjectFileBrowser ()) // This file browser needs specify a project /***** Project code *****/ - Prj_PutParamPrjCod (Gbl.Prjs.PrjCod); + Prj_PutParamPrjCod (Prj_GetPrjCod ()); else if (Brw_GetIfCrsAssigWorksFileBrowser ()) { /***** Users selected *****/ @@ -2456,6 +2456,7 @@ void Brw_InitializeFileBrowser (void) static void Brw_SetPathFileBrowser (void) { + long PrjCod; char Path[PATH_MAX * 2 + 128]; /***** Reset paths. An empty path means that @@ -2621,6 +2622,8 @@ static void Brw_SetPathFileBrowser (void) break; case Brw_ADMI_DOC_PRJ: case Brw_ADMI_ASS_PRJ: + PrjCod = Prj_GetPrjCod (); + /* Create a directory for projects inside the current course */ snprintf (Path,sizeof (Path), "%s/%s", @@ -2632,15 +2635,15 @@ static void Brw_SetPathFileBrowser (void) snprintf (Path,sizeof (Path), "%s/%s/%02u", Gbl.Crs.PathPriv,Cfg_FOLDER_PRJ, - (unsigned) (Gbl.Prjs.PrjCod % 100)); + (unsigned) (PrjCod % 100)); Fil_CreateDirIfNotExists (Path); /* Create path to the current project */ snprintf (Path,sizeof (Path), "%s/%s/%02u/%ld", Gbl.Crs.PathPriv,Cfg_FOLDER_PRJ, - (unsigned) (Gbl.Prjs.PrjCod % 100), - Gbl.Prjs.PrjCod); + (unsigned) (PrjCod % 100), + PrjCod); Str_Copy (Gbl.FileBrowser.Priv.PathAboveRootFolder, Path, PATH_MAX); @@ -3150,9 +3153,8 @@ static void Brw_ShowFileBrowserProject (void) Prj_AllocMemProject (&Prj); /***** Get project data *****/ - Prj.PrjCod = Prj_GetParamPrjCod (); + Prj.PrjCod = Prj_GetPrjCod (); Prj_GetDataOfProjectByCod (&Prj); - Gbl.Prjs.PrjCod = Prj.PrjCod; /***** Begin box *****/ Box_BoxBegin (NULL,Prj.Title, @@ -3163,7 +3165,7 @@ static void Brw_ShowFileBrowserProject (void) Prj_ShowOneUniqueProject (&Prj); /***** Show project file browsers *****/ - MyRolesInProject = Prj_GetMyRolesInProject (Gbl.Prjs.PrjCod); + MyRolesInProject = Prj_GetMyRolesInProject (Prj_GetPrjCod ()); if (Prj_CheckIfICanViewProjectFiles (MyRolesInProject)) { Brw_WriteTopBeforeShowingFileBrowser (); @@ -4983,7 +4985,7 @@ static void Brw_PutParamsFullTree (void) if (Brw_GetIfGroupFileBrowser ()) Grp_PutParamGrpCod (Gbl.Crs.Grps.GrpCod); else if (Brw_GetIfProjectFileBrowser ()) // This file browser needs specify a project - Prj_PutParamPrjCod (Gbl.Prjs.PrjCod); + Prj_PutParamPrjCod (Prj_GetPrjCod ()); else if (Brw_GetIfCrsAssigWorksFileBrowser ()) Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected); } @@ -5186,7 +5188,7 @@ static void Brw_GetAndUpdateDateLastAccFileBrowser (void) break; case Brw_ADMI_DOC_PRJ: case Brw_ADMI_ASS_PRJ: - Cod = Gbl.Prjs.PrjCod; + Cod = Prj_GetPrjCod (); break; case Brw_ADMI_BRF_USR: Cod = -1L; @@ -7196,7 +7198,7 @@ static bool Brw_CheckIfClipboardIsInThisTree (void) break; case Brw_ADMI_DOC_PRJ: case Brw_ADMI_ASS_PRJ: - if (Gbl.FileBrowser.Clipboard.Cod == Gbl.Prjs.PrjCod) + if (Gbl.FileBrowser.Clipboard.Cod == Prj_GetPrjCod ()) return true; // I am in the project of the clipboard break; case Brw_ADMI_BRF_USR: @@ -7282,7 +7284,7 @@ static long Brw_GetCodForClipboard (void) return Gbl.Crs.Grps.GrpCod; case Brw_ADMI_DOC_PRJ: case Brw_ADMI_ASS_PRJ: - return Gbl.Prjs.PrjCod; + return Prj_GetPrjCod (); default: return -1L; } @@ -7767,7 +7769,7 @@ static void Brw_RemoveAffectedClipboards (Brw_FileBrowser_t FileBrowser, "DELETE FROM clipboard" " WHERE FileBrowser=%u AND Cod=%ld", (unsigned) FileBrowser, - Gbl.Prjs.PrjCod); + Prj_GetPrjCod ()); break; case Brw_ADMI_BRF_USR: DB_QueryDELETE ("can not remove source of copy", @@ -11012,7 +11014,7 @@ long Brw_GetCodForFiles (void) return Gbl.Crs.Grps.GrpCod; case Brw_ADMI_DOC_PRJ: case Brw_ADMI_ASS_PRJ: - return Gbl.Prjs.PrjCod; + return Prj_GetPrjCod (); default: return -1L; } @@ -11548,7 +11550,7 @@ static bool Brw_CheckIfICanModifyPrjDocFileOrFolder (void) case Rol_STD: case Rol_NET: case Rol_TCH: - MyRolesInProject = Prj_GetMyRolesInProject (Gbl.Prjs.PrjCod); + MyRolesInProject = Prj_GetMyRolesInProject (Prj_GetPrjCod ()); if (MyRolesInProject) // I am a member return (Gbl.Usrs.Me.UsrDat.UsrCod == Brw_GetPublisherOfSubtree ()); // Am I the publisher of subtree? return false; @@ -11577,7 +11579,7 @@ static bool Brw_CheckIfICanModifyPrjAssFileOrFolder (void) case Rol_STD: case Rol_NET: case Rol_TCH: - MyRolesInProject = Prj_GetMyRolesInProject (Gbl.Prjs.PrjCod); + MyRolesInProject = Prj_GetMyRolesInProject (Prj_GetPrjCod ()); if ((MyRolesInProject & (1 << Prj_ROLE_TUT | // Tutor... 1 << Prj_ROLE_EVL))) // ...or evaluator return (Gbl.Usrs.Me.UsrDat.UsrCod == Brw_GetPublisherOfSubtree ()); // Am I the publisher of subtree? diff --git a/swad_forum.c b/swad_forum.c index bd8e19fac..875a250f8 100644 --- a/swad_forum.c +++ b/swad_forum.c @@ -382,11 +382,11 @@ static void For_ShowForumThreadsHighlightingOneThread (struct For_Forums *Forums static void For_PutIconNewThread (void *Forums); static void For_PutAllHiddenParamsNewThread (void *Forums); static unsigned For_GetNumThrsInForum (struct For_Forum *Forum); -static void For_ListForumThrs (const struct For_Forums *Forums, +static void For_ListForumThrs (struct For_Forums *Forums, long ThrCods[Pag_ITEMS_PER_PAGE], long ThrCodHighlighted, struct Pagination *PaginationThrs); -static void For_GetThrData (struct ForumThread *Thr); +static void For_GetThreadData (struct For_Thread *Thr); static void For_GetParamsForums (struct For_Forums *Forums); static void For_SetForumType (struct For_Forums *Forums); @@ -417,10 +417,28 @@ void For_ResetForums (struct For_Forums *Forums) Forums->ThreadsOrder = For_DEFAULT_ORDER; Forums->CurrentPageThrs = 0; Forums->CurrentPagePsts = 0; - Forums->ForumSelected.Type = For_FORUM_UNKNOWN; - Forums->ForumSelected.Location = -1L; - Forums->ForumSelected.ThrCod = -1L; - Forums->ForumSelected.PstCod = -1L; + + Forums->Forum.Type = For_FORUM_UNKNOWN; + Forums->Forum.Location = -1L; + + Forums->Thread.ThrCod = -1L; + Forums->Thread.PstCod[0] = + Forums->Thread.PstCod[1] = -1L; + Forums->Thread.UsrCod[0] = + Forums->Thread.UsrCod[1] = -1L; + Forums->Thread.WriteTime[0] = + Forums->Thread.WriteTime[1] = (time_t) 0; + Forums->Thread.Enabled[0] = + Forums->Thread.Enabled[1] = false; + Forums->Thread.Subject[0] = '\0'; + Forums->Thread.NumPosts = + Forums->Thread.NumUnreadPosts = + Forums->Thread.NumMyPosts = + Forums->Thread.NumWriters = + Forums->Thread.NumReaders = 0; + + Forums->Post.PstCod = -1L; + Forums->ThreadToMove = -1L; } @@ -440,7 +458,7 @@ void For_EnablePost (void) For_GetParamsForums (&Forums); /***** Delete post from table of disabled posts *****/ - For_DeletePstFromDisabledPstTable (Forums.ForumSelected.PstCod); + For_DeletePstFromDisabledPstTable (Forums.Post.PstCod); /***** Show forum list again *****/ For_ShowForumList (&Forums); @@ -465,10 +483,10 @@ void For_DisablePost (void) For_GetParamsForums (&Forums); /***** Check if post really exists, if it has not been removed *****/ - if (For_GetIfForumPstExists (Forums.ForumSelected.PstCod)) + if (For_GetIfForumPstExists (Forums.Post.PstCod)) { /***** Insert post into table of banned posts *****/ - For_InsertPstIntoBannedPstTable (Forums.ForumSelected.PstCod); + For_InsertPstIntoBannedPstTable (Forums.Post.PstCod); /***** Show forum list again *****/ For_ShowForumList (&Forums); @@ -645,8 +663,8 @@ static long For_InsertForumThread (const struct For_Forums *Forums, " (ForumType,Location,FirstPstCod,LastPstCod)" " VALUES" " (%u,%ld,%ld,%ld)", - (unsigned) Forums->ForumSelected.Type, - Forums->ForumSelected.Location, + (unsigned) Forums->Forum.Type, + Forums->Forum.Location, FirstPstCod,FirstPstCod); } @@ -985,7 +1003,6 @@ static void For_ShowPostsOfAThread (struct For_Forums *Forums, { extern const char *Hlp_MESSAGES_Forums_posts; extern const char *Txt_Thread; - struct ForumThread Thr; char LastSubject[Cns_MAX_BYTES_SUBJECT + 1]; char FrameTitle[128 + Cns_MAX_BYTES_SUBJECT]; MYSQL_RES *mysql_res; @@ -1002,15 +1019,14 @@ static void For_ShowPostsOfAThread (struct For_Forums *Forums, bool ICanModerateForum = false; /***** Get data of the thread *****/ - Thr.ThrCod = Forums->ForumSelected.ThrCod; - For_GetThrData (&Thr); + For_GetThreadData (&Forums->Thread); /***** Get if there is a thread ready to be moved *****/ if (For_CheckIfICanMoveThreads ()) Forums->ThreadToMove = For_GetThrInMyClipboard (); /***** Get thread read time for the current user *****/ - ReadTimeUTC = For_GetThrReadTime (Forums->ForumSelected.ThrCod); + ReadTimeUTC = For_GetThrReadTime (Forums->Thread.ThrCod); /***** Show alert after action *****/ HTM_SECTION_Begin (For_FORUM_POSTS_SECTION_ID); @@ -1022,7 +1038,7 @@ static void For_ShowPostsOfAThread (struct For_Forums *Forums, /***** Begin box *****/ snprintf (FrameTitle,sizeof (FrameTitle), "%s: %s", - Txt_Thread,Thr.Subject); + Txt_Thread,Forums->Thread.Subject); Box_BoxBegin (NULL,FrameTitle, For_PutIconNewPost,Forums, Hlp_MESSAGES_Forums_posts,Box_NOT_CLOSABLE); @@ -1032,14 +1048,14 @@ static void For_ShowPostsOfAThread (struct For_Forums *Forums, "SELECT PstCod,UNIX_TIMESTAMP(CreatTime)" " FROM forum_post" " WHERE ThrCod=%ld ORDER BY PstCod", - Forums->ForumSelected.ThrCod); + Forums->Thread.ThrCod); NumPsts = (unsigned) NumRows; LastSubject[0] = '\0'; if (NumPsts) // If there are posts... { /***** Check if I can moderate posts in forum *****/ - switch (Forums->ForumSelected.Type) + switch (Forums->Forum.Type) { case For_FORUM_GLOBAL_USRS: case For_FORUM_GLOBAL_TCHS: @@ -1076,17 +1092,15 @@ static void For_ShowPostsOfAThread (struct For_Forums *Forums, Forums->CurrentPagePsts = (unsigned) PaginationPsts.CurrentPage; /***** Write links to pages *****/ - Pag_WriteLinksToPagesCentered (Pag_POSTS_FORUM, - &PaginationPsts, - (unsigned) Forums->ThreadsOrder, - Forums,Forums->ForumSelected.ThrCod); + Pag_WriteLinksToPagesCentered (Pag_POSTS_FORUM,&PaginationPsts, + Forums,Forums->Thread.ThrCod); /***** Begin table *****/ HTM_TABLE_BeginWidePadding (2); /***** Show posts from this page, the author and the date of last reply *****/ mysql_data_seek (mysql_res,(my_ulonglong) (PaginationPsts.FirstItemVisible - 1)); - for (NumRow = PaginationPsts.FirstItemVisible; + for (NumRow = PaginationPsts.FirstItemVisible; NumRow <= PaginationPsts.LastItemVisible; NumRow++) { @@ -1107,7 +1121,7 @@ static void For_ShowPostsOfAThread (struct For_Forums *Forums, Note that database is not updated with the current time, but with the creation time of the most recent post in this page of threads. */ - For_UpdateThrReadTime (Forums->ForumSelected.ThrCod, + For_UpdateThrReadTime (Forums->Thread.ThrCod, CreatTimeUTC); /* Show post */ @@ -1116,7 +1130,7 @@ static void For_ShowPostsOfAThread (struct For_Forums *Forums, NewPst,ICanModerateForum); /* Mark possible notification as seen */ - switch (Forums->ForumSelected.Type) + switch (Forums->Forum.Type) { case For_FORUM_COURSE_TCHS: case For_FORUM_COURSE_USRS: @@ -1127,7 +1141,7 @@ static void For_ShowPostsOfAThread (struct For_Forums *Forums, default: break; } - if (Thr.NumMyPosts) + if (Forums->Thread.NumMyPosts) Ntf_MarkNotifAsSeen (Ntf_EVENT_FORUM_REPLY, PstCod,-1L, Gbl.Usrs.Me.UsrDat.UsrCod); @@ -1137,10 +1151,8 @@ static void For_ShowPostsOfAThread (struct For_Forums *Forums, HTM_TABLE_End (); /***** Write again links to pages *****/ - Pag_WriteLinksToPagesCentered (Pag_POSTS_FORUM, - &PaginationPsts, - (unsigned) Forums->ThreadsOrder, - Forums,Forums->ForumSelected.ThrCod); + Pag_WriteLinksToPagesCentered (Pag_POSTS_FORUM,&PaginationPsts, + Forums,Forums->Thread.ThrCod); } /***** Free structure that stores the query result *****/ @@ -1165,7 +1177,7 @@ static void For_PutIconNewPost (void *Forums) extern const char *Txt_New_post; if (Forums) - Ico_PutContextualIconToAdd (For_ActionsSeePstFor[((struct For_Forums *) Forums)->ForumSelected.Type], + Ico_PutContextualIconToAdd (For_ActionsSeePstFor[((struct For_Forums *) Forums)->Forum.Type], For_NEW_POST_SECTION_ID, For_PutAllHiddenParamsNewPost,Forums, Txt_New_post); @@ -1178,8 +1190,8 @@ static void For_PutAllHiddenParamsNewPost (void *Forums) UINT_MAX, // Page of posts = last ((struct For_Forums *) Forums)->ForumSet, ((struct For_Forums *) Forums)->ThreadsOrder, - ((struct For_Forums *) Forums)->ForumSelected.Location, - ((struct For_Forums *) Forums)->ForumSelected.ThrCod, + ((struct For_Forums *) Forums)->Forum.Location, + ((struct For_Forums *) Forums)->Thread.ThrCod, -1L); } @@ -1268,15 +1280,15 @@ static void For_ShowAForumPost (const struct For_Forums *Forums, HTM_TD_Begin ("class=\"CONTEXT_COL\""); if (ICanModerateForum) { - Frm_StartFormAnchor (Enabled ? For_ActionsDisPstFor[Forums->ForumSelected.Type] : - For_ActionsEnbPstFor[Forums->ForumSelected.Type], + Frm_StartFormAnchor (Enabled ? For_ActionsDisPstFor[Forums->Forum.Type] : + For_ActionsEnbPstFor[Forums->Forum.Type], For_FORUM_POSTS_SECTION_ID); For_PutAllHiddenParamsForum (Forums->CurrentPageThrs, // Page of threads = current Forums->CurrentPagePsts, // Page of posts = current Forums->ForumSet, Forums->ThreadsOrder, - Forums->ForumSelected.Location, - Forums->ForumSelected.ThrCod, + Forums->Forum.Location, + Forums->Thread.ThrCod, PstCod); Ico_PutIconLink (Enabled ? "eye-green.svg" : "eye-slash-red.svg", @@ -1305,17 +1317,17 @@ static void For_ShowAForumPost (const struct For_Forums *Forums, { // Post can be removed if post is the last (without answers) and it's mine if (PstNum == 1) // First and unique post in thread - Frm_StartFormAnchor (For_ActionsDelPstFor[Forums->ForumSelected.Type], + Frm_StartFormAnchor (For_ActionsDelPstFor[Forums->Forum.Type], For_FORUM_THREADS_SECTION_ID); else // Last of several posts in thread - Frm_StartFormAnchor (For_ActionsDelPstFor[Forums->ForumSelected.Type], + Frm_StartFormAnchor (For_ActionsDelPstFor[Forums->Forum.Type], For_FORUM_POSTS_SECTION_ID); For_PutAllHiddenParamsForum (Forums->CurrentPageThrs, // Page of threads = current Forums->CurrentPagePsts, // Page of posts = current Forums->ForumSet, Forums->ThreadsOrder, - Forums->ForumSelected.Location, - Forums->ForumSelected.ThrCod, + Forums->Forum.Location, + Forums->Thread.ThrCod, PstCod); Ico_PutIconRemove (); Frm_EndForm (); @@ -1470,9 +1482,9 @@ static void For_WriteNumberOfPosts (const struct For_Forums *Forums,long UsrCod) HTM_DIV_Begin ("class=\"AUTHOR_TXT LT\""); /***** Get number of posts from database *****/ - if (Forums->ForumSelected.Location > 0) + if (Forums->Forum.Location > 0) sprintf (SubQuery," AND forum_thread.Location=%ld", - Forums->ForumSelected.Location); + Forums->Forum.Location); else SubQuery[0] = '\0'; NumPsts = @@ -1483,7 +1495,7 @@ static void For_WriteNumberOfPosts (const struct For_Forums *Forums,long UsrCod) " AND forum_post.ThrCod=forum_thread.ThrCod" " AND forum_thread.ForumType=%u%s", UsrCod, - (unsigned) Forums->ForumSelected.Type,SubQuery); + (unsigned) Forums->Forum.Type,SubQuery); /***** Write number of threads and number of posts *****/ HTM_TxtF ("[%u %s]",NumPsts,NumPsts == 1 ? Txt_FORUM_post : @@ -1823,7 +1835,7 @@ static void For_WriteLinksToGblForums (const struct For_Forums *Forums, /***** Link to forum global *****/ Forum.Type = For_FORUM_GLOBAL_USRS; Forum.Location = -1L; - Highlight = (Forums->ForumSelected.Type == For_FORUM_GLOBAL_USRS); + Highlight = (Forums->Forum.Type == For_FORUM_GLOBAL_USRS); IsLastItemInLevel[1] = false; For_WriteLinkToForum (Forums,&Forum,Highlight,0,IsLastItemInLevel); @@ -1833,7 +1845,7 @@ static void For_WriteLinksToGblForums (const struct For_Forums *Forums, { Forum.Type = For_FORUM_GLOBAL_TCHS; Forum.Location = -1L; - Highlight = (Forums->ForumSelected.Type == For_FORUM_GLOBAL_TCHS); + Highlight = (Forums->Forum.Type == For_FORUM_GLOBAL_TCHS); IsLastItemInLevel[1] = false; For_WriteLinkToForum (Forums,&Forum,Highlight,0,IsLastItemInLevel); } @@ -1860,7 +1872,7 @@ static void For_WriteLinksToPlatformForums (const struct For_Forums *Forums, /***** Link to forum of users about the platform *****/ Forum.Type = For_FORUM__SWAD__USRS; Forum.Location = -1L; - Highlight = (Forums->ForumSelected.Type == For_FORUM__SWAD__USRS); + Highlight = (Forums->Forum.Type == For_FORUM__SWAD__USRS); IsLastItemInLevel[1] = (IsLastForum && !ICanSeeTeacherForum); For_WriteLinkToForum (Forums,&Forum,Highlight,0,IsLastItemInLevel); @@ -1869,7 +1881,7 @@ static void For_WriteLinksToPlatformForums (const struct For_Forums *Forums, { Forum.Type = For_FORUM__SWAD__TCHS; Forum.Location = -1L; - Highlight = (Forums->ForumSelected.Type == For_FORUM__SWAD__TCHS); + Highlight = (Forums->Forum.Type == For_FORUM__SWAD__TCHS); IsLastItemInLevel[1] = IsLastForum; For_WriteLinkToForum (Forums,&Forum,Highlight,0,IsLastItemInLevel); } @@ -1899,8 +1911,8 @@ static long For_WriteLinksToInsForums (const struct For_Forums *Forums, /***** Link to the forum of users from this institution *****/ Forum.Type = For_FORUM_INSTIT_USRS; Forum.Location = InsCod; - Highlight = (Forums->ForumSelected.Type == For_FORUM_INSTIT_USRS && - Forums->ForumSelected.Location == InsCod); + Highlight = (Forums->Forum.Type == For_FORUM_INSTIT_USRS && + Forums->Forum.Location == InsCod); IsLastItemInLevel[1] = (IsLastIns && !ICanSeeTeacherForum); For_WriteLinkToForum (Forums,&Forum,Highlight,1,IsLastItemInLevel); @@ -1909,8 +1921,8 @@ static long For_WriteLinksToInsForums (const struct For_Forums *Forums, { Forum.Type = For_FORUM_INSTIT_TCHS; Forum.Location = InsCod; - Highlight = (Forums->ForumSelected.Type == For_FORUM_INSTIT_TCHS && - Forums->ForumSelected.Location == InsCod); + Highlight = (Forums->Forum.Type == For_FORUM_INSTIT_TCHS && + Forums->Forum.Location == InsCod); IsLastItemInLevel[1] = IsLastIns; For_WriteLinkToForum (Forums,&Forum,Highlight,1,IsLastItemInLevel); } @@ -1942,8 +1954,8 @@ static long For_WriteLinksToCtrForums (const struct For_Forums *Forums, /***** Link to the forum of users from this centre *****/ Forum.Type = For_FORUM_CENTRE_USRS; Forum.Location = CtrCod; - Highlight = (Forums->ForumSelected.Type == For_FORUM_CENTRE_USRS && - Forums->ForumSelected.Location == CtrCod); + Highlight = (Forums->Forum.Type == For_FORUM_CENTRE_USRS && + Forums->Forum.Location == CtrCod); IsLastItemInLevel[2] = (IsLastCtr && !ICanSeeTeacherForum); For_WriteLinkToForum (Forums,&Forum,Highlight,2,IsLastItemInLevel); @@ -1952,8 +1964,8 @@ static long For_WriteLinksToCtrForums (const struct For_Forums *Forums, { Forum.Type = For_FORUM_CENTRE_TCHS; Forum.Location = CtrCod; - Highlight = (Forums->ForumSelected.Type == For_FORUM_CENTRE_TCHS && - Forums->ForumSelected.Location == CtrCod); + Highlight = (Forums->Forum.Type == For_FORUM_CENTRE_TCHS && + Forums->Forum.Location == CtrCod); IsLastItemInLevel[2] = IsLastCtr; For_WriteLinkToForum (Forums,&Forum,Highlight,2,IsLastItemInLevel); } @@ -1985,8 +1997,8 @@ static long For_WriteLinksToDegForums (const struct For_Forums *Forums, /***** Link to the forum of users from this degree *****/ Forum.Type = For_FORUM_DEGREE_USRS; Forum.Location = DegCod; - Highlight = (Forums->ForumSelected.Type == For_FORUM_DEGREE_USRS && - Forums->ForumSelected.Location == DegCod); + Highlight = (Forums->Forum.Type == For_FORUM_DEGREE_USRS && + Forums->Forum.Location == DegCod); IsLastItemInLevel[3] = (IsLastDeg && !ICanSeeTeacherForum); For_WriteLinkToForum (Forums,&Forum,Highlight,3,IsLastItemInLevel); @@ -1995,8 +2007,8 @@ static long For_WriteLinksToDegForums (const struct For_Forums *Forums, { Forum.Type = For_FORUM_DEGREE_TCHS; Forum.Location = DegCod; - Highlight = (Forums->ForumSelected.Type == For_FORUM_DEGREE_TCHS && - Forums->ForumSelected.Location == DegCod); + Highlight = (Forums->Forum.Type == For_FORUM_DEGREE_TCHS && + Forums->Forum.Location == DegCod); IsLastItemInLevel[3] = IsLastDeg; For_WriteLinkToForum (Forums,&Forum,Highlight,3,IsLastItemInLevel); } @@ -2028,8 +2040,8 @@ static long For_WriteLinksToCrsForums (const struct For_Forums *Forums, /***** Link to the forum of users from this course *****/ Forum.Type = For_FORUM_COURSE_USRS; Forum.Location = CrsCod; - Highlight = (Forums->ForumSelected.Type == For_FORUM_COURSE_USRS && - Forums->ForumSelected.Location == CrsCod); + Highlight = (Forums->Forum.Type == For_FORUM_COURSE_USRS && + Forums->Forum.Location == CrsCod); IsLastItemInLevel[4] = (IsLastCrs && !ICanSeeTeacherForum); For_WriteLinkToForum (Forums,&Forum,Highlight,4,IsLastItemInLevel); @@ -2038,8 +2050,8 @@ static long For_WriteLinksToCrsForums (const struct For_Forums *Forums, { Forum.Type = For_FORUM_COURSE_TCHS; Forum.Location = CrsCod; - Highlight = (Forums->ForumSelected.Type == For_FORUM_COURSE_TCHS && - Forums->ForumSelected.Location == CrsCod); + Highlight = (Forums->Forum.Type == For_FORUM_COURSE_TCHS && + Forums->Forum.Location == CrsCod); IsLastItemInLevel[4] = IsLastCrs; For_WriteLinkToForum (Forums,&Forum,Highlight,4,IsLastItemInLevel); } @@ -2448,13 +2460,13 @@ static void For_ShowForumThreadsHighlightingOneThread (struct For_Forums *Forums struct Pagination PaginationThrs; /***** Set forum name *****/ - For_SetForumName (&Forums->ForumSelected, + For_SetForumName (&Forums->Forum, ForumName,Gbl.Prefs.Language,true); /***** Get threads of a forum from database *****/ - if (Forums->ForumSelected.Location > 0) + if (Forums->Forum.Location > 0) sprintf (SubQuery," AND forum_thread.Location=%ld", - Forums->ForumSelected.Location); + Forums->Forum.Location); else SubQuery[0] = '\0'; switch (Forums->ThreadsOrder) @@ -2466,7 +2478,7 @@ static void For_ShowForumThreadsHighlightingOneThread (struct For_Forums *Forums " WHERE forum_thread.ForumType=%u%s" " AND forum_thread.FirstPstCod=forum_post.PstCod" " ORDER BY forum_post.CreatTime DESC", - (unsigned) Forums->ForumSelected.Type,SubQuery); + (unsigned) Forums->Forum.Type,SubQuery); break; case Dat_END_TIME: // Last post time NumThrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get thread of a forum", @@ -2475,7 +2487,7 @@ static void For_ShowForumThreadsHighlightingOneThread (struct For_Forums *Forums " WHERE forum_thread.ForumType=%u%s" " AND forum_thread.LastPstCod=forum_post.PstCod" " ORDER BY forum_post.CreatTime DESC", - (unsigned) Forums->ForumSelected.Type,SubQuery); + (unsigned) Forums->Forum.Type,SubQuery); break; default: // Impossible return; @@ -2522,10 +2534,8 @@ static void For_ShowForumThreadsHighlightingOneThread (struct For_Forums *Forums if (NumThrs) { /***** Write links to all the pages in the listing of threads *****/ - Pag_WriteLinksToPagesCentered (Pag_THREADS_FORUM, - &PaginationThrs, - (unsigned) Forums->ThreadsOrder, - Forums,0); + Pag_WriteLinksToPagesCentered (Pag_THREADS_FORUM,&PaginationThrs, + Forums,-1L); /***** Heading row *****/ HTM_TABLE_BeginWideMarginPadding (2); @@ -2541,13 +2551,13 @@ static void For_ShowForumThreadsHighlightingOneThread (struct For_Forums *Forums { HTM_TH_Begin (1,2,"CM"); - Frm_StartFormAnchor (For_ActionsSeeFor[Forums->ForumSelected.Type], + Frm_StartFormAnchor (For_ActionsSeeFor[Forums->Forum.Type], For_FORUM_THREADS_SECTION_ID); For_PutAllHiddenParamsForum (Forums->CurrentPageThrs, // Page of threads = current 1, // Page of posts = first Forums->ForumSet, Order, - Forums->ForumSelected.Location, + Forums->Forum.Location, -1L, -1L); HTM_BUTTON_SUBMIT_Begin (Txt_FORUM_THREAD_HELP_ORDER[Order],"BT_LINK TIT_TBL",NULL); @@ -2570,16 +2580,14 @@ static void For_ShowForumThreadsHighlightingOneThread (struct For_Forums *Forums HTM_TR_End (); /***** List the threads *****/ - For_ListForumThrs (Forums,ThrCods,Forums->ForumSelected.ThrCod,&PaginationThrs); + For_ListForumThrs (Forums,ThrCods,Forums->Thread.ThrCod,&PaginationThrs); /***** End table *****/ HTM_TABLE_End (); /***** Write links to all the pages in the listing of threads *****/ - Pag_WriteLinksToPagesCentered (Pag_THREADS_FORUM, - &PaginationThrs, - (unsigned) Forums->ThreadsOrder, - Forums,0); + Pag_WriteLinksToPagesCentered (Pag_THREADS_FORUM,&PaginationThrs, + Forums,-1L); } /***** Put a form to write the first post of a new thread *****/ @@ -2601,7 +2609,7 @@ static void For_PutIconNewThread (void *Forums) extern const char *Txt_New_thread; if (Forums) - Ico_PutContextualIconToAdd (For_ActionsSeeFor[((struct For_Forums *) Forums)->ForumSelected.Type], + Ico_PutContextualIconToAdd (For_ActionsSeeFor[((struct For_Forums *) Forums)->Forum.Type], For_NEW_THREAD_SECTION_ID, For_PutAllHiddenParamsNewThread,Forums, Txt_New_thread); @@ -2614,7 +2622,7 @@ static void For_PutAllHiddenParamsNewThread (void *Forums) 1, // Page of posts = first ((struct For_Forums *)Forums)->ForumSet, ((struct For_Forums *)Forums)->ThreadsOrder, - ((struct For_Forums *)Forums)->ForumSelected.Location, + ((struct For_Forums *)Forums)->Forum.Location, -1L, -1L); } @@ -3299,7 +3307,7 @@ unsigned For_GetNumTotalPstsInForumsOfType (For_ForumType_t ForumType, /************************ List the threads of a forum ************************/ /*****************************************************************************/ -static void For_ListForumThrs (const struct For_Forums *Forums, +static void For_ListForumThrs (struct For_Forums *Forums, long ThrCods[Pag_ITEMS_PER_PAGE], long ThrCodHighlighted, struct Pagination *PaginationThrs) @@ -3313,7 +3321,6 @@ static void For_ListForumThrs (const struct For_Forums *Forums, unsigned NumThrInScreen; // From 0 to Pag_ITEMS_PER_PAGE-1 unsigned UniqueId; char *Id; - struct ForumThread Thr; struct UsrData UsrDat; Dat_StartEndTime_t Order; time_t TimeUTC; @@ -3336,19 +3343,19 @@ static void For_ListForumThrs (const struct For_Forums *Forums, NumThr++, NumThrInScreen++, Gbl.RowEvenOdd = 1 - Gbl.RowEvenOdd) { /***** Get the data of this thread *****/ - Thr.ThrCod = ThrCods[NumThrInScreen]; - For_GetThrData (&Thr); - Style = (Thr.NumUnreadPosts ? "AUTHOR_TXT_NEW" : - "AUTHOR_TXT"); - BgColor = (Thr.ThrCod == ThreadInMyClipboard) ? "LIGHT_GREEN" : - ((Thr.ThrCod == ThrCodHighlighted) ? "LIGHT_BLUE" : - Gbl.ColorRows[Gbl.RowEvenOdd]); + Forums->Thread.ThrCod = ThrCods[NumThrInScreen]; + For_GetThreadData (&Forums->Thread); + Style = (Forums->Thread.NumUnreadPosts ? "AUTHOR_TXT_NEW" : + "AUTHOR_TXT"); + BgColor = (Forums->Thread.ThrCod == ThreadInMyClipboard) ? "LIGHT_GREEN" : + ((Forums->Thread.ThrCod == ThrCodHighlighted) ? "LIGHT_BLUE" : + Gbl.ColorRows[Gbl.RowEvenOdd]); /***** Show my photo if I have any posts in this thread *****/ HTM_TR_Begin (NULL); HTM_TD_Begin ("class=\"BT %s\"",BgColor); - if (Thr.NumMyPosts) + if (Forums->Thread.NumMyPosts) HTM_IMG (Gbl.Usrs.Me.PhotoURL[0] ? Gbl.Usrs.Me.PhotoURL : Cfg_URL_ICON_PUBLIC, Gbl.Usrs.Me.PhotoURL[0] ? NULL : @@ -3359,25 +3366,25 @@ static void For_ListForumThrs (const struct For_Forums *Forums, /***** Put an icon with thread status *****/ HTM_TD_Begin ("class=\"CONTEXT_COL %s\"",BgColor); - Ico_PutIcon (Thr.NumUnreadPosts ? "envelope.svg" : - "envelope-open-text.svg", - Thr.NumUnreadPosts ? Txt_There_are_new_posts : - Txt_No_new_posts, + Ico_PutIcon (Forums->Thread.NumUnreadPosts ? "envelope.svg" : + "envelope-open-text.svg", + Forums->Thread.NumUnreadPosts ? Txt_There_are_new_posts : + Txt_No_new_posts, "ICO16x16"); /***** Put button to remove the thread *****/ - if (PermissionThreadDeletion[Forums->ForumSelected.Type] & + if (PermissionThreadDeletion[Forums->Forum.Type] & (1 << Gbl.Usrs.Me.Role.Logged)) // If I have permission to remove thread in this forum... { HTM_BR (); - Frm_StartFormAnchor (For_ActionsReqDelThr[Forums->ForumSelected.Type], + Frm_StartFormAnchor (For_ActionsReqDelThr[Forums->Forum.Type], For_REMOVE_THREAD_SECTION_ID); For_PutAllHiddenParamsForum (Forums->CurrentPageThrs, // Page of threads = current 1, // Page of posts = first Forums->ForumSet, Forums->ThreadsOrder, - Forums->ForumSelected.Location, - Thr.ThrCod, + Forums->Forum.Location, + Forums->Thread.ThrCod, -1L); Ico_PutIconRemove (); Frm_EndForm (); @@ -3387,14 +3394,14 @@ static void For_ListForumThrs (const struct For_Forums *Forums, if (ICanMoveThreads) { HTM_BR (); - Frm_StartFormAnchor (For_ActionsCutThrFor[Forums->ForumSelected.Type], + Frm_StartFormAnchor (For_ActionsCutThrFor[Forums->Forum.Type], For_FORUM_THREADS_SECTION_ID); For_PutAllHiddenParamsForum (Forums->CurrentPageThrs, // Page of threads = current 1, // Page of posts = first Forums->ForumSet, Forums->ThreadsOrder, - Forums->ForumSelected.Location, - Thr.ThrCod, + Forums->Forum.Location, + Forums->Thread.ThrCod, -1L); Ico_PutIconCut (); Frm_EndForm (); @@ -3404,18 +3411,17 @@ static void For_ListForumThrs (const struct For_Forums *Forums, /***** Write subject and links to thread pages *****/ HTM_TD_Begin ("class=\"LT %s\"",BgColor); - PaginationPsts.NumItems = Thr.NumPosts; + PaginationPsts.NumItems = Forums->Thread.NumPosts; PaginationPsts.CurrentPage = 1; // First page Pag_CalculatePagination (&PaginationPsts); PaginationPsts.Anchor = For_FORUM_POSTS_SECTION_ID; Pag_WriteLinksToPages (Pag_POSTS_FORUM, &PaginationPsts, - (unsigned) Forums->ThreadsOrder, - Forums,Thr.ThrCod, - Thr.Enabled[Dat_START_TIME], - Thr.Subject, - Thr.NumUnreadPosts ? The_ClassFormInBoxBold[Gbl.Prefs.Theme] : - The_ClassFormInBox[Gbl.Prefs.Theme], + Forums,Forums->Thread.ThrCod, + Forums->Thread.Enabled[Dat_START_TIME], + Forums->Thread.Subject, + Forums->Thread.NumUnreadPosts ? The_ClassFormInBoxBold[Gbl.Prefs.Theme] : + The_ClassFormInBox[Gbl.Prefs.Theme], true); HTM_TD_End (); @@ -3424,17 +3430,17 @@ static void For_ListForumThrs (const struct For_Forums *Forums, Order <= Dat_END_TIME; Order++) { - if (Order == Dat_START_TIME || Thr.NumPosts > 1) // Don't write twice the same author when thread has only one thread + if (Order == Dat_START_TIME || Forums->Thread.NumPosts > 1) // Don't write twice the same author when thread has only one thread { /* Write the author of first or last message */ - UsrDat.UsrCod = Thr.UsrCod[Order]; + UsrDat.UsrCod = Forums->Thread.UsrCod[Order]; Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat,Usr_DONT_GET_PREFS); HTM_TD_Begin ("class=\"%s LT %s\"",Style,BgColor); - Msg_WriteMsgAuthor (&UsrDat,Thr.Enabled[Order],BgColor); + Msg_WriteMsgAuthor (&UsrDat,Forums->Thread.Enabled[Order],BgColor); HTM_TD_End (); /* Write the date of first or last message (it's in YYYYMMDDHHMMSS format) */ - TimeUTC = Thr.WriteTime[Order]; + TimeUTC = Forums->Thread.WriteTime[Order]; UniqueId++; if (asprintf (&Id,"thr_date_%u",UniqueId) < 0) Lay_NotEnoughMemoryExit (); @@ -3457,22 +3463,22 @@ static void For_ListForumThrs (const struct For_Forums *Forums, /***** Write number of posts in this thread *****/ HTM_TD_Begin ("class=\"%s RT %s\"",Style,BgColor); - HTM_TxtF ("%u ",Thr.NumPosts); + HTM_TxtF ("%u ",Forums->Thread.NumPosts); HTM_TD_End (); /***** Write number of new posts in this thread *****/ HTM_TD_Begin ("class=\"%s RT %s\"",Style,BgColor); - HTM_TxtF ("%u ",Thr.NumUnreadPosts); + HTM_TxtF ("%u ",Forums->Thread.NumUnreadPosts); HTM_TD_End (); /***** Write number of users who have write posts in this thread *****/ HTM_TD_Begin ("class=\"%s RT %s\"",Style,BgColor); - HTM_TxtF ("%u ",Thr.NumWriters); + HTM_TxtF ("%u ",Forums->Thread.NumWriters); HTM_TD_End (); /***** Write number of users who have read this thread *****/ HTM_TD_Begin ("class=\"%s RT %s\"",Style,BgColor); - HTM_TxtF ("%u ",Thr.NumReaders); + HTM_TxtF ("%u ",Forums->Thread.NumReaders); HTM_TD_End (); HTM_TR_End (); @@ -3486,7 +3492,7 @@ static void For_ListForumThrs (const struct For_Forums *Forums, /***************************** Get data of a thread **************************/ /*****************************************************************************/ -static void For_GetThrData (struct ForumThread *Thr) +static void For_GetThreadData (struct For_Thread *Thr) { extern const char *Txt_no_subject; MYSQL_RES *mysql_res; @@ -3606,7 +3612,7 @@ static void For_GetParamsForums (struct For_Forums *Forums) For_SetForumType (Forums); /***** Get parameter with code of course, degree, centre or institution *****/ - switch (Forums->ForumSelected.Type) + switch (Forums->Forum.Type) { case For_FORUM_INSTIT_USRS: case For_FORUM_INSTIT_TCHS: @@ -3616,18 +3622,18 @@ static void For_GetParamsForums (struct For_Forums *Forums) case For_FORUM_DEGREE_TCHS: case For_FORUM_COURSE_USRS: case For_FORUM_COURSE_TCHS: - Forums->ForumSelected.Location = Par_GetParToLong ("Location"); + Forums->Forum.Location = Par_GetParToLong ("Location"); break; default: - Forums->ForumSelected.Location = -1L; + Forums->Forum.Location = -1L; break; } /***** Get optional parameter with code of a selected thread *****/ - Forums->ForumSelected.ThrCod = Par_GetParToLong ("ThrCod"); + Forums->Thread.ThrCod = Par_GetParToLong ("ThrCod"); /***** Get optional parameter with code of a selected post *****/ - Forums->ForumSelected.PstCod = Par_GetParToLong ("PstCod"); + Forums->Post.PstCod = Par_GetParToLong ("PstCod"); /***** Get which forums I want to see *****/ Forums->ForumSet = (For_ForumSet_t) @@ -3666,7 +3672,7 @@ static void For_SetForumType (struct For_Forums *Forums) case ActCutThrForGenUsr: case ActPasThrForGenUsr: case ActDelPstForGenUsr: case ActEnbPstForGenUsr: case ActDisPstForGenUsr: - Forums->ForumSelected.Type = For_FORUM_GLOBAL_USRS; + Forums->Forum.Type = For_FORUM_GLOBAL_USRS; break; case ActSeeForGenTch: case ActSeePstForGenTch: case ActRcvThrForGenTch: case ActRcvRepForGenTch: @@ -3674,7 +3680,7 @@ static void For_SetForumType (struct For_Forums *Forums) case ActCutThrForGenTch: case ActPasThrForGenTch: case ActDelPstForGenTch: case ActEnbPstForGenTch: case ActDisPstForGenTch: - Forums->ForumSelected.Type = For_FORUM_GLOBAL_TCHS; + Forums->Forum.Type = For_FORUM_GLOBAL_TCHS; break; case ActSeeForSWAUsr: case ActSeePstForSWAUsr: case ActRcvThrForSWAUsr: case ActRcvRepForSWAUsr: @@ -3682,7 +3688,7 @@ static void For_SetForumType (struct For_Forums *Forums) case ActCutThrForSWAUsr: case ActPasThrForSWAUsr: case ActDelPstForSWAUsr: case ActEnbPstForSWAUsr: case ActDisPstForSWAUsr: - Forums->ForumSelected.Type = For_FORUM__SWAD__USRS; + Forums->Forum.Type = For_FORUM__SWAD__USRS; break; case ActSeeForSWATch: case ActSeePstForSWATch: case ActRcvThrForSWATch: case ActRcvRepForSWATch: @@ -3690,7 +3696,7 @@ static void For_SetForumType (struct For_Forums *Forums) case ActCutThrForSWATch: case ActPasThrForSWATch: case ActDelPstForSWATch: case ActEnbPstForSWATch: case ActDisPstForSWATch: - Forums->ForumSelected.Type = For_FORUM__SWAD__TCHS; + Forums->Forum.Type = For_FORUM__SWAD__TCHS; break; case ActSeeForInsUsr: case ActSeePstForInsUsr: case ActRcvThrForInsUsr: case ActRcvRepForInsUsr: @@ -3698,7 +3704,7 @@ static void For_SetForumType (struct For_Forums *Forums) case ActCutThrForInsUsr: case ActPasThrForInsUsr: case ActDelPstForInsUsr: case ActEnbPstForInsUsr: case ActDisPstForInsUsr: - Forums->ForumSelected.Type = For_FORUM_INSTIT_USRS; + Forums->Forum.Type = For_FORUM_INSTIT_USRS; break; case ActSeeForInsTch: case ActSeePstForInsTch: case ActRcvThrForInsTch: case ActRcvRepForInsTch: @@ -3706,7 +3712,7 @@ static void For_SetForumType (struct For_Forums *Forums) case ActCutThrForInsTch: case ActPasThrForInsTch: case ActDelPstForInsTch: case ActEnbPstForInsTch: case ActDisPstForInsTch: - Forums->ForumSelected.Type = For_FORUM_INSTIT_TCHS; + Forums->Forum.Type = For_FORUM_INSTIT_TCHS; break; case ActSeeForCtrUsr: case ActSeePstForCtrUsr: case ActRcvThrForCtrUsr: case ActRcvRepForCtrUsr: @@ -3714,7 +3720,7 @@ static void For_SetForumType (struct For_Forums *Forums) case ActCutThrForCtrUsr: case ActPasThrForCtrUsr: case ActDelPstForCtrUsr: case ActEnbPstForCtrUsr: case ActDisPstForCtrUsr: - Forums->ForumSelected.Type = For_FORUM_CENTRE_USRS; + Forums->Forum.Type = For_FORUM_CENTRE_USRS; break; case ActSeeForCtrTch: case ActSeePstForCtrTch: case ActRcvThrForCtrTch: case ActRcvRepForCtrTch: @@ -3722,7 +3728,7 @@ static void For_SetForumType (struct For_Forums *Forums) case ActCutThrForCtrTch: case ActPasThrForCtrTch: case ActDelPstForCtrTch: case ActEnbPstForCtrTch: case ActDisPstForCtrTch: - Forums->ForumSelected.Type = For_FORUM_CENTRE_TCHS; + Forums->Forum.Type = For_FORUM_CENTRE_TCHS; break; case ActSeeForDegUsr: case ActSeePstForDegUsr: case ActRcvThrForDegUsr: case ActRcvRepForDegUsr: @@ -3730,7 +3736,7 @@ static void For_SetForumType (struct For_Forums *Forums) case ActCutThrForDegUsr: case ActPasThrForDegUsr: case ActDelPstForDegUsr: case ActEnbPstForDegUsr: case ActDisPstForDegUsr: - Forums->ForumSelected.Type = For_FORUM_DEGREE_USRS; + Forums->Forum.Type = For_FORUM_DEGREE_USRS; break; case ActSeeForDegTch: case ActSeePstForDegTch: case ActRcvThrForDegTch: case ActRcvRepForDegTch: @@ -3738,7 +3744,7 @@ static void For_SetForumType (struct For_Forums *Forums) case ActCutThrForDegTch: case ActPasThrForDegTch: case ActDelPstForDegTch: case ActEnbPstForDegTch: case ActDisPstForDegTch: - Forums->ForumSelected.Type = For_FORUM_DEGREE_TCHS; + Forums->Forum.Type = For_FORUM_DEGREE_TCHS; break; case ActSeeForCrsUsr: case ActSeePstForCrsUsr: case ActRcvThrForCrsUsr: case ActRcvRepForCrsUsr: @@ -3746,7 +3752,7 @@ static void For_SetForumType (struct For_Forums *Forums) case ActCutThrForCrsUsr: case ActPasThrForCrsUsr: case ActDelPstForCrsUsr: case ActEnbPstForCrsUsr: case ActDisPstForCrsUsr: - Forums->ForumSelected.Type = For_FORUM_COURSE_USRS; + Forums->Forum.Type = For_FORUM_COURSE_USRS; break; case ActSeeForCrsTch: case ActSeePstForCrsTch: case ActRcvThrForCrsTch: case ActRcvRepForCrsTch: @@ -3754,10 +3760,10 @@ static void For_SetForumType (struct For_Forums *Forums) case ActCutThrForCrsTch: case ActPasThrForCrsTch: case ActDelPstForCrsTch: case ActEnbPstForCrsTch: case ActDisPstForCrsTch: - Forums->ForumSelected.Type = For_FORUM_COURSE_TCHS; + Forums->Forum.Type = For_FORUM_COURSE_TCHS; break; default: - Forums->ForumSelected.Type = For_FORUM_UNKNOWN; + Forums->Forum.Type = For_FORUM_UNKNOWN; } } @@ -3771,7 +3777,7 @@ static void For_RestrictAccess (const struct For_Forums *Forums) bool ICanSeeForum; /***** Restrict access *****/ - switch (Forums->ForumSelected.Type) + switch (Forums->Forum.Type) { case For_FORUM_GLOBAL_USRS: case For_FORUM__SWAD__USRS: @@ -3784,53 +3790,53 @@ static void For_RestrictAccess (const struct For_Forums *Forums) (1 << Rol_TCH))); break; case For_FORUM_INSTIT_USRS: - MaxRole = Rol_GetMyMaxRoleInIns (Forums->ForumSelected.Location); + MaxRole = Rol_GetMyMaxRoleInIns (Forums->Forum.Location); ICanSeeForum = (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM || MaxRole == Rol_STD || MaxRole == Rol_NET || MaxRole == Rol_TCH); break; case For_FORUM_INSTIT_TCHS: - MaxRole = Rol_GetMyMaxRoleInIns (Forums->ForumSelected.Location); + MaxRole = Rol_GetMyMaxRoleInIns (Forums->Forum.Location); ICanSeeForum = (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM || MaxRole == Rol_NET || MaxRole == Rol_TCH); break; case For_FORUM_CENTRE_USRS: - MaxRole = Rol_GetMyMaxRoleInCtr (Forums->ForumSelected.Location); + MaxRole = Rol_GetMyMaxRoleInCtr (Forums->Forum.Location); ICanSeeForum = (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM || MaxRole >= Rol_STD || MaxRole == Rol_NET || MaxRole == Rol_TCH); break; case For_FORUM_CENTRE_TCHS: - MaxRole = Rol_GetMyMaxRoleInCtr (Forums->ForumSelected.Location); + MaxRole = Rol_GetMyMaxRoleInCtr (Forums->Forum.Location); ICanSeeForum = (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM || MaxRole == Rol_NET || MaxRole == Rol_TCH); break; case For_FORUM_DEGREE_USRS: - MaxRole = Rol_GetMyMaxRoleInDeg (Forums->ForumSelected.Location); + MaxRole = Rol_GetMyMaxRoleInDeg (Forums->Forum.Location); ICanSeeForum = (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM || MaxRole >= Rol_STD || MaxRole == Rol_NET || MaxRole == Rol_TCH); break; case For_FORUM_DEGREE_TCHS: - MaxRole = Rol_GetMyMaxRoleInDeg (Forums->ForumSelected.Location); + MaxRole = Rol_GetMyMaxRoleInDeg (Forums->Forum.Location); ICanSeeForum = (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM || MaxRole == Rol_NET || MaxRole == Rol_TCH); break; case For_FORUM_COURSE_USRS: - MaxRole = Rol_GetMyRoleInCrs (Forums->ForumSelected.Location); + MaxRole = Rol_GetMyRoleInCrs (Forums->Forum.Location); ICanSeeForum = (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM || MaxRole >= Rol_STD || MaxRole == Rol_NET || MaxRole == Rol_TCH); break; case For_FORUM_COURSE_TCHS: - MaxRole = Rol_GetMyRoleInCrs (Forums->ForumSelected.Location); + MaxRole = Rol_GetMyRoleInCrs (Forums->Forum.Location); ICanSeeForum = (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM || MaxRole == Rol_NET || MaxRole == Rol_TCH); @@ -3872,13 +3878,13 @@ static void For_WriteFormForumPst (struct For_Forums *Forums, /***** Begin form *****/ if (IsReply) // Form to write a reply to a post of an existing thread { - Frm_StartFormAnchor (For_ActionsRecRepFor[Forums->ForumSelected.Type], + Frm_StartFormAnchor (For_ActionsRecRepFor[Forums->Forum.Type], For_FORUM_POSTS_SECTION_ID); For_PutAllHiddenParamsNewPost (Forums); } else // Form to write the first post of a new thread { - Frm_StartFormAnchor (For_ActionsRecThrFor[Forums->ForumSelected.Type], + Frm_StartFormAnchor (For_ActionsRecThrFor[Forums->Forum.Type], For_FORUM_POSTS_SECTION_ID); For_PutAllHiddenParamsNewThread (Forums); } @@ -3985,26 +3991,26 @@ void For_ReceiveForumPost (void) /***** Create a new message *****/ if (IsReply) // This post is a reply to another posts in the thread { - // For_Forum.ForumSelected.ThrCod has been received from form + // Forums.Thread.ThrCod has been received from form /***** Create last message of the thread *****/ - PstCod = For_InsertForumPst (Forums.ForumSelected.ThrCod,Gbl.Usrs.Me.UsrDat.UsrCod, + PstCod = For_InsertForumPst (Forums.Thread.ThrCod,Gbl.Usrs.Me.UsrDat.UsrCod, Gbl.Msg.Subject,Content,&Media); /***** Modify last message of the thread *****/ - For_UpdateThrLastPst (Forums.ForumSelected.ThrCod,PstCod); + For_UpdateThrLastPst (Forums.Thread.ThrCod,PstCod); } else // This post is the first of a new thread { /***** Create new thread with unknown first and last message codes *****/ - Forums.ForumSelected.ThrCod = For_InsertForumThread (&Forums,-1L); + Forums.Thread.ThrCod = For_InsertForumThread (&Forums,-1L); /***** Create first (and last) message of the thread *****/ - PstCod = For_InsertForumPst (Forums.ForumSelected.ThrCod,Gbl.Usrs.Me.UsrDat.UsrCod, + PstCod = For_InsertForumPst (Forums.Thread.ThrCod,Gbl.Usrs.Me.UsrDat.UsrCod, Gbl.Msg.Subject,Content,&Media); /***** Update first and last posts of new thread *****/ - For_UpdateThrFirstAndLastPst (Forums.ForumSelected.ThrCod,PstCod,PstCod); + For_UpdateThrFirstAndLastPst (Forums.Thread.ThrCod,PstCod,PstCod); } /***** Free media *****/ @@ -4014,7 +4020,7 @@ void For_ReceiveForumPost (void) Prf_IncrementNumForPstUsr (Gbl.Usrs.Me.UsrDat.UsrCod); /***** Notify the new post to users in course *****/ - switch (Forums.ForumSelected.Type) + switch (Forums.Forum.Type) { case For_FORUM_COURSE_USRS: case For_FORUM_COURSE_TCHS: @@ -4031,7 +4037,7 @@ void For_ReceiveForumPost (void) For_UpdateNumUsrsNotifiedByEMailAboutPost (PstCod,NumUsrsToBeNotifiedByEMail); /***** Insert forum post into public social activity *****/ - switch (Forums.ForumSelected.Type) // Only if forum is public for any logged user + switch (Forums.Forum.Type) // Only if forum is public for any logged user { case For_FORUM_GLOBAL_USRS: case For_FORUM__SWAD__USRS: @@ -4091,12 +4097,12 @@ void For_RemovePost (void) Med_MediaConstructor (&Media); /***** Get forum post data *****/ - For_GetPstData (Forums.ForumSelected.PstCod,&UsrDat.UsrCod,&CreatTimeUTC, + For_GetPstData (Forums.Post.PstCod,&UsrDat.UsrCod,&CreatTimeUTC, Subject,OriginalContent,&Media); /***** Check if I can remove the post *****/ /* Check if the message really exists, if it has not been removed */ - if (!For_GetIfForumPstExists (Forums.ForumSelected.PstCod)) + if (!For_GetIfForumPstExists (Forums.Post.PstCod)) Lay_ShowErrorAndExit ("The post to remove no longer exists."); /* Check if I am the author of the message */ @@ -4105,25 +4111,25 @@ void For_RemovePost (void) Lay_NoPermissionExit (); /* Check if the message is the last message in the thread */ - if (Forums.ForumSelected.PstCod != For_GetLastPstCod (Forums.ForumSelected.ThrCod)) + if (Forums.Post.PstCod != For_GetLastPstCod (Forums.Thread.ThrCod)) Lay_NoPermissionExit (); /***** Remove the post *****/ - ThreadDeleted = For_RemoveForumPst (Forums.ForumSelected.PstCod,Media.MedCod); + ThreadDeleted = For_RemoveForumPst (Forums.Post.PstCod,Media.MedCod); /***** Free image *****/ Med_MediaDestructor (&Media); /***** Mark possible notifications as removed *****/ - Ntf_MarkNotifAsRemoved (Ntf_EVENT_FORUM_POST_COURSE,Forums.ForumSelected.PstCod); - Ntf_MarkNotifAsRemoved (Ntf_EVENT_FORUM_REPLY,Forums.ForumSelected.PstCod); + Ntf_MarkNotifAsRemoved (Ntf_EVENT_FORUM_POST_COURSE,Forums.Post.PstCod); + Ntf_MarkNotifAsRemoved (Ntf_EVENT_FORUM_REPLY,Forums.Post.PstCod); /***** Mark possible social note as unavailable *****/ - switch (Forums.ForumSelected.Type) // Only if forum is public for any logged user + switch (Forums.Forum.Type) // Only if forum is public for any logged user { case For_FORUM_GLOBAL_USRS: case For_FORUM__SWAD__USRS: - TL_MarkNoteAsUnavailableUsingNoteTypeAndCod (TL_NOTE_FORUM_POST,Forums.ForumSelected.PstCod); + TL_MarkNoteAsUnavailableUsingNoteTypeAndCod (TL_NOTE_FORUM_POST,Forums.Post.PstCod); break; default: break; @@ -4163,7 +4169,7 @@ void For_RequestRemoveThread (void) For_GetParamsForums (&Forums); /***** Get subject of the thread to delete *****/ - For_GetThrSubject (Forums.ForumSelected.ThrCod,Subject); + For_GetThrSubject (Forums.Thread.ThrCod,Subject); /***** Show forum list again *****/ For_ShowForumList (&Forums); @@ -4171,14 +4177,14 @@ void For_RequestRemoveThread (void) /***** Show question and button to remove the thread *****/ HTM_SECTION_Begin (For_REMOVE_THREAD_SECTION_ID); if (Subject[0]) - Ale_ShowAlertAndButton (For_ActionsDelThrFor[Forums.ForumSelected.Type], + Ale_ShowAlertAndButton (For_ActionsDelThrFor[Forums.Forum.Type], For_FORUM_THREADS_SECTION_ID,NULL, 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], + Ale_ShowAlertAndButton (For_ActionsDelThrFor[Forums.Forum.Type], For_FORUM_THREADS_SECTION_ID,NULL, For_PutAllHiddenParamsRemThread,&Forums, Btn_REMOVE_BUTTON,Txt_Remove_thread, @@ -4196,8 +4202,8 @@ static void For_PutAllHiddenParamsRemThread (void *Forums) 1, // Page of posts = first ((struct For_Forums *) Forums)->ForumSet, ((struct For_Forums *) Forums)->ThreadsOrder, - ((struct For_Forums *) Forums)->ForumSelected.Location, - ((struct For_Forums *) Forums)->ForumSelected.ThrCod, + ((struct For_Forums *) Forums)->Forum.Location, + ((struct For_Forums *) Forums)->Thread.ThrCod, -1L); } @@ -4219,14 +4225,14 @@ void For_RemoveThread (void) /***** Get parameters related to forum *****/ For_GetParamsForums (&Forums); - if (PermissionThreadDeletion[Forums.ForumSelected.Type] & + if (PermissionThreadDeletion[Forums.Forum.Type] & (1 << Gbl.Usrs.Me.Role.Logged)) // If I have permission to remove thread in this forum... { /***** Get subject of thread to delete *****/ - For_GetThrSubject (Forums.ForumSelected.ThrCod,Subject); + For_GetThrSubject (Forums.Thread.ThrCod,Subject); /***** Remove the thread and all its posts *****/ - For_RemoveThreadAndItsPsts (Forums.ForumSelected.ThrCod); + For_RemoveThreadAndItsPsts (Forums.Thread.ThrCod); /***** Show forum list again *****/ For_ShowForumList (&Forums); @@ -4264,10 +4270,10 @@ void For_CutThread (void) For_GetParamsForums (&Forums); /***** Get subject of thread to cut *****/ - For_GetThrSubject (Forums.ForumSelected.ThrCod,Subject); + For_GetThrSubject (Forums.Thread.ThrCod,Subject); /***** Mark the thread as cut *****/ - For_InsertThrInClipboard (Forums.ForumSelected.ThrCod); + For_InsertThrInClipboard (Forums.Thread.ThrCod); /***** Show forum list again *****/ For_ShowForumList (&Forums); @@ -4305,10 +4311,10 @@ void For_PasteThread (void) For_GetParamsForums (&Forums); /***** Get subject of thread to paste *****/ - For_GetThrSubject (Forums.ForumSelected.ThrCod,Subject); + For_GetThrSubject (Forums.Thread.ThrCod,Subject); /***** Check if paste (move) the thread to current forum has sense *****/ - if (For_CheckIfThrBelongsToForum (Forums.ForumSelected.ThrCod,&Forums.ForumSelected)) + if (For_CheckIfThrBelongsToForum (Forums.Thread.ThrCod,&Forums.Forum)) { /***** Show forum list again *****/ For_ShowForumList (&Forums); @@ -4412,7 +4418,7 @@ static bool For_CheckIfThrBelongsToForum (long ThrCod,struct For_Forum *Forum) static void For_MoveThrToCurrentForum (const struct For_Forums *Forums) { /***** Move a thread to current forum *****/ - switch (Forums->ForumSelected.Type) + switch (Forums->Forum.Type) { case For_FORUM_GLOBAL_USRS: case For_FORUM_GLOBAL_TCHS: @@ -4422,8 +4428,8 @@ static void For_MoveThrToCurrentForum (const struct For_Forums *Forums) "UPDATE forum_thread" " SET ForumType=%u,Location=-1" " WHERE ThrCod=%ld", - (unsigned) Forums->ForumSelected.Type, - Forums->ForumSelected.ThrCod); + (unsigned) Forums->Forum.Type, + Forums->Thread.ThrCod); break; case For_FORUM_INSTIT_USRS: case For_FORUM_INSTIT_TCHS: @@ -4431,9 +4437,9 @@ static void For_MoveThrToCurrentForum (const struct For_Forums *Forums) "UPDATE forum_thread" " SET ForumType=%u,Location=%ld" " WHERE ThrCod=%ld", - (unsigned) Forums->ForumSelected.Type, - Forums->ForumSelected.Location, - Forums->ForumSelected.ThrCod); + (unsigned) Forums->Forum.Type, + Forums->Forum.Location, + Forums->Thread.ThrCod); break; case For_FORUM_CENTRE_USRS: case For_FORUM_CENTRE_TCHS: @@ -4441,9 +4447,9 @@ static void For_MoveThrToCurrentForum (const struct For_Forums *Forums) "UPDATE forum_thread" " SET ForumType=%u,Location=%ld" " WHERE ThrCod=%ld", - (unsigned) Forums->ForumSelected.Type, - Forums->ForumSelected.Location, - Forums->ForumSelected.ThrCod); + (unsigned) Forums->Forum.Type, + Forums->Forum.Location, + Forums->Thread.ThrCod); break; case For_FORUM_DEGREE_USRS: case For_FORUM_DEGREE_TCHS: @@ -4451,9 +4457,9 @@ static void For_MoveThrToCurrentForum (const struct For_Forums *Forums) "UPDATE forum_thread" " SET ForumType=%u,Location=%ld" " WHERE ThrCod=%ld", - (unsigned) Forums->ForumSelected.Type, - Forums->ForumSelected.Location, - Forums->ForumSelected.ThrCod); + (unsigned) Forums->Forum.Type, + Forums->Forum.Location, + Forums->Thread.ThrCod); break; case For_FORUM_COURSE_USRS: case For_FORUM_COURSE_TCHS: @@ -4461,9 +4467,9 @@ static void For_MoveThrToCurrentForum (const struct For_Forums *Forums) "UPDATE forum_thread" " SET ForumType=%u,Location=%ld" " WHERE ThrCod=%ld", - (unsigned) Forums->ForumSelected.Type, - Forums->ForumSelected.Location, - Forums->ForumSelected.ThrCod); + (unsigned) Forums->Forum.Type, + Forums->Forum.Location, + Forums->Thread.ThrCod); break; default: Lay_ShowErrorAndExit ("Wrong forum."); diff --git a/swad_forum.h b/swad_forum.h index 98bea2c0d..4b4e5902c 100644 --- a/swad_forum.h +++ b/swad_forum.h @@ -69,23 +69,11 @@ struct For_Forum { For_ForumType_t Type; // Type of forum long Location; // Code of institution, centre, degree or course - long ThrCod; // Optional thread code - long PstCod; // Optional post code }; -struct For_Forums +struct For_Thread { - For_ForumSet_t ForumSet; - Dat_StartEndTime_t ThreadsOrder; - unsigned CurrentPageThrs; - unsigned CurrentPagePsts; - struct For_Forum ForumSelected; // Forum type, location, thread and post - long ThreadToMove; - }; - -struct ForumThread - { - long ThrCod; + long ThrCod; // Thread code long PstCod[2]; long UsrCod[2]; time_t WriteTime[2]; @@ -98,6 +86,23 @@ struct ForumThread unsigned NumReaders; }; +struct For_Post + { + long PstCod; // Post code + }; + +struct For_Forums + { + For_ForumSet_t ForumSet; + Dat_StartEndTime_t ThreadsOrder; + unsigned CurrentPageThrs; + unsigned CurrentPagePsts; + struct For_Forum Forum; // Forum selected + struct For_Thread Thread; // Thread selected + struct For_Post Post; // Post selected + long ThreadToMove; + }; + #define For_DEFAULT_ORDER Dat_END_TIME #define For_MAX_BYTES_FORUM_NAME (512 - 1) diff --git a/swad_game.c b/swad_game.c index bfe2eb351..a6707dd57 100644 --- a/swad_game.c +++ b/swad_game.c @@ -244,10 +244,8 @@ static void Gam_ListAllGames (struct Gam_Games *Games) Hlp_ASSESSMENT_Games,Box_NOT_CLOSABLE); /***** Write links to pages *****/ - Pag_WriteLinksToPagesCentered (Pag_GAMES, - &Pagination, - (unsigned) Games->SelectedOrder, - NULL,0); + Pag_WriteLinksToPagesCentered (Pag_GAMES,&Pagination, + Games,-1L); if (Games->Num) { @@ -305,10 +303,8 @@ static void Gam_ListAllGames (struct Gam_Games *Games) Ale_ShowAlert (Ale_INFO,Txt_No_games); /***** Write again links to pages *****/ - Pag_WriteLinksToPagesCentered (Pag_GAMES, - &Pagination, - (unsigned) Games->SelectedOrder, - NULL,0); + Pag_WriteLinksToPagesCentered (Pag_GAMES,&Pagination, + Games,-1L); /***** Button to create a new game *****/ if (Gam_CheckIfICanEditGames ()) diff --git a/swad_global.c b/swad_global.c index b3baab58a..807336dbe 100644 --- a/swad_global.c +++ b/swad_global.c @@ -296,22 +296,6 @@ void Gbl_InitializeGlobals (void) Gbl.Search.Str[0] = '\0'; Gbl.Search.LogSearch = false; - /* Projects */ - Gbl.Prjs.Config.Editable = Prj_EDITABLE_DEFAULT; - Gbl.Prjs.Filter.Who = Prj_FILTER_WHO_DEFAULT; - Gbl.Prjs.Filter.Assign = Prj_FILTER_ASSIGNED_DEFAULT | - Prj_FILTER_NONASSIG_DEFAULT; - Gbl.Prjs.Filter.Hidden = Prj_FILTER_HIDDEN_DEFAULT | - Prj_FILTER_VISIBL_DEFAULT; - Gbl.Prjs.Filter.Faulti = Prj_FILTER_FAULTY_DEFAULT | - Prj_FILTER_FAULTLESS_DEFAULT; - Gbl.Prjs.Filter.DptCod = Prj_FILTER_DPT_DEFAULT; - Gbl.Prjs.LstIsRead = false; // List is not read - Gbl.Prjs.Num = 0; - Gbl.Prjs.LstPrjCods = NULL; - Gbl.Prjs.SelectedOrder = Prj_ORDER_DEFAULT; - Gbl.Prjs.PrjCod = -1L; - Gbl.Mails.Num = 0; Gbl.Mails.Lst = NULL; Gbl.Mails.SelectedOrder = Mai_ORDER_DEFAULT; diff --git a/swad_global.h b/swad_global.h index 015d6af95..b8ec50a6e 100644 --- a/swad_global.h +++ b/swad_global.h @@ -417,20 +417,7 @@ struct Globals char PathPriv[PATH_MAX + 1]; // Absolute path to the private directory of the course char PathRelPubl[PATH_MAX + 1]; // Relative path to the public directory of the course char PathURLPubl[PATH_MAX + 1]; // Abolute URL to the public part of the course - struct - { - unsigned NumGrps; - struct GroupTypes GrpTypes; - struct GroupType GrpTyp; - long GrpCod; // Group to be edited, removed... - char GrpName[Grp_MAX_BYTES_GROUP_NAME + 1]; - long ClaCod; - unsigned MaxStudents; - bool Open; - bool FileZones; - struct ListCodGrps LstGrpsSel; - Grp_WhichGroups_t WhichGrps; // Show my groups or all groups - } Grps; + struct Grp_Groups Grps; struct { Inf_InfoType_t Type; @@ -519,7 +506,6 @@ struct Globals char TmpDir[NAME_MAX + 1]; } ZIP; } FileBrowser; // Struct used for a file browser - struct Prj_Projects Prjs; struct TL_Timeline Timeline; struct Msg_Messages Msg; struct TT_Timetable Timetable; diff --git a/swad_group.h b/swad_group.h index f559b908e..3cd29d287 100644 --- a/swad_group.h +++ b/swad_group.h @@ -140,6 +140,21 @@ typedef enum Grp_MATCH, } Grp_AsgAttSvyGam_t; +struct Grp_Groups + { + unsigned NumGrps; + struct GroupTypes GrpTypes; + struct GroupType GrpTyp; + long GrpCod; // Group to be edited, removed... + char GrpName[Grp_MAX_BYTES_GROUP_NAME + 1]; + long ClaCod; + unsigned MaxStudents; + bool Open; + bool FileZones; + struct ListCodGrps LstGrpsSel; + Grp_WhichGroups_t WhichGrps; // Show my groups or all groups + }; + /*****************************************************************************/ /****************************** Public prototypes ****************************/ /*****************************************************************************/ diff --git a/swad_message.c b/swad_message.c index 2c45924de..b4f4ada38 100644 --- a/swad_message.c +++ b/swad_message.c @@ -1837,10 +1837,8 @@ static void Msg_ShowSentOrReceivedMessages (void) Gbl.Msg.CurrentPage); /***** Write links to pages *****/ - Pag_WriteLinksToPagesCentered (WhatPaginate[Gbl.Msg.TypeOfMessages], - &Pagination, - (unsigned) Dat_START_TIME, // Not used - NULL,0); + Pag_WriteLinksToPagesCentered (WhatPaginate[Gbl.Msg.TypeOfMessages],&Pagination, + &Gbl.Msg,-1L); /***** Show received / sent messages in this page *****/ HTM_TABLE_BeginWidePadding (2); @@ -1861,10 +1859,8 @@ static void Msg_ShowSentOrReceivedMessages (void) HTM_TABLE_End (); /***** Write again links to pages *****/ - Pag_WriteLinksToPagesCentered (WhatPaginate[Gbl.Msg.TypeOfMessages], - &Pagination, - (unsigned) Dat_START_TIME, // Not used - NULL,0); + Pag_WriteLinksToPagesCentered (WhatPaginate[Gbl.Msg.TypeOfMessages],&Pagination, + &Gbl.Msg,-1L); } /***** End box *****/ diff --git a/swad_notification.c b/swad_notification.c index ce9c6e45b..54c7dc972 100644 --- a/swad_notification.c +++ b/swad_notification.c @@ -432,8 +432,8 @@ void Ntf_ShowMyNotifications (void) NotifyEvent == Ntf_EVENT_FORUM_REPLY) { For_ResetForums (&Forums); - For_GetForumTypeAndLocationOfAPost (Cod,&Forums.ForumSelected); - For_SetForumName (&Forums.ForumSelected, + For_GetForumTypeAndLocationOfAPost (Cod,&Forums.Forum); + For_SetForumName (&Forums.Forum, ForumName,Gbl.Prefs.Language,false); // Set forum name in recipient's language } @@ -634,7 +634,8 @@ static void Ntf_WriteFormAllNotifications (bool AllNotifications) extern const char *Txt_Show_all_notifications; extern const char *Txt_Show_all_NOTIFICATIONS; - Lay_PutContextualCheckbox (ActSeeNtf,NULL, + Lay_PutContextualCheckbox (ActSeeNtf, + NULL, "All", AllNotifications,false, Txt_Show_all_notifications, @@ -738,13 +739,13 @@ static bool Ntf_StartFormGoToAction (Ntf_NotifyEvent_t NotifyEvent, break; case Ntf_EVENT_FORUM_POST_COURSE: case Ntf_EVENT_FORUM_REPLY: - Frm_StartForm (For_ActionsSeeFor[Forums->ForumSelected.Type]); + Frm_StartForm (For_ActionsSeeFor[Forums->Forum.Type]); For_PutAllHiddenParamsForum (1, // Page of threads = first 1, // Page of posts = first Forums->ForumSet, Forums->ThreadsOrder, - Forums->ForumSelected.Location, - Forums->ForumSelected.ThrCod, + Forums->Forum.Location, + Forums->Thread.ThrCod, -1L); break; case Ntf_EVENT_NOTICE: diff --git a/swad_pagination.c b/swad_pagination.c index a86225e9b..248c128b5 100644 --- a/swad_pagination.c +++ b/swad_pagination.c @@ -31,6 +31,7 @@ #include // For free #include "swad_action.h" +#include "swad_attendance.h" #include "swad_database.h" #include "swad_form.h" #include "swad_forum.h" @@ -131,13 +132,12 @@ void Pag_CalculatePagination (struct Pagination *Pagination) void Pag_WriteLinksToPagesCentered (Pag_WhatPaginate_t WhatPaginate, struct Pagination *Pagination, - unsigned SelectedOrder, - const struct For_Forums *Forums,long ThrCod) + const void *Context,long Cod) { if (Pagination->MoreThanOnePage) { HTM_DIV_Begin ("class=\"CM\""); - Pag_WriteLinksToPages (WhatPaginate,Pagination,SelectedOrder,Forums,ThrCod, + Pag_WriteLinksToPages (WhatPaginate,Pagination,Context,Cod, true,NULL,"PAG_TXT",false); HTM_DIV_End (); } @@ -149,8 +149,7 @@ void Pag_WriteLinksToPagesCentered (Pag_WhatPaginate_t WhatPaginate, void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate, struct Pagination *Pagination, - unsigned SelectedOrder, - const struct For_Forums *Forums,long ThrCod, + const void *Context,long Cod, bool FirstMsgEnabled, const char *Subject,const char *ClassTxt, bool LinkToPagCurrent) @@ -173,58 +172,58 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate, case Pag_ASSIGNMENTS: Frm_StartFormAnchor (ActSeeAsg,Pagination->Anchor); Pag_PutHiddenParamPagNum (WhatPaginate,1); - Dat_PutHiddenParamOrder ((Dat_StartEndTime_t) SelectedOrder); + Dat_PutHiddenParamOrder (((struct Asg_Assignments *) Context)->SelectedOrder); WhichGroups = Grp_GetParamWhichGroups (); Grp_PutParamWhichGroups (&WhichGroups); break; case Pag_PROJECTS: Frm_StartFormAnchor (ActSeePrj,Pagination->Anchor); - Prj_PutParams (&Gbl.Prjs.Filter, - (Prj_Order_t) SelectedOrder, + Prj_PutParams (&((struct Prj_Projects *) Context)->Filter, + ((struct Prj_Projects *) Context)->SelectedOrder, 1, - -1L); + Cod); break; case Pag_GAMES: Frm_StartFormAnchor (ActSeeAllGam,Pagination->Anchor); Pag_PutHiddenParamPagNum (WhatPaginate,1); - Dat_PutHiddenParamOrder ((Dat_StartEndTime_t) SelectedOrder); + Dat_PutHiddenParamOrder (((struct Gam_Games *) Context)->SelectedOrder); WhichGroups = Grp_GetParamWhichGroups (); Grp_PutParamWhichGroups (&WhichGroups); break; case Pag_SURVEYS: Frm_StartFormAnchor (ActSeeAllSvy,Pagination->Anchor); Pag_PutHiddenParamPagNum (WhatPaginate,1); - Dat_PutHiddenParamOrder ((Dat_StartEndTime_t) SelectedOrder); + Dat_PutHiddenParamOrder (((struct Svy_Surveys *) Context)->SelectedOrder); WhichGroups = Grp_GetParamWhichGroups (); Grp_PutParamWhichGroups (&WhichGroups); break; case Pag_ATT_EVENTS: Frm_StartFormAnchor (ActSeeAtt,Pagination->Anchor); Pag_PutHiddenParamPagNum (WhatPaginate,1); - Dat_PutHiddenParamOrder ((Dat_StartEndTime_t) SelectedOrder); + Dat_PutHiddenParamOrder (((struct Att_Events *) Context)->SelectedOrder); WhichGroups = Grp_GetParamWhichGroups (); Grp_PutParamWhichGroups (&WhichGroups); break; case Pag_THREADS_FORUM: - Frm_StartFormAnchor (For_ActionsSeeFor[Forums->ForumSelected.Type], + Frm_StartFormAnchor (For_ActionsSeeFor[((struct For_Forums *) Context)->Forum.Type], Pagination->Anchor); For_PutAllHiddenParamsForum (1, // Page of threads = first 1, // Page of posts = first - Forums->ForumSet, - (Dat_StartEndTime_t) SelectedOrder, - Forums->ForumSelected.Location, + ((struct For_Forums *) Context)->ForumSet, + ((struct For_Forums *) Context)->ThreadsOrder, + ((struct For_Forums *) Context)->Forum.Location, -1L, -1L); break; case Pag_POSTS_FORUM: - Frm_StartFormAnchor (For_ActionsSeePstFor[Forums->ForumSelected.Type], + Frm_StartFormAnchor (For_ActionsSeePstFor[((struct For_Forums *) Context)->Forum.Type], Pagination->Anchor); - For_PutAllHiddenParamsForum (Forums->CurrentPageThrs, // Page of threads = current + For_PutAllHiddenParamsForum (((struct For_Forums *) Context)->CurrentPageThrs, // Page of threads = current 1, // Page of posts = first - Forums->ForumSet, - (Dat_StartEndTime_t) SelectedOrder, - Forums->ForumSelected.Location, - ThrCod, + ((struct For_Forums *) Context)->ForumSet, + ((struct For_Forums *) Context)->ThreadsOrder, + ((struct For_Forums *) Context)->Forum.Location, + Cod, -1L); break; case Pag_MESSAGES_RECEIVED: @@ -239,16 +238,16 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate, break; case Pag_MY_AGENDA: Frm_StartFormAnchor (ActSeeMyAgd,Pagination->Anchor); - Agd_PutParamsMyAgenda (Gbl.Agenda.Past__FutureEvents, - Gbl.Agenda.PrivatPublicEvents, - Gbl.Agenda.HiddenVisiblEvents, - (Dat_StartEndTime_t) SelectedOrder, + Agd_PutParamsMyAgenda (((struct Agd_Agenda *) Context)->Past__FutureEvents, + ((struct Agd_Agenda *) Context)->PrivatPublicEvents, + ((struct Agd_Agenda *) Context)->HiddenVisiblEvents, + ((struct Agd_Agenda *) Context)->SelectedOrder, 1, - -1L); + Cod); break; case Pag_ANOTHER_AGENDA: Frm_StartFormAnchor (ActSeeUsrAgd,Pagination->Anchor); - Agd_PutHiddenParamEventsOrder ((Dat_StartEndTime_t) SelectedOrder); + Agd_PutHiddenParamEventsOrder (((struct Agd_Agenda *) Context)->SelectedOrder); Pag_PutHiddenParamPagNum (WhatPaginate,1); Usr_PutParamOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EncryptedUsrCod); break; @@ -291,58 +290,58 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate, case Pag_ASSIGNMENTS: Frm_StartFormAnchor (ActSeeAsg,Pagination->Anchor); Pag_PutHiddenParamPagNum (WhatPaginate,1); - Dat_PutHiddenParamOrder ((Dat_StartEndTime_t) SelectedOrder); + Dat_PutHiddenParamOrder (((struct Asg_Assignments *) Context)->SelectedOrder); WhichGroups = Grp_GetParamWhichGroups (); Grp_PutParamWhichGroups (&WhichGroups); break; case Pag_PROJECTS: Frm_StartFormAnchor (ActSeePrj,Pagination->Anchor); - Prj_PutParams (&Gbl.Prjs.Filter, - (Prj_Order_t) SelectedOrder, + Prj_PutParams (&((struct Prj_Projects *) Context)->Filter, + ((struct Prj_Projects *) Context)->SelectedOrder, 1, - -1L); + Cod); break; case Pag_GAMES: Frm_StartFormAnchor (ActSeeAllGam,Pagination->Anchor); Pag_PutHiddenParamPagNum (WhatPaginate,1); - Dat_PutHiddenParamOrder ((Dat_StartEndTime_t) SelectedOrder); + Dat_PutHiddenParamOrder (((struct Gam_Games *) Context)->SelectedOrder); WhichGroups = Grp_GetParamWhichGroups (); Grp_PutParamWhichGroups (&WhichGroups); break; case Pag_SURVEYS: Frm_StartFormAnchor (ActSeeAllSvy,Pagination->Anchor); Pag_PutHiddenParamPagNum (WhatPaginate,1); - Dat_PutHiddenParamOrder ((Dat_StartEndTime_t) SelectedOrder); + Dat_PutHiddenParamOrder (((struct Svy_Surveys *) Context)->SelectedOrder); WhichGroups = Grp_GetParamWhichGroups (); Grp_PutParamWhichGroups (&WhichGroups); break; case Pag_ATT_EVENTS: Frm_StartFormAnchor (ActSeeAtt,Pagination->Anchor); Pag_PutHiddenParamPagNum (WhatPaginate,1); - Dat_PutHiddenParamOrder ((Dat_StartEndTime_t) SelectedOrder); + Dat_PutHiddenParamOrder (((struct Att_Events *) Context)->SelectedOrder); WhichGroups = Grp_GetParamWhichGroups (); Grp_PutParamWhichGroups (&WhichGroups); break; case Pag_THREADS_FORUM: - Frm_StartFormAnchor (For_ActionsSeeFor[Forums->ForumSelected.Type], + Frm_StartFormAnchor (For_ActionsSeeFor[((struct For_Forums *) Context)->Forum.Type], Pagination->Anchor); For_PutAllHiddenParamsForum (1, // Page of threads = first 1, // Page of posts = first - Forums->ForumSet, - (Dat_StartEndTime_t) SelectedOrder, - Forums->ForumSelected.Location, + ((struct For_Forums *) Context)->ForumSet, + ((struct For_Forums *) Context)->ThreadsOrder, + ((struct For_Forums *) Context)->Forum.Location, -1L, -1L); break; case Pag_POSTS_FORUM: - Frm_StartFormAnchor (For_ActionsSeePstFor[Forums->ForumSelected.Type], + Frm_StartFormAnchor (For_ActionsSeePstFor[((struct For_Forums *) Context)->Forum.Type], Pagination->Anchor); - For_PutAllHiddenParamsForum (Forums->CurrentPageThrs, // Page of threads = current + For_PutAllHiddenParamsForum (((struct For_Forums *) Context)->CurrentPageThrs, // Page of threads = current 1, // Page of posts = first - Forums->ForumSet, - (Dat_StartEndTime_t) SelectedOrder, - Forums->ForumSelected.Location, - ThrCod, + ((struct For_Forums *) Context)->ForumSet, + ((struct For_Forums *) Context)->ThreadsOrder, + ((struct For_Forums *) Context)->Forum.Location, + Cod, -1L); break; case Pag_MESSAGES_RECEIVED: @@ -357,16 +356,16 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate, break; case Pag_MY_AGENDA: Frm_StartFormAnchor (ActSeeMyAgd,Pagination->Anchor); - Agd_PutParamsMyAgenda (Gbl.Agenda.Past__FutureEvents, - Gbl.Agenda.PrivatPublicEvents, - Gbl.Agenda.HiddenVisiblEvents, - (Dat_StartEndTime_t) SelectedOrder, + Agd_PutParamsMyAgenda (((struct Agd_Agenda *) Context)->Past__FutureEvents, + ((struct Agd_Agenda *) Context)->PrivatPublicEvents, + ((struct Agd_Agenda *) Context)->HiddenVisiblEvents, + ((struct Agd_Agenda *) Context)->SelectedOrder, 1, - -1L); + Cod); break; case Pag_ANOTHER_AGENDA: Frm_StartFormAnchor (ActSeeUsrAgd,Pagination->Anchor); - Agd_PutHiddenParamEventsOrder ((Dat_StartEndTime_t) SelectedOrder); + Agd_PutHiddenParamEventsOrder (((struct Agd_Agenda *) Context)->SelectedOrder); Pag_PutHiddenParamPagNum (WhatPaginate,1); Usr_PutParamOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EncryptedUsrCod); break; @@ -395,58 +394,58 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate, case Pag_ASSIGNMENTS: Frm_StartFormAnchor (ActSeeAsg,Pagination->Anchor); Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->LeftPage); - Dat_PutHiddenParamOrder ((Dat_StartEndTime_t) SelectedOrder); + Dat_PutHiddenParamOrder (((struct Asg_Assignments *) Context)->SelectedOrder); WhichGroups = Grp_GetParamWhichGroups (); Grp_PutParamWhichGroups (&WhichGroups); break; case Pag_PROJECTS: Frm_StartFormAnchor (ActSeePrj,Pagination->Anchor); - Prj_PutParams (&Gbl.Prjs.Filter, - (Prj_Order_t) SelectedOrder, + Prj_PutParams (&((struct Prj_Projects *) Context)->Filter, + ((struct Prj_Projects *) Context)->SelectedOrder, Pagination->LeftPage, - -1L); + Cod); break; case Pag_GAMES: Frm_StartFormAnchor (ActSeeAllGam,Pagination->Anchor); Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->LeftPage); - Dat_PutHiddenParamOrder ((Dat_StartEndTime_t) SelectedOrder); + Dat_PutHiddenParamOrder (((struct Gam_Games *) Context)->SelectedOrder); WhichGroups = Grp_GetParamWhichGroups (); Grp_PutParamWhichGroups (&WhichGroups); break; case Pag_SURVEYS: Frm_StartFormAnchor (ActSeeAllSvy,Pagination->Anchor); Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->LeftPage); - Dat_PutHiddenParamOrder ((Dat_StartEndTime_t) SelectedOrder); + Dat_PutHiddenParamOrder (((struct Svy_Surveys *) Context)->SelectedOrder); WhichGroups = Grp_GetParamWhichGroups (); Grp_PutParamWhichGroups (&WhichGroups); break; case Pag_ATT_EVENTS: Frm_StartFormAnchor (ActSeeAtt,Pagination->Anchor); Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->LeftPage); - Dat_PutHiddenParamOrder ((Dat_StartEndTime_t) SelectedOrder); + Dat_PutHiddenParamOrder (((struct Att_Events *) Context)->SelectedOrder); WhichGroups = Grp_GetParamWhichGroups (); Grp_PutParamWhichGroups (&WhichGroups); break; case Pag_THREADS_FORUM: - Frm_StartFormAnchor (For_ActionsSeeFor[Forums->ForumSelected.Type], + Frm_StartFormAnchor (For_ActionsSeeFor[((struct For_Forums *) Context)->Forum.Type], Pagination->Anchor); For_PutAllHiddenParamsForum (Pagination->LeftPage, // Page of threads = left 1, // Page of posts = first - Forums->ForumSet, - (Dat_StartEndTime_t) SelectedOrder, - Forums->ForumSelected.Location, + ((struct For_Forums *) Context)->ForumSet, + ((struct For_Forums *) Context)->ThreadsOrder, + ((struct For_Forums *) Context)->Forum.Location, -1L, -1L); break; case Pag_POSTS_FORUM: - Frm_StartFormAnchor (For_ActionsSeePstFor[Forums->ForumSelected.Type], + Frm_StartFormAnchor (For_ActionsSeePstFor[((struct For_Forums *) Context)->Forum.Type], Pagination->Anchor); - For_PutAllHiddenParamsForum (Forums->CurrentPageThrs, // Page of threads = current + For_PutAllHiddenParamsForum (((struct For_Forums *) Context)->CurrentPageThrs, // Page of threads = current Pagination->LeftPage, // Page of posts = left - Forums->ForumSet, - (Dat_StartEndTime_t) SelectedOrder, - Forums->ForumSelected.Location, - ThrCod, + ((struct For_Forums *) Context)->ForumSet, + ((struct For_Forums *) Context)->ThreadsOrder, + ((struct For_Forums *) Context)->Forum.Location, + Cod, -1L); break; case Pag_MESSAGES_RECEIVED: @@ -461,16 +460,16 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate, break; case Pag_MY_AGENDA: Frm_StartFormAnchor (ActSeeMyAgd,Pagination->Anchor); - Agd_PutParamsMyAgenda (Gbl.Agenda.Past__FutureEvents, - Gbl.Agenda.PrivatPublicEvents, - Gbl.Agenda.HiddenVisiblEvents, - (Dat_StartEndTime_t) SelectedOrder, + Agd_PutParamsMyAgenda (((struct Agd_Agenda *) Context)->Past__FutureEvents, + ((struct Agd_Agenda *) Context)->PrivatPublicEvents, + ((struct Agd_Agenda *) Context)->HiddenVisiblEvents, + ((struct Agd_Agenda *) Context)->SelectedOrder, Pagination->LeftPage, - -1L); + Cod); break; case Pag_ANOTHER_AGENDA: Frm_StartFormAnchor (ActSeeUsrAgd,Pagination->Anchor); - Agd_PutHiddenParamEventsOrder ((Dat_StartEndTime_t) SelectedOrder); + Agd_PutHiddenParamEventsOrder (((struct Agd_Agenda *) Context)->SelectedOrder); Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->LeftPage); Usr_PutParamOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EncryptedUsrCod); break; @@ -511,58 +510,58 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate, case Pag_ASSIGNMENTS: Frm_StartFormAnchor (ActSeeAsg,Pagination->Anchor); Pag_PutHiddenParamPagNum (WhatPaginate,NumPage); - Dat_PutHiddenParamOrder ((Dat_StartEndTime_t) SelectedOrder); + Dat_PutHiddenParamOrder (((struct Asg_Assignments *) Context)->SelectedOrder); WhichGroups = Grp_GetParamWhichGroups (); Grp_PutParamWhichGroups (&WhichGroups); break; case Pag_PROJECTS: Frm_StartFormAnchor (ActSeePrj,Pagination->Anchor); - Prj_PutParams (&Gbl.Prjs.Filter, - (Prj_Order_t) SelectedOrder, + Prj_PutParams (&((struct Prj_Projects *) Context)->Filter, + ((struct Prj_Projects *) Context)->SelectedOrder, NumPage, - -1L); + Cod); break; case Pag_GAMES: Frm_StartFormAnchor (ActSeeAllGam,Pagination->Anchor); Pag_PutHiddenParamPagNum (WhatPaginate,NumPage); - Dat_PutHiddenParamOrder ((Dat_StartEndTime_t) SelectedOrder); + Dat_PutHiddenParamOrder (((struct Gam_Games *) Context)->SelectedOrder); WhichGroups = Grp_GetParamWhichGroups (); Grp_PutParamWhichGroups (&WhichGroups); break; case Pag_SURVEYS: Frm_StartFormAnchor (ActSeeAllSvy,Pagination->Anchor); Pag_PutHiddenParamPagNum (WhatPaginate,NumPage); - Dat_PutHiddenParamOrder ((Dat_StartEndTime_t) SelectedOrder); + Dat_PutHiddenParamOrder (((struct Svy_Surveys *) Context)->SelectedOrder); WhichGroups = Grp_GetParamWhichGroups (); Grp_PutParamWhichGroups (&WhichGroups); break; case Pag_ATT_EVENTS: Frm_StartFormAnchor (ActSeeAtt,Pagination->Anchor); Pag_PutHiddenParamPagNum (WhatPaginate,NumPage); - Dat_PutHiddenParamOrder ((Dat_StartEndTime_t) SelectedOrder); + Dat_PutHiddenParamOrder (((struct Att_Events *) Context)->SelectedOrder); WhichGroups = Grp_GetParamWhichGroups (); Grp_PutParamWhichGroups (&WhichGroups); break; case Pag_THREADS_FORUM: - Frm_StartFormAnchor (For_ActionsSeeFor[Forums->ForumSelected.Type], + Frm_StartFormAnchor (For_ActionsSeeFor[((struct For_Forums *) Context)->Forum.Type], Pagination->Anchor); For_PutAllHiddenParamsForum (NumPage, // Page of threads = number of page 1, // Page of posts = first - Forums->ForumSet, - (Dat_StartEndTime_t) SelectedOrder, - Forums->ForumSelected.Location, + ((struct For_Forums *) Context)->ForumSet, + ((struct For_Forums *) Context)->ThreadsOrder, + ((struct For_Forums *) Context)->Forum.Location, -1L, -1L); break; case Pag_POSTS_FORUM: - Frm_StartFormAnchor (For_ActionsSeePstFor[Forums->ForumSelected.Type], + Frm_StartFormAnchor (For_ActionsSeePstFor[((struct For_Forums *) Context)->Forum.Type], Pagination->Anchor); - For_PutAllHiddenParamsForum (Forums->CurrentPageThrs, // Page of threads = current + For_PutAllHiddenParamsForum (((struct For_Forums *) Context)->CurrentPageThrs, // Page of threads = current NumPage, // Page of posts = number of page - Forums->ForumSet, - (Dat_StartEndTime_t) SelectedOrder, - Forums->ForumSelected.Location, - ThrCod, + ((struct For_Forums *) Context)->ForumSet, + ((struct For_Forums *) Context)->ThreadsOrder, + ((struct For_Forums *) Context)->Forum.Location, + Cod, -1L); break; case Pag_MESSAGES_RECEIVED: @@ -577,16 +576,16 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate, break; case Pag_MY_AGENDA: Frm_StartFormAnchor (ActSeeMyAgd,Pagination->Anchor); - Agd_PutParamsMyAgenda (Gbl.Agenda.Past__FutureEvents, - Gbl.Agenda.PrivatPublicEvents, - Gbl.Agenda.HiddenVisiblEvents, - (Dat_StartEndTime_t) SelectedOrder, + Agd_PutParamsMyAgenda (((struct Agd_Agenda *) Context)->Past__FutureEvents, + ((struct Agd_Agenda *) Context)->PrivatPublicEvents, + ((struct Agd_Agenda *) Context)->HiddenVisiblEvents, + ((struct Agd_Agenda *) Context)->SelectedOrder, NumPage, - -1L); + Cod); break; case Pag_ANOTHER_AGENDA: Frm_StartFormAnchor (ActSeeUsrAgd,Pagination->Anchor); - Agd_PutHiddenParamEventsOrder ((Dat_StartEndTime_t) SelectedOrder); + Agd_PutHiddenParamEventsOrder (((struct Agd_Agenda *) Context)->SelectedOrder); Pag_PutHiddenParamPagNum (WhatPaginate,NumPage); Usr_PutParamOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EncryptedUsrCod); break; @@ -614,58 +613,58 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate, case Pag_ASSIGNMENTS: Frm_StartFormAnchor (ActSeeAsg,Pagination->Anchor); Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->RightPage); - Dat_PutHiddenParamOrder ((Dat_StartEndTime_t) SelectedOrder); + Dat_PutHiddenParamOrder (((struct Asg_Assignments *) Context)->SelectedOrder); WhichGroups = Grp_GetParamWhichGroups (); Grp_PutParamWhichGroups (&WhichGroups); break; case Pag_PROJECTS: Frm_StartFormAnchor (ActSeePrj,Pagination->Anchor); - Prj_PutParams (&Gbl.Prjs.Filter, - (Prj_Order_t) SelectedOrder, + Prj_PutParams (&((struct Prj_Projects *) Context)->Filter, + ((struct Prj_Projects *) Context)->SelectedOrder, Pagination->RightPage, - -1L); + Cod); break; case Pag_GAMES: Frm_StartFormAnchor (ActSeeAllGam,Pagination->Anchor); Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->RightPage); - Dat_PutHiddenParamOrder ((Dat_StartEndTime_t) SelectedOrder); + Dat_PutHiddenParamOrder (((struct Gam_Games *) Context)->SelectedOrder); WhichGroups = Grp_GetParamWhichGroups (); Grp_PutParamWhichGroups (&WhichGroups); break; case Pag_SURVEYS: Frm_StartFormAnchor (ActSeeAllSvy,Pagination->Anchor); Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->RightPage); - Dat_PutHiddenParamOrder ((Dat_StartEndTime_t) SelectedOrder); + Dat_PutHiddenParamOrder (((struct Svy_Surveys *) Context)->SelectedOrder); WhichGroups = Grp_GetParamWhichGroups (); Grp_PutParamWhichGroups (&WhichGroups); break; case Pag_ATT_EVENTS: Frm_StartFormAnchor (ActSeeAtt,Pagination->Anchor); Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->RightPage); - Dat_PutHiddenParamOrder ((Dat_StartEndTime_t) SelectedOrder); + Dat_PutHiddenParamOrder (((struct Att_Events *) Context)->SelectedOrder); WhichGroups = Grp_GetParamWhichGroups (); Grp_PutParamWhichGroups (&WhichGroups); break; case Pag_THREADS_FORUM: - Frm_StartFormAnchor (For_ActionsSeeFor[Forums->ForumSelected.Type], + Frm_StartFormAnchor (For_ActionsSeeFor[((struct For_Forums *) Context)->Forum.Type], Pagination->Anchor); For_PutAllHiddenParamsForum (Pagination->RightPage, // Page of threads = right 1, // Page of posts = first - Forums->ForumSet, - (Dat_StartEndTime_t) SelectedOrder, - Forums->ForumSelected.Location, + ((struct For_Forums *) Context)->ForumSet, + ((struct For_Forums *) Context)->ThreadsOrder, + ((struct For_Forums *) Context)->Forum.Location, -1L, -1L); break; case Pag_POSTS_FORUM: - Frm_StartFormAnchor (For_ActionsSeePstFor[Forums->ForumSelected.Type], + Frm_StartFormAnchor (For_ActionsSeePstFor[((struct For_Forums *) Context)->Forum.Type], Pagination->Anchor); - For_PutAllHiddenParamsForum (Forums->CurrentPageThrs, // Page of threads = current + For_PutAllHiddenParamsForum (((struct For_Forums *) Context)->CurrentPageThrs, // Page of threads = current Pagination->RightPage, // Page of posts = right - Forums->ForumSet, - (Dat_StartEndTime_t) SelectedOrder, - Forums->ForumSelected.Location, - ThrCod, + ((struct For_Forums *) Context)->ForumSet, + ((struct For_Forums *) Context)->ThreadsOrder, + ((struct For_Forums *) Context)->Forum.Location, + Cod, -1L); break; case Pag_MESSAGES_RECEIVED: @@ -680,16 +679,16 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate, break; case Pag_MY_AGENDA: Frm_StartFormAnchor (ActSeeMyAgd,Pagination->Anchor); - Agd_PutParamsMyAgenda (Gbl.Agenda.Past__FutureEvents, - Gbl.Agenda.PrivatPublicEvents, - Gbl.Agenda.HiddenVisiblEvents, - (Dat_StartEndTime_t) SelectedOrder, + Agd_PutParamsMyAgenda (((struct Agd_Agenda *) Context)->Past__FutureEvents, + ((struct Agd_Agenda *) Context)->PrivatPublicEvents, + ((struct Agd_Agenda *) Context)->HiddenVisiblEvents, + ((struct Agd_Agenda *) Context)->SelectedOrder, Pagination->RightPage, - -1L); + Cod); break; case Pag_ANOTHER_AGENDA: Frm_StartFormAnchor (ActSeeUsrAgd,Pagination->Anchor); - Agd_PutHiddenParamEventsOrder ((Dat_StartEndTime_t) SelectedOrder); + Agd_PutHiddenParamEventsOrder (((struct Agd_Agenda *) Context)->SelectedOrder); Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->RightPage); Usr_PutParamOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EncryptedUsrCod); break; @@ -718,58 +717,58 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate, case Pag_ASSIGNMENTS: Frm_StartFormAnchor (ActSeeAsg,Pagination->Anchor); Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->NumPags); - Dat_PutHiddenParamOrder ((Dat_StartEndTime_t) SelectedOrder); + Dat_PutHiddenParamOrder (((struct Asg_Assignments *) Context)->SelectedOrder); WhichGroups = Grp_GetParamWhichGroups (); Grp_PutParamWhichGroups (&WhichGroups); break; case Pag_PROJECTS: Frm_StartFormAnchor (ActSeePrj,Pagination->Anchor); - Prj_PutParams (&Gbl.Prjs.Filter, - (Prj_Order_t) Gbl.Prjs.SelectedOrder, + Prj_PutParams (&((struct Prj_Projects *) Context)->Filter, + ((struct Prj_Projects *) Context)->SelectedOrder, Pagination->NumPags, - -1L); + Cod); break; case Pag_GAMES: Frm_StartFormAnchor (ActSeeAllGam,Pagination->Anchor); Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->NumPags); - Dat_PutHiddenParamOrder ((Dat_StartEndTime_t) SelectedOrder); + Dat_PutHiddenParamOrder (((struct Gam_Games *) Context)->SelectedOrder); WhichGroups = Grp_GetParamWhichGroups (); Grp_PutParamWhichGroups (&WhichGroups); break; case Pag_SURVEYS: Frm_StartFormAnchor (ActSeeAllSvy,Pagination->Anchor); Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->NumPags); - Dat_PutHiddenParamOrder ((Dat_StartEndTime_t) SelectedOrder); + Dat_PutHiddenParamOrder (((struct Svy_Surveys *) Context)->SelectedOrder); WhichGroups = Grp_GetParamWhichGroups (); Grp_PutParamWhichGroups (&WhichGroups); break; case Pag_ATT_EVENTS: Frm_StartFormAnchor (ActSeeAtt,Pagination->Anchor); Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->NumPags); - Dat_PutHiddenParamOrder ((Dat_StartEndTime_t) SelectedOrder); + Dat_PutHiddenParamOrder (((struct Att_Events *) Context)->SelectedOrder); WhichGroups = Grp_GetParamWhichGroups (); Grp_PutParamWhichGroups (&WhichGroups); break; case Pag_THREADS_FORUM: - Frm_StartFormAnchor (For_ActionsSeeFor[Forums->ForumSelected.Type], + Frm_StartFormAnchor (For_ActionsSeeFor[((struct For_Forums *) Context)->Forum.Type], Pagination->Anchor); For_PutAllHiddenParamsForum (Pagination->NumPags, // Page of threads = last 1, // Page of posts = first - Forums->ForumSet, - (Dat_StartEndTime_t) SelectedOrder, - Forums->ForumSelected.Location, + ((struct For_Forums *) Context)->ForumSet, + ((struct For_Forums *) Context)->ThreadsOrder, + ((struct For_Forums *) Context)->Forum.Location, -1L, -1L); break; case Pag_POSTS_FORUM: - Frm_StartFormAnchor (For_ActionsSeePstFor[Forums->ForumSelected.Type], + Frm_StartFormAnchor (For_ActionsSeePstFor[((struct For_Forums *) Context)->Forum.Type], Pagination->Anchor); - For_PutAllHiddenParamsForum (Forums->CurrentPageThrs, // Page of threads = current + For_PutAllHiddenParamsForum (((struct For_Forums *) Context)->CurrentPageThrs, // Page of threads = current Pagination->NumPags, // Page of posts = last - Forums->ForumSet, - (Dat_StartEndTime_t) SelectedOrder, - Forums->ForumSelected.Location, - ThrCod, + ((struct For_Forums *) Context)->ForumSet, + ((struct For_Forums *) Context)->ThreadsOrder, + ((struct For_Forums *) Context)->Forum.Location, + Cod, -1L); break; case Pag_MESSAGES_RECEIVED: @@ -784,16 +783,16 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate, break; case Pag_MY_AGENDA: Frm_StartFormAnchor (ActSeeMyAgd,Pagination->Anchor); - Agd_PutParamsMyAgenda (Gbl.Agenda.Past__FutureEvents, - Gbl.Agenda.PrivatPublicEvents, - Gbl.Agenda.HiddenVisiblEvents, - (Dat_StartEndTime_t) SelectedOrder, + Agd_PutParamsMyAgenda (((struct Agd_Agenda *) Context)->Past__FutureEvents, + ((struct Agd_Agenda *) Context)->PrivatPublicEvents, + ((struct Agd_Agenda *) Context)->HiddenVisiblEvents, + ((struct Agd_Agenda *) Context)->SelectedOrder, Pagination->NumPags, - -1L); + Cod); break; case Pag_ANOTHER_AGENDA: Frm_StartFormAnchor (ActSeeUsrAgd,Pagination->Anchor); - Agd_PutHiddenParamEventsOrder ((Dat_StartEndTime_t) SelectedOrder); + Agd_PutHiddenParamEventsOrder (((struct Agd_Agenda *) Context)->SelectedOrder); Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->NumPags); Usr_PutParamOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EncryptedUsrCod); break; diff --git a/swad_pagination.h b/swad_pagination.h index 3b603a452..1595033aa 100644 --- a/swad_pagination.h +++ b/swad_pagination.h @@ -77,12 +77,10 @@ struct Pagination // Used for threads and messages pagination void Pag_CalculatePagination (struct Pagination *Pagination); void Pag_WriteLinksToPagesCentered (Pag_WhatPaginate_t WhatPaginate, struct Pagination *Pagination, - unsigned SelectedOrder, - const struct For_Forums *Forums,long ThrCod); + const void *Context,long Cod); void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate, struct Pagination *Pagination, - unsigned SelectedOrder, - const struct For_Forums *Forums,long ThrCod, + const void *Context,long Cod, bool FirstMsgEnabled, const char *Subject,const char *ClassTxt, bool LinkToPagCurrent); diff --git a/swad_project.c b/swad_project.c index c22bfc5f8..e91b73446 100644 --- a/swad_project.c +++ b/swad_project.c @@ -141,43 +141,53 @@ struct Prj_Faults bool WrongNumStds; bool WrongAssigned; }; +/*****************************************************************************/ +/***************************** Private variables *****************************/ +/*****************************************************************************/ + +static long Prj_PrjCod = -1L; /*****************************************************************************/ /***************************** Private prototypes ****************************/ /*****************************************************************************/ +static void Prj_ResetProjects (struct Prj_Projects *Projects); + static void Prj_ReqUsrsToSelect (void *Projects); -static void Prj_GetSelectedUsrsAndShowTheirPrjs (void); -static void Prj_ShowProjects (void); +static void Prj_GetSelectedUsrsAndShowTheirPrjs (struct Prj_Projects *Projects); +static void Prj_ShowProjects (struct Prj_Projects *Projects); static void Prj_ShowPrjsInCurrentPage (void *Projects); -static void Prj_ShowFormToFilterByMy_All (void); -static void Prj_ShowFormToFilterByAssign (void); -static void Prj_ShowFormToFilterByHidden (void); -static void Prj_ShowFormToFilterByWarning (void); -static void Prj_ShowFormToFilterByDpt (void); +static void Prj_ShowFormToFilterByMy_All (const struct Prj_Projects *Projects); +static void Prj_ShowFormToFilterByAssign (const struct Prj_Projects *Projects); +static void Prj_ShowFormToFilterByHidden (const struct Prj_Projects *Projects); +static void Prj_ShowFormToFilterByWarning (const struct Prj_Projects *Projects); +static void Prj_ShowFormToFilterByDpt (const struct Prj_Projects *Projects); static void Prj_PutCurrentParams (void *Projects); static void Prj_PutHiddenParamAssign (unsigned Assign); static void Prj_PutHiddenParamHidden (unsigned Hidden); static void Prj_PutHiddenParamFaulti (unsigned Faulti); static void Prj_PutHiddenParamDptCod (long DptCod); -static void Prj_GetHiddenParamPreNon (void); -static void Prj_GetHiddenParamHidVis (void); -static void Prj_GetHiddenParamFaulti (void); -static void Prj_GetHiddenParamDptCod (void); -static void Prj_GetParams (void); -static void Prj_GetParamWho (void); +static void Prj_GetHiddenParamPreNon (struct Prj_Projects *Projects); +static Prj_HiddenVisibl_t Prj_GetHiddenParamHidVis (void); +static unsigned Prj_GetHiddenParamFaulti (void); +static long Prj_GetHiddenParamDptCod (void); +static void Prj_GetParams (struct Prj_Projects *Projects); +static Usr_Who_t Prj_GetParamWho (void); -static void Prj_ShowProjectsHead (Prj_ProjectView_t ProjectView); +static void Prj_ShowProjectsHead (struct Prj_Projects *Projects, + Prj_ProjectView_t ProjectView); static void Prj_ShowTableAllProjectsHead (void); static bool Prj_CheckIfICanCreateProjects (void); static void Prj_PutIconsListProjects (void *Projects); -static void Prj_PutIconToCreateNewPrj (void); -static void Prj_PutButtonToCreateNewPrj (void); -static void Prj_PutIconToShowAllData (void); +static void Prj_PutIconToCreateNewPrj (struct Prj_Projects *Projects); +static void Prj_PutButtonToCreateNewPrj (struct Prj_Projects *Projects); +static void Prj_PutIconToShowAllData (struct Prj_Projects *Projects); -static void Prj_ShowOneProject (unsigned NumIndex,struct Prj_Project *Prj, +static void Prj_ShowOneProject (struct Prj_Projects *Projects, + unsigned NumIndex, + struct Prj_Project *Prj, Prj_ProjectView_t ProjectView); static bool Prj_CheckIfPrjIsFaulty (long PrjCod,struct Prj_Faults *Faults); static void Prj_PutWarningIcon (void); @@ -198,9 +208,11 @@ static void Prj_ShowOneProjectURL (const struct Prj_Project *Prj, Prj_ProjectView_t ProjectView, const char *id,unsigned UniqueId); static void Prj_ShowTableAllProjectsURL (const struct Prj_Project *Prj); -static void Prj_ShowOneProjectMembers (struct Prj_Project *Prj, +static void Prj_ShowOneProjectMembers (struct Prj_Projects *Projects, + struct Prj_Project *Prj, Prj_ProjectView_t ProjectView); -static void Prj_ShowOneProjectMembersWithARole (const struct Prj_Project *Prj, +static void Prj_ShowOneProjectMembersWithARole (struct Prj_Projects *Projects, + const struct Prj_Project *Prj, Prj_ProjectView_t ProjectView, Prj_RoleInProject_t RoleInProject); static void Prj_ShowTableAllProjectsMembersWithARole (const struct Prj_Project *Prj, @@ -212,31 +224,35 @@ static unsigned Prj_GetUsrsInPrj (long PrjCod,Prj_RoleInProject_t RoleInProject, static Prj_RoleInProject_t Prj_ConvertUnsignedStrToRoleInProject (const char *UnsignedStr); -static void Prj_FormToSelectStds (__attribute__((unused)) void *Args); -static void Prj_FormToSelectTuts (__attribute__((unused)) void *Args); -static void Prj_FormToSelectEvls (__attribute__((unused)) void *Args); -static void Prj_FormToSelectUsrs (Prj_RoleInProject_t RoleInProject); +static void Prj_FormToSelectStds (void *Projects); +static void Prj_FormToSelectTuts (void *Projects); +static void Prj_FormToSelectEvls (void *Projects); +static void Prj_FormToSelectUsrs (struct Prj_Projects *Projects, + Prj_RoleInProject_t RoleInProject); static void Prj_AddStds (__attribute__((unused)) void *Args); static void Prj_AddTuts (__attribute__((unused)) void *Args); static void Prj_AddEvls (__attribute__((unused)) void *Args); static void Prj_AddUsrsToProject (Prj_RoleInProject_t RoleInProject); -static void Prj_ReqRemUsrFromPrj (Prj_RoleInProject_t RoleInProject); +static void Prj_ReqRemUsrFromPrj (struct Prj_Projects *Projects, + Prj_RoleInProject_t RoleInProject); static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInProject); -static void Prj_GetParamPrjOrder (void); +static Prj_Order_t Prj_GetParamPrjOrder (void); -static void Prj_PutFormsToRemEditOnePrj (const struct Prj_Project *Prj, +static void Prj_PutFormsToRemEditOnePrj (struct Prj_Projects *Projects, + const struct Prj_Project *Prj, const char *Anchor, bool ICanViewProjectFiles); static bool Prj_CheckIfICanEditProject (const struct Prj_Project *Prj); -static void Prj_GetListProjects (void); +static void Prj_GetListProjects (struct Prj_Projects *Projects); static void Prj_ResetProject (struct Prj_Project *Prj); -static void Prj_RequestCreatOrEditPrj (long PrjCod); -static void Prj_PutFormProject (struct Prj_Project *Prj,bool ItsANewProject); +static void Prj_RequestCreatOrEditPrj (struct Prj_Projects *Projects); +static void Prj_PutFormProject (struct Prj_Projects *Projects, + struct Prj_Project *Prj,bool ItsANewProject); static void Prj_EditOneProjectTxtArea (const char *Id, const char *Label,char *TxtField, unsigned NumRows,bool Required); @@ -245,10 +261,10 @@ static void Prj_CreateProject (struct Prj_Project *Prj); static void Prj_UpdateProject (struct Prj_Project *Prj); static bool Prj_CheckIfICanConfigAllProjects (void); -static void Prj_GetConfigPrjFromDB (void); -static void Prj_GetConfigFromRow (MYSQL_ROW row); +static void Prj_GetConfigPrjFromDB (struct Prj_Projects *Projects); +static void Prj_GetConfigFromRow (struct Prj_Projects *Projects,MYSQL_ROW row); static bool Prj_GetEditableFromForm (void); -static void Prj_PutIconsToLockUnlockAllProjects (void); +static void Prj_PutIconsToLockUnlockAllProjects (struct Prj_Projects *Projects); static void Prj_FormLockUnlock (const struct Prj_Project *Prj); static void Prj_PutIconOffLockedUnlocked (const struct Prj_Project *Prj); @@ -256,17 +272,60 @@ static void Prj_PutIconOffLockedUnlocked (const struct Prj_Project *Prj); static void Prj_LockProjectEditionInDB (long PrjCod); static void Prj_UnlockProjectEditionInDB (long PrjCod); + +/*****************************************************************************/ +/******* Set/get project code (used to pass parameter to file browser) *******/ +/*****************************************************************************/ + +void Prj_SetPrjCod (long PrjCod) + { + Prj_PrjCod = PrjCod; + } + +long Prj_GetPrjCod (void) + { + return Prj_PrjCod; + } + +/*****************************************************************************/ +/******************************* Reset projects ******************************/ +/*****************************************************************************/ + +static void Prj_ResetProjects (struct Prj_Projects *Projects) + { + Projects->Config.Editable = Prj_EDITABLE_DEFAULT; + Projects->Filter.Who = Prj_FILTER_WHO_DEFAULT; + Projects->Filter.Assign = Prj_FILTER_ASSIGNED_DEFAULT | + Prj_FILTER_NONASSIG_DEFAULT; + Projects->Filter.Hidden = Prj_FILTER_HIDDEN_DEFAULT | + Prj_FILTER_VISIBL_DEFAULT; + Projects->Filter.Faulti = Prj_FILTER_FAULTY_DEFAULT | + Prj_FILTER_FAULTLESS_DEFAULT; + Projects->Filter.DptCod = Prj_FILTER_DPT_DEFAULT; + Projects->LstIsRead = false; // List is not read + Projects->Num = 0; + Projects->LstPrjCods = NULL; + Projects->SelectedOrder = Prj_ORDER_DEFAULT; + Projects->CurrentPage = 0; + Projects->PrjCod = -1L; + } + /*****************************************************************************/ /**************************** List users to select ***************************/ /*****************************************************************************/ void Prj_ListUsrsToSelect (void) { + struct Prj_Projects Projects; + + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); + /***** Get parameters *****/ - Prj_GetParams (); + Prj_GetParams (&Projects); /***** Show list of users to select some of them *****/ - Prj_ReqUsrsToSelect (&Gbl.Prjs); + Prj_ReqUsrsToSelect (&Projects); } static void Prj_ReqUsrsToSelect (void *Projects) @@ -291,29 +350,34 @@ static void Prj_ReqUsrsToSelect (void *Projects) void Prj_SeeProjects (void) { + struct Prj_Projects Projects; + + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); + /***** Get parameters *****/ - Prj_GetParams (); + Prj_GetParams (&Projects); /***** Show projects *****/ - Prj_ShowProjects (); + Prj_ShowProjects (&Projects); } /*****************************************************************************/ /******************************* Show projects *******************************/ /*****************************************************************************/ -static void Prj_ShowProjects (void) +static void Prj_ShowProjects (struct Prj_Projects *Projects) { - switch (Gbl.Prjs.Filter.Who) + switch (Projects->Filter.Who) { case Usr_WHO_ME: case Usr_WHO_ALL: /* Show my projects / all projects */ - Prj_ShowPrjsInCurrentPage (&Gbl.Prjs); + Prj_ShowPrjsInCurrentPage (Projects); break; case Usr_WHO_SELECTED: /* Get selected users and show their projects */ - Prj_GetSelectedUsrsAndShowTheirPrjs (); + Prj_GetSelectedUsrsAndShowTheirPrjs (Projects); break; default: break; @@ -324,11 +388,11 @@ static void Prj_ShowProjects (void) /****** Get and check list of selected users, and show users' projects *******/ /*****************************************************************************/ -static void Prj_GetSelectedUsrsAndShowTheirPrjs (void) +static void Prj_GetSelectedUsrsAndShowTheirPrjs (struct Prj_Projects *Projects) { Usr_GetSelectedUsrsAndGoToAct (&Gbl.Usrs.Selected, - Prj_ShowPrjsInCurrentPage,&Gbl.Prjs, // when user(s) selected - Prj_ReqUsrsToSelect,&Gbl.Prjs); // when no user selected + Prj_ShowPrjsInCurrentPage,Projects, // when user(s) selected + Prj_ReqUsrsToSelect,Projects); // when no user selected } /*****************************************************************************/ @@ -338,16 +402,20 @@ static void Prj_GetSelectedUsrsAndShowTheirPrjs (void) void Prj_ShowTableSelectedPrjs (void) { extern const char *Txt_No_projects; + struct Prj_Projects Projects; unsigned NumPrj; struct Prj_Project Prj; + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); + /***** Get parameters *****/ - Prj_GetParams (); + Prj_GetParams (&Projects); /***** Get list of projects *****/ - Prj_GetListProjects (); + Prj_GetListProjects (&Projects); - if (Gbl.Prjs.Num) + if (Projects.Num) { /***** Allocate memory for the project *****/ Prj_AllocMemProject (&Prj); @@ -358,10 +426,10 @@ void Prj_ShowTableSelectedPrjs (void) /***** Write all the projects *****/ for (NumPrj = 0; - NumPrj < Gbl.Prjs.Num; + NumPrj < Projects.Num; NumPrj++) { - Prj.PrjCod = Gbl.Prjs.LstPrjCods[NumPrj]; + Prj.PrjCod = Projects.LstPrjCods[NumPrj]; Prj_ShowTableAllProjectsOneRow (&Prj); } @@ -375,7 +443,7 @@ void Prj_ShowTableSelectedPrjs (void) Ale_ShowAlert (Ale_INFO,Txt_No_projects); /***** Free list of projects *****/ - Prj_FreeListProjects (); + Prj_FreeListProjects (&Projects); } /*****************************************************************************/ @@ -395,7 +463,7 @@ static void Prj_ShowPrjsInCurrentPage (void *Projects) if (Projects) { /***** Get list of projects *****/ - Prj_GetListProjects (); + Prj_GetListProjects ((struct Prj_Projects *) Projects); /***** Compute variables related to pagination *****/ Pagination.NumItems = ((struct Prj_Projects *) Projects)->Num; @@ -411,38 +479,36 @@ static void Prj_ShowPrjsInCurrentPage (void *Projects) /***** Put forms to choice which projects to show *****/ /* 1st. row */ Set_StartSettingsHead (); - Prj_ShowFormToFilterByMy_All (); - Prj_ShowFormToFilterByAssign (); + Prj_ShowFormToFilterByMy_All ((struct Prj_Projects *) Projects); + Prj_ShowFormToFilterByAssign ((struct Prj_Projects *) Projects); switch (Gbl.Usrs.Me.Role.Logged) { case Rol_NET: case Rol_TCH: case Rol_SYS_ADM: - Prj_ShowFormToFilterByHidden (); + Prj_ShowFormToFilterByHidden ((struct Prj_Projects *) Projects); break; default: // Students will see only visible projects break; } - Prj_ShowFormToFilterByWarning (); + Prj_ShowFormToFilterByWarning ((struct Prj_Projects *) Projects); Set_EndSettingsHead (); /* 2nd. row */ - Prj_ShowFormToFilterByDpt (); + Prj_ShowFormToFilterByDpt ((struct Prj_Projects *) Projects); - if (Gbl.Prjs.Num) + if (((struct Prj_Projects *) Projects)->Num) { /***** Write links to pages *****/ - Pag_WriteLinksToPagesCentered (Pag_PROJECTS, - &Pagination, - (unsigned) Gbl.Prjs.SelectedOrder, - NULL,0); + Pag_WriteLinksToPagesCentered (Pag_PROJECTS,&Pagination, + (struct Prj_Projects *) Projects,-1L); /***** Allocate memory for the project *****/ Prj_AllocMemProject (&Prj); /***** Table head *****/ HTM_TABLE_BeginWideMarginPadding (2); - Prj_ShowProjectsHead (Prj_LIST_PROJECTS); + Prj_ShowProjectsHead ((struct Prj_Projects *) Projects,Prj_LIST_PROJECTS); /***** Write all the projects *****/ for (NumPrj = Pagination.FirstItemVisible; @@ -450,11 +516,11 @@ static void Prj_ShowPrjsInCurrentPage (void *Projects) NumPrj++) { /* Get project data */ - Prj.PrjCod = Gbl.Prjs.LstPrjCods[NumPrj - 1]; + Prj.PrjCod = ((struct Prj_Projects *) Projects)->LstPrjCods[NumPrj - 1]; Prj_GetDataOfProjectByCod (&Prj); /* Number of index */ - switch (Gbl.Prjs.SelectedOrder) + switch (((struct Prj_Projects *) Projects)->SelectedOrder) { case Prj_ORDER_START_TIME: case Prj_ORDER_END_TIME: @@ -468,7 +534,8 @@ static void Prj_ShowPrjsInCurrentPage (void *Projects) } /* Show project */ - Prj_ShowOneProject (NumIndex,&Prj,Prj_LIST_PROJECTS); + Prj_ShowOneProject ((struct Prj_Projects *) Projects, + NumIndex,&Prj,Prj_LIST_PROJECTS); } /***** End table *****/ @@ -478,23 +545,21 @@ static void Prj_ShowPrjsInCurrentPage (void *Projects) Prj_FreeMemProject (&Prj); /***** Write again links to pages *****/ - Pag_WriteLinksToPagesCentered (Pag_PROJECTS, - &Pagination, - (unsigned) ((struct Prj_Projects *) Projects)->SelectedOrder, - NULL,0); + Pag_WriteLinksToPagesCentered (Pag_PROJECTS,&Pagination, + (struct Prj_Projects *) Projects,-1L); } else // No projects created Ale_ShowAlert (Ale_INFO,Txt_No_projects); /***** Button to create a new project *****/ if (Prj_CheckIfICanCreateProjects ()) - Prj_PutButtonToCreateNewPrj (); + Prj_PutButtonToCreateNewPrj ((struct Prj_Projects *) Projects); /***** End box *****/ Box_BoxEnd (); /***** Free list of projects *****/ - Prj_FreeListProjects (); + Prj_FreeListProjects ((struct Prj_Projects *) Projects); } } @@ -502,7 +567,7 @@ static void Prj_ShowPrjsInCurrentPage (void *Projects) /*** Show form to choice whether to show only my projects or all projects ****/ /*****************************************************************************/ -static void Prj_ShowFormToFilterByMy_All (void) +static void Prj_ShowFormToFilterByMy_All (const struct Prj_Projects *Projects) { struct Prj_Filter Filter; Usr_Who_t Who; @@ -517,18 +582,18 @@ static void Prj_ShowFormToFilterByMy_All (void) if (Mask & (1 << Who)) { HTM_DIV_Begin ("class=\"%s\"", - (Gbl.Prjs.Filter.Who == Who) ? "PREF_ON" : - "PREF_OFF"); + (Projects->Filter.Who == Who) ? "PREF_ON" : + "PREF_OFF"); Frm_StartForm (Who == Usr_WHO_SELECTED ? ActReqUsrPrj : ActSeePrj); Filter.Who = Who; - Filter.Assign = Gbl.Prjs.Filter.Assign; - Filter.Hidden = Gbl.Prjs.Filter.Hidden; - Filter.Faulti = Gbl.Prjs.Filter.Faulti; - Filter.DptCod = Gbl.Prjs.Filter.DptCod; + Filter.Assign = Projects->Filter.Assign; + Filter.Hidden = Projects->Filter.Hidden; + Filter.Faulti = Projects->Filter.Faulti; + Filter.DptCod = Projects->Filter.DptCod; Prj_PutParams (&Filter, - Gbl.Prjs.SelectedOrder, - Gbl.Prjs.CurrentPage, + Projects->SelectedOrder, + Projects->CurrentPage, -1L); Usr_PutWhoIcon (Who); Frm_EndForm (); @@ -541,7 +606,7 @@ static void Prj_ShowFormToFilterByMy_All (void) /*********** Show form to select assigned / non-assigned projects ************/ /*****************************************************************************/ -static void Prj_ShowFormToFilterByAssign (void) +static void Prj_ShowFormToFilterByAssign (const struct Prj_Projects *Projects) { extern const char *Txt_PROJECT_ASSIGNED_NONASSIGNED_PLURAL[Prj_NUM_ASSIGNED_NONASSIG]; struct Prj_Filter Filter; @@ -553,17 +618,17 @@ static void Prj_ShowFormToFilterByAssign (void) Assign++) { HTM_DIV_Begin ("class=\"%s\"", - (Gbl.Prjs.Filter.Assign & (1 << Assign)) ? "PREF_ON" : - "PREF_OFF"); + (Projects->Filter.Assign & (1 << Assign)) ? "PREF_ON" : + "PREF_OFF"); Frm_StartForm (ActSeePrj); - Filter.Who = Gbl.Prjs.Filter.Who; - Filter.Assign = Gbl.Prjs.Filter.Assign ^ (1 << Assign); // Toggle - Filter.Hidden = Gbl.Prjs.Filter.Hidden; - Filter.Faulti = Gbl.Prjs.Filter.Faulti; - Filter.DptCod = Gbl.Prjs.Filter.DptCod; + Filter.Who = Projects->Filter.Who; + Filter.Assign = Projects->Filter.Assign ^ (1 << Assign); // Toggle + Filter.Hidden = Projects->Filter.Hidden; + Filter.Faulti = Projects->Filter.Faulti; + Filter.DptCod = Projects->Filter.DptCod; Prj_PutParams (&Filter, - Gbl.Prjs.SelectedOrder, - Gbl.Prjs.CurrentPage, + Projects->SelectedOrder, + Projects->CurrentPage, -1L); Ico_PutSettingIconLink (AssignedNonassigImage[Assign], Txt_PROJECT_ASSIGNED_NONASSIGNED_PLURAL[Assign]); @@ -577,7 +642,7 @@ static void Prj_ShowFormToFilterByAssign (void) /************* Show form to select hidden / visible projects *****************/ /*****************************************************************************/ -static void Prj_ShowFormToFilterByHidden (void) +static void Prj_ShowFormToFilterByHidden (const struct Prj_Projects *Projects) { extern const char *Txt_PROJECT_HIDDEN_VISIBL_PROJECTS[Prj_NUM_HIDDEN_VISIBL]; struct Prj_Filter Filter; @@ -594,17 +659,17 @@ static void Prj_ShowFormToFilterByHidden (void) HidVis++) { HTM_DIV_Begin ("class=\"%s\"", - (Gbl.Prjs.Filter.Hidden & (1 << HidVis)) ? "PREF_ON" : - "PREF_OFF"); + (Projects->Filter.Hidden & (1 << HidVis)) ? "PREF_ON" : + "PREF_OFF"); Frm_StartForm (ActSeePrj); - Filter.Who = Gbl.Prjs.Filter.Who; - Filter.Assign = Gbl.Prjs.Filter.Assign; - Filter.Hidden = Gbl.Prjs.Filter.Hidden ^ (1 << HidVis); // Toggle - Filter.Faulti = Gbl.Prjs.Filter.Faulti; - Filter.DptCod = Gbl.Prjs.Filter.DptCod; + Filter.Who = Projects->Filter.Who; + Filter.Assign = Projects->Filter.Assign; + Filter.Hidden = Projects->Filter.Hidden ^ (1 << HidVis); // Toggle + Filter.Faulti = Projects->Filter.Faulti; + Filter.DptCod = Projects->Filter.DptCod; Prj_PutParams (&Filter, - Gbl.Prjs.SelectedOrder, - Gbl.Prjs.CurrentPage, + Projects->SelectedOrder, + Projects->CurrentPage, -1L); Ico_PutSettingIconLink (HiddenVisiblIcon[HidVis], Txt_PROJECT_HIDDEN_VISIBL_PROJECTS[HidVis]); @@ -618,7 +683,7 @@ static void Prj_ShowFormToFilterByHidden (void) /************** Show form to select faulty/faultless projects ****************/ /*****************************************************************************/ -static void Prj_ShowFormToFilterByWarning (void) +static void Prj_ShowFormToFilterByWarning (const struct Prj_Projects *Projects) { extern const char *Txt_PROJECT_FAULTY_FAULTLESS_PROJECTS[Prj_NUM_FAULTINESS]; struct Prj_Filter Filter; @@ -635,17 +700,17 @@ static void Prj_ShowFormToFilterByWarning (void) Faultiness++) { HTM_DIV_Begin ("class=\"%s\"", - (Gbl.Prjs.Filter.Faulti & (1 << Faultiness)) ? "PREF_ON" : - "PREF_OFF"); + (Projects->Filter.Faulti & (1 << Faultiness)) ? "PREF_ON" : + "PREF_OFF"); Frm_StartForm (ActSeePrj); - Filter.Who = Gbl.Prjs.Filter.Who; - Filter.Assign = Gbl.Prjs.Filter.Assign; - Filter.Hidden = Gbl.Prjs.Filter.Hidden; - Filter.Faulti = Gbl.Prjs.Filter.Faulti ^ (1 << Faultiness); // Toggle - Filter.DptCod = Gbl.Prjs.Filter.DptCod; + Filter.Who = Projects->Filter.Who; + Filter.Assign = Projects->Filter.Assign; + Filter.Hidden = Projects->Filter.Hidden; + Filter.Faulti = Projects->Filter.Faulti ^ (1 << Faultiness); // Toggle + Filter.DptCod = Projects->Filter.DptCod; Prj_PutParams (&Filter, - Gbl.Prjs.SelectedOrder, - Gbl.Prjs.CurrentPage, + Projects->SelectedOrder, + Projects->CurrentPage, -1L); Ico_PutSettingIconLink (FaultinessIcon[Faultiness], Txt_PROJECT_FAULTY_FAULTLESS_PROJECTS[Faultiness]); @@ -659,7 +724,7 @@ static void Prj_ShowFormToFilterByWarning (void) /*************** Show form to filter projects by department ******************/ /*****************************************************************************/ -static void Prj_ShowFormToFilterByDpt (void) +static void Prj_ShowFormToFilterByDpt (const struct Prj_Projects *Projects) { extern const char *Txt_Any_department; struct Prj_Filter Filter; @@ -667,19 +732,19 @@ static void Prj_ShowFormToFilterByDpt (void) /***** Begin form *****/ HTM_DIV_Begin (NULL); Frm_StartForm (ActSeePrj); - Filter.Who = Gbl.Prjs.Filter.Who; - Filter.Assign = Gbl.Prjs.Filter.Assign; - Filter.Hidden = Gbl.Prjs.Filter.Hidden; - Filter.Faulti = Gbl.Prjs.Filter.Faulti; + Filter.Who = Projects->Filter.Who; + Filter.Assign = Projects->Filter.Assign; + Filter.Hidden = Projects->Filter.Hidden; + Filter.Faulti = Projects->Filter.Faulti; Filter.DptCod = Prj_FILTER_DPT_DEFAULT; // Do not put department parameter here Prj_PutParams (&Filter, - Gbl.Prjs.SelectedOrder, - Gbl.Prjs.CurrentPage, + Projects->SelectedOrder, + Projects->CurrentPage, -1L); /***** Write selector with departments *****/ Dpt_WriteSelectorDepartment (Gbl.Hierarchy.Ins.InsCod, // Departments in current insitution - Gbl.Prjs.Filter.DptCod, // Selected department + Projects->Filter.DptCod, // Selected department "TITLE_DESCRIPTION_WIDTH", // Selector class -1L, // First option Txt_Any_department, // Text when no department selected @@ -780,73 +845,73 @@ static void Prj_PutHiddenParamDptCod (long DptCod) /*********************** Get hidden params for projects **********************/ /*****************************************************************************/ -static void Prj_GetHiddenParamPreNon (void) +static void Prj_GetHiddenParamPreNon (struct Prj_Projects *Projects) { - Gbl.Prjs.Filter.Assign = (unsigned) Par_GetParToUnsignedLong (Prj_PARAM_PRE_NON_NAME, - 0, - (1 << Prj_ASSIGNED) | - (1 << Prj_NONASSIG), - (unsigned) Prj_FILTER_ASSIGNED_DEFAULT | - (unsigned) Prj_FILTER_NONASSIG_DEFAULT); + Projects->Filter.Assign = (unsigned) Par_GetParToUnsignedLong (Prj_PARAM_PRE_NON_NAME, + 0, + (1 << Prj_ASSIGNED) | + (1 << Prj_NONASSIG), + (unsigned) Prj_FILTER_ASSIGNED_DEFAULT | + (unsigned) Prj_FILTER_NONASSIG_DEFAULT); } -static void Prj_GetHiddenParamHidVis (void) +static Prj_HiddenVisibl_t Prj_GetHiddenParamHidVis (void) { switch (Gbl.Usrs.Me.Role.Logged) { case Rol_STD: // Students can view only visible projects - Gbl.Prjs.Filter.Hidden = (1 << Prj_VISIBL); // Only visible projects - break; + return (Prj_HiddenVisibl_t) (1 << Prj_VISIBL); // Only visible projects case Rol_NET: case Rol_TCH: case Rol_SYS_ADM: - Gbl.Prjs.Filter.Hidden = (unsigned) Par_GetParToUnsignedLong (Prj_PARAM_HID_VIS_NAME, - 0, - (1 << Prj_HIDDEN) | - (1 << Prj_VISIBL), - (unsigned) Prj_FILTER_HIDDEN_DEFAULT | - (unsigned) Prj_FILTER_VISIBL_DEFAULT); - break; + return (Prj_HiddenVisibl_t) + Par_GetParToUnsignedLong (Prj_PARAM_HID_VIS_NAME, + 0, + (1 << Prj_HIDDEN) | + (1 << Prj_VISIBL), + (unsigned) Prj_FILTER_HIDDEN_DEFAULT | + (unsigned) Prj_FILTER_VISIBL_DEFAULT); default: Rol_WrongRoleExit (); - break; + return Prj_NEW_PRJ_HIDDEN_VISIBL_DEFAULT; // Not reached } } -static void Prj_GetHiddenParamFaulti (void) +static unsigned Prj_GetHiddenParamFaulti (void) { - Gbl.Prjs.Filter.Faulti = (unsigned) Par_GetParToUnsignedLong (Prj_PARAM_FAULTIN_NAME, - 0, - (1 << Prj_FAULTY) | - (1 << Prj_FAULTLESS), - (unsigned) Prj_FILTER_FAULTY_DEFAULT | - (unsigned) Prj_FILTER_FAULTLESS_DEFAULT); + return (unsigned) + Par_GetParToUnsignedLong (Prj_PARAM_FAULTIN_NAME, + 0, + (1 << Prj_FAULTY) | + (1 << Prj_FAULTLESS), + (unsigned) Prj_FILTER_FAULTY_DEFAULT | + (unsigned) Prj_FILTER_FAULTLESS_DEFAULT); } -static void Prj_GetHiddenParamDptCod (void) +static long Prj_GetHiddenParamDptCod (void) { - Gbl.Prjs.Filter.DptCod = Par_GetParToLong (Dpt_PARAM_DPT_COD_NAME); + return Par_GetParToLong (Dpt_PARAM_DPT_COD_NAME); } /*****************************************************************************/ /***************** Get generic parameters to list projects *******************/ /*****************************************************************************/ -static void Prj_GetParams (void) +static void Prj_GetParams (struct Prj_Projects *Projects) { /***** Get filter (which projects to show) *****/ - Prj_GetParamWho (); - Prj_GetHiddenParamPreNon (); - Prj_GetHiddenParamHidVis (); - Prj_GetHiddenParamFaulti (); - Prj_GetHiddenParamDptCod (); + Projects->Filter.Who = Prj_GetParamWho (); + Prj_GetHiddenParamPreNon (Projects); + Projects->Filter.Hidden = Prj_GetHiddenParamHidVis (); + Projects->Filter.Faulti = Prj_GetHiddenParamFaulti (); + Projects->Filter.DptCod = Prj_GetHiddenParamDptCod (); /***** Get order and page *****/ - Prj_GetParamPrjOrder (); - Gbl.Prjs.CurrentPage = Pag_GetParamPagNum (Pag_PROJECTS); + Projects->SelectedOrder = Prj_GetParamPrjOrder (); + Projects->CurrentPage = Pag_GetParamPagNum (Pag_PROJECTS); /***** Get selected users *****/ - if (Gbl.Prjs.Filter.Who == Usr_WHO_SELECTED) + if (Projects->Filter.Who == Usr_WHO_SELECTED) Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected); } @@ -854,21 +919,26 @@ static void Prj_GetParams (void) /************* Get parameter with whose users' projects to view **************/ /*****************************************************************************/ -static void Prj_GetParamWho (void) +static Usr_Who_t Prj_GetParamWho (void) { + Usr_Who_t Who; + /***** Get which users I want to see *****/ - Gbl.Prjs.Filter.Who = Usr_GetHiddenParamWho (); + Who = Usr_GetHiddenParamWho (); /***** If parameter Who is unknown, set it to default *****/ - if (Gbl.Prjs.Filter.Who == Usr_WHO_UNKNOWN) - Gbl.Prjs.Filter.Who = Prj_FILTER_WHO_DEFAULT; + if (Who == Usr_WHO_UNKNOWN) + Who = Prj_FILTER_WHO_DEFAULT; + + return Who; } /*****************************************************************************/ /******************* Write header with fields of a project *******************/ /*****************************************************************************/ -static void Prj_ShowProjectsHead (Prj_ProjectView_t ProjectView) +static void Prj_ShowProjectsHead (struct Prj_Projects *Projects, + Prj_ProjectView_t ProjectView) { extern const char *Txt_No_INDEX; extern const char *Txt_PROJECT_ORDER_HELP[Prj_NUM_ORDERS]; @@ -910,15 +980,15 @@ static void Prj_ShowProjectsHead (Prj_ProjectView_t ProjectView) case Prj_LIST_PROJECTS: case Prj_FILE_BROWSER_PROJECT: Frm_StartForm (ActSeePrj); - Prj_PutParams (&Gbl.Prjs.Filter, + Prj_PutParams (&Projects->Filter, Order, - Gbl.Prjs.CurrentPage, + Projects->CurrentPage, -1L); HTM_BUTTON_SUBMIT_Begin (Txt_PROJECT_ORDER_HELP[Order],"BT_LINK TIT_TBL",NULL); - if (Order == Gbl.Prjs.SelectedOrder) + if (Order == Projects->SelectedOrder) HTM_U_Begin (); HTM_Txt (Txt_PROJECT_ORDER[Order]); - if (Order == Gbl.Prjs.SelectedOrder) + if (Order == Projects->SelectedOrder) HTM_U_End (); HTM_BUTTON_End (); Frm_EndForm (); @@ -1004,17 +1074,17 @@ static void Prj_PutIconsListProjects (void *Projects) /***** Put icon to create a new project *****/ if (Prj_CheckIfICanCreateProjects ()) - Prj_PutIconToCreateNewPrj (); + Prj_PutIconToCreateNewPrj ((struct Prj_Projects *) Projects); if (((struct Prj_Projects *) Projects)->Num) { /***** Put icon to show all data in a table *****/ - Prj_PutIconToShowAllData (); + Prj_PutIconToShowAllData ((struct Prj_Projects *) Projects); if (ICanConfigAllProjects) /****** Put icons to request locking/unlocking edition of all selected projects *******/ - Prj_PutIconsToLockUnlockAllProjects (); + Prj_PutIconsToLockUnlockAllProjects ((struct Prj_Projects *) Projects); } /***** Put form to go to configuration of projects *****/ @@ -1031,14 +1101,14 @@ static void Prj_PutIconsListProjects (void *Projects) /********************* Put icon to create a new project **********************/ /*****************************************************************************/ -static void Prj_PutIconToCreateNewPrj (void) +static void Prj_PutIconToCreateNewPrj (struct Prj_Projects *Projects) { extern const char *Txt_New_project; /***** Put form to create a new project *****/ - Gbl.Prjs.PrjCod = -1L; + Projects->PrjCod = -1L; Ico_PutContextualIconToAdd (ActFrmNewPrj,NULL, - Prj_PutCurrentParams,&Gbl.Prjs, + Prj_PutCurrentParams,Projects, Txt_New_project); } @@ -1046,13 +1116,13 @@ static void Prj_PutIconToCreateNewPrj (void) /******************** Put button to create a new project *********************/ /*****************************************************************************/ -static void Prj_PutButtonToCreateNewPrj (void) +static void Prj_PutButtonToCreateNewPrj (struct Prj_Projects *Projects) { extern const char *Txt_New_project; - Gbl.Prjs.PrjCod = -1L; + Projects->PrjCod = -1L; Frm_StartForm (ActFrmNewPrj); - Prj_PutCurrentParams (&Gbl.Prjs); + Prj_PutCurrentParams (Projects); Btn_PutConfirmButton (Txt_New_project); Frm_EndForm (); } @@ -1061,12 +1131,12 @@ static void Prj_PutButtonToCreateNewPrj (void) /******************** Put button to create a new project *********************/ /*****************************************************************************/ -static void Prj_PutIconToShowAllData (void) +static void Prj_PutIconToShowAllData (struct Prj_Projects *Projects) { extern const char *Txt_Show_all_data_in_a_table; Lay_PutContextualLinkOnlyIcon (ActSeeTblAllPrj,NULL, - Prj_PutCurrentParams,&Gbl.Prjs, + Prj_PutCurrentParams,Projects, "table.svg", Txt_Show_all_data_in_a_table); } @@ -1077,14 +1147,19 @@ static void Prj_PutIconToShowAllData (void) void Prj_ShowOneUniqueProject (struct Prj_Project *Prj) { + struct Prj_Projects Projects; + + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); + /***** Begin table *****/ HTM_TABLE_BeginWidePadding (2); /***** Write project head *****/ - Prj_ShowProjectsHead (Prj_FILE_BROWSER_PROJECT); + Prj_ShowProjectsHead (&Projects,Prj_FILE_BROWSER_PROJECT); /***** Show project *****/ - Prj_ShowOneProject (0,Prj,Prj_FILE_BROWSER_PROJECT); + Prj_ShowOneProject (&Projects,0,Prj,Prj_FILE_BROWSER_PROJECT); /***** End table *****/ HTM_TABLE_End (); @@ -1096,8 +1171,12 @@ void Prj_ShowOneUniqueProject (struct Prj_Project *Prj) void Prj_PrintOneProject (void) { + struct Prj_Projects Projects; struct Prj_Project Prj; + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); + /***** Allocate memory for the project *****/ Prj_AllocMemProject (&Prj); @@ -1113,10 +1192,10 @@ void Prj_PrintOneProject (void) /***** Table head *****/ HTM_TABLE_BeginWideMarginPadding (2); - Prj_ShowProjectsHead (Prj_PRINT_ONE_PROJECT); + Prj_ShowProjectsHead (&Projects,Prj_PRINT_ONE_PROJECT); /***** Write project *****/ - Prj_ShowOneProject (0,&Prj,Prj_PRINT_ONE_PROJECT); + Prj_ShowOneProject (&Projects,0,&Prj,Prj_PRINT_ONE_PROJECT); /***** End table *****/ HTM_TABLE_End (); @@ -1129,7 +1208,9 @@ void Prj_PrintOneProject (void) /***************************** Show one project ******************************/ /*****************************************************************************/ -static void Prj_ShowOneProject (unsigned NumIndex,struct Prj_Project *Prj, +static void Prj_ShowOneProject (struct Prj_Projects *Projects, + unsigned NumIndex, + struct Prj_Project *Prj, Prj_ProjectView_t ProjectView) { extern const char *Txt_Project_files; @@ -1203,12 +1284,12 @@ static void Prj_ShowOneProject (unsigned NumIndex,struct Prj_Project *Prj, { case Prj_LIST_PROJECTS: HTM_TD_Begin ("rowspan=\"3\" class=\"CONTEXT_COL COLOR%u\"",Gbl.RowEvenOdd); - Prj_PutFormsToRemEditOnePrj (Prj,Anchor,ICanViewProjectFiles); + Prj_PutFormsToRemEditOnePrj (Projects,Prj,Anchor,ICanViewProjectFiles); HTM_TD_End (); break; case Prj_FILE_BROWSER_PROJECT: HTM_TD_Begin ("rowspan=\"3\" class=\"CONTEXT_COL\""); - Prj_PutFormsToRemEditOnePrj (Prj,Anchor,ICanViewProjectFiles); + Prj_PutFormsToRemEditOnePrj (Projects,Prj,Anchor,ICanViewProjectFiles); HTM_TD_End (); break; default: @@ -1273,7 +1354,7 @@ static void Prj_ShowOneProject (unsigned NumIndex,struct Prj_Project *Prj, if (ICanViewProjectFiles) { Frm_StartForm (ActAdmDocPrj); - Prj_PutCurrentParams (&Gbl.Prjs); + Prj_PutCurrentParams (Projects); HTM_BUTTON_SUBMIT_Begin (Txt_Project_files,ClassLink,NULL); HTM_Txt (Prj->Title); HTM_BUTTON_End (); @@ -1366,7 +1447,7 @@ static void Prj_ShowOneProject (unsigned NumIndex,struct Prj_Project *Prj, HTM_TR_End (); /***** Project members *****/ - Prj_ShowOneProjectMembers (Prj,ProjectView); + Prj_ShowOneProjectMembers (Projects,Prj,ProjectView); /***** Link to show hidden info *****/ switch (ProjectView) @@ -1915,7 +1996,8 @@ static void Prj_ShowTableAllProjectsURL (const struct Prj_Project *Prj) /************** Show projects members when showing one project ***************/ /*****************************************************************************/ -static void Prj_ShowOneProjectMembers (struct Prj_Project *Prj, +static void Prj_ShowOneProjectMembers (struct Prj_Projects *Projects, + struct Prj_Project *Prj, Prj_ProjectView_t ProjectView) { unsigned NumRoleToShow; @@ -1923,7 +2005,8 @@ static void Prj_ShowOneProjectMembers (struct Prj_Project *Prj, for (NumRoleToShow = 0; NumRoleToShow < Brw_NUM_ROLES_TO_SHOW; NumRoleToShow++) - Prj_ShowOneProjectMembersWithARole (Prj,ProjectView, + Prj_ShowOneProjectMembersWithARole (Projects, + Prj,ProjectView, Prj_RolesToShow[NumRoleToShow]); } @@ -1931,7 +2014,8 @@ static void Prj_ShowOneProjectMembers (struct Prj_Project *Prj, /************************* Show users row in a project ***********************/ /*****************************************************************************/ -static void Prj_ShowOneProjectMembersWithARole (const struct Prj_Project *Prj, +static void Prj_ShowOneProjectMembersWithARole (struct Prj_Projects *Projects, + const struct Prj_Project *Prj, Prj_ProjectView_t ProjectView, Prj_RoleInProject_t RoleInProject) { @@ -2046,7 +2130,7 @@ static void Prj_ShowOneProjectMembersWithARole (const struct Prj_Project *Prj, { HTM_TD_Begin ("class=\"PRJ_MEMBER_ICO\""); Lay_PutContextualLinkOnlyIcon (ActionReqRemUsr[RoleInProject],NULL, - Prj_PutCurrentParams,&Gbl.Prjs, + Prj_PutCurrentParams,Projects, "trash.svg", Txt_Remove); HTM_TD_End (); @@ -2076,9 +2160,9 @@ static void Prj_ShowOneProjectMembersWithARole (const struct Prj_Project *Prj, case Prj_EDIT_ONE_PROJECT: HTM_TR_Begin (NULL); HTM_TD_Begin ("class=\"PRJ_MEMBER_ICO\""); - Gbl.Prjs.PrjCod = Prj->PrjCod; // Used to pass project code as a parameter + Projects->PrjCod = Prj->PrjCod; // Used to pass project code as a parameter Ico_PutContextualIconToAdd (ActionReqAddUsr[RoleInProject],NULL, - Prj_PutCurrentParams,&Gbl.Prjs, + Prj_PutCurrentParams,Projects, Str_BuildStringStr (Txt_Add_USERS, Txt_PROJECT_ROLES_PLURAL_abc[RoleInProject])); Str_FreeString (); @@ -2268,35 +2352,54 @@ static Prj_RoleInProject_t Prj_ConvertUnsignedStrToRoleInProject (const char *Un void Prj_ReqAddStds (void) { - Prj_FormToSelectStds (NULL); + struct Prj_Projects Projects; + + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); + + Prj_FormToSelectStds (&Projects); } void Prj_ReqAddTuts (void) { - Prj_FormToSelectTuts (NULL); + struct Prj_Projects Projects; + + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); + + Prj_FormToSelectTuts (&Projects); } void Prj_ReqAddEvls (void) { - Prj_FormToSelectEvls (NULL); + struct Prj_Projects Projects; + + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); + + Prj_FormToSelectEvls (&Projects); } -static void Prj_FormToSelectStds (__attribute__((unused)) void *Args) +static void Prj_FormToSelectStds (void *Projects) { - Prj_FormToSelectUsrs (Prj_ROLE_STD); + if (Projects) + Prj_FormToSelectUsrs ((struct Prj_Projects *) Projects,Prj_ROLE_STD); } -static void Prj_FormToSelectTuts (__attribute__((unused)) void *Args) +static void Prj_FormToSelectTuts (void *Projects) { - Prj_FormToSelectUsrs (Prj_ROLE_TUT); + if (Projects) + Prj_FormToSelectUsrs ((struct Prj_Projects *) Projects,Prj_ROLE_TUT); } -static void Prj_FormToSelectEvls (__attribute__((unused)) void *Args) +static void Prj_FormToSelectEvls (void *Projects) { - Prj_FormToSelectUsrs (Prj_ROLE_EVL); + if (Projects) + Prj_FormToSelectUsrs ((struct Prj_Projects *) Projects,Prj_ROLE_EVL); } -static void Prj_FormToSelectUsrs (Prj_RoleInProject_t RoleInProject) +static void Prj_FormToSelectUsrs (struct Prj_Projects *Projects, + Prj_RoleInProject_t RoleInProject) { extern const char *Hlp_ASSESSMENT_Projects_add_user; extern const char *Txt_Add_USERS; @@ -2311,8 +2414,8 @@ static void Prj_FormToSelectUsrs (Prj_RoleInProject_t RoleInProject) char *TxtButton; /***** Get parameters *****/ - Prj_GetParams (); - if ((Gbl.Prjs.PrjCod = Prj_GetParamPrjCod ()) == -1L) + Prj_GetParams (Projects); + if ((Projects->PrjCod = Prj_GetParamPrjCod ()) == -1L) Lay_ShowErrorAndExit ("Code of project is missing."); /***** Put form to select users *****/ @@ -2321,7 +2424,7 @@ static void Prj_FormToSelectUsrs (Prj_RoleInProject_t RoleInProject) Lay_NotEnoughMemoryExit (); Usr_PutFormToSelectUsrsToGoToAct (&Prj_MembersToAdd, ActionAddUsr[RoleInProject], - Prj_PutCurrentParams,&Gbl.Prjs, + Prj_PutCurrentParams,Projects, TxtButton, Hlp_ASSESSMENT_Projects_add_user, TxtButton, @@ -2329,7 +2432,7 @@ static void Prj_FormToSelectUsrs (Prj_RoleInProject_t RoleInProject) free (TxtButton); /***** Put a form to create/edit project *****/ - Prj_RequestCreatOrEditPrj (Gbl.Prjs.PrjCod); + Prj_RequestCreatOrEditPrj (Projects); } /*****************************************************************************/ @@ -2380,12 +2483,15 @@ static void Prj_AddUsrsToProject (Prj_RoleInProject_t RoleInProject) { extern const char *Txt_THE_USER_X_has_been_enroled_as_a_Y_in_the_project; extern const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT][Usr_NUM_SEXS]; - long PrjCod; + struct Prj_Projects Projects; const char *Ptr; bool ItsMe; + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); + /***** Get project code *****/ - if ((PrjCod = Prj_GetParamPrjCod ()) == -1L) + if ((Projects.PrjCod = Prj_GetParamPrjCod ()) == -1L) Lay_ShowErrorAndExit ("Code of project is missing."); /***** Add the selected users to project *****/ @@ -2406,7 +2512,7 @@ static void Prj_AddUsrsToProject (Prj_RoleInProject_t RoleInProject) " (PrjCod,RoleInProject,UsrCod)" " VALUES" " (%ld,%u,%ld)", - PrjCod,(unsigned) RoleInProject, + Projects.PrjCod,(unsigned) RoleInProject, Gbl.Usrs.Other.UsrDat.UsrCod); /* Flush cache */ @@ -2425,7 +2531,7 @@ static void Prj_AddUsrsToProject (Prj_RoleInProject_t RoleInProject) Usr_FreeListsSelectedEncryptedUsrsCods (&Prj_MembersToAdd); /***** Put form to edit project again *****/ - Prj_RequestCreatOrEditPrj (PrjCod); + Prj_RequestCreatOrEditPrj (&Projects); } /*****************************************************************************/ @@ -2434,20 +2540,36 @@ static void Prj_AddUsrsToProject (Prj_RoleInProject_t RoleInProject) void Prj_ReqRemStd (void) { - Prj_ReqRemUsrFromPrj (Prj_ROLE_STD); + struct Prj_Projects Projects; + + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); + + Prj_ReqRemUsrFromPrj (&Projects,Prj_ROLE_STD); } void Prj_ReqRemTut (void) { - Prj_ReqRemUsrFromPrj (Prj_ROLE_TUT); + struct Prj_Projects Projects; + + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); + + Prj_ReqRemUsrFromPrj (&Projects,Prj_ROLE_TUT); } void Prj_ReqRemEvl (void) { - Prj_ReqRemUsrFromPrj (Prj_ROLE_EVL); + struct Prj_Projects Projects; + + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); + + Prj_ReqRemUsrFromPrj (&Projects,Prj_ROLE_EVL); } -static void Prj_ReqRemUsrFromPrj (Prj_RoleInProject_t RoleInProject) +static void Prj_ReqRemUsrFromPrj (struct Prj_Projects *Projects, + Prj_RoleInProject_t RoleInProject) { extern const char *Txt_Do_you_really_want_to_be_removed_as_a_X_from_the_project_Y; extern const char *Txt_Do_you_really_want_to_remove_the_following_user_as_a_X_from_the_project_Y; @@ -2467,8 +2589,8 @@ static void Prj_ReqRemUsrFromPrj (Prj_RoleInProject_t RoleInProject) Prj_AllocMemProject (&Prj); /***** Get parameters *****/ - Prj_GetParams (); - if ((Prj.PrjCod = Prj_GetParamPrjCod ()) < 0) + Prj_GetParams (Projects); + if ((Projects->PrjCod = Prj.PrjCod = Prj_GetParamPrjCod ()) < 0) Lay_ShowErrorAndExit ("Code of project is missing."); /***** Get data of the project from database *****/ @@ -2493,8 +2615,8 @@ static void Prj_ReqRemUsrFromPrj (Prj_RoleInProject_t RoleInProject) /* Show form to request confirmation */ Frm_StartForm (ActionRemUsr[RoleInProject]); - Gbl.Prjs.PrjCod = Prj.PrjCod; - Prj_PutCurrentParams (&Gbl.Prjs); + Projects->PrjCod = Prj.PrjCod; + Prj_PutCurrentParams (Projects); Btn_PutRemoveButton (Str_BuildStringStr (Txt_Remove_USER_from_this_project, Txt_PROJECT_ROLES_SINGUL_abc[RoleInProject][Gbl.Usrs.Other.UsrDat.Sex])); Str_FreeString (); @@ -2515,7 +2637,7 @@ static void Prj_ReqRemUsrFromPrj (Prj_RoleInProject_t RoleInProject) Prj_FreeMemProject (&Prj); /***** Put form to edit project again *****/ - Prj_RequestCreatOrEditPrj (Prj.PrjCod); + Prj_RequestCreatOrEditPrj (Projects); } /*****************************************************************************/ @@ -2541,15 +2663,19 @@ static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInProject) { extern const char *Txt_THE_USER_X_has_been_removed_as_a_Y_from_the_project_Z; extern const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT][Usr_NUM_SEXS]; + struct Prj_Projects Projects; struct Prj_Project Prj; bool ItsMe; + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); + /***** Allocate memory for the project *****/ Prj_AllocMemProject (&Prj); /***** Get parameters *****/ - Prj_GetParams (); - if ((Prj.PrjCod = Prj_GetParamPrjCod ()) < 0) + Prj_GetParams (&Projects); + if ((Projects.PrjCod = Prj.PrjCod = Prj_GetParamPrjCod ()) < 0) Lay_ShowErrorAndExit ("Code of project is missing."); /***** Get data of the project from database *****/ @@ -2590,73 +2716,65 @@ static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInProject) Prj_FreeMemProject (&Prj); /***** Put form to edit project again *****/ - Prj_RequestCreatOrEditPrj (Prj.PrjCod); + Prj_RequestCreatOrEditPrj (&Projects); } /*****************************************************************************/ /********* Get parameter with the type or order in list of projects **********/ /*****************************************************************************/ -static void Prj_GetParamPrjOrder (void) +static Prj_Order_t Prj_GetParamPrjOrder (void) { - Gbl.Prjs.SelectedOrder = (Prj_Order_t) - Par_GetParToUnsignedLong ("Order", - 0, - Prj_NUM_ORDERS - 1, - (unsigned long) Prj_ORDER_DEFAULT); - } - -/*****************************************************************************/ -/***** Put a hidden parameter with the type of order in list of projects *****/ -/*****************************************************************************/ - -void Prj_PutHiddenParamPrjOrder (void) - { - Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Gbl.Prjs.SelectedOrder); + return (Prj_Order_t) + Par_GetParToUnsignedLong ("Order", + 0, + Prj_NUM_ORDERS - 1, + (unsigned long) Prj_ORDER_DEFAULT); } /*****************************************************************************/ /****************** Put a link (form) to edit one project ********************/ /*****************************************************************************/ -static void Prj_PutFormsToRemEditOnePrj (const struct Prj_Project *Prj, +static void Prj_PutFormsToRemEditOnePrj (struct Prj_Projects *Projects, + const struct Prj_Project *Prj, const char *Anchor, bool ICanViewProjectFiles) { - Gbl.Prjs.PrjCod = Prj->PrjCod; // Used as parameter in contextual links + Projects->PrjCod = Prj->PrjCod; // Used as parameter in contextual links if (Prj_CheckIfICanEditProject (Prj)) { /***** Put form to remove project *****/ Ico_PutContextualIconToRemove (ActReqRemPrj, - Prj_PutCurrentParams,&Gbl.Prjs); + Prj_PutCurrentParams,Projects); /***** Put form to hide/show project *****/ switch (Prj->Hidden) { case Prj_HIDDEN: Ico_PutContextualIconToUnhide (ActShoPrj,Anchor, - Prj_PutCurrentParams,&Gbl.Prjs); + Prj_PutCurrentParams,Projects); break; case Prj_VISIBL: Ico_PutContextualIconToHide (ActHidPrj,Anchor, - Prj_PutCurrentParams,&Gbl.Prjs); + Prj_PutCurrentParams,Projects); break; } /***** Put form to edit project *****/ Ico_PutContextualIconToEdit (ActEdiOnePrj,NULL, - Prj_PutCurrentParams,&Gbl.Prjs); + Prj_PutCurrentParams,Projects); } /***** Put form to admin project documents *****/ if (ICanViewProjectFiles) Ico_PutContextualIconToViewFiles (ActAdmDocPrj, - Prj_PutCurrentParams,&Gbl.Prjs); + Prj_PutCurrentParams,Projects); /***** Put form to print project *****/ Ico_PutContextualIconToPrint (ActPrnOnePrj, - Prj_PutCurrentParams,&Gbl.Prjs); + Prj_PutCurrentParams,Projects); /***** Locked/unlocked project edition *****/ if (Prj_CheckIfICanConfigAllProjects ()) @@ -2715,7 +2833,7 @@ static bool Prj_CheckIfICanEditProject (const struct Prj_Project *Prj) /************************** List all the projects ****************************/ /*****************************************************************************/ -static void Prj_GetListProjects (void) +static void Prj_GetListProjects (struct Prj_Projects *Projects) { char *PreNonSubQuery; char *HidVisSubQuery; @@ -2749,15 +2867,15 @@ static void Prj_GetListProjects (void) long PrjCod; /***** Get list of projects from database *****/ - if (Gbl.Prjs.LstIsRead) - Prj_FreeListProjects (); + if (Projects->LstIsRead) + Prj_FreeListProjects (Projects); - if (Gbl.Prjs.Filter.Assign && // Any selector is on - Gbl.Prjs.Filter.Hidden && // Any selector is on - Gbl.Prjs.Filter.Faulti) // Any selector is on + if (Projects->Filter.Assign && // Any selector is on + Projects->Filter.Hidden && // Any selector is on + Projects->Filter.Faulti) // Any selector is on { /* Assigned subquery */ - switch (Gbl.Prjs.Filter.Assign) + switch (Projects->Filter.Assign) { case (1 << Prj_ASSIGNED): // Assigned projects if (asprintf (&PreNonSubQuery," AND projects.Assigned='Y'") < 0) @@ -2783,7 +2901,7 @@ static void Prj_GetListProjects (void) case Rol_NET: case Rol_TCH: case Rol_SYS_ADM: - switch (Gbl.Prjs.Filter.Hidden) + switch (Projects->Filter.Hidden) { case (1 << Prj_HIDDEN): // Hidden projects if (asprintf (&HidVisSubQuery," AND projects.Hidden='Y'") < 0) @@ -2805,10 +2923,10 @@ static void Prj_GetListProjects (void) } /* Department subquery */ - if (Gbl.Prjs.Filter.DptCod >= 0) + if (Projects->Filter.DptCod >= 0) { if (asprintf (&DptCodSubQuery," AND projects.DptCod=%ld", - Gbl.Prjs.Filter.DptCod) < 0) + Projects->Filter.DptCod) < 0) Lay_NotEnoughMemoryExit (); } else // Any department @@ -2818,11 +2936,11 @@ static void Prj_GetListProjects (void) } /* Query */ - switch (Gbl.Prjs.Filter.Who) + switch (Projects->Filter.Who) { case Usr_WHO_ME: /* Get list of projects */ - switch (Gbl.Prjs.SelectedOrder) + switch (Projects->SelectedOrder) { case Prj_ORDER_START_TIME: case Prj_ORDER_END_TIME: @@ -2839,7 +2957,7 @@ static void Prj_GetListProjects (void) Gbl.Hierarchy.Crs.CrsCod, PreNonSubQuery,HidVisSubQuery,DptCodSubQuery, Gbl.Usrs.Me.UsrDat.UsrCod, - OrderBySubQuery[Gbl.Prjs.SelectedOrder]); + OrderBySubQuery[Projects->SelectedOrder]); break; case Prj_ORDER_DEPARTMENT: NumRows = DB_QuerySELECT (&mysql_res,"can not get projects", @@ -2855,7 +2973,7 @@ static void Prj_GetListProjects (void) Gbl.Hierarchy.Crs.CrsCod, PreNonSubQuery,HidVisSubQuery,DptCodSubQuery, Gbl.Usrs.Me.UsrDat.UsrCod, - OrderBySubQuery[Gbl.Prjs.SelectedOrder]); + OrderBySubQuery[Projects->SelectedOrder]); break; } break; @@ -2873,7 +2991,7 @@ static void Prj_GetListProjects (void) &SubQueryUsrs); /* Get list of projects */ - switch (Gbl.Prjs.SelectedOrder) + switch (Projects->SelectedOrder) { case Prj_ORDER_START_TIME: case Prj_ORDER_END_TIME: @@ -2890,7 +3008,7 @@ static void Prj_GetListProjects (void) Gbl.Hierarchy.Crs.CrsCod, PreNonSubQuery,HidVisSubQuery,DptCodSubQuery, SubQueryUsrs, - OrderBySubQuery[Gbl.Prjs.SelectedOrder]); + OrderBySubQuery[Projects->SelectedOrder]); break; case Prj_ORDER_DEPARTMENT: NumRows = DB_QuerySELECT (&mysql_res,"can not get projects", @@ -2906,7 +3024,7 @@ static void Prj_GetListProjects (void) Gbl.Hierarchy.Crs.CrsCod, PreNonSubQuery,HidVisSubQuery,DptCodSubQuery, SubQueryUsrs, - OrderBySubQuery[Gbl.Prjs.SelectedOrder]); + OrderBySubQuery[Projects->SelectedOrder]); break; } @@ -2921,7 +3039,7 @@ static void Prj_GetListProjects (void) break; case Usr_WHO_ALL: /* Get list of projects */ - switch (Gbl.Prjs.SelectedOrder) + switch (Projects->SelectedOrder) { case Prj_ORDER_START_TIME: case Prj_ORDER_END_TIME: @@ -2934,7 +3052,7 @@ static void Prj_GetListProjects (void) " ORDER BY %s", Gbl.Hierarchy.Crs.CrsCod, PreNonSubQuery,HidVisSubQuery,DptCodSubQuery, - OrderBySubQuery[Gbl.Prjs.SelectedOrder]); + OrderBySubQuery[Projects->SelectedOrder]); break; case Prj_ORDER_DEPARTMENT: NumRows = DB_QuerySELECT (&mysql_res,"can not get projects", @@ -2946,7 +3064,7 @@ static void Prj_GetListProjects (void) " ORDER BY %s", Gbl.Hierarchy.Crs.CrsCod, PreNonSubQuery,HidVisSubQuery,DptCodSubQuery, - OrderBySubQuery[Gbl.Prjs.SelectedOrder]); + OrderBySubQuery[Projects->SelectedOrder]); break; } break; @@ -2966,7 +3084,7 @@ static void Prj_GetListProjects (void) NumPrjsFromDB = (unsigned) NumRows; /***** Create list of projects *****/ - if ((Gbl.Prjs.LstPrjCods = (long *) calloc (NumRows,sizeof (long))) == NULL) + if ((Projects->LstPrjCods = (long *) calloc (NumRows,sizeof (long))) == NULL) Lay_NotEnoughMemoryExit (); /***** Get the projects codes *****/ @@ -2980,18 +3098,18 @@ static void Prj_GetListProjects (void) Lay_ShowErrorAndExit ("Error: wrong project code."); /* Filter projects depending on faultiness */ - switch (Gbl.Prjs.Filter.Faulti) + switch (Projects->Filter.Faulti) { case (1 << Prj_FAULTY): // Faulty projects if (Prj_CheckIfPrjIsFaulty (PrjCod,&Faults)) - Gbl.Prjs.LstPrjCods[NumPrjsAfterFilter++] = PrjCod; + Projects->LstPrjCods[NumPrjsAfterFilter++] = PrjCod; break; case (1 << Prj_FAULTLESS): // Faultless projects if (!Prj_CheckIfPrjIsFaulty (PrjCod,&Faults)) - Gbl.Prjs.LstPrjCods[NumPrjsAfterFilter++] = PrjCod; + Projects->LstPrjCods[NumPrjsAfterFilter++] = PrjCod; break; default: // All projects - Gbl.Prjs.LstPrjCods[NumPrjsAfterFilter++] = PrjCod; + Projects->LstPrjCods[NumPrjsAfterFilter++] = PrjCod; break; } } @@ -3001,8 +3119,8 @@ static void Prj_GetListProjects (void) DB_FreeMySQLResult (&mysql_res); } - Gbl.Prjs.Num = NumPrjsAfterFilter; - Gbl.Prjs.LstIsRead = true; + Projects->Num = NumPrjsAfterFilter; + Projects->LstIsRead = true; } /*****************************************************************************/ @@ -3180,15 +3298,15 @@ static void Prj_ResetProject (struct Prj_Project *Prj) /*************************** Free list of projects ***************************/ /*****************************************************************************/ -void Prj_FreeListProjects (void) +void Prj_FreeListProjects (struct Prj_Projects *Projects) { - if (Gbl.Prjs.LstIsRead && Gbl.Prjs.LstPrjCods) + if (Projects->LstIsRead && Projects->LstPrjCods) { /***** Free memory used by the list of projects *****/ - free (Gbl.Prjs.LstPrjCods); - Gbl.Prjs.LstPrjCods = NULL; - Gbl.Prjs.Num = 0; - Gbl.Prjs.LstIsRead = false; + free (Projects->LstPrjCods); + Projects->LstPrjCods = NULL; + Projects->Num = 0; + Projects->LstIsRead = false; } } @@ -3219,13 +3337,17 @@ void Prj_ReqRemProject (void) { extern const char *Txt_Do_you_really_want_to_remove_the_project_X; extern const char *Txt_Remove_project; + struct Prj_Projects Projects; struct Prj_Project Prj; + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); + /***** Allocate memory for the project *****/ Prj_AllocMemProject (&Prj); /***** Get parameters *****/ - Prj_GetParams (); + Prj_GetParams (&Projects); if ((Prj.PrjCod = Prj_GetParamPrjCod ()) < 0) Lay_ShowErrorAndExit ("Code of project is missing."); @@ -3235,9 +3357,9 @@ void Prj_ReqRemProject (void) if (Prj_CheckIfICanEditProject (&Prj)) { /***** Show question and button to remove the project *****/ - Gbl.Prjs.PrjCod = Prj.PrjCod; + Projects.PrjCod = Prj.PrjCod; Ale_ShowAlertAndButton (ActRemPrj,NULL,NULL, - Prj_PutCurrentParams,&Gbl.Prjs, + Prj_PutCurrentParams,&Projects, Btn_REMOVE_BUTTON,Txt_Remove_project, Ale_QUESTION,Txt_Do_you_really_want_to_remove_the_project_X, Prj.Title); @@ -3249,7 +3371,7 @@ void Prj_ReqRemProject (void) Prj_FreeMemProject (&Prj); /***** Show projects again *****/ - Prj_ShowProjects (); + Prj_ShowProjects (&Projects); } /*****************************************************************************/ @@ -3259,14 +3381,18 @@ void Prj_ReqRemProject (void) void Prj_RemoveProject (void) { extern const char *Txt_Project_X_removed; + struct Prj_Projects Projects; struct Prj_Project Prj; char PathRelPrj[PATH_MAX + 1]; + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); + /***** Allocate memory for the project *****/ Prj_AllocMemProject (&Prj); /***** Get parameters *****/ - Prj_GetParams (); + Prj_GetParams (&Projects); if ((Prj.PrjCod = Prj_GetParamPrjCod ()) < 0) Lay_ShowErrorAndExit ("Code of project is missing."); @@ -3312,7 +3438,7 @@ void Prj_RemoveProject (void) Prj_FreeMemProject (&Prj); /***** Show projects again *****/ - Prj_ShowProjects (); + Prj_ShowProjects (&Projects); } /*****************************************************************************/ @@ -3321,13 +3447,17 @@ void Prj_RemoveProject (void) void Prj_HideProject (void) { + struct Prj_Projects Projects; struct Prj_Project Prj; + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); + /***** Allocate memory for the project *****/ Prj_AllocMemProject (&Prj); /***** Get parameters *****/ - Prj_GetParams (); + Prj_GetParams (&Projects); if ((Prj.PrjCod = Prj_GetParamPrjCod ()) < 0) Lay_ShowErrorAndExit ("Code of project is missing."); @@ -3347,7 +3477,7 @@ void Prj_HideProject (void) Prj_FreeMemProject (&Prj); /***** Show projects again *****/ - Prj_ShowProjects (); + Prj_ShowProjects (&Projects); } /*****************************************************************************/ @@ -3356,13 +3486,17 @@ void Prj_HideProject (void) void Prj_UnhideProject (void) { + struct Prj_Projects Projects; struct Prj_Project Prj; + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); + /***** Allocate memory for the project *****/ Prj_AllocMemProject (&Prj); /***** Get parameters *****/ - Prj_GetParams (); + Prj_GetParams (&Projects); if ((Prj.PrjCod = Prj_GetParamPrjCod ()) < 0) Lay_ShowErrorAndExit ("Code of project is missing."); @@ -3382,7 +3516,7 @@ void Prj_UnhideProject (void) Prj_FreeMemProject (&Prj); /***** Show projects again *****/ - Prj_ShowProjects (); + Prj_ShowProjects (&Projects); } /*****************************************************************************/ @@ -3391,23 +3525,32 @@ void Prj_UnhideProject (void) void Prj_RequestCreatePrj (void) { + struct Prj_Projects Projects; + + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); + /***** Form to create project *****/ - Prj_RequestCreatOrEditPrj (-1L); // It's a new, non existing, project + Projects.PrjCod = -1L; // It's a new, non existing, project + Prj_RequestCreatOrEditPrj (&Projects); } void Prj_RequestEditPrj (void) { - long PrjCod; + struct Prj_Projects Projects; + + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); /***** Get project code *****/ - if ((PrjCod = Prj_GetParamPrjCod ()) == -1L) + if ((Projects.PrjCod = Prj_GetParamPrjCod ()) == -1L) Lay_ShowErrorAndExit ("Code of project is missing."); /***** Form to edit project *****/ - Prj_RequestCreatOrEditPrj (PrjCod); + Prj_RequestCreatOrEditPrj (&Projects); } -static void Prj_RequestCreatOrEditPrj (long PrjCod) +static void Prj_RequestCreatOrEditPrj (struct Prj_Projects *Projects) { struct Prj_Project Prj; bool ItsANewProject; @@ -3416,8 +3559,9 @@ static void Prj_RequestCreatOrEditPrj (long PrjCod) Prj_AllocMemProject (&Prj); /***** Get parameters *****/ - Prj_GetParams (); - ItsANewProject = ((Prj.PrjCod = PrjCod) < 0); + Prj.PrjCod = Projects->PrjCod; + Prj_GetParams (Projects); + ItsANewProject = (Prj.PrjCod < 0); /***** Get from the database the data of the project *****/ if (ItsANewProject) @@ -3433,16 +3577,17 @@ static void Prj_RequestCreatOrEditPrj (long PrjCod) Prj_GetDataOfProjectByCod (&Prj); /***** Put form to edit project *****/ - Prj_PutFormProject (&Prj,ItsANewProject); + Prj_PutFormProject (Projects,&Prj,ItsANewProject); /***** Free memory of the project *****/ Prj_FreeMemProject (&Prj); /***** Show projects again *****/ - Prj_ShowProjects (); + Prj_ShowProjects (Projects); } -static void Prj_PutFormProject (struct Prj_Project *Prj,bool ItsANewProject) +static void Prj_PutFormProject (struct Prj_Projects *Projects, + struct Prj_Project *Prj,bool ItsANewProject) { extern const char *Hlp_ASSESSMENT_Projects_new_project; extern const char *Hlp_ASSESSMENT_Projects_edit_project; @@ -3473,14 +3618,14 @@ static void Prj_PutFormProject (struct Prj_Project *Prj,bool ItsANewProject) /***** Start project box *****/ if (ItsANewProject) { - Gbl.Prjs.PrjCod = -1L; + Projects->PrjCod = -1L; Box_BoxBegin (NULL,Txt_New_project, NULL,NULL, Hlp_ASSESSMENT_Projects_new_project,Box_NOT_CLOSABLE); } else { - Gbl.Prjs.PrjCod = Prj->PrjCod; + Projects->PrjCod = Prj->PrjCod; Box_BoxBegin (NULL,Prj->Title[0] ? Prj->Title : Txt_Edit_project, NULL,NULL, @@ -3496,7 +3641,7 @@ static void Prj_PutFormProject (struct Prj_Project *Prj,bool ItsANewProject) for (NumRoleToShow = 0; NumRoleToShow < Brw_NUM_ROLES_TO_SHOW; NumRoleToShow++) - Prj_ShowOneProjectMembersWithARole (Prj,Prj_EDIT_ONE_PROJECT, + Prj_ShowOneProjectMembersWithARole (Projects,Prj,Prj_EDIT_ONE_PROJECT, Prj_RolesToShow[NumRoleToShow]); Box_BoxTableEnd (); } @@ -3505,7 +3650,7 @@ static void Prj_PutFormProject (struct Prj_Project *Prj,bool ItsANewProject) /* Start data form */ Frm_StartForm (ItsANewProject ? ActNewPrj : ActChgPrj); - Prj_PutCurrentParams (&Gbl.Prjs); + Prj_PutCurrentParams (Projects); /* Begin box and table */ Box_BoxTableBegin (NULL,Txt_Data, @@ -3721,17 +3866,21 @@ void Prj_RecFormProject (void) extern const char *Txt_You_must_specify_the_title_of_the_project; extern const char *Txt_Created_new_project_X; extern const char *Txt_The_project_has_been_modified; + struct Prj_Projects Projects; struct Prj_Project Prj; // Project data received from form bool ItsANewProject; bool ICanEditProject; bool NewProjectIsCorrect = true; + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); + /***** Allocate memory for the project *****/ Prj_AllocMemProject (&Prj); /***** Get parameters *****/ - Prj_GetParams (); - ItsANewProject = ((Prj.PrjCod = Prj_GetParamPrjCod ()) < 0); + Prj_GetParams (&Projects); + ItsANewProject = ((Projects.PrjCod = Prj.PrjCod = Prj_GetParamPrjCod ()) < 0); if (ItsANewProject) { @@ -3811,10 +3960,10 @@ void Prj_RecFormProject (void) } } else - Prj_PutFormProject (&Prj,ItsANewProject); + Prj_PutFormProject (&Projects,&Prj,ItsANewProject); /***** Show again form to edit project *****/ - Prj_RequestCreatOrEditPrj (Prj.PrjCod); + Prj_RequestCreatOrEditPrj (&Projects); } else Lay_NoPermissionExit (); @@ -3942,13 +4091,17 @@ void Prj_ShowFormConfig (void) extern const char *Txt_Editable; extern const char *Txt_Editable_by_non_editing_teachers; extern const char *Txt_Save_changes; + struct Prj_Projects Projects; + + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); /***** Read projects configuration from database *****/ - Prj_GetConfigPrjFromDB (); + Prj_GetConfigPrjFromDB (&Projects); /***** Begin box *****/ Box_BoxBegin (NULL,Txt_Configure_projects, - Prj_PutIconsListProjects,&Gbl.Prjs, + Prj_PutIconsListProjects,&Projects, Hlp_ASSESSMENT_Projects,Box_NOT_CLOSABLE); /***** Begin form *****/ @@ -3965,7 +4118,7 @@ void Prj_ShowFormConfig (void) HTM_TD_Begin ("class=\"LT\""); HTM_INPUT_CHECKBOX ("Editable",HTM_DONT_SUBMIT_ON_CHANGE, "id=\"Editable\" value=\"Y\"%s", - Gbl.Prjs.Config.Editable ? " checked=\"checked\"" : + Projects.Config.Editable ? " checked=\"checked\"" : ""); HTM_Txt (Txt_Editable_by_non_editing_teachers); HTM_TD_End (); @@ -3988,7 +4141,7 @@ void Prj_ShowFormConfig (void) /************** Get configuration of projects for current course *************/ /*****************************************************************************/ -static void Prj_GetConfigPrjFromDB (void) +static void Prj_GetConfigPrjFromDB (struct Prj_Projects *Projects) { MYSQL_RES *mysql_res; MYSQL_ROW row; @@ -4001,12 +4154,12 @@ static void Prj_GetConfigPrjFromDB (void) Gbl.Hierarchy.Crs.CrsCod); if (NumRows == 0) - Gbl.Prjs.Config.Editable = Prj_EDITABLE_DEFAULT; + Projects->Config.Editable = Prj_EDITABLE_DEFAULT; else // NumRows == 1 { /***** Get configuration *****/ row = mysql_fetch_row (mysql_res); - Prj_GetConfigFromRow (row); + Prj_GetConfigFromRow (Projects,row); } /***** Free structure that stores the query result *****/ @@ -4017,10 +4170,10 @@ static void Prj_GetConfigPrjFromDB (void) /************ Get configuration values from a database table row *************/ /*****************************************************************************/ -static void Prj_GetConfigFromRow (MYSQL_ROW row) +static void Prj_GetConfigFromRow (struct Prj_Projects *Projects,MYSQL_ROW row) { /***** Get whether project are visible via plugins or not *****/ - Gbl.Prjs.Config.Editable = (row[0][0] == 'Y'); + Projects->Config.Editable = (row[0][0] == 'Y'); } /*****************************************************************************/ @@ -4030,9 +4183,13 @@ static void Prj_GetConfigFromRow (MYSQL_ROW row) void Prj_ReceiveConfigPrj (void) { extern const char *Txt_The_configuration_of_the_projects_has_been_updated; + struct Prj_Projects Projects; + + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); /***** Get whether projects are editable by non-editing teachers or not *****/ - Gbl.Prjs.Config.Editable = Prj_GetEditableFromForm (); + Projects.Config.Editable = Prj_GetEditableFromForm (); /***** Update database *****/ DB_QueryREPLACE ("can not save configuration of projects", @@ -4041,7 +4198,7 @@ void Prj_ReceiveConfigPrj (void) " VALUES" " (%ld,'%c')", Gbl.Hierarchy.Crs.CrsCod, - Gbl.Prjs.Config.Editable ? 'Y' : + Projects.Config.Editable ? 'Y' : 'N'); /***** Show confirmation message *****/ @@ -4064,20 +4221,20 @@ static bool Prj_GetEditableFromForm (void) /****** Put icons to request locking/unlocking edition of all projects *******/ /*****************************************************************************/ -static void Prj_PutIconsToLockUnlockAllProjects (void) +static void Prj_PutIconsToLockUnlockAllProjects (struct Prj_Projects *Projects) { extern const char *Txt_Lock_editing; extern const char *Txt_Unlock_editing; /***** Put icon to lock all projects *****/ Lay_PutContextualLinkOnlyIcon (ActReqLckAllPrj,NULL, - Prj_PutCurrentParams,&Gbl.Prjs, + Prj_PutCurrentParams,Projects, "lock.svg", Txt_Lock_editing); /***** Put icon to unlock all projects *****/ Lay_PutContextualLinkOnlyIcon (ActReqUnlAllPrj,NULL, - Prj_PutCurrentParams,&Gbl.Prjs, + Prj_PutCurrentParams,Projects, "unlock.svg", Txt_Unlock_editing); } @@ -4091,34 +4248,38 @@ void Prj_ReqLockSelectedPrjsEdition (void) extern const char *Txt_Lock_editing; extern const char *Txt_Do_you_want_to_lock_the_editing_of_the_X_selected_projects; extern const char *Txt_No_projects; + struct Prj_Projects Projects; + + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); /***** Get parameters *****/ - Prj_GetParams (); + Prj_GetParams (&Projects); /***** Show question and button to lock all selected projects *****/ if (Prj_CheckIfICanConfigAllProjects ()) { /* Get list of projects */ - Prj_GetListProjects (); + Prj_GetListProjects (&Projects); /* Show question and button */ - if (Gbl.Prjs.Num) + if (Projects.Num) Ale_ShowAlertAndButton (ActLckAllPrj,NULL,NULL, - Prj_PutCurrentParams,&Gbl.Prjs, + Prj_PutCurrentParams,&Projects, Btn_REMOVE_BUTTON,Txt_Lock_editing, Ale_QUESTION,Txt_Do_you_want_to_lock_the_editing_of_the_X_selected_projects, - Gbl.Prjs.Num); + Projects.Num); else // No projects found Ale_ShowAlert (Ale_INFO,Txt_No_projects); /* Free list of projects */ - Prj_FreeListProjects (); + Prj_FreeListProjects (&Projects); } else Lay_NoPermissionExit (); /***** Show projects again *****/ - Prj_ShowProjects (); + Prj_ShowProjects (&Projects); } void Prj_ReqUnloSelectedPrjsEdition (void) @@ -4126,34 +4287,38 @@ void Prj_ReqUnloSelectedPrjsEdition (void) extern const char *Txt_Unlock_editing; extern const char *Txt_Do_you_want_to_unlock_the_editing_of_the_X_selected_projects; extern const char *Txt_No_projects; + struct Prj_Projects Projects; + + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); /***** Get parameters *****/ - Prj_GetParams (); + Prj_GetParams (&Projects); /***** Show question and button to unlock all selected projects *****/ if (Prj_CheckIfICanConfigAllProjects ()) { /* Get list of projects */ - Prj_GetListProjects (); + Prj_GetListProjects (&Projects); /* Show question and button */ - if (Gbl.Prjs.Num) + if (Projects.Num) Ale_ShowAlertAndButton (ActUnlAllPrj,NULL,NULL, - Prj_PutCurrentParams,&Gbl.Prjs, + Prj_PutCurrentParams,&Projects, Btn_CREATE_BUTTON,Txt_Unlock_editing, Ale_QUESTION,Txt_Do_you_want_to_unlock_the_editing_of_the_X_selected_projects, - Gbl.Prjs.Num); + Projects.Num); else // No projects found Ale_ShowAlert (Ale_INFO,Txt_No_projects); /* Free list of projects */ - Prj_FreeListProjects (); + Prj_FreeListProjects (&Projects); } else Lay_NoPermissionExit (); /***** Show projects again *****/ - Prj_ShowProjects (); + Prj_ShowProjects (&Projects); } /*****************************************************************************/ @@ -4163,67 +4328,75 @@ void Prj_ReqUnloSelectedPrjsEdition (void) void Prj_LockSelectedPrjsEdition (void) { extern const char *Txt_No_projects; + struct Prj_Projects Projects; unsigned NumPrj; + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); + /***** Get parameters *****/ - Prj_GetParams (); + Prj_GetParams (&Projects); /***** Lock all selected projects *****/ if (Prj_CheckIfICanConfigAllProjects ()) { /* Get list of projects */ - Prj_GetListProjects (); + Prj_GetListProjects (&Projects); /* Lock projects */ - if (Gbl.Prjs.Num) + if (Projects.Num) for (NumPrj = 0; - NumPrj < Gbl.Prjs.Num; + NumPrj < Projects.Num; NumPrj++) - Prj_LockProjectEditionInDB (Gbl.Prjs.LstPrjCods[NumPrj]); + Prj_LockProjectEditionInDB (Projects.LstPrjCods[NumPrj]); else // No projects found Ale_ShowAlert (Ale_INFO,Txt_No_projects); /* Free list of projects */ - Prj_FreeListProjects (); + Prj_FreeListProjects (&Projects); } else Lay_NoPermissionExit (); /***** Show projects again *****/ - Prj_ShowProjects (); + Prj_ShowProjects (&Projects); } void Prj_UnloSelectedPrjsEdition (void) { extern const char *Txt_No_projects; + struct Prj_Projects Projects; unsigned NumPrj; + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); + /***** Get parameters *****/ - Prj_GetParams (); + Prj_GetParams (&Projects); /***** Unlock all selected projects *****/ if (Prj_CheckIfICanConfigAllProjects ()) { /* Get list of projects */ - Prj_GetListProjects (); + Prj_GetListProjects (&Projects); /* Unlock projects */ - if (Gbl.Prjs.Num) + if (Projects.Num) for (NumPrj = 0; - NumPrj < Gbl.Prjs.Num; + NumPrj < Projects.Num; NumPrj++) - Prj_UnlockProjectEditionInDB (Gbl.Prjs.LstPrjCods[NumPrj]); + Prj_UnlockProjectEditionInDB (Projects.LstPrjCods[NumPrj]); else // No projects found Ale_ShowAlert (Ale_INFO,Txt_No_projects); /* Free list of projects */ - Prj_FreeListProjects (); + Prj_FreeListProjects (&Projects); } else Lay_NoPermissionExit (); /***** Show projects again *****/ - Prj_ShowProjects (); + Prj_ShowProjects (&Projects); } /*****************************************************************************/ @@ -4281,13 +4454,17 @@ static void Prj_PutIconOffLockedUnlocked (const struct Prj_Project *Prj) void Prj_LockProjectEdition (void) { + struct Prj_Projects Projects; struct Prj_Project Prj; + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); + /***** Allocate memory for the project *****/ Prj_AllocMemProject (&Prj); /***** Get parameters *****/ - Prj_GetParams (); + Prj_GetParams (&Projects); if ((Prj.PrjCod = Prj_GetParamPrjCod ()) < 0) Lay_ShowErrorAndExit ("Code of project is missing."); @@ -4324,13 +4501,17 @@ static void Prj_LockProjectEditionInDB (long PrjCod) void Prj_UnloProjectEdition (void) { + struct Prj_Projects Projects; struct Prj_Project Prj; + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); + /***** Allocate memory for the project *****/ Prj_AllocMemProject (&Prj); /***** Get parameters *****/ - Prj_GetParams (); + Prj_GetParams (&Projects); if ((Prj.PrjCod = Prj_GetParamPrjCod ()) < 0) Lay_ShowErrorAndExit ("Code of project is missing."); diff --git a/swad_project.h b/swad_project.h index ce8197f92..1c0b30bd9 100644 --- a/swad_project.h +++ b/swad_project.h @@ -172,6 +172,9 @@ struct Prj_Project /***************************** Public prototypes *****************************/ /*****************************************************************************/ +void Prj_SetPrjCod (long PrjCod); +long Prj_GetPrjCod (void); + void Prj_ListUsrsToSelect (void); void Prj_SeeProjects (void); void Prj_ShowTableSelectedPrjs (void); @@ -204,8 +207,6 @@ void Prj_RemStd (void); void Prj_RemTut (void); void Prj_RemEvl (void); -void Prj_PutHiddenParamPrjOrder (void); - bool Prj_CheckIfICanViewProjectFiles (unsigned MyRolesInProject); void Prj_RequestCreatePrj (void); @@ -216,7 +217,7 @@ void Prj_FreeMemProject (struct Prj_Project *Prj); void Prj_GetDataOfProjectByCod (struct Prj_Project *Prj); long Prj_GetCourseOfProject (long PrjCod); -void Prj_FreeListProjects (void); +void Prj_FreeListProjects (struct Prj_Projects *Projects); void Prj_PutParamPrjCod (long PrjCod); long Prj_GetParamPrjCod (void); diff --git a/swad_record.c b/swad_record.c index 9e83f20d3..b0eb960ad 100644 --- a/swad_record.c +++ b/swad_record.c @@ -1502,7 +1502,8 @@ static void Rec_WriteFormShowOfficeHoursOneTch (bool ShowOfficeHours) { extern const char *Txt_Show_office_hours; - Lay_PutContextualCheckbox (ActSeeRecOneTch,Rec_PutParamsShowOfficeHoursOneTch, + Lay_PutContextualCheckbox (ActSeeRecOneTch, + Rec_PutParamsShowOfficeHoursOneTch, "ShowOfficeHours", ShowOfficeHours,false, Txt_Show_office_hours, @@ -1513,7 +1514,8 @@ static void Rec_WriteFormShowOfficeHoursSeveralTchs (bool ShowOfficeHours) { extern const char *Txt_Show_office_hours; - Lay_PutContextualCheckbox (ActSeeRecSevTch,Rec_PutParamsShowOfficeHoursSeveralTchs, + Lay_PutContextualCheckbox (ActSeeRecSevTch, + Rec_PutParamsShowOfficeHoursSeveralTchs, "ShowOfficeHours", ShowOfficeHours,false, Txt_Show_office_hours, diff --git a/swad_survey.c b/swad_survey.c index fa62420d3..cc7949ac2 100644 --- a/swad_survey.c +++ b/swad_survey.c @@ -229,10 +229,8 @@ static void Svy_ListAllSurveys (void) } /***** Write links to pages *****/ - Pag_WriteLinksToPagesCentered (Pag_SURVEYS, - &Pagination, - (unsigned) Gbl.Svys.SelectedOrder, - NULL,0); + Pag_WriteLinksToPagesCentered (Pag_SURVEYS,&Pagination, + &Gbl.Svys,-1L); if (Gbl.Svys.Num) { @@ -285,10 +283,8 @@ static void Svy_ListAllSurveys (void) Ale_ShowAlert (Ale_INFO,Txt_No_surveys); /***** Write again links to pages *****/ - Pag_WriteLinksToPagesCentered (Pag_SURVEYS, - &Pagination, - (unsigned) Gbl.Svys.SelectedOrder, - NULL,0); + Pag_WriteLinksToPagesCentered (Pag_SURVEYS,&Pagination, + &Gbl.Svys,-1L); /***** Button to create a new survey *****/ if (Svy_CheckIfICanCreateSvy ()) diff --git a/swad_timeline.c b/swad_timeline.c index b743daa66..4f9fd16ff 100644 --- a/swad_timeline.c +++ b/swad_timeline.c @@ -1641,8 +1641,8 @@ static void TL_WriteNote (const struct TL_Note *SocNot, break; case TL_NOTE_FORUM_POST: /* Get forum type of the post */ - For_GetForumTypeAndLocationOfAPost (SocNot->Cod,&Forums.ForumSelected); - For_SetForumName (&Forums.ForumSelected,ForumName,Gbl.Prefs.Language,false); // Set forum name in recipient's language + For_GetForumTypeAndLocationOfAPost (SocNot->Cod,&Forums.Forum); + For_SetForumName (&Forums.Forum,ForumName,Gbl.Prefs.Language,false); // Set forum name in recipient's language break; default: break; @@ -2042,13 +2042,13 @@ static void TL_PutFormGoToAction (const struct TL_Note *SocNot, case TL_NOTE_POST: // Not applicable return; case TL_NOTE_FORUM_POST: - Frm_StartFormUnique (For_ActionsSeeFor[Forums->ForumSelected.Type]); + Frm_StartFormUnique (For_ActionsSeeFor[Forums->Forum.Type]); For_PutAllHiddenParamsForum (1, // Page of threads = first 1, // Page of posts = first Forums->ForumSet, Forums->ThreadsOrder, - Forums->ForumSelected.Location, - Forums->ForumSelected.ThrCod, + Forums->Forum.Location, + Forums->Thread.ThrCod, -1L); if (SocNot->HieCod != Gbl.Hierarchy.Crs.CrsCod) // Not the current course Crs_PutParamCrsCod (SocNot->HieCod); // Go to another course