From 71b8071524eab6a0fbd8073e2a91b8c8fe51be57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Mon, 2 Nov 2015 18:55:24 +0100 Subject: [PATCH] Version 15.34.2 --- js/swad.js | 174 ++++++++++++------------------------- swad_announcement.c | 9 +- swad_changelog.h | 6 +- swad_date.c | 9 +- swad_password.c | 18 ++-- swad_text.c | 205 ++++++++++++++++++++++---------------------- 6 files changed, 180 insertions(+), 241 deletions(-) diff --git a/js/swad.js b/js/swad.js index d3def4419..70ab38e7b 100644 --- a/js/swad.js +++ b/js/swad.js @@ -37,9 +37,9 @@ var countClockConnected = 0; // Write a date in client local time function writeLocalDateFromUTC(id,TimeUTC) { var d = new Date; - var Yea; - var Mon; - var Day; + var Yea; + var Mon; + var Day; var StrMon; var StrDay; @@ -59,12 +59,12 @@ function writeLocalDateFromUTC(id,TimeUTC) { function writeLocalDateTimeFromUTC(id,TimeUTC,separator) { var d = new Date; - var Yea; - var Mon; - var Day; - var Hou; - var Min; - var Sec; + var Yea; + var Mon; + var Day; + var Hou; + var Min; + var Sec; var StrMon; var StrDay; var StrHou; @@ -90,10 +90,10 @@ function writeLocalDateTimeFromUTC(id,TimeUTC,separator) { // Set local date-time form fields from UTC time function setLocalDateTimeFormFromUTC(id,TimeUTC) { - var FormYea = document.getElementById(id+'Year'); - var FormMon = document.getElementById(id+'Month'); - var FormDay = document.getElementById(id+'Day'); - var FormHou = document.getElementById(id+'Hour'); + var FormYea = document.getElementById(id+'Year' ); + var FormMon = document.getElementById(id+'Month' ); + var FormDay = document.getElementById(id+'Day' ); + var FormHou = document.getElementById(id+'Hour' ); var FormMin = document.getElementById(id+'Minute'); var FormSec = document.getElementById(id+'Second'); var d; @@ -109,16 +109,13 @@ function setLocalDateTimeFormFromUTC(id,TimeUTC) { FormYea.options[i].selected = true; YearIsValid = true; } - FormMon.disabled = false; - FormDay.disabled = false; - FormHou.disabled = false; - FormMin.disabled = false; - FormSec.disabled = false; - FormMon.options[d.getMonth()+1].selected = true; - FormDay.options[d.getDate() ].selected = true; - FormHou.options[d.getHours() ].selected = true; - FormMin.options[d.getMinutes()].selected = true; - FormSec.options[d.getSeconds()].selected = true; + if (YearIsValid) { + FormMon.options[d.getMonth() ].selected = true; + FormDay.options[d.getDate()-1 ].selected = true; + FormHou.options[d.getHours() ].selected = true; + FormMin.options[d.getMinutes()].selected = true; + FormSec.options[d.getSeconds()].selected = true; + } } if (!YearIsValid) { @@ -128,71 +125,23 @@ function setLocalDateTimeFormFromUTC(id,TimeUTC) { FormHou.options[0].selected = true; FormMin.options[0].selected = true; FormSec.options[0].selected = true; - - FormMon.disabled = true; - FormDay.disabled = true; - FormHou.disabled = true; - FormMin.disabled = true; - FormSec.disabled = true; } } // Set UTC time from local date-time form fields function setUTCFromLocalDateTimeForm(id) { - var FormYea = document.getElementById(id+'Year'); - var FormMon = document.getElementById(id+'Month'); - var FormDay = document.getElementById(id+'Day'); - var FormHou = document.getElementById(id+'Hour'); - var FormMin = document.getElementById(id+'Minute'); - var FormSec = document.getElementById(id+'Second'); - var FormTimeUTC = document.getElementById(id+'TimeUTC'); - var d; - var Yea = FormYea.value; - var Mon; - var Day; - - if (Yea == 0) { - FormYea.options[0].selected = true; - FormMon.options[0].selected = true; - FormDay.options[0].selected = true; - FormHou.options[0].selected = true; - FormMin.options[0].selected = true; - FormSec.options[0].selected = true; + var d = new (Date); - FormMon.disabled = true; - FormDay.disabled = true; - FormHou.disabled = true; - FormMin.disabled = true; - FormSec.disabled = true; + // Important: set year first in order to work properly with leap years + d.setFullYear(document.getElementById(id+'Year' ).value); + d.setMonth (document.getElementById(id+'Month' ).value-1); + d.setDate (document.getElementById(id+'Day' ).value); + d.setHours (document.getElementById(id+'Hour' ).value); + d.setMinutes (document.getElementById(id+'Minute').value); + d.setSeconds (document.getElementById(id+'Second').value); + d.setMilliseconds(0); - FormTimeUTC.value = 0; - } - else { - FormMon.disabled = false; - FormDay.disabled = false; - FormHou.disabled = false; - FormMin.disabled = false; - FormSec.disabled = false; - - Mon = FormMon.value; - if (Mon == 0) - Mon = 1; - Day = FormDay.value; - if (Day == 0) - Day = 1; - - // Important: set year first in order to work properly with leap years - d = new (Date); - d.setFullYear(Yea); - d.setMonth (Mon-1); - d.setDate (Day); - d.setHours (FormHou.value); - d.setMinutes (FormMin.value); - d.setSeconds (FormSec.value); - d.setMilliseconds(0); - - FormTimeUTC.value = d.getTime() / 1000; - } + document.getElementById(id+'TimeUTC').value = d.getTime() / 1000; } // Set form param with time difference between UTC time and client local time, in minutes @@ -220,33 +169,24 @@ function adjustDateForm (id) { var Yea = FormYea.options[FormYea.selectedIndex].value; var Days; - if (FormYea.selectedIndex > 0) { - if (FormMon.options[0].selected) { // No month selected, set to january - FormMon.options[1].selected = true; - Days = 31; - } - else if (FormMon.options[2].selected) // Adjust days of february - Days = ((((Yea % 4) == 0) && ((Yea % 100) != 0)) || ((Yea % 400) == 0)) ? 29 : 28; - else if (FormMon.options[ 4].selected || - FormMon.options[ 6].selected || - FormMon.options[ 9].selected || - FormMon.options[11].selected) - Days = 30; - else - Days = 31; - - if (FormDay.options[0].selected) // No day selected, set to 1 - FormDay.options[1].selected = true; - else if (FormDay.selectedIndex > Days) - FormDay.options[Days].selected = true; - - for (var i=FormDay.options.length; i<=Days ; i++) { // Create new days - var x = String (i); - FormDay.options[i] = new Option(x,x); - } - for (var i=FormDay.options.length-1; i>Days; i--) // Remove days - FormDay.options[i] = null; + if (FormMon.options[1].selected) // February + Days = ((((Yea % 4) == 0) && ((Yea % 100) != 0)) || ((Yea % 400) == 0)) ? 29 : 28; + else if (FormMon.options[ 3].selected || // April + FormMon.options[ 5].selected || // June + FormMon.options[ 8].selected || // September + FormMon.options[10].selected) // November + Days = 30; + else + Days = 31; + + if (FormDay.selectedIndex >= Days) + FormDay.options[Days-1].selected = true; // Select last day in month + + for (var i=FormDay.options.length; i=Days; i--) // Remove days from the end + FormDay.options[i] = null; } // Set a date range form to yesterday @@ -277,11 +217,11 @@ function setDateRange(d) { FormYea.options[i].selected = true; break; } - document.getElementById('StartMonth' ).options[Mon].selected = true; - document.getElementById('StartDay' ).options[Day].selected = true; - document.getElementById('StartHour' ).options[0 ].selected = true; - document.getElementById('StartMinute').options[0 ].selected = true; - document.getElementById('StartSecond').options[0 ].selected = true; + document.getElementById('StartMonth' ).options[Mon-1].selected = true; + document.getElementById('StartDay' ).options[Day-1].selected = true; + document.getElementById('StartHour' ).options[0 ].selected = true; + document.getElementById('StartMinute').options[0 ].selected = true; + document.getElementById('StartSecond').options[0 ].selected = true; setUTCFromLocalDateTimeForm('Start'); FormYea = document.getElementById('EndYear'); @@ -290,11 +230,11 @@ function setDateRange(d) { FormYea.options[i].selected = true; break; } - document.getElementById('EndMonth' ).options[Mon].selected = true; - document.getElementById('EndDay' ).options[Day].selected = true; - document.getElementById('EndHour' ).options[23 ].selected = true; - document.getElementById('EndMinute').options[59 ].selected = true; - document.getElementById('EndSecond').options[59 ].selected = true; + document.getElementById('EndMonth' ).options[Mon-1].selected = true; + document.getElementById('EndDay' ).options[Day-1].selected = true; + document.getElementById('EndHour' ).options[23 ].selected = true; + document.getElementById('EndMinute').options[59 ].selected = true; + document.getElementById('EndSecond').options[59 ].selected = true; setUTCFromLocalDateTimeForm('End'); } diff --git a/swad_announcement.c b/swad_announcement.c index 1ecc339ce..7b5d842cd 100644 --- a/swad_announcement.c +++ b/swad_announcement.c @@ -60,7 +60,8 @@ extern struct Globals Gbl; static void Ann_DrawAnAnnouncement (long AnnCod,Ann_Status_t Status, const char *Subject,const char *Content, - unsigned Roles,bool ShowAllAnnouncements, + unsigned Roles, + bool ShowAllAnnouncements, bool ICanEditAnnouncements); static void Ann_PutHiddenParamAnnCod (long AnnCod); static long Ann_GetParamAnnCod (void); @@ -158,8 +159,7 @@ void Ann_ShowAllAnnouncements (void) /* Show the announcement */ Ann_DrawAnAnnouncement (AnnCod,Status,Subject,Content, - Roles,true, - ICanEditAnnouncements); + Roles,true,ICanEditAnnouncements); } /***** End frame *****/ @@ -236,7 +236,8 @@ void Ann_ShowMyAnnouncementsNotMarkedAsSeen (void) static void Ann_DrawAnAnnouncement (long AnnCod,Ann_Status_t Status, const char *Subject,const char *Content, - unsigned Roles,bool ShowAllAnnouncements, + unsigned Roles, + bool ShowAllAnnouncements, bool ICanEditAnnouncements) { extern const char *The_ClassForm[The_NUM_THEMES]; diff --git a/swad_changelog.h b/swad_changelog.h index 920b26483..28bd12b22 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -103,18 +103,18 @@ // TODO: Put headers Content-type and Content-disposition when redirecting with Location: // TODO: System admin should be able to remove/edit user's mail (when he/she detects a recipient does not exists, for example) // TODO: When a new assignment/attendance/survey is incorrect, the second time the form is shown, it should be filled with partial data, now is always empty -// TODO: Global announcements should be available for all users? /*****************************************************************************/ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 15.34.1 (2015/11/01)" +#define Log_PLATFORM_VERSION "SWAD 15.34.2 (2015/11/02)" // Number of lines (includes comments but not blank lines) has been got with the following command: // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1 /* - Version 15.34.1: Nov 01, 2015 Global announcements can be seen by all. (186939 lines) + Version 15.34.2: Nov 02, 2015 Fixed bugs in date forms. (186878 lines) + Version 15.34.1: Nov 01, 2015 Global announcements can be seen by all. (186938 lines) Version 15.34: Nov 01, 2015 Global announcements can be hidden. (186896 lines) 3 changes necessary in database: ALTER TABLE announcements ADD COLUMN Status TINYINT NOT NULL DEFAULT 0 AFTER AnnCod,ADD INDEX (Status); diff --git a/swad_date.c b/swad_date.c index 107a46566..f7dcf40c3 100644 --- a/swad_date.c +++ b/swad_date.c @@ -335,8 +335,7 @@ void Dat_WriteFormClientLocalDateTimeFromTimeUTC (const char *Id, if (SubmitFormOnChange) fprintf (Gbl.F.Out,"document.getElementById('%s').submit();", Gbl.FormId); - fprintf (Gbl.F.Out,"\">" - ""); + fprintf (Gbl.F.Out,"\">"); for (Year = FirstYear; Year <= LastYear; Year++) @@ -355,8 +354,7 @@ void Dat_WriteFormClientLocalDateTimeFromTimeUTC (const char *Id, if (SubmitFormOnChange) fprintf (Gbl.F.Out,"document.getElementById('%s').submit();", Gbl.FormId); - fprintf (Gbl.F.Out,"\">" - ""); + fprintf (Gbl.F.Out,"\">"); for (Month = 1; Month <= 12; Month++) @@ -373,8 +371,7 @@ void Dat_WriteFormClientLocalDateTimeFromTimeUTC (const char *Id, if (SubmitFormOnChange) fprintf (Gbl.F.Out,"document.getElementById('%s').submit();", Gbl.FormId); - fprintf (Gbl.F.Out,"\">" - ""); + fprintf (Gbl.F.Out,"\">"); for (Day = 1; Day <= 31; Day++) diff --git a/swad_password.c b/swad_password.c index 0fad4cfbd..64aca8546 100644 --- a/swad_password.c +++ b/swad_password.c @@ -540,7 +540,7 @@ bool Pwd_SlowCheckIfPasswordIsGood (const char *PlainPassword, const char *EncryptedPassword, long UsrCod) { - extern const char *Txt_The_new_password_is_too_trivial_; + extern const char *Txt_The_password_is_too_trivial_; /***** Check if password seems good by making fast checks *****/ if (!Pwd_FastCheckIfPasswordSeemsGood (PlainPassword)) @@ -549,7 +549,7 @@ bool Pwd_SlowCheckIfPasswordIsGood (const char *PlainPassword, /***** Check if password is found in user's ID, first name or surnames of anybody *****/ if (Pwd_CheckIfPasswdIsUsrIDorName (PlainPassword)) // PlainPassword is a user's ID, name or surname { - strcpy (Gbl.Message,Txt_The_new_password_is_too_trivial_); + strcpy (Gbl.Message,Txt_The_password_is_too_trivial_); return false; } @@ -557,7 +557,7 @@ bool Pwd_SlowCheckIfPasswordIsGood (const char *PlainPassword, if (Pwd_GetNumOtherUsrsWhoUseThisPassword (EncryptedPassword,UsrCod) > Pwd_MAX_OTHER_USERS_USING_THE_SAME_PASSWORD) { - strcpy (Gbl.Message,Txt_The_new_password_is_too_trivial_); + strcpy (Gbl.Message,Txt_The_password_is_too_trivial_); return false; } @@ -617,16 +617,16 @@ static unsigned Pwd_GetNumOtherUsrsWhoUseThisPassword (const char *EncryptedPass bool Pwd_FastCheckIfPasswordSeemsGood (const char *PlainPassword) { - extern const char *Txt_The_new_password_must_be_at_least_X_characters; - extern const char *Txt_The_new_password_can_not_contain_spaces; - extern const char *Txt_The_new_password_can_not_consist_only_of_digits; + extern const char *Txt_The_password_must_be_at_least_X_characters; + extern const char *Txt_The_password_can_not_contain_spaces; + extern const char *Txt_The_password_can_not_consist_only_of_digits; unsigned LengthPassword = strlen (PlainPassword),i; bool ItsANumber; /***** Check length of password *****/ if (LengthPassword < Pwd_MIN_LENGTH_PLAIN_PASSWORD) // PlainPassword too short { - sprintf (Gbl.Message,Txt_The_new_password_must_be_at_least_X_characters, + sprintf (Gbl.Message,Txt_The_password_must_be_at_least_X_characters, Pwd_MIN_LENGTH_PLAIN_PASSWORD); return false; } @@ -634,7 +634,7 @@ bool Pwd_FastCheckIfPasswordSeemsGood (const char *PlainPassword) /***** Check spaces in password *****/ if (strchr (PlainPassword,(int) ' ') != NULL) // PlainPassword with spaces { - strcpy (Gbl.Message,Txt_The_new_password_can_not_contain_spaces); + strcpy (Gbl.Message,Txt_The_password_can_not_contain_spaces); return false; } @@ -646,7 +646,7 @@ bool Pwd_FastCheckIfPasswordSeemsGood (const char *PlainPassword) ItsANumber = false; if (ItsANumber) { - strcpy (Gbl.Message,Txt_The_new_password_can_not_consist_only_of_digits); + strcpy (Gbl.Message,Txt_The_password_can_not_consist_only_of_digits); return false; } diff --git a/swad_text.c b/swad_text.c index 93979ddf0..0728e774c 100644 --- a/swad_text.c +++ b/swad_text.c @@ -41439,108 +41439,6 @@ const char *Txt_The_new_image_is_X = // Warning: it is very important to include "The new image is %s."; // Necessita de tradução #endif -const char *Txt_The_new_password_can_not_consist_only_of_digits = -#if L==0 - "La contraseña nueva no puede estar formada" - " solo por dígitos."; // Necessita traduccio -#elif L==1 - "The new password can not consist" - " only of digits."; // Need Übersetzung -#elif L==2 - "The new password can not consist" - " only of digits."; -#elif L==3 - "La contraseña nueva no puede estar formada" - " solo por dígitos."; -#elif L==4 - "The new password can not consist" - " only of digits."; // Besoin de traduction -#elif L==5 - "La contraseña nueva no puede estar formada" - " solo por dígitos."; // Okoteve traducción -#elif L==6 - "La nuova password non può consistere" - " solo di numeri."; -#elif L==7 - "The new password can not consist" - " only of digits."; // Potrzebujesz tlumaczenie -#elif L==8 - "The new password can not consist" - " only of digits."; // Necessita de tradução -#endif - -const char *Txt_The_new_password_can_not_contain_spaces = -#if L==0 - "La contraseña nueva no puede tener espacios."; // Necessita traduccio -#elif L==1 - "The new password can not contain spaces."; // Need Übersetzung -#elif L==2 - "The new password can not contain spaces."; -#elif L==3 - "La contraseña nueva no puede tener espacios."; -#elif L==4 - "The new password can not contain spaces."; // Besoin de traduction -#elif L==5 - "La contraseña nueva no puede tener espacios."; // Okoteve traducción -#elif L==6 - "La nuova password non può contenere spazi."; -#elif L==7 - "The new password can not contain spaces."; // Potrzebujesz tlumaczenie -#elif L==8 - "The new password can not contain spaces."; // Necessita de tradução -#endif - -const char *Txt_The_new_password_is_too_trivial_ = -#if L==0 - "La contraseña nueva es demasiado fácil." - " Use otra más difícil de averiguar."; // Necessita traduccio -#elif L==1 - "The new password is too trivial." - " Use other harder to guess."; // Need Übersetzung -#elif L==2 - "The new password is too trivial." - " Use other harder to guess."; -#elif L==3 - "La contraseña nueva es demasiado fácil." - " Use otra más difícil de averiguar."; -#elif L==4 - "The new password is too trivial." - " Use other harder to guess."; // Besoin de traduction -#elif L==5 - "La contraseña nueva es demasiado fácil." - " Use otra más difícil de averiguar."; // Okoteve traducción -#elif L==6 - "La nuova password è troppo semplice." - " Utilizza un'altra più difficile da individuare."; -#elif L==7 - "The new password is too trivial." - " Use other harder to guess."; // Potrzebujesz tlumaczenie -#elif L==8 - "The new password is too trivial." - " Use other harder to guess."; // Necessita de tradução -#endif - -const char *Txt_The_new_password_must_be_at_least_X_characters = // Warning: it is very important to include %u in the following sentences -#if L==0 - "La contraseña nueva ha de tener al menos %u caracteres."; // Necessita traduccio -#elif L==1 - "The new password must be at least %u characters."; // Need Übersetzung -#elif L==2 - "The new password must be at least %u characters."; -#elif L==3 - "La contraseña nueva ha de tener al menos %u caracteres."; -#elif L==4 - "The new password must be at least %u characters."; // Besoin de traduction -#elif L==5 - "La contraseña nueva ha de tener al menos %u caracteres."; // Okoteve traducción -#elif L==6 - "La nuova password dovrebbe essere di almeno %u caratteri."; -#elif L==7 - "The new password must be at least %u characters."; // Potrzebujesz tlumaczenie -#elif L==8 - "The new password must be at least %u characters."; // Necessita de tradução -#endif - const char *Txt_The_new_URL_is_X = // Warning: it is very important to include %s in the following sentences #if L==0 "El nuevo URL es %s."; // Necessita traduccio @@ -41706,6 +41604,109 @@ const char *Txt_The_numerical_code_X_already_exists = // Warning: it is very imp "The ISO 3166-1 numerical code %03ld already exists."; // Necessita de tradução #endif + +const char *Txt_The_password_can_not_consist_only_of_digits = +#if L==0 + "La contraseña no puede estar formada" + " solo por dígitos."; // Necessita traduccio +#elif L==1 + "The password can not consist" + " only of digits."; // Need Übersetzung +#elif L==2 + "The password can not consist" + " only of digits."; +#elif L==3 + "La contraseña no puede estar formada" + " solo por dígitos."; +#elif L==4 + "The password can not consist" + " only of digits."; // Besoin de traduction +#elif L==5 + "La contraseña no puede estar formada" + " solo por dígitos."; // Okoteve traducción +#elif L==6 + "La password non può consistere" + " solo di numeri."; +#elif L==7 + "The password can not consist" + " only of digits."; // Potrzebujesz tlumaczenie +#elif L==8 + "The password can not consist" + " only of digits."; // Necessita de tradução +#endif + +const char *Txt_The_password_can_not_contain_spaces = +#if L==0 + "La contraseña no puede tener espacios."; // Necessita traduccio +#elif L==1 + "The password can not contain spaces."; // Need Übersetzung +#elif L==2 + "The password can not contain spaces."; +#elif L==3 + "La contraseña no puede tener espacios."; +#elif L==4 + "The password can not contain spaces."; // Besoin de traduction +#elif L==5 + "La contraseña no puede tener espacios."; // Okoteve traducción +#elif L==6 + "La password non può contenere spazi."; +#elif L==7 + "The password can not contain spaces."; // Potrzebujesz tlumaczenie +#elif L==8 + "The password can not contain spaces."; // Necessita de tradução +#endif + +const char *Txt_The_password_is_too_trivial_ = +#if L==0 + "La contraseña es demasiado fácil." + " Use otra más difícil de averiguar."; // Necessita traduccio +#elif L==1 + "The password is too trivial." + " Use other harder to guess."; // Need Übersetzung +#elif L==2 + "The password is too trivial." + " Use other harder to guess."; +#elif L==3 + "La contraseña es demasiado fácil." + " Use otra más difícil de averiguar."; +#elif L==4 + "The password is too trivial." + " Use other harder to guess."; // Besoin de traduction +#elif L==5 + "La contraseña es demasiado fácil." + " Use otra más difícil de averiguar."; // Okoteve traducción +#elif L==6 + "La password è troppo semplice." + " Utilizza un'altra più difficile da individuare."; +#elif L==7 + "The password is too trivial." + " Use other harder to guess."; // Potrzebujesz tlumaczenie +#elif L==8 + "The password is too trivial." + " Use other harder to guess."; // Necessita de tradução +#endif + +const char *Txt_The_password_must_be_at_least_X_characters = // Warning: it is very important to include %u in the following sentences +#if L==0 + "La contraseña ha de tener al menos %u caracteres."; // Necessita traduccio +#elif L==1 + "The password must be at least %u characters."; // Need Übersetzung +#elif L==2 + "The password must be at least %u characters."; +#elif L==3 + "La contraseña ha de tener al menos %u caracteres."; +#elif L==4 + "The password must be at least %u characters."; // Besoin de traduction +#elif L==5 + "La contraseña ha de tener al menos %u caracteres."; // Okoteve traducción +#elif L==6 + "La password dovrebbe essere di almeno %u caratteri."; +#elif L==7 + "The password must be at least %u characters."; // Potrzebujesz tlumaczenie +#elif L==8 + "The password must be at least %u characters."; // Necessita de tradução +#endif + const char *Txt_The_X_password_has_been_changed_successfully = // Warning: it is very important to include %s in the following sentences #if L==0 "La contraseña de %s se ha modificado con éxito."; // Necessita traduccio