From a123470d0a474b4ba8f760b5c39af3607a625c09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Tue, 12 Nov 2019 00:31:41 +0100 Subject: [PATCH] Version19.65 --- js/{swad19.39.js => swad19.65.js} | 8 +- swad_changelog.h | 11 +- swad_global.c | 4 +- swad_global.h | 2 +- swad_layout.c | 4 +- swad_project.c | 128 ++++++++------------- swad_project.h | 7 +- swad_text.c | 185 +++++++++++++++--------------- swad_timeline.c | 162 +++++++++++++------------- swad_timeline.h | 9 +- swad_user.c | 34 +++++- swad_user.h | 8 +- 12 files changed, 279 insertions(+), 283 deletions(-) rename js/{swad19.39.js => swad19.65.js} (99%) diff --git a/js/swad19.39.js b/js/swad19.65.js similarity index 99% rename from js/swad19.39.js rename to js/swad19.65.js index ab88c735..ef3ce390 100644 --- a/js/swad19.39.js +++ b/js/swad19.65.js @@ -663,7 +663,7 @@ function refreshNewTL () { if (objXMLHttpReqNewTL) { var RefreshParams = RefreshParamNxtActNewPub + '&' + RefreshParamIdSes + '&' + - RefreshParamWhichUsrs; + RefreshParamWho; objXMLHttpReqNewTL.onreadystatechange = readNewTimelineData; // onreadystatechange must be lowercase objXMLHttpReqNewTL.open('POST',ActionAJAX,true); @@ -753,9 +753,9 @@ function refreshOldTimeline () { if (RefreshParamUsr.length) RefreshParams += '&' + RefreshParamUsr; } - if (typeof RefreshParamWhichUsrs !== 'undefined') { - if (RefreshParamWhichUsrs.length) - RefreshParams += '&' + RefreshParamWhichUsrs; + if (typeof RefreshParamWho !== 'undefined') { + if (RefreshParamWho.length) + RefreshParams += '&' + RefreshParamWho; } objXMLHttpReqOldTL.onreadystatechange = readOldTimelineData; // onreadystatechange must be lowercase diff --git a/swad_changelog.h b/swad_changelog.h index 7b0b4892..ccce603f 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -487,15 +487,22 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - * En OpenSWAD: ps2pdf source.ps destination.pdf */ -#define Log_PLATFORM_VERSION "SWAD 19.64 (2019-11-11)" +#define Log_PLATFORM_VERSION "SWAD 19.65 (2019-11-12)" #define CSS_FILE "swad19.47.css" -#define JS_FILE "swad19.39.js" +#define JS_FILE "swad19.65.js" /* // TODO: Hacer un nuevo rol en los TFG: tutor externo (profesor de áreas no vinculadas con el centro, profesionales de empresas, etc.) // TODO: Impedir la creación y edición de proyectos si no son editables. // TODO: Importante: filtrar proyectos por usuarios (igual que en trabajos o en asistencia) // TODO: Code refactoring in HTML h1, title, meta, video, p, iframe, input hidden, area + Version 19.65: Nov 12, 2019 Changes in selection of users in timeline. (246451 lines) + 4 changes necessary in database: +UPDATE usr_last SET TimelineUsrs=13 WHERE TimelineUsrs=1; +UPDATE usr_last SET TimelineUsrs=14 WHERE TimelineUsrs=2; +UPDATE usr_last SET TimelineUsrs=3 WHERE TimelineUsrs=13; +UPDATE usr_last SET TimelineUsrs=4 WHERE TimelineUsrs=14; + Version 19.64: Nov 11, 2019 Changes in selection of me / all users. (246459 lines) Version 19.63.2: Nov 11, 2019 Fixed bug showing dates. (246386 lines) Version 19.63.1: Nov 11, 2019 Fixed bug in lists, reported by Javier Fernández Baldomero. (246381 lines) diff --git a/swad_global.c b/swad_global.c index 841923e4..355d4219 100644 --- a/swad_global.c +++ b/swad_global.c @@ -304,7 +304,7 @@ void Gbl_InitializeGlobals (void) /* Projects */ Gbl.Prjs.Config.Editable = Prj_EDITABLE_DEFAULT; - Gbl.Prjs.Filter.My_All = Prj_FILTER_WHOSE_PROJECTS_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 | @@ -370,7 +370,7 @@ void Gbl_InitializeGlobals (void) Gbl.Games.ListQuestions = NULL; /* Public activity */ - Gbl.Timeline.WhichUsrs = TL_DEFAULT_WHICH_USRS; + Gbl.Timeline.Who = TL_DEFAULT_WHO; /* Forums */ Gbl.Forum.ForumSet = For_DEFAULT_FORUM_SET; diff --git a/swad_global.h b/swad_global.h index 92f998ad..1f67cca4 100644 --- a/swad_global.h +++ b/swad_global.h @@ -579,7 +579,7 @@ struct Globals } AttEvents; struct { - TL_WhichUsrs_t WhichUsrs; + Usr_Who_t Who; long NotCod; // Used as parameter about social note to be edited, removed... long PubCod; // Used as parameter about social publishing to be edited, removed... } Timeline; diff --git a/swad_layout.c b/swad_layout.c index dfd022f7..55b895de 100644 --- a/swad_layout.c +++ b/swad_layout.c @@ -783,10 +783,10 @@ static void Lay_WriteScriptParamsAJAX (void) // Refresh parameters HTM_TxtF ("var RefreshParamNxtActNewPub = \"act=%ld\";\n" "var RefreshParamNxtActOldPub = \"act=%ld\";\n" - "var RefreshParamWhichUsrs = \"WhichUsrs=%u\";\n", + "var RefreshParamWho = \"Who=%u\";\n", Act_GetActCod (ActRefNewSocPubGbl), Act_GetActCod (ActRefOldSocPubGbl), - (unsigned) Gbl.Timeline.WhichUsrs); + (unsigned) Gbl.Timeline.Who); break; /* Parameters related with user timeline refreshing */ case ActSeeOthPubPrf: diff --git a/swad_project.c b/swad_project.c index 76183036..7a5c9ff8 100644 --- a/swad_project.c +++ b/swad_project.c @@ -58,7 +58,6 @@ extern struct Globals Gbl; /*****************************************************************************/ /***** Parameters used to filter listing of projects *****/ -#define Prj_PARAM_WHO_NAME "Who" #define Prj_PARAM_PRE_NON_NAME "PreNon" #define Prj_PARAM_HID_VIS_NAME "HidVis" #define Prj_PARAM_FAULTIN_NAME "Faulti" @@ -134,17 +133,16 @@ static void Prj_ShowFormToFilterByWarning (void); static void Prj_ShowFormToFilterByDpt (void); static void Prj_PutCurrentParams (void); -static void Prj_PutHiddenParamWho (Usr_Who_t Who); 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_GetHiddenParamMy_All (void); 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_ShowProjectsHead (Prj_ProjectView_t ProjectView); static void Prj_ShowTableAllProjectsHead (void); @@ -407,74 +405,38 @@ static void Prj_ShowProjectsInCurrentPage (void) /*****************************************************************************/ /*** Show form to choice whether to show only my projects or all projects ****/ /*****************************************************************************/ -/* -static void Prj_ShowFormToFilterByMy_All (void) - { - extern const char *Txt_PROJECT_MY_ALL_PROJECTS[Prj_NUM_WHOSE_PROJECTS]; - struct Prj_Filter Filter; - Prj_WhoseProjects_t My_All; - static const char *WhoseProjectsIcon[Prj_NUM_WHOSE_PROJECTS] = - { - "mysitemap.png", // Prj_MY__PROJECTS - "sitemap.svg", // Prj_ALL_PROJECTS - }; - - Set_StartOneSettingSelector (); - for (My_All = (Prj_WhoseProjects_t) 0; - My_All <= (Prj_WhoseProjects_t) (Prj_NUM_WHOSE_PROJECTS - 1); - My_All++) - { - HTM_DIV_Begin ("class=\"%s\"", - (Gbl.Prjs.Filter.My_All == My_All) ? "PREF_ON" : - "PREF_OFF"); - Frm_StartForm (ActSeePrj); - Filter.My_All = My_All; - Filter.Assign = Gbl.Prjs.Filter.Assign; - Filter.Hidden = Gbl.Prjs.Filter.Hidden; - Filter.Faulti = Gbl.Prjs.Filter.Faulti; - Filter.DptCod = Gbl.Prjs.Filter.DptCod; - Prj_PutParams (&Filter, - Gbl.Prjs.SelectedOrder, - Gbl.Prjs.CurrentPage, - -1L); - Ico_PutSettingIconLink (WhoseProjectsIcon[My_All], - Txt_PROJECT_MY_ALL_PROJECTS[My_All]); - Frm_EndForm (); - HTM_DIV_End (); - } - Set_EndOneSettingSelector (); - } -*/ static void Prj_ShowFormToFilterByMy_All (void) { struct Prj_Filter Filter; Usr_Who_t Who; + unsigned Mask = 1 << Usr_WHO_ME | + 1 << Usr_WHO_SELECTED | + 1 << Usr_WHO_ALL; Set_StartOneSettingSelector (); - for (Who = (Usr_Who_t) 0; + for (Who = (Usr_Who_t) 1; Who <= (Usr_Who_t) (Usr_NUM_WHO - 1); Who++) - { - HTM_DIV_Begin ("class=\"%s\"", - (Gbl.Prjs.Filter.Who == Who) ? "PREF_ON" : - "PREF_OFF"); - Frm_StartForm (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; - Prj_PutParams (&Filter, - Gbl.Prjs.SelectedOrder, - Gbl.Prjs.CurrentPage, - -1L); - - Usr_PutWhoIcon (Who); - - Frm_EndForm (); - HTM_DIV_End (); - } + if (Mask & (1 << Who)) + { + HTM_DIV_Begin ("class=\"%s\"", + (Gbl.Prjs.Filter.Who == Who) ? "PREF_ON" : + "PREF_OFF"); + Frm_StartForm (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; + Prj_PutParams (&Filter, + Gbl.Prjs.SelectedOrder, + Gbl.Prjs.CurrentPage, + -1L); + Usr_PutWhoIcon (Who); + Frm_EndForm (); + HTM_DIV_End (); + } Set_EndOneSettingSelector (); } @@ -653,8 +615,8 @@ void Prj_PutParams (struct Prj_Filter *Filter, long PrjCod) { /***** Put filter parameters (which projects to show) *****/ - if (Filter->Who != Prj_FILTER_WHOSE_PROJECTS_DEFAULT) - Prj_PutHiddenParamWho (Filter->Who); + if (Filter->Who != Prj_FILTER_WHO_DEFAULT) + Usr_PutHiddenParamWho (Filter->Who); if (Filter->Assign != ((unsigned) Prj_FILTER_ASSIGNED_DEFAULT | (unsigned) Prj_FILTER_NONASSIG_DEFAULT)) @@ -692,11 +654,6 @@ void Prj_PutParams (struct Prj_Filter *Filter, /*********************** Put hidden params for projects **********************/ /*****************************************************************************/ -static void Prj_PutHiddenParamWho (Usr_Who_t Who) - { - Par_PutHiddenParamUnsigned (NULL,Prj_PARAM_WHO_NAME,(unsigned) Who); - } - static void Prj_PutHiddenParamAssign (unsigned Assign) { Par_PutHiddenParamUnsigned (NULL,Prj_PARAM_PRE_NON_NAME,Assign); @@ -721,14 +678,6 @@ static void Prj_PutHiddenParamDptCod (long DptCod) /*********************** Get hidden params for projects **********************/ /*****************************************************************************/ -static void Prj_GetHiddenParamMy_All (void) - { - Gbl.Prjs.Filter.Who = (Usr_Who_t) Par_GetParToUnsignedLong (Prj_PARAM_WHO_NAME, - 0, - Usr_NUM_WHO - 1, - Prj_FILTER_WHOSE_PROJECTS_DEFAULT); - } - static void Prj_GetHiddenParamPreNon (void) { Gbl.Prjs.Filter.Assign = (unsigned) Par_GetParToUnsignedLong (Prj_PARAM_PRE_NON_NAME, @@ -784,7 +733,7 @@ static void Prj_GetHiddenParamDptCod (void) static void Prj_GetParams (void) { /***** Get filter (which projects to show) *****/ - Prj_GetHiddenParamMy_All (); + Prj_GetParamWho (); Prj_GetHiddenParamPreNon (); Prj_GetHiddenParamHidVis (); Prj_GetHiddenParamFaulti (); @@ -795,6 +744,24 @@ static void Prj_GetParams (void) Gbl.Prjs.CurrentPage = Pag_GetParamPagNum (Pag_PROJECTS); } +/*****************************************************************************/ +/************* Get parameter with whose users' projects to view **************/ +/*****************************************************************************/ + +static void Prj_GetParamWho (void) + { + /***** Get which users I want to see *****/ + Gbl.Prjs.Filter.Who = Usr_GetHiddenParamWho (); + + /***** If parameter Who is not present, get it from database *****/ + // if (Gbl.Prjs.Filter.Who == Usr_WHO_UNKNOWN) + // Gbl.Prjs.Filter.Who = Prj_GetWhoFromDB (); + + /***** 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; + } + /*****************************************************************************/ /******************* Write header with fields of a project *******************/ /*****************************************************************************/ @@ -2745,7 +2712,7 @@ void Prj_GetListProjects (void) break; } break; - case Usr_WHO_SOME: + case Usr_WHO_SELECTED: case Usr_WHO_ALL: switch (Gbl.Prjs.SelectedOrder) { @@ -2776,6 +2743,9 @@ void Prj_GetListProjects (void) break; } break; + default: + Lay_ShowErrorAndExit ("Wrong parameter which users."); + break; } /* Free allocated memory for subqueries */ diff --git a/swad_project.h b/swad_project.h index 16946265..ebc8b2af 100644 --- a/swad_project.h +++ b/swad_project.h @@ -40,8 +40,8 @@ #define Prj_EDITABLE_DEFAULT true /***** Filters to list projects *****/ -/* My projects / selected users' projects / all projects */ -#define Prj_FILTER_WHOSE_PROJECTS_DEFAULT Usr_WHO_ME +/* Whose projects */ +#define Prj_FILTER_WHO_DEFAULT Usr_WHO_ME /* Assigned projects / non-assigned projects */ #define Prj_NUM_ASSIGNED_NONASSIG 2 @@ -89,8 +89,7 @@ typedef enum /* Struct with all filters */ struct Prj_Filter { - // Prj_WhoseProjects_t My_All; // Show my / all projects - Usr_Who_t Who; // Show my / some / all projects + Usr_Who_t Who; // Show my / selected users' / all projects unsigned Assign; // Show assigned / non assigned projects unsigned Hidden; // Show hidden / visible projects unsigned Faulti; // Show faulty / faultless projects diff --git a/swad_text.c b/swad_text.c index 8971cf9c..b28fd4c3 100644 --- a/swad_text.c +++ b/swad_text.c @@ -30944,52 +30944,7 @@ const char *Txt_PROJECT_FAULTY_FAULTLESS_PROJECTS[Prj_NUM_FAULTINESS] = "Projetos sem falhas" #endif }; -/* -const char *Txt_PROJECT_MY_ALL_PROJECTS[Prj_NUM_WHOSE_PROJECTS] = - { - // Prj_MY__PROJECTS -#if L==1 // ca - "Només els meus projectes" -#elif L==2 // de - "Nur meine Projekte" -#elif L==3 // en - "Only my projects" -#elif L==4 // es - "Solo mis proyectos" -#elif L==5 // fr - "Uniquement mes projets" -#elif L==6 // gn - "Solo mis proyectos" // Okoteve traducción -#elif L==7 // it - "Solo i miei progetti" -#elif L==8 // pl - "Tylko moje projekty" -#elif L==9 // pt - "Apenas os meus projetos" -#endif - , - // Prj_ALL_PROJECTS -#if L==1 // ca - "Tots els projectes" -#elif L==2 // de - "Alle Projekte" -#elif L==3 // en - "All projects" -#elif L==4 // es - "Todos los proyectos" -#elif L==5 // fr - "Tous les projets" -#elif L==6 // gn - "Todos los proyectos" // Okoteve traducción -#elif L==7 // it - "Tutti i progetti" -#elif L==8 // pl - "Wszystkie projekty" -#elif L==9 // pt - "Todos os projetos" -#endif - }; -*/ + const char *Txt_PROJECT_ASSIGNED_NONASSIGNED_PLURAL[Prj_NUM_ASSIGNED_NONASSIG] = { // Prj_ASSIGNED @@ -49784,54 +49739,6 @@ const char *Txt_TIMELINE_posts = "publicações"; #endif -const char *Txt_TIMELINE_WHICH_USERS[TL_NUM_WHICH_USRS] = - { - // TL_USRS_UNKNOWN - NULL - , - // TL_USRS_FOLLOWED -#if L==1 // ca - "Usuaris que segueixo" -#elif L==2 // de - "Benutzer Ich folge" -#elif L==3 // en - "Users I'm following" -#elif L==4 // es - "Usuarios que sigo" -#elif L==5 // fr - "Utilisateurs qui je suis" -#elif L==6 // gn - "Usuarios que sigo" // Okoteve traducción -#elif L==7 // it - "Utenti che sto seguenti" -#elif L==8 // pl - "Użytkownicy, którzy mam następujące" -#elif L==9 // pt - "Usuários que estou seguindo" -#endif - , - // TL_USRS_ALL -#if L==1 // ca - "Tots els usuaris" -#elif L==2 // de - "Alle Benutzer" -#elif L==3 // en - "All users" -#elif L==4 // es - "Todos los usuarios" -#elif L==5 // fr - "Tous les utilisateurs" -#elif L==6 // gn - "Todos los usuarios" // Okoteve traducción -#elif L==7 // it - "Tutti gli utenti" -#elif L==8 // pl - "Wszyscy użytkownicy" -#elif L==9 // pt - "Todos os usuários" -#endif - }; - const char *Txt_TIMETABLE_TYPES[TT_NUM_TIMETABLE_TYPES] = { // TT_COURSE_TIMETABLE @@ -53271,6 +53178,96 @@ const char *Txt_Where_s_USER = "Onde está %s?"; #endif +const char *Txt_WHO[Usr_NUM_WHO] = + { + // Usr_WHO_UNKNOWN + NULL + , + // Usr_WHO_ME +#if L==1 // ca + "Jo" +#elif L==2 // de + "Mich" +#elif L==3 // en + "Me" +#elif L==4 // es + "Yo" +#elif L==5 // fr + "Moi" +#elif L==6 // gn + "Che" +#elif L==7 // it + "Me" +#elif L==8 // pl + "Mnie" +#elif L==9 // pt + "Eu" +#endif + , + // Usr_WHO_SOME +#if L==1 // ca + "Usuaris seleccionats" +#elif L==2 // de + "Ausgewählte Benutzer" +#elif L==3 // en + "Selected users" +#elif L==4 // es + "Usuarios seleccionados" +#elif L==5 // fr + "Utilisateurs sélectionnés" +#elif L==6 // gn + "Usuarios seleccionados" // Okoteve traducción +#elif L==7 // it + "Utenti selezionati" +#elif L==8 // pl + "Wybrani użytkownicy" +#elif L==9 // pt + "Usuários selecionados" +#endif + , + // Usr_WHO_FOLLOWED +#if L==1 // ca + "Usuaris que segueixo" +#elif L==2 // de + "Benutzer Ich folge" +#elif L==3 // en + "Users I'm following" +#elif L==4 // es + "Usuarios que sigo" +#elif L==5 // fr + "Utilisateurs qui je suis" +#elif L==6 // gn + "Usuarios que sigo" // Okoteve traducción +#elif L==7 // it + "Utenti che sto seguenti" +#elif L==8 // pl + "Użytkownicy, którzy mam następujące" +#elif L==9 // pt + "Usuários que estou seguindo" +#endif + , + // Usr_WHO_ALL +#if L==1 // ca + "Tots els usuaris" +#elif L==2 // de + "Alle Benutzer" +#elif L==3 // en + "All users" +#elif L==4 // es + "Todos los usuarios" +#elif L==5 // fr + "Tous les utilisateurs" +#elif L==6 // gn + "Todos los usuarios" // Okoteve traducción +#elif L==7 // it + "Tutti gli utenti" +#elif L==8 // pl + "Wszyscy użytkownicy" +#elif L==9 // pt + "Todos os usuários" +#endif + }; + const char *Txt_Who_to_follow = #if L==1 // ca "A qui seguir"; diff --git a/swad_timeline.c b/swad_timeline.c index 4261a9d0..2f135451 100644 --- a/swad_timeline.c +++ b/swad_timeline.c @@ -166,10 +166,9 @@ static void TL_FormFavSha (Act_Action_t ActionGbl,Act_Action_t ActionUsr, const char *ParamCod, const char *Icon,const char *Title); -static void TL_PutFormWhichUsrs (void); -static void TL_PutParamWhichUsrs (void); -static void TL_GetParamsWhichUsrs (void); -static TL_WhichUsrs_t TL_GetWhichUsrsFromDB (void); +static void TL_PutFormWho (void); +static void TL_GetParamWho (void); +static Usr_Who_t TL_GetWhoFromDB (void); static void TL_SaveWhichUsersInDB (void); static void TL_ShowWarningYouDontFollowAnyUser (void); @@ -318,7 +317,7 @@ void TL_ShowTimelineGbl1 (void) TL_MarkMyNotifAsSeen (); /***** Get which users *****/ - TL_GetParamsWhichUsrs (); + TL_GetParamWho (); /***** Save which users in database *****/ if (Gbl.Action.Act == ActSeeSocTmlGbl) // Only in action to see global timeline @@ -458,7 +457,7 @@ void TL_RefreshNewTimelineGbl (void) if (Gbl.Session.IsOpen) // If session has been closed, do not write anything { /***** Get which users *****/ - TL_GetParamsWhichUsrs (); + TL_GetParamWho (); /***** Build query to get timeline *****/ TL_BuildQueryToGetTimeline (&Query, @@ -480,7 +479,7 @@ void TL_RefreshNewTimelineGbl (void) void TL_RefreshOldTimelineGbl (void) { /***** Get which users *****/ - TL_GetParamsWhichUsrs (); + TL_GetParamWho (); /***** Show old publications *****/ TL_GetAndShowOldTimeline (TL_TIMELINE_GBL); @@ -591,9 +590,13 @@ static void TL_BuildQueryToGetTimeline (char **Query, Gbl.Usrs.Other.UsrDat.UsrCod); break; case TL_TIMELINE_GBL: // Show the global timeline - switch (Gbl.Timeline.WhichUsrs) + switch (Gbl.Timeline.Who) { - case TL_USRS_FOLLOWED: // Show the timeline of the users I follow + case Usr_WHO_ME: // Show my timeline + sprintf (SubQueryPublishers,"PublisherCod=%ld AND ", + Gbl.Usrs.Me.UsrDat.UsrCod); + break; + case Usr_WHO_FOLLOWED: // Show the timeline of the users I follow DB_Query ("can not create temporary table", "CREATE TEMPORARY TABLE publishers " "(UsrCod INT NOT NULL,UNIQUE INDEX(UsrCod)) ENGINE=MEMORY" @@ -606,7 +609,7 @@ static void TL_BuildQueryToGetTimeline (char **Query, sprintf (SubQueryPublishers,"social_pubs.PublisherCod=publishers.UsrCod AND "); break; - case TL_USRS_ALL: // Show the timeline of all users + case Usr_WHO_ALL: // Show the timeline of all users SubQueryPublishers[0] = '\0'; break; default: @@ -724,14 +727,15 @@ static void TL_BuildQueryToGetTimeline (char **Query, RangePubsToGet.Bottom); break; case TL_TIMELINE_GBL: // Show the global timeline - switch (Gbl.Timeline.WhichUsrs) + switch (Gbl.Timeline.Who) { - case TL_USRS_FOLLOWED: // Show the timeline of the users I follow - sprintf (SubQueryRangeBottom,"social_pubs.PubCod>%ld AND ", + case Usr_WHO_ME: // Show my timeline + case Usr_WHO_ALL: // Show the timeline of all users + sprintf (SubQueryRangeBottom,"PubCod>%ld AND ", RangePubsToGet.Bottom); break; - case TL_USRS_ALL: // Show the timeline of all users - sprintf (SubQueryRangeBottom,"PubCod>%ld AND ", + case Usr_WHO_FOLLOWED:// Show the timeline of the users I follow + sprintf (SubQueryRangeBottom,"social_pubs.PubCod>%ld AND ", RangePubsToGet.Bottom); break; default: @@ -751,14 +755,15 @@ static void TL_BuildQueryToGetTimeline (char **Query, RangePubsToGet.Top); break; case TL_TIMELINE_GBL: // Show the global timeline - switch (Gbl.Timeline.WhichUsrs) + switch (Gbl.Timeline.Who) { - case TL_USRS_FOLLOWED: // Show the timeline of the users I follow - sprintf (SubQueryRangeTop,"social_pubs.PubCod<%ld AND ", + case Usr_WHO_ME: // Show my timeline + case Usr_WHO_ALL: // Show the timeline of all users + sprintf (SubQueryRangeTop,"PubCod<%ld AND ", RangePubsToGet.Top); break; - case TL_USRS_ALL: // Show the timeline of all users - sprintf (SubQueryRangeTop,"PubCod<%ld AND ", + case Usr_WHO_FOLLOWED:// Show the timeline of the users I follow + sprintf (SubQueryRangeTop,"social_pubs.PubCod<%ld AND ", RangePubsToGet.Top); break; default: @@ -786,9 +791,20 @@ static void TL_BuildQueryToGetTimeline (char **Query, SubQueryAlreadyExists); break; case TL_TIMELINE_GBL: // Show the global timeline - switch (Gbl.Timeline.WhichUsrs) + switch (Gbl.Timeline.Who) { - case TL_USRS_FOLLOWED: // Show the timeline of the users I follow + case Usr_WHO_ME: // Show my timeline + NumPubs = + (unsigned) DB_QuerySELECT (&mysql_res,"can not get publication", + "SELECT PubCod,NotCod" + " FROM social_pubs" + " WHERE %s%s%s%s" + " ORDER BY PubCod DESC LIMIT 1", + SubQueryRangeBottom,SubQueryRangeTop, + SubQueryPublishers, + SubQueryAlreadyExists); + break; + case Usr_WHO_FOLLOWED: // Show the timeline of the users I follow NumPubs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get publication", "SELECT PubCod,NotCod" @@ -799,7 +815,7 @@ static void TL_BuildQueryToGetTimeline (char **Query, SubQueryPublishers, SubQueryAlreadyExists); break; - case TL_USRS_ALL: // Show the timeline of all users + case Usr_WHO_ALL: // Show the timeline of all users NumPubs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get publication", "SELECT PubCod,NotCod" @@ -1001,7 +1017,7 @@ static void TL_ShowTimeline (char *Query, /***** Put form to select users whom public activity is displayed *****/ if (GlobalTimeline) - TL_PutFormWhichUsrs (); + TL_PutFormWho (); /***** Form to write a new post *****/ if (GlobalTimeline || ItsMe) @@ -1090,7 +1106,7 @@ static void TL_FormStart (Act_Action_t ActionGbl,Act_Action_t ActionUsr) else { Frm_StartForm (ActionGbl); - TL_PutParamWhichUsrs (); + Usr_PutHiddenParamWho (Gbl.Timeline.Who); } } @@ -1155,82 +1171,66 @@ static void TL_FormFavSha (Act_Action_t ActionGbl,Act_Action_t ActionUsr, /******** Show form to select users whom public activity is displayed ********/ /*****************************************************************************/ -static void TL_PutFormWhichUsrs (void) +static void TL_PutFormWho (void) { - extern const char *Txt_TIMELINE_WHICH_USERS[TL_NUM_WHICH_USRS]; - TL_WhichUsrs_t WhichUsrs; - static const char *Icon[TL_NUM_WHICH_USRS] = - { - NULL, // TL_USRS_UNKNOWN - "user-check.svg", // TL_USRS_FOLLOWED - "users.svg", // TL_USRS_ALL - }; + Usr_Who_t Who; + unsigned Mask = 1 << Usr_WHO_ME | + 1 << Usr_WHO_FOLLOWED | + 1 << Usr_WHO_ALL; /***** Setting selector for which users *****/ Set_StartSettingsHead (); Set_StartOneSettingSelector (); - for (WhichUsrs = (TL_WhichUsrs_t) 1; - WhichUsrs < TL_NUM_WHICH_USRS; - WhichUsrs++) - { - HTM_DIV_Begin ("class=\"%s\"", - WhichUsrs == Gbl.Timeline.WhichUsrs ? "PREF_ON" : - "PREF_OFF"); - Frm_StartForm (ActSeeSocTmlGbl); - Par_PutHiddenParamUnsigned (NULL,"WhichUsrs",WhichUsrs); - Ico_PutSettingIconLink (Icon[WhichUsrs],Txt_TIMELINE_WHICH_USERS[WhichUsrs]); - Frm_EndForm (); - HTM_DIV_End (); - } + for (Who = (Usr_Who_t) 0; + Who <= (Usr_Who_t) (Usr_NUM_WHO - 1); + Who++) + if (Mask & (1 << Who)) + { + HTM_DIV_Begin ("class=\"%s\"", + Who == Gbl.Timeline.Who ? "PREF_ON" : + "PREF_OFF"); + Frm_StartForm (ActSeeSocTmlGbl); + Par_PutHiddenParamUnsigned (NULL,"Who",(unsigned) Who); + Usr_PutWhoIcon (Who); + Frm_EndForm (); + HTM_DIV_End (); + } Set_EndOneSettingSelector (); Set_EndSettingsHead (); /***** Show warning if I do not follow anyone *****/ - if (Gbl.Timeline.WhichUsrs == TL_USRS_FOLLOWED) + if (Gbl.Timeline.Who == Usr_WHO_FOLLOWED) TL_ShowWarningYouDontFollowAnyUser (); } -/*****************************************************************************/ -/***** Put hidden parameter with which users to view in global timeline ******/ -/*****************************************************************************/ - -static void TL_PutParamWhichUsrs (void) - { - Par_PutHiddenParamUnsigned (NULL,"WhichUsrs",Gbl.Timeline.WhichUsrs); - } - /*****************************************************************************/ /********* Get parameter with which users to view in global timeline *********/ /*****************************************************************************/ -static void TL_GetParamsWhichUsrs (void) +static void TL_GetParamWho (void) { /***** Get which users I want to see *****/ - Gbl.Timeline.WhichUsrs = (TL_WhichUsrs_t) - Par_GetParToUnsignedLong ("WhichUsrs", - 1, - TL_NUM_WHICH_USRS - 1, - (unsigned long) TL_USRS_UNKNOWN); + Gbl.Timeline.Who = Usr_GetHiddenParamWho (); - /***** If parameter WhichUsrs is not present, get it from database *****/ - if (Gbl.Timeline.WhichUsrs == TL_USRS_UNKNOWN) - Gbl.Timeline.WhichUsrs = TL_GetWhichUsrsFromDB (); + /***** If parameter Who is not present, get it from database *****/ + if (Gbl.Timeline.Who == Usr_WHO_UNKNOWN) + Gbl.Timeline.Who = TL_GetWhoFromDB (); - /***** If parameter WhichUsrs is unknown, set it to default *****/ - if (Gbl.Timeline.WhichUsrs == TL_USRS_UNKNOWN) - Gbl.Timeline.WhichUsrs = TL_DEFAULT_WHICH_USRS; + /***** If parameter Who is unknown, set it to default *****/ + if (Gbl.Timeline.Who == Usr_WHO_UNKNOWN) + Gbl.Timeline.Who = TL_DEFAULT_WHO; } /*****************************************************************************/ /********** Get user's last data from database giving a user's code **********/ /*****************************************************************************/ -static TL_WhichUsrs_t TL_GetWhichUsrsFromDB (void) +static Usr_Who_t TL_GetWhoFromDB (void) { MYSQL_RES *mysql_res; MYSQL_ROW row; unsigned UnsignedNum; - TL_WhichUsrs_t WhichUsrs = TL_USRS_UNKNOWN; + Usr_Who_t Who = Usr_WHO_UNKNOWN; /***** Get which users from database *****/ if (DB_QuerySELECT (&mysql_res,"can not get timeline users from user's last data", @@ -1240,16 +1240,16 @@ static TL_WhichUsrs_t TL_GetWhichUsrsFromDB (void) { row = mysql_fetch_row (mysql_res); - /* Get which users */ + /* Get who */ if (sscanf (row[0],"%u",&UnsignedNum) == 1) - if (UnsignedNum < TL_NUM_WHICH_USRS) - WhichUsrs = (TL_WhichUsrs_t) UnsignedNum; + if (UnsignedNum < Usr_NUM_WHO) + Who = (Usr_Who_t) UnsignedNum; } /***** Free structure that stores the query result *****/ DB_FreeMySQLResult (&mysql_res); - return WhichUsrs; + return Who; } /*****************************************************************************/ @@ -1260,15 +1260,15 @@ static void TL_SaveWhichUsersInDB (void) { if (Gbl.Usrs.Me.Logged) { - if (Gbl.Timeline.WhichUsrs == TL_USRS_UNKNOWN) - Gbl.Timeline.WhichUsrs = TL_DEFAULT_WHICH_USRS; + if (Gbl.Timeline.Who == Usr_WHO_UNKNOWN) + Gbl.Timeline.Who = TL_DEFAULT_WHO; /***** Update which users in database *****/ - // WhichUsrs is stored in usr_last for next time I log in + // Who is stored in usr_last for next time I log in DB_QueryUPDATE ("can not update timeline users in user's last data", "UPDATE usr_last SET TimelineUsrs=%u" " WHERE UsrCod=%ld", - (unsigned) Gbl.Timeline.WhichUsrs, + (unsigned) Gbl.Timeline.Who, Gbl.Usrs.Me.UsrDat.UsrCod); } } @@ -3834,7 +3834,7 @@ static void TL_PutParamsRemoveNote (void) if (Gbl.Usrs.Other.UsrDat.UsrCod > 0) Usr_PutParamOtherUsrCodEncrypted (); else - TL_PutParamWhichUsrs (); + Usr_PutHiddenParamWho (Gbl.Timeline.Who); TL_PutHiddenParamNotCod (Gbl.Timeline.NotCod); } @@ -4147,7 +4147,7 @@ static void TL_PutParamsRemoveCommment (void) if (Gbl.Usrs.Other.UsrDat.UsrCod > 0) Usr_PutParamOtherUsrCodEncrypted (); else - TL_PutParamWhichUsrs (); + Usr_PutHiddenParamWho (Gbl.Timeline.Who); TL_PutHiddenParamPubCod (Gbl.Timeline.PubCod); } diff --git a/swad_timeline.h b/swad_timeline.h index d941cfbd..f1a3cf4d 100644 --- a/swad_timeline.h +++ b/swad_timeline.h @@ -42,14 +42,7 @@ /******************************** Public types *******************************/ /*****************************************************************************/ -#define TL_NUM_WHICH_USRS 3 -typedef enum - { - TL_USRS_UNKNOWN = 0, - TL_USRS_FOLLOWED = 1, - TL_USRS_ALL = 2, - } TL_WhichUsrs_t; // Which users I want to see: only users I follow or all users -#define TL_DEFAULT_WHICH_USRS TL_USRS_FOLLOWED +#define TL_DEFAULT_WHO Usr_WHO_FOLLOWED #define TL_NUM_PUB_TYPES 4 // If the numbers assigned to each event type change, diff --git a/swad_user.c b/swad_user.c index 30d26229..36d36258 100644 --- a/swad_user.c +++ b/swad_user.c @@ -9731,25 +9731,51 @@ void Usr_ShowTableCellWithUsrData (struct UsrData *UsrDat,unsigned NumRows) void Usr_PutWhoIcon (Usr_Who_t Who) { + extern const char *Txt_WHO[Usr_NUM_WHO]; + switch (Who) { + case Usr_WHO_UNKNOWN: + break; case Usr_WHO_ME: HTM_INPUT_IMAGE (Gbl.Usrs.Me.PhotoURL[0] ? Gbl.Usrs.Me.PhotoURL : Cfg_URL_ICON_PUBLIC, Gbl.Usrs.Me.PhotoURL[0] ? NULL : "usr_bl.jpg", - "Yo", // TODO: Need translation!!!! + Txt_WHO[Who], "ICO_HIGHLIGHT PHOTO15x20"); break; - case Usr_WHO_SOME: + case Usr_WHO_SELECTED: + case Usr_WHO_FOLLOWED: HTM_INPUT_IMAGE (Cfg_URL_ICON_PUBLIC,"user-check.svg", - "Usuarios seleccionados", // TODO: Need translation!!!! + Txt_WHO[Who], "ICO_HIGHLIGHT ICOx20"); break; case Usr_WHO_ALL: HTM_INPUT_IMAGE (Cfg_URL_ICON_PUBLIC,"users.svg", - "Todos", // TODO: Need translation!!!! + Txt_WHO[Who], "ICO_HIGHLIGHT ICOx20"); break; } } + +/*****************************************************************************/ +/*************** Put hidden param for which users are involved ***************/ +/*****************************************************************************/ + +void Usr_PutHiddenParamWho (Usr_Who_t Who) + { + Par_PutHiddenParamUnsigned (NULL,"Who",(unsigned) Who); + } + +/*****************************************************************************/ +/*************** Get hidden param for which users are involved ***************/ +/*****************************************************************************/ + +Usr_Who_t Usr_GetHiddenParamWho (void) + { + return (Usr_Who_t) Par_GetParToUnsignedLong ("Who", + 1, + Usr_NUM_WHO - 1, + Usr_WHO_UNKNOWN); + } diff --git a/swad_user.h b/swad_user.h index faab7f1c..3b70625b 100644 --- a/swad_user.h +++ b/swad_user.h @@ -142,11 +142,13 @@ typedef enum Usr_OTHER, } Usr_MeOrOther_t; -#define Usr_NUM_WHO 3 +#define Usr_NUM_WHO 5 typedef enum { + Usr_WHO_UNKNOWN, Usr_WHO_ME, - Usr_WHO_SOME, + Usr_WHO_SELECTED, + Usr_WHO_FOLLOWED, Usr_WHO_ALL, } Usr_Who_t; #define Usr_WHO_DEFAULT Usr_WHO_ALL @@ -497,5 +499,7 @@ void Usr_WriteAuthor1Line (long UsrCod,bool Hidden); void Usr_ShowTableCellWithUsrData (struct UsrData *UsrDat,unsigned NumRows); void Usr_PutWhoIcon (Usr_Who_t Who); +void Usr_PutHiddenParamWho (Usr_Who_t Who); +Usr_Who_t Usr_GetHiddenParamWho (void); #endif