diff --git a/swad_changelog.h b/swad_changelog.h index 75864d24..6ecbbdb3 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -629,10 +629,11 @@ TODO: Emilce Barrera Mesa: Podr TODO: Emilce Barrera Mesa: Mis estudiantes presentan muchas dificultades a la hora de poner la foto porque la plataforma es muy exigente respecto al fondo de la imagen. */ -#define Log_PLATFORM_VERSION "SWAD 22.87 (2023-03-30)" +#define Log_PLATFORM_VERSION "SWAD 22.87.1 (2023-03-31)" #define CSS_FILE "swad22.86.css" #define JS_FILE "swad22.49.js" /* + Version 22.87.1: Mar 31, 2023 Some messages translated. (338610 lines) Version 22.87: Mar 30, 2023 Code refactoring in select forms. (338607 lines) Version 22.86.3: Mar 30, 2023 Code refactoring in forms. (338710 lines) Version 22.86.2: Mar 30, 2023 New links to manual about resource clipboard. diff --git a/swad_date.c b/swad_date.c index 2adafdf2..50e4f441 100644 --- a/swad_date.c +++ b/swad_date.c @@ -739,22 +739,26 @@ void Dat_WriteFormClientLocalDateTimeFromTimeUTC (const char *Id, [Dat_HMS_TO_000000 ] = "setHMSTo000000('%s');", // Set HH:MM:SS form selectors to 00:00:00 [Dat_HMS_TO_235959 ] = "setHMSTo235959('%s');", // Set HH:MM:SS form selectors to 23:59:59 }; + char *FuncsYearMonth; + char *FuncDayHMS; char *IdTimeUTC; - char *FuncsOnChange; - char *FuncOnChange; + + /***** Build strings for onchange functions *****/ + if (asprintf (&FuncsYearMonth,"adjustDateForm('%s');" + "setUTCFromLocalDateTimeForm('%s');", + Id,Id) < 0) + Err_NotEnoughMemoryExit (); + if (asprintf (&FuncDayHMS,"setUTCFromLocalDateTimeForm('%s');", + Id) < 0) + Err_NotEnoughMemoryExit (); /***** Begin table *****/ HTM_TABLE_Begin ("DATE_RANGE"); HTM_TR_Begin (NULL); - if (asprintf (&FuncsOnChange,"adjustDateForm('%s');" - "setUTCFromLocalDateTimeForm('%s');", - Id,Id) < 0) - Err_NotEnoughMemoryExit (); - /***** Year *****/ HTM_TD_Begin ("class=\"RM\""); - HTM_SELECT_Begin (SubmitOnChange,FuncsOnChange, + HTM_SELECT_Begin (SubmitOnChange,FuncsYearMonth, "id=\"%sYear\" name=\"%sYear\"" " class=\"INPUT_%s\"", Id,Dat_ParName[StartEndTime], @@ -769,7 +773,7 @@ void Dat_WriteFormClientLocalDateTimeFromTimeUTC (const char *Id, /***** Month *****/ HTM_TD_Begin ("class=\"CM\""); - HTM_SELECT_Begin (SubmitOnChange,FuncsOnChange, + HTM_SELECT_Begin (SubmitOnChange,FuncsYearMonth, "id=\"%sMonth\" name=\"%sMonth\"" " class=\"INPUT_%s\"", Id,Dat_ParName[StartEndTime], @@ -782,15 +786,9 @@ void Dat_WriteFormClientLocalDateTimeFromTimeUTC (const char *Id, HTM_SELECT_End (); HTM_TD_End (); - free (FuncsOnChange); - - if (asprintf (&FuncOnChange,"setUTCFromLocalDateTimeForm('%s');", - Id) < 0) - Err_NotEnoughMemoryExit (); - /***** Day *****/ HTM_TD_Begin ("class=\"LM\""); - HTM_SELECT_Begin (SubmitOnChange,FuncOnChange, + HTM_SELECT_Begin (SubmitOnChange,FuncDayHMS, "id=\"%sDay\" name=\"%sDay\"" " class=\"INPUT_%s\"", Id,Dat_ParName[StartEndTime], @@ -805,7 +803,7 @@ void Dat_WriteFormClientLocalDateTimeFromTimeUTC (const char *Id, /***** Hour *****/ HTM_TD_Begin ("class=\"RM\""); - HTM_SELECT_Begin (SubmitOnChange,FuncOnChange, + HTM_SELECT_Begin (SubmitOnChange,FuncDayHMS, "id=\"%sHour\" name=\"%sHour\"" " class=\"INPUT_%s\"", Id,Dat_ParName[StartEndTime], @@ -820,7 +818,7 @@ void Dat_WriteFormClientLocalDateTimeFromTimeUTC (const char *Id, /***** Minute *****/ HTM_TD_Begin ("class=\"CM\""); - HTM_SELECT_Begin (SubmitOnChange,FuncOnChange, + HTM_SELECT_Begin (SubmitOnChange,FuncDayHMS, "id=\"%sMinute\" name=\"%sMinute\"" " class=\"INPUT_%s\"", Id,Dat_ParName[StartEndTime], @@ -837,7 +835,7 @@ void Dat_WriteFormClientLocalDateTimeFromTimeUTC (const char *Id, if (FormSeconds == Dat_FORM_SECONDS_ON) { HTM_TD_Begin ("class=\"LM\""); - HTM_SELECT_Begin (SubmitOnChange,FuncOnChange, + HTM_SELECT_Begin (SubmitOnChange,FuncDayHMS, "id=\"%sSecond\" name=\"%sSecond\"" " class=\"INPUT_%s\"", Id,Dat_ParName[StartEndTime], @@ -851,12 +849,14 @@ void Dat_WriteFormClientLocalDateTimeFromTimeUTC (const char *Id, HTM_TD_End (); } - free (FuncOnChange); - /***** End table *****/ HTM_TR_End (); HTM_TABLE_End (); + /***** Free strings for onchange functions *****/ + free (FuncsYearMonth); + free (FuncDayHMS); + /***** Hidden field with UTC time (seconds since 1970) used to send time *****/ if (asprintf (&IdTimeUTC,"%sTimeUTC",Id) < 0) Err_NotEnoughMemoryExit (); diff --git a/swad_text_action.c b/swad_text_action.c index 16cff800..b1546df7 100644 --- a/swad_text_action.c +++ b/swad_text_action.c @@ -49,7 +49,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = #elif L==5 // fr "N'importe quelle action" #elif L==6 // gn - "Cualquier acción" // Okoteve traducción + "Oimera&etilde;va tembiapo" #elif L==7 // it "Qualsiasi azione" #elif L==8 // pl @@ -57,7 +57,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = #elif L==9 // pt "Qualquer ação" #elif L==10 // tr - "Any action" // Çeviri lazim! + "Herhangi bir eylem" #endif , [ActUnk] = @@ -72,7 +72,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = #elif L==5 // fr "Action inconnue" #elif L==6 // gn - "Acción desconocida" // Okoteve traducción + "Tembiapo ndojekuaáiva" #elif L==7 // it "Azione sconosciuta" #elif L==8 // pl @@ -80,7 +80,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = #elif L==9 // pt "Ação desconhecida" #elif L==10 // tr - "Unknown action" // Çeviri lazim! + "Bilinmeyen eylem" #endif , [ActMnu] = @@ -95,7 +95,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = #elif L==5 // fr "Afficher le menu" #elif L==6 // gn - "Mostrar menú" // Okoteve traducción + "Ohechauka menú" #elif L==7 // it "Mostra menu" #elif L==8 // pl @@ -103,7 +103,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = #elif L==9 // pt "Mostrar menu" #elif L==10 // tr - "Show menu" // Çeviri lazim! + "Menüyü göster" #endif , [ActRefCon] = @@ -118,7 +118,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = #elif L==5 // fr "Actualiser les notifications et connectés" #elif L==6 // gn - "Refrescar notificaciones y conectados" // Okoteve traducción + "Ombopyahu momarandu ha oñembojoajúva" #elif L==7 // it "Aggiornare le notifiche e gli connessi" #elif L==8 // pl @@ -126,7 +126,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = #elif L==9 // pt "Atualizar notificações e conectados" #elif L==10 // tr - "Refresh notifications and connected" // Çeviri lazim! + "Bildirimleri yenile ve bağlan" #endif , [ActWebSvc] = @@ -141,7 +141,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = #elif L==5 // fr "Service Web (fonction API)" #elif L==6 // gn - "Servicio web (función API)" // Okoteve traducción + "Servicio web (API rembiaporã)" #elif L==7 // it "Servizio Web (funzione API)" #elif L==8 // pl @@ -149,7 +149,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = #elif L==9 // pt "Serviço da Web (função de API)" #elif L==10 // tr - "Web service (API function)" // Çeviri lazim! + "Web hizmeti (API işlevi)" #endif , [ActFrmLogIn] = @@ -164,7 +164,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = #elif L==5 // fr "Page initiale" #elif L==6 // gn - "Página de inicio" // Okoteve traducción + "Página principal" #elif L==7 // it "Landing page" #elif L==8 // pl @@ -172,7 +172,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = #elif L==9 // pt "Landing page" #elif L==10 // tr - "Landing page" // Çeviri lazim! + "Anasayfa" #endif , [ActReqSch] = @@ -187,7 +187,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = #elif L==5 // fr "Demander une recherche" #elif L==6 // gn - "Solicitar búsqueda" // Okoteve traducción + "Mba'ejerure jeheka" #elif L==7 // it "Richiedere la ricerca" #elif L==8 // pl @@ -195,7 +195,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = #elif L==9 // pt "Solicitar pesquisa" #elif L==10 // tr - "Request search" // Çeviri lazim! + "Arama iste" #endif , [ActSeeGblTL] = @@ -210,7 +210,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = #elif L==5 // fr "Afficher chronologie globale" #elif L==6 // gn - "Mostrar timeline global" // Okoteve traducción + "Ohechauka línea de tiempo global" #elif L==7 // it "Mostra timeline globale" #elif L==8 // pl @@ -218,7 +218,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = #elif L==9 // pt "Mostrar timeline global" #elif L==10 // tr - "Show global timeline" // Çeviri lazim! + "Küresel zaman çizelgesini göster" #endif , [ActSeeSocPrf] = @@ -233,7 +233,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = #elif L==5 // fr "Suggérer liste d'utilisateurs à suivre" #elif L==6 // gn - "Sugerir lista de usuarios a seguir" // Okoteve traducción + "Epropone lista de usuarios ojesegui ha>ilde;ua" #elif L==7 // it "Suggerisci elenco di utenti da seguire" #elif L==8 // pl @@ -241,7 +241,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = #elif L==9 // pt "Sugerir lista de usuários a seguir" #elif L==10 // tr - "Suggest list of users to follow" // Çeviri lazim! + "Takip edilecek kullanıcıların listesini öner" #endif , [ActSeeCal] = @@ -256,7 +256,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = #elif L==5 // fr "Afficher le calendrier" #elif L==6 // gn - "Mostrar calendario" // Okoteve traducción + "Ohechauka calendario" #elif L==7 // it "Mostra il calendario" #elif L==8 // pl @@ -264,7 +264,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = #elif L==9 // pt "Mostrar calendário" #elif L==10 // tr - "Show calendar" // Çeviri lazim! + "Takvimi göster" #endif , [ActSeeNtf] = @@ -279,7 +279,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = #elif L==5 // fr "Afficher les notifications" #elif L==6 // gn - "Mostrar notificaciones" // Okoteve traducción + "Ohechauka marandu" #elif L==7 // it "Mostra notifiche" #elif L==8 // pl @@ -287,7 +287,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = #elif L==9 // pt "Mostrar notificações" #elif L==10 // tr - "Show notifications" // Çeviri lazim! + "Bildirimleri göster" #endif , [ActLogIn] = @@ -302,7 +302,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = #elif L==5 // fr "Authentifier l'utilisateur" #elif L==6 // gn - "Autenticar usuario" // Okoteve traducción + "Omoañete puruhára" #elif L==7 // it "Autenticare l'utente" #elif L==8 // pl @@ -310,76 +310,76 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = #elif L==9 // pt "Autenticar usuário" #elif L==10 // tr - "Authenticate user" // Çeviri lazim! + "Kullanıcıyı doğrula" #endif , [ActLogInNew] = #if L==1 // ca - "Authenticate user in empty account" // Necessita traducció + "Autenticar usuari en compte buit" #elif L==2 // de - "Authenticate user in empty account" // Need Übersetzung + "Benutzer in leerem Konto authentifizieren" #elif L==3 // en "Authenticate user in empty account" #elif L==4 // es "Autenticar usuario en cuenta vacía" #elif L==5 // fr - "Authenticate user in empty account" // Besoin de traduction + "Authentifier l'utilisateur dans un compte vide" #elif L==6 // gn - "Autenticar usuario en cuenta vacía" // Okoteve traducción + "Omoañete puruhára cuenta nandi-pe" #elif L==7 // it - "Authenticate user in empty account" // Bisogno di traduzione + "Autenticare l'utente in un account vuoto" #elif L==8 // pl - "Authenticate user in empty account" // Potrzebujesz tlumaczenie + "Uwierzytelnij użytkownika na pustym koncie" #elif L==9 // pt - "Authenticate user in empty account" // Precisa de tradução + "Autenticar usuário em conta vazia" #elif L==10 // tr - "Authenticate user in empty account" // Çeviri lazim! + "Kullanıcının kimliğini boş hesapta doğrulayın" #endif , [ActLogInLan] = #if L==1 // ca - "Change language after authentication" // Necessita traducció + "Canviar idioma després d'autenticar" #elif L==2 // de - "Change language after authentication" // Need Übersetzung + "Sprache nach Authentifizierung ändern" #elif L==3 // en "Change language after authentication" #elif L==4 // es "Cambiar idioma tras autenticar" #elif L==5 // fr - "Change language after authentication" // Besoin de traduction + "Changer de langue après authentification" #elif L==6 // gn - "Cambiar idioma tras autenticar" // Okoteve traducción + "Emoambue ñe'&etilde; emoañete rire" #elif L==7 // it - "Change language after authentication" // Bisogno di traduzione + "Cambia lingua dopo l'autenticazione" #elif L==8 // pl - "Change language after authentication" // Potrzebujesz tlumaczenie + "Zmień język po uwierzytelnieniu" #elif L==9 // pt - "Change language after authentication" // Precisa de tradução + "Alterar idioma após autenticação" #elif L==10 // tr - "Change language after authentication" // Çeviri lazim! + "Kimlik doğrulamasından sonra dili değiştir" #endif , [ActAnnSee] = #if L==1 // ca - "Mark announcement as seen" // Necessita traducció + "Marcar anunci com a vist" #elif L==2 // de - "Mark announcement as seen" // Need Übersetzung + "Ankündigung als gesehen markieren" #elif L==3 // en "Mark announcement as seen" #elif L==4 // es "Marcar anuncio como visto" #elif L==5 // fr - "Mark announcement as seen" // Besoin de traduction + "Marquer l'annonce comme vue" #elif L==6 // gn - "Marcar anuncio como visto" // Okoteve traducción + "Marca anuncio ojehechaháicha" #elif L==7 // it - "Mark announcement as seen" // Bisogno di traduzione + "Segna l'annuncio come visto" #elif L==8 // pl - "Mark announcement as seen" // Potrzebujesz tlumaczenie + "Oznacz ogłoszenie tak, jak widać" #elif L==9 // pt - "Mark announcement as seen" // Precisa de tradução + "Marcar anúncio como visto" #elif L==10 // tr - "Mark announcement as seen" // Çeviri lazim! + "Duyuruyu görüldüğü gibi işaretle" #endif , [ActReqSndNewPwd] = @@ -9057,48 +9057,48 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = , [ActSeeAllExa] = #if L==1 // ca - "See all exams" // Necessita traducció + "See exams" // Necessita traducció #elif L==2 // de - "See all exams" // Need Übersetzung + "See exams" // Need Übersetzung #elif L==3 // en - "See all exams" + "See exams" #elif L==4 // es - "Ver todos los exámenes" + "Ver exámenes" #elif L==5 // fr - "See all exams" // Besoin de traduction + "See exams" // Besoin de traduction #elif L==6 // gn - "Ver todos los exámenes" // Okoteve traducción + "Ver exámenes" // Okoteve traducción #elif L==7 // it - "See all exams" // Bisogno di traduzione + "See exams" // Bisogno di traduzione #elif L==8 // pl - "See all exams" // Potrzebujesz tlumaczenie + "See exams" // Potrzebujesz tlumaczenie #elif L==9 // pt - "See all exams" // Precisa de tradução + "See exams" // Precisa de tradução #elif L==10 // tr - "See all exams" // Çeviri lazim! + "See exams" // Çeviri lazim! #endif , [ActSeeAllGam] = #if L==1 // ca - "See all games" // Necessita traducció + "See games" // Necessita traducció #elif L==2 // de - "See all games" // Need Übersetzung + "See games" // Need Übersetzung #elif L==3 // en - "See all games" + "See games" #elif L==4 // es - "Ver todos los juegos" + "Ver juegos" #elif L==5 // fr - "See all games" // Besoin de traduction + "See games" // Besoin de traduction #elif L==6 // gn - "Ver todos los juegos" // Okoteve traducción + "Ver juegos" // Okoteve traducción #elif L==7 // it - "See all games" // Bisogno di traduzione + "See games" // Bisogno di traduzione #elif L==8 // pl - "See all games" // Potrzebujesz tlumaczenie + "See games" // Potrzebujesz tlumaczenie #elif L==9 // pt - "See all games" // Precisa de tradução + "See games" // Precisa de tradução #elif L==10 // tr - "See all games" // Çeviri lazim! + "See games" // Çeviri lazim! #endif , [ActSeeAllRub] = @@ -28630,25 +28630,25 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = , [ActSeeAllNot] = #if L==1 // ca - "See all notices" // Necessita traducció + "See notices" // Necessita traducció #elif L==2 // de - "See all notices" // Need Übersetzung + "See notices" // Need Übersetzung #elif L==3 // en - "See all notices" + "See notices" #elif L==4 // es - "Ver todos los avisos" + "Ver avisos" #elif L==5 // fr - "See all notices" // Besoin de traduction + "See notices" // Besoin de traduction #elif L==6 // gn - "Ver todos los avisos" // Okoteve traducción + "Ver avisos" // Okoteve traducción #elif L==7 // it - "See all notices" // Bisogno di traduzione + "See notices" // Bisogno di traduzione #elif L==8 // pl - "See all notices" // Potrzebujesz tlumaczenie + "See notices" // Potrzebujesz tlumaczenie #elif L==9 // pt - "See all notices" // Precisa de tradução + "See notices" // Precisa de tradução #elif L==10 // tr - "See all notices" // Çeviri lazim! + "See notices" // Çeviri lazim! #endif , [ActSeeFor] =