Version19.97

This commit is contained in:
Antonio Cañas Vargas 2019-12-19 11:00:14 +01:00
parent 774c3fb6d0
commit 11705ad5a8
19 changed files with 629 additions and 212 deletions

View File

@ -11,7 +11,7 @@
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuildCommandParser" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser" keep-relative-paths="false" name="CDT GCC Build Output Parser" parameter="(g?cc)|([gc]\+\+)|(clang)" prefer-non-shared="true"/>
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-524615883298614662" id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-524615886456566662" id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>

View File

@ -3976,11 +3976,18 @@ a.PAG:hover, .PAG_CUR
{
width:180px;
}
.INPUT_WWW
.INPUT_WWW_NARROW
{
width:90px;
}
.INPUT_WWW_WIDE
{
width:180px;
}
.INPUT_COORD
{
width:180px;
}
.INPUT_STATUS
{
width:80px;

View File

@ -162,6 +162,9 @@ CREATE TABLE IF NOT EXISTS centres (
PlcCod INT NOT NULL DEFAULT -1,
Status TINYINT NOT NULL DEFAULT 0,
RequesterUsrCod INT NOT NULL DEFAULT -1,
Latitude DOUBLE PRECISION NOT NULL DEFAULT 0,
Longitude DOUBLE PRECISION NOT NULL DEFAULT 0,
Altitude DOUBLE PRECISION NOT NULL DEFAULT 0,
ShortName VARCHAR(511) COLLATE latin1_spanish_ci NOT NULL,
FullName VARCHAR(2047) COLLATE latin1_spanish_ci NOT NULL,
WWW VARCHAR(255) NOT NULL,

View File

@ -1217,7 +1217,9 @@ void HTM_INPUT_LONG (const char *Name,long Min,long Max,long Value,bool Disabled
HTM_Txt (" />");
}
void HTM_INPUT_FLOAT (const char *Name,double Min,double Max,double Step,double Value,bool Disabled,
void HTM_INPUT_FLOAT (const char *Name,double Min,double Max,
double Step, // Use 0 for "any"
double Value,bool Disabled,
const char *fmt,...)
{
va_list ap;
@ -1226,9 +1228,14 @@ void HTM_INPUT_FLOAT (const char *Name,double Min,double Max,double Step,double
Str_SetDecimalPointToUS (); // To print the floating point as a dot
HTM_TxtF ("<input type=\"number\" name=\"%s\""
" min=\"%lg\" max=\"%lg\" step=\"%lg\" value=\"%lg\"",
" min=\"%lg\" max=\"%lg\"",
Name,
Min,Max,Step,Value);
Min,Max);
if (Step == 0.0)
HTM_Txt (" step=\"any\"");
else
HTM_TxtF (" step=\"%lg\"",Step);
HTM_TxtF (" value=\"%lg\"",Value);
Str_SetDecimalPointToLocal (); // Return to local system
if (Disabled)
HTM_Txt (" disabled=\"disabled\"");

View File

@ -304,6 +304,9 @@ Centre:
176. ActRenCtrShoCfg Change short name centre in centre configuration
177. ActRenCtrFulCfg Change full name centre in centre configuration
178. ActChgCtrPlcCfg Change place of centre in centre configuration
NEW. ActChgCtrLatCfg Change latitude of centre in centre configuration
NEW. ActChgCtrLgtCfg Change longitude of centre in centre configuration
NEW. ActChgCtrAltCfg Change altitude of centre in centre configuration
179. ActChgCtrWWWCfg Change web of centre in centre configuration
180. ActReqCtrLog Show form to send the logo of the current centre
181. ActRecCtrLog Receive and store the logo of the current centre
@ -1835,6 +1838,9 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
[ActRenCtrShoCfg ] = {1595,-1,TabUnk,ActSeeCtrInf , 0, 0, 0,0x300, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Ctr_RenameCentreShortInConfig ,Ctr_ContEditAfterChgCtrInConfig,NULL},
[ActRenCtrFulCfg ] = {1594,-1,TabUnk,ActSeeCtrInf , 0, 0, 0,0x300, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Ctr_RenameCentreFullInConfig ,Ctr_ContEditAfterChgCtrInConfig,NULL},
[ActChgCtrPlcCfg ] = {1648,-1,TabUnk,ActSeeCtrInf , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Ctr_ChangeCtrPlcInConfig ,NULL},
[ActChgCtrLatCfg ] = {1815,-1,TabUnk,ActSeeCtrInf , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Ctr_ChangeCtrLatitudeInConfig ,NULL},
[ActChgCtrLgtCfg ] = {1816,-1,TabUnk,ActSeeCtrInf , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Ctr_ChangeCtrLongitudeInConfig ,NULL},
[ActChgCtrAltCfg ] = {1817,-1,TabUnk,ActSeeCtrInf , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Ctr_ChangeCtrAltitudeInConfig ,NULL},
[ActChgCtrWWWCfg ] = {1596,-1,TabUnk,ActSeeCtrInf , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Ctr_ChangeCtrWWWInConfig ,NULL},
[ActReqCtrLog ] = {1244,-1,TabUnk,ActSeeCtrInf , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Ctr_RequestLogo ,NULL},
[ActRecCtrLog ] = {1051,-1,TabUnk,ActSeeCtrInf , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_DATA,Act_BRW_1ST_TAB,Ctr_ReceiveLogo ,Ctr_ShowConfiguration ,NULL},
@ -5049,6 +5055,9 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
ActSeeMyMchResMch, // #1812
ActSeeAllMchResMch, // #1813
ActMchCntDwn, // #1814
ActChgCtrLatCfg, // #1815
ActChgCtrLgtCfg, // #1816
ActChgCtrAltCfg, // #1817
};
/*****************************************************************************/

View File

@ -64,9 +64,9 @@ typedef enum
typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action
#define Act_NUM_ACTIONS (1 + 4 + 66 + 38 + 12 + 42 + 36 + 19 + 110 + 186 + 437 + 176 + 169 + 16 + 68)
#define Act_NUM_ACTIONS (1 + 4 + 66 + 38 + 12 + 42 + 39 + 19 + 110 + 186 + 437 + 176 + 169 + 16 + 68)
#define Act_MAX_ACTION_COD 1814
#define Act_MAX_ACTION_COD 1817
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 13
@ -299,37 +299,40 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to
#define ActRenCtrShoCfg (ActRenHld + 6)
#define ActRenCtrFulCfg (ActRenHld + 7)
#define ActChgCtrPlcCfg (ActRenHld + 8)
#define ActChgCtrWWWCfg (ActRenHld + 9)
#define ActReqCtrLog (ActRenHld + 10)
#define ActRecCtrLog (ActRenHld + 11)
#define ActRemCtrLog (ActRenHld + 12)
#define ActReqCtrPho (ActRenHld + 13)
#define ActRecCtrPho (ActRenHld + 14)
#define ActChgCtrPhoAtt (ActRenHld + 15)
#define ActChgCtrLatCfg (ActRenHld + 9)
#define ActChgCtrLgtCfg (ActRenHld + 10)
#define ActChgCtrAltCfg (ActRenHld + 11)
#define ActChgCtrWWWCfg (ActRenHld + 12)
#define ActReqCtrLog (ActRenHld + 13)
#define ActRecCtrLog (ActRenHld + 14)
#define ActRemCtrLog (ActRenHld + 15)
#define ActReqCtrPho (ActRenHld + 16)
#define ActRecCtrPho (ActRenHld + 17)
#define ActChgCtrPhoAtt (ActRenHld + 18)
#define ActSeeDegTyp (ActRenHld + 16)
#define ActEdiDegTyp (ActRenHld + 17)
#define ActNewDegTyp (ActRenHld + 18)
#define ActRemDegTyp (ActRenHld + 19)
#define ActRenDegTyp (ActRenHld + 20)
#define ActSeeDegTyp (ActRenHld + 19)
#define ActEdiDegTyp (ActRenHld + 20)
#define ActNewDegTyp (ActRenHld + 21)
#define ActRemDegTyp (ActRenHld + 22)
#define ActRenDegTyp (ActRenHld + 23)
#define ActEdiDeg (ActRenHld + 21)
#define ActReqDeg (ActRenHld + 22)
#define ActNewDeg (ActRenHld + 23)
#define ActRemDeg (ActRenHld + 24)
#define ActRenDegSho (ActRenHld + 25)
#define ActRenDegFul (ActRenHld + 26)
#define ActChgDegTyp (ActRenHld + 27)
#define ActChgDegWWW (ActRenHld + 28)
#define ActChgDegSta (ActRenHld + 29)
#define ActEdiDeg (ActRenHld + 24)
#define ActReqDeg (ActRenHld + 25)
#define ActNewDeg (ActRenHld + 26)
#define ActRemDeg (ActRenHld + 27)
#define ActRenDegSho (ActRenHld + 28)
#define ActRenDegFul (ActRenHld + 29)
#define ActChgDegTyp (ActRenHld + 30)
#define ActChgDegWWW (ActRenHld + 31)
#define ActChgDegSta (ActRenHld + 32)
#define ActEdiCla (ActRenHld + 30)
#define ActNewCla (ActRenHld + 31)
#define ActRemCla (ActRenHld + 32)
#define ActRenClaSho (ActRenHld + 33)
#define ActRenClaFul (ActRenHld + 34)
#define ActChgClaMaxStd (ActRenHld + 35)
#define ActRenClaLoc (ActRenHld + 36)
#define ActEdiCla (ActRenHld + 33)
#define ActNewCla (ActRenHld + 34)
#define ActRemCla (ActRenHld + 35)
#define ActRenClaSho (ActRenHld + 36)
#define ActRenClaFul (ActRenHld + 37)
#define ActChgClaMaxStd (ActRenHld + 38)
#define ActRenClaLoc (ActRenHld + 39)
/*****************************************************************************/
/********************************* Degree tab ********************************/

View File

@ -473,7 +473,7 @@ static void Ban_ListBannersForEdition (void)
Frm_StartForm (ActChgBanWWW);
Ban_PutParamBanCodToEdit ();
HTM_INPUT_URL ("WWW",Ban->WWW,true,
"class=\"INPUT_WWW\"");
"class=\"INPUT_WWW_NARROW\" required=\"required\"");
Frm_EndForm ();
HTM_TD_End ();
@ -883,7 +883,7 @@ static void Ban_PutFormToCreateBanner (void)
/***** Banner WWW *****/
HTM_TD_Begin ("class=\"CM\"");
HTM_INPUT_URL ("WWW",Ban_EditingBan->WWW,false,
"class=\"INPUT_WWW\" required=\"required\"");
"class=\"INPUT_WWW_NARROW\" required=\"required\"");
HTM_TD_End ();
HTM_TR_End ();

View File

@ -89,7 +89,9 @@ static void Ctr_PutIconsCtrConfig (void);
static void Ctr_PutIconToChangePhoto (void);
static void Ctr_ConfigTitle (bool PutLink);
static void Ctr_ConfigMap (void);
static void Ctr_ConfigCoordinates (void);
static void Ctr_ConfigLatitude (void);
static void Ctr_ConfigLongitude (void);
static void Ctr_ConfigAltitude (void);
static void Ctr_ConfigPhoto (bool PrintView,bool PutLink);
static void Ctr_ConfigInstitution (bool PrintView);
static void Ctr_ConfigFullName (bool PrintView);
@ -113,6 +115,8 @@ static void Ctr_GetParamCtrOrder (void);
static void Ctr_EditCentresInternal (void);
static void Ctr_PutIconsEditingCentres (void);
static void Ctr_GetDataOfCentreFromRow (struct Centre *Ctr,MYSQL_ROW row);
static void Ctr_GetPhotoAttribution (long CtrCod,char **PhotoAttribution);
static void Ctr_FreePhotoAttribution (char **PhotoAttribution);
static void Ctr_ListCentresForEdition (void);
@ -129,6 +133,8 @@ static void Ctr_RenameCentre (struct Centre *Ctr,Cns_ShrtOrFullName_t ShrtOrFull
static bool Ctr_CheckIfCtrNameExistsInIns (const char *FieldName,const char *Name,long CtrCod,long InsCod);
static void Ctr_UpdateInsNameDB (long CtrCod,const char *FieldName,const char *NewCtrName);
static void Ctr_UpdateCtrCoordinateDB (long CtrCod,const char *CoordField,double NewCoord);
static void Ctr_UpdateCtrWWWDB (long CtrCod,
const char NewWWW[Cns_MAX_BYTES_WWW + 1]);
static void Ctr_ShowAlertAndButtonToGoToCtr (void);
@ -344,7 +350,11 @@ static void Ctr_Configuration (bool PrintView)
/***** Coordinates *****/
if (!PrintView && Gbl.Usrs.Me.Role.Logged >= Rol_CTR_ADM)
Ctr_ConfigCoordinates ();
{
Ctr_ConfigLatitude ();
Ctr_ConfigLongitude ();
Ctr_ConfigAltitude ();
}
/***** Centre WWW *****/
Ctr_ConfigWWW (PrintView);
@ -474,9 +484,12 @@ static void Ctr_ConfigMap (void)
/***** Script to draw the map *****/
HTM_SCRIPT_Begin (NULL,NULL);
Str_SetDecimalPointToUS (); // To write the decimal point as a dot
/* Let's create a map of the center of London with pretty Mapbox Streets tiles */
HTM_Txt ("\tvar mymap = L.map('centre_mapid').setView([37.19704, -3.62451], 16);\n");
HTM_TxtF ("\tvar mymap = L.map('centre_mapid').setView([%lg, %lg], 16);\n",
Gbl.Hierarchy.Ctr.Coord.Latitude,
Gbl.Hierarchy.Ctr.Coord.Longitude);
/* Next we'll add a tile layer to add to our map,
in this case it's a Mapbox Streets tile layer.
@ -495,12 +508,15 @@ static void Ctr_ConfigMap (void)
"}).addTo(mymap);\n");
/* Marker */
HTM_Txt ("\tvar marker = L.marker([37.19684, -3.62436]).addTo(mymap);");
HTM_TxtF ("\tvar marker = L.marker([%lg, %lg]).addTo(mymap);",
Gbl.Hierarchy.Ctr.Coord.Latitude,
Gbl.Hierarchy.Ctr.Coord.Longitude);
HTM_TxtF ("\tmarker.bindPopup(\"<strong>%s</strong><br />%s\").openPopup();",
Gbl.Hierarchy.Ctr.ShrtName,
Gbl.Hierarchy.Ins.ShrtName);
Str_SetDecimalPointToLocal (); // Return to local system
HTM_SCRIPT_End ();
}
@ -508,23 +524,84 @@ static void Ctr_ConfigMap (void)
/************************** Edit centre coordinates **************************/
/*****************************************************************************/
static void Ctr_ConfigCoordinates (void)
static void Ctr_ConfigLatitude (void)
{
extern const char *The_ClassFormInBox[The_NUM_THEMES];
extern const char *Txt_Latitude;
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"RM\"");
HTM_LABEL_Begin ("for=\"WWW\" class=\"%s\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:","Latitud"); // TODO: Need translation!!!!
HTM_LABEL_Begin ("for=\"Latitude\" class=\"%s\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Latitude);
HTM_LABEL_End ();
HTM_TD_End ();
HTM_TD_Begin ("class=\"LM\"");
/* Form to change centre latitude */
Frm_StartForm (ActChgCtrLatCfg);
HTM_INPUT_FLOAT ("Latitude",
-90.0, // South Pole
90.0, // North Pole
0.0, // step="any"
Gbl.Hierarchy.Ctr.Coord.Latitude,false,
"class=\"INPUT_COORD\" required=\"required\"");
Frm_EndForm ();
HTM_TD_End ();
HTM_TR_End ();
}
static void Ctr_ConfigLongitude (void)
{
extern const char *The_ClassFormInBox[The_NUM_THEMES];
extern const char *Txt_Longitude;
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"RM\"");
HTM_LABEL_Begin ("for=\"Longitude\" class=\"%s\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Longitude);
HTM_LABEL_End ();
HTM_TD_End ();
HTM_TD_Begin ("class=\"LM\"");
/* Form to change centre longitude */
Frm_StartForm (ActChgCtrLgtCfg);
HTM_INPUT_FLOAT ("Longitude",
-180.0, // West
180.0, // East
0.0, // step="any"
Gbl.Hierarchy.Ctr.Coord.Longitude,false,
"class=\"INPUT_COORD\" required=\"required\"");
Frm_EndForm ();
HTM_TD_End ();
HTM_TR_End ();
}
static void Ctr_ConfigAltitude (void)
{
extern const char *The_ClassFormInBox[The_NUM_THEMES];
extern const char *Txt_Altitude;
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"RM\"");
HTM_LABEL_Begin ("for=\"Altitude\" class=\"%s\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Altitude);
HTM_LABEL_End ();
HTM_TD_End ();
HTM_TD_Begin ("class=\"LM\"");
/* Form to change centre WWW */
Frm_StartForm (ActChgCtrWWWCfg);
HTM_INPUT_URL ("WWW",Gbl.Hierarchy.Ctr.WWW,true,
"class=\"INPUT_WWW\"");
Frm_StartForm (ActChgCtrAltCfg);
HTM_INPUT_FLOAT ("Altitude",
-413.0, // Dead Sea shore
8848.0, // Mount Everest
0.0, // step="any"
Gbl.Hierarchy.Ctr.Coord.Altitude,false,
"class=\"INPUT_COORD\" required=\"required\"");
Frm_EndForm ();
HTM_TD_End ();
@ -811,7 +888,7 @@ static void Ctr_ConfigWWW (bool PrintView)
/* Form to change centre WWW */
Frm_StartForm (ActChgCtrWWWCfg);
HTM_INPUT_URL ("WWW",Gbl.Hierarchy.Ctr.WWW,true,
"class=\"INPUT_WWW\"");
"class=\"INPUT_WWW_WIDE\" required=\"required\"");
Frm_EndForm ();
}
else // I can not change centre WWW
@ -1290,17 +1367,36 @@ void Ctr_GetListCentres (long InsCod)
/***** Get centres from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get centres",
"(SELECT centres.CtrCod,centres.InsCod,centres.PlcCod,"
"centres.Status,centres.RequesterUsrCod,"
"centres.ShortName,centres.FullName,centres.WWW,"
"COUNT(DISTINCT usr_data.UsrCod) AS NumUsrs"
"(SELECT centres.CtrCod," // row[ 0]
"centres.InsCod," // row[ 1]
"centres.PlcCod," // row[ 2]
"centres.Status," // row[ 3]
"centres.RequesterUsrCod," // row[ 4]
"centres.Latitude," // row[ 5]
"centres.Longitude," // row[ 6]
"centres.Altitude," // row[ 7]
"centres.ShortName," // row[ 8]
"centres.FullName," // row[ 9]
"centres.WWW," // row[10]
"COUNT(DISTINCT usr_data.UsrCod)"
" AS NumUsrs" // row[11]
" FROM centres,usr_data"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=usr_data.CtrCod"
" GROUP BY centres.CtrCod)"
" UNION "
"(SELECT CtrCod,InsCod,PlcCod,Status,RequesterUsrCod,"
"ShortName,FullName,WWW,0 AS NumUsrs"
"(SELECT CtrCod," // row[ 0]
"InsCod," // row[ 1]
"PlcCod," // row[ 2]
"Status," // row[ 3]
"RequesterUsrCod," // row[ 4]
"Latitude," // row[ 5]
"Longitude," // row[ 6]
"Altitude," // row[ 7]
"ShortName," // row[ 8]
"FullName," // row[ 9]
"WWW," // row[10]
"0 AS NumUsrs" // row[11]
" FROM centres"
" WHERE centres.InsCod=%ld"
" AND CtrCod NOT IN"
@ -1316,7 +1412,8 @@ void Ctr_GetListCentres (long InsCod)
Gbl.Hierarchy.Ins.Ctrs.Num = (unsigned) NumRows;
/***** Create list with courses in degree *****/
if ((Gbl.Hierarchy.Ins.Ctrs.Lst = (struct Centre *) calloc (NumRows,sizeof (struct Centre))) == NULL)
if ((Gbl.Hierarchy.Ins.Ctrs.Lst = (struct Centre *) calloc (NumRows,
sizeof (struct Centre))) == NULL)
Lay_NotEnoughMemoryExit ();
/***** Get the centres *****/
@ -1328,39 +1425,7 @@ void Ctr_GetListCentres (long InsCod)
/* Get next centre */
row = mysql_fetch_row (mysql_res);
/* Get centre code (row[0]) */
if ((Ctr->CtrCod = Str_ConvertStrCodToLongCod (row[0])) <= 0)
Lay_ShowErrorAndExit ("Wrong code of centre.");
/* Get institution code (row[1]) */
Ctr->InsCod = Str_ConvertStrCodToLongCod (row[1]);
/* Get place code (row[2]) */
Ctr->PlcCod = Str_ConvertStrCodToLongCod (row[2]);
/* Get centre status (row[3]) */
if (sscanf (row[3],"%u",&(Ctr->Status)) != 1)
Lay_ShowErrorAndExit ("Wrong centre status.");
/* Get requester user's code (row[4]) */
Ctr->RequesterUsrCod = Str_ConvertStrCodToLongCod (row[4]);
/* Get the short name of the centre (row[5]) */
Str_Copy (Ctr->ShrtName,row[5],
Hie_MAX_BYTES_SHRT_NAME);
/* Get the full name of the centre (row[6]) */
Str_Copy (Ctr->FullName,row[6],
Hie_MAX_BYTES_FULL_NAME);
/* Get the URL of the centre (row[7]) */
Str_Copy (Ctr->WWW,row[7],
Cns_MAX_BYTES_WWW);
/* Get number of users who claim to belong to this centre (row[8]) */
if (sscanf (row[8],"%u",&Ctr->NumUsrsWhoClaimToBelongToCtr) != 1)
Ctr->NumUsrsWhoClaimToBelongToCtr = 0;
Ctr_GetDataOfCentreFromRow (Ctr,row);
/* Get number of degrees in this centre */
Ctr->Degs.Num = Deg_GetNumDegsInCtr (Ctr->CtrCod);
@ -1409,19 +1474,36 @@ bool Ctr_GetDataOfCentreByCod (struct Centre *Ctr,
{
/***** Get data of a centre from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get data of a centre",
"(SELECT centres.InsCod,centres.PlcCod,"
"centres.Status,centres.RequesterUsrCod,"
"centres.ShortName,centres.FullName,centres.WWW,"
"COUNT(DISTINCT usr_data.UsrCod) AS NumUsrs"
"(SELECT centres.CtrCod," // row[ 0]
"centres.InsCod," // row[ 1]
"centres.PlcCod," // row[ 2]
"centres.Status," // row[ 3]
"centres.RequesterUsrCod," // row[ 4]
"centres.Latitude," // row[ 5]
"centres.Longitude," // row[ 6]
"centres.Altitude," // row[ 7]
"centres.ShortName," // row[ 8]
"centres.FullName," // row[ 9]
"centres.WWW," // row[10]
"COUNT(DISTINCT usr_data.UsrCod)"
" AS NumUsrs" // row[11]
" FROM centres,usr_data"
" WHERE centres.CtrCod=%ld"
" AND centres.CtrCod=usr_data.CtrCod"
" GROUP BY centres.CtrCod)"
" UNION "
"(SELECT InsCod,PlcCod,"
"Status,RequesterUsrCod,"
"ShortName,FullName,WWW,"
"0 AS NumUsrs"
"(SELECT CtrCod," // row[ 0]
"InsCod," // row[ 1]
"PlcCod," // row[ 2]
"Status," // row[ 3]
"RequesterUsrCod," // row[ 4]
"Latitude," // row[ 5]
"Longitude," // row[ 6]
"Altitude," // row[ 7]
"ShortName," // row[ 8]
"FullName," // row[ 9]
"WWW," // row[10]
"0 AS NumUsrs" // row[11]
" FROM centres"
" WHERE CtrCod=%ld"
" AND CtrCod NOT IN"
@ -1432,35 +1514,7 @@ bool Ctr_GetDataOfCentreByCod (struct Centre *Ctr,
{
/* Get row */
row = mysql_fetch_row (mysql_res);
/* Get the code of the institution (row[0]) */
Ctr->InsCod = Str_ConvertStrCodToLongCod (row[0]);
/* Get the code of the place (row[1]) */
Ctr->PlcCod = Str_ConvertStrCodToLongCod (row[1]);
/* Get centre status (row[2]) */
if (sscanf (row[2],"%u",&(Ctr->Status)) != 1)
Lay_ShowErrorAndExit ("Wrong centre status.");
/* Get requester user's code (row[3]) */
Ctr->RequesterUsrCod = Str_ConvertStrCodToLongCod (row[3]);
/* Get the short name of the centre (row[4]) */
Str_Copy (Ctr->ShrtName,row[4],
Hie_MAX_BYTES_SHRT_NAME);
/* Get the full name of the centre (row[5]) */
Str_Copy (Ctr->FullName,row[5],
Hie_MAX_BYTES_FULL_NAME);
/* Get the URL of the centre (row[6]) */
Str_Copy (Ctr->WWW,row[6],
Cns_MAX_BYTES_WWW);
/* Get number of users who claim to belong to this centre (row[7]) */
if (sscanf (row[7],"%u",&Ctr->NumUsrsWhoClaimToBelongToCtr) != 1)
Ctr->NumUsrsWhoClaimToBelongToCtr = 0;
Ctr_GetDataOfCentreFromRow (Ctr,row);
/* Get extra data */
if (GetExtraData == Ctr_GET_EXTRA_DATA)
@ -1486,6 +1540,67 @@ bool Ctr_GetDataOfCentreByCod (struct Centre *Ctr,
return CtrFound;
}
/*****************************************************************************/
/********** Get data of a centre from a row resulting of a query *************/
/*****************************************************************************/
static void Ctr_GetDataOfCentreFromRow (struct Centre *Ctr,MYSQL_ROW row)
{
/***** Get centre code (row[0]) *****/
if ((Ctr->CtrCod = Str_ConvertStrCodToLongCod (row[0])) <= 0)
Lay_ShowErrorAndExit ("Wrong code of centre.");
/***** Get institution code (row[1]) *****/
Ctr->InsCod = Str_ConvertStrCodToLongCod (row[1]);
/***** Get place code (row[2]) *****/
Ctr->PlcCod = Str_ConvertStrCodToLongCod (row[2]);
/***** Get centre status (row[3]) *****/
if (sscanf (row[3],"%u",&(Ctr->Status)) != 1)
Lay_ShowErrorAndExit ("Wrong centre status.");
/***** Get requester user's code (row[4]) *****/
Ctr->RequesterUsrCod = Str_ConvertStrCodToLongCod (row[4]);
/***** Get latitude (row[5]) *****/
Ctr->Coord.Latitude = Str_GetDoubleFromStr (row[5]);
if (Ctr->Coord.Latitude < -90.0)
Ctr->Coord.Latitude = -90.0; // South Pole
else if (Ctr->Coord.Latitude > 90.0)
Ctr->Coord.Latitude = 90.0; // North Pole
/***** Get longitude (row[6]) *****/
Ctr->Coord.Longitude = Str_GetDoubleFromStr (row[6]);
if (Ctr->Coord.Longitude < -180.0)
Ctr->Coord.Longitude = -180.0; // West
else if (Ctr->Coord.Longitude > 180.0)
Ctr->Coord.Longitude = 180.0; // East
/***** Get altitude (row[7]) *****/
Ctr->Coord.Altitude = Str_GetDoubleFromStr (row[7]);
if (Ctr->Coord.Altitude < -413.0)
Ctr->Coord.Altitude = -413.0; // Dead Sea shore
else if (Ctr->Coord.Altitude > 8848.0)
Ctr->Coord.Altitude = 8848.0; // Mount Everest
/***** Get the short name of the centre (row[8]) *****/
Str_Copy (Ctr->ShrtName,row[8],
Hie_MAX_BYTES_SHRT_NAME);
/***** Get the full name of the centre (row[9]) *****/
Str_Copy (Ctr->FullName,row[9],
Hie_MAX_BYTES_FULL_NAME);
/***** Get the URL of the centre (row[10]) *****/
Str_Copy (Ctr->WWW,row[10],
Cns_MAX_BYTES_WWW);
/***** Get number of users who claim to belong to this centre (row[11]) *****/
if (sscanf (row[11],"%u",&Ctr->NumUsrsWhoClaimToBelongToCtr) != 1)
Ctr->NumUsrsWhoClaimToBelongToCtr = 0;
}
/*****************************************************************************/
/*********** Get the institution code of a centre from its code **************/
/*****************************************************************************/
@ -1799,7 +1914,7 @@ static void Ctr_ListCentresForEdition (void)
Frm_StartForm (ActChgCtrWWW);
Ctr_PutParamOtherCtrCod (Ctr->CtrCod);
HTM_INPUT_URL ("WWW",Ctr->WWW,true,
"class=\"INPUT_WWW\"");
"class=\"INPUT_WWW_NARROW\" required=\"required\"");
Frm_EndForm ();
}
else
@ -2299,6 +2414,107 @@ static void Ctr_UpdateInsNameDB (long CtrCod,const char *FieldName,const char *N
FieldName,NewCtrName,CtrCod);
}
/*****************************************************************************/
/********************** Change the latitude of a centre **********************/
/*****************************************************************************/
void Ctr_ChangeCtrLatitudeInConfig (void)
{
extern const char *Txt_The_new_latitude_is_X;
char LatitudeStr[64];
double NewLatitude;
/***** Get latitude *****/
Par_GetParToText ("Latitude",LatitudeStr,sizeof (LatitudeStr) - 1);
NewLatitude = Str_GetDoubleFromStr (LatitudeStr);
if (NewLatitude < -90.0)
NewLatitude = -90.0; // South Pole
else if (NewLatitude > 90.0)
NewLatitude = 90.0; // North Pole
/***** Update database changing old latitude by new latitude *****/
Ctr_UpdateCtrCoordinateDB (Gbl.Hierarchy.Ctr.CtrCod,"Latitude",NewLatitude);
Gbl.Hierarchy.Ctr.Coord.Latitude = NewLatitude;
/***** Write message to show the change made *****/
Ale_ShowAlert (Ale_SUCCESS,Txt_The_new_latitude_is_X,NewLatitude);
/***** Show the form again *****/
Ctr_ShowConfiguration ();
}
/*****************************************************************************/
/********************** Change the longitude of a centre **********************/
/*****************************************************************************/
void Ctr_ChangeCtrLongitudeInConfig (void)
{
extern const char *Txt_The_new_longitude_is_X;
char LongitudeStr[64];
double NewLongitude;
/***** Get longitude *****/
Par_GetParToText ("Longitude",LongitudeStr,sizeof (LongitudeStr) - 1);
NewLongitude = Str_GetDoubleFromStr (LongitudeStr);
if (NewLongitude < -180.0)
NewLongitude = -180.0; // West
else if (NewLongitude > 180.0)
NewLongitude = 180.0; // East
/***** Update database changing old longitude by new longitude *****/
Ctr_UpdateCtrCoordinateDB (Gbl.Hierarchy.Ctr.CtrCod,"Longitude",NewLongitude);
Gbl.Hierarchy.Ctr.Coord.Longitude = NewLongitude;
/***** Write message to show the change made *****/
Ale_ShowAlert (Ale_SUCCESS,Txt_The_new_longitude_is_X,NewLongitude);
/***** Show the form again *****/
Ctr_ShowConfiguration ();
}
/*****************************************************************************/
/********************** Change the latitude of a centre **********************/
/*****************************************************************************/
void Ctr_ChangeCtrAltitudeInConfig (void)
{
extern const char *Txt_The_new_altitude_is_X;
char AltitudeStr[64];
double NewAltitude;
/***** Get altitude *****/
Par_GetParToText ("Altitude",AltitudeStr,sizeof (AltitudeStr) - 1);
NewAltitude = Str_GetDoubleFromStr (AltitudeStr);
if (NewAltitude < -413.0)
NewAltitude = -413.0; // Dead Sea shore
else if (NewAltitude > 8848.0)
NewAltitude = 8848.0; // Mount Everest
/***** Update database changing old altitude by new altitude *****/
Ctr_UpdateCtrCoordinateDB (Gbl.Hierarchy.Ctr.CtrCod,"Altitude",NewAltitude);
Gbl.Hierarchy.Ctr.Coord.Altitude = NewAltitude;
/***** Write message to show the change made *****/
Ale_ShowAlert (Ale_SUCCESS,Txt_The_new_altitude_is_X,NewAltitude);
/***** Show the form again *****/
Ctr_ShowConfiguration ();
}
/*****************************************************************************/
/******** Update database changing old coordinate by new coordinate **********/
/*****************************************************************************/
static void Ctr_UpdateCtrCoordinateDB (long CtrCod,const char *CoordField,double NewCoord)
{
/***** Update database changing old coordinate by new coordinate *****/
Str_SetDecimalPointToUS (); // To write the decimal point as a dot
DB_QueryUPDATE ("can not update a coordinate of a centre",
"UPDATE centres SET %s='%lg' WHERE CtrCod=%ld",
CoordField,NewCoord,CtrCod);
Str_SetDecimalPointToLocal (); // Return to local system
}
/*****************************************************************************/
/************************* Change the URL of a centre ************************/
/*****************************************************************************/
@ -2755,7 +2971,7 @@ static void Ctr_PutFormToCreateCentre (void)
/***** Centre WWW *****/
HTM_TD_Begin ("class=\"LM\"");
HTM_INPUT_URL ("WWW",Ctr_EditingCtr->WWW,false,
"class=\"INPUT_WWW\" required=\"required\"");
"class=\"INPUT_WWW_NARROW\" required=\"required\"");
HTM_TD_End ();
/***** Number of users who claim to belong to this centre *****/

View File

@ -65,9 +65,9 @@ struct Centre
long CtrCod; // Centre code
long InsCod; // Institution code
long PlcCod; // Place code
struct Coordinates Coordinates; // Latitude and longitude
Ctr_Status_t Status; // Centre status
long RequesterUsrCod; // User code of the person who requested the creation of this centre
struct Coordinates Coord; // Geographical coordinates
char ShrtName[Hie_MAX_BYTES_SHRT_NAME + 1];
char FullName[Hie_MAX_BYTES_FULL_NAME + 1];
char WWW[Cns_MAX_BYTES_WWW + 1];
@ -126,6 +126,9 @@ void Ctr_RenameCentreShort (void);
void Ctr_RenameCentreFull (void);
void Ctr_RenameCentreShortInConfig (void);
void Ctr_RenameCentreFullInConfig (void);
void Ctr_ChangeCtrLatitudeInConfig (void);
void Ctr_ChangeCtrLongitudeInConfig (void);
void Ctr_ChangeCtrAltitudeInConfig (void);
void Ctr_ChangeCtrWWW (void);
void Ctr_ChangeCtrWWWInConfig (void);
void Ctr_ChangeCtrStatus (void);

View File

@ -492,14 +492,20 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
#define Log_PLATFORM_VERSION "SWAD 19.96 (2019-12-19)"
#define CSS_FILE "swad19.95.css"
#define Log_PLATFORM_VERSION "SWAD 19.97 (2019-12-19)"
#define CSS_FILE "swad19.97.css"
#define JS_FILE "swad19.91.1.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: No se puede entrar con DNI '1' suponiendo que no tenga password ¿por qué?
Version 19.97: Dec 19, 2019 Forms to edit centro latitude, longitude and altitude. (249807 lines)
3 changes necessary in database:
ALTER TABLE centres ADD COLUMN Latitude DOUBLE PRECISION NOT NULL DEFAULT 0 AFTER RequesterUsrCod;
ALTER TABLE centres ADD COLUMN Longitude DOUBLE PRECISION NOT NULL DEFAULT 0 AFTER Latitude;
ALTER TABLE centres ADD COLUMN Altitude DOUBLE PRECISION NOT NULL DEFAULT 0 AFTER Longitude;
Version 19.96: Dec 19, 2019 Bug fixes and code refactoring. (249423 lines)
Version 19.95.2: Dec 18, 2019 Bug fixes. (? lines)
1 change necessary in database:

View File

@ -1676,7 +1676,7 @@ static void Cty_ListCountriesForEdition (void)
Cty_PutParamOtherCtyCod (Cty->CtyCod);
Par_PutHiddenParamUnsigned (NULL,"Lan",(unsigned) Lan);
HTM_INPUT_URL ("WWW",Cty->WWW[Lan],true,
"class=\"INPUT_WWW\"");
"class=\"INPUT_WWW_NARROW\" required=\"required\"");
Frm_EndForm ();
HTM_TD_End ();
@ -2101,7 +2101,7 @@ static void Cty_PutFormToCreateCountry (void)
"WWW_%s",
Lan_STR_LANG_ID[Lan]);
HTM_INPUT_URL (StrName,Cty_EditingCty->WWW[Lan],false,
"class=\"INPUT_WWW\"");
"class=\"INPUT_WWW_NARROW\" required=\"required\"");
HTM_TD_End ();
HTM_TR_End ();

View File

@ -1971,7 +1971,14 @@ bool Crs_GetDataOfCourseByCod (struct Course *Crs,
{
/***** Get data of a course from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get data of a course",
"SELECT CrsCod,DegCod,Year,InsCrsCod,Status,RequesterUsrCod,ShortName,FullName"
"SELECT CrsCod," // row[0]
"DegCod," // row[1]
"Year," // row[2]
"InsCrsCod," // row[3]
"Status," // row[4]
"RequesterUsrCod," // row[5]
"ShortName," // row[6]
"FullName" // row[7]
" FROM courses WHERE CrsCod=%ld",
Crs->CrsCod)) // Course found...
{

View File

@ -427,12 +427,15 @@ mysql> DESCRIBE centres;
| PlcCod | int(11) | NO | MUL | -1 | |
| Status | tinyint(4) | NO | MUL | 0 | |
| RequesterUsrCod | int(11) | NO | | -1 | |
| Latitude | double | NO | | 0 | |
| Longitude | double | NO | | 0 | |
| Altitude | double | NO | | 0 | |
| ShortName | varchar(511) | NO | | NULL | |
| FullName | varchar(2047) | NO | | NULL | |
| WWW | varchar(255) | NO | | NULL | |
| PhotoAttribution | text | NO | | NULL | |
+------------------+---------------+------+-----+---------+----------------+
9 rows in set (0,00 sec)
12 rows in set (0.00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS centres ("
"CtrCod INT NOT NULL AUTO_INCREMENT,"
@ -440,6 +443,9 @@ mysql> DESCRIBE centres;
"PlcCod INT NOT NULL,"
"Status TINYINT NOT NULL DEFAULT 0,"
"RequesterUsrCod INT NOT NULL DEFAULT -1,"
"Latitude DOUBLE PRECISION NOT NULL DEFAULT 0,"
"Longitude DOUBLE PRECISION NOT NULL DEFAULT 0,"
"Altitude DOUBLE PRECISION NOT NULL DEFAULT 0,"
"ShortName VARCHAR(511) COLLATE latin1_spanish_ci NOT NULL," // Hie_MAX_BYTES_SHRT_NAME
"FullName VARCHAR(2047) COLLATE latin1_spanish_ci NOT NULL," // Hie_MAX_BYTES_FULL_NAME
"WWW VARCHAR(255) NOT NULL," // Cns_MAX_BYTES_WWW
@ -3347,7 +3353,7 @@ static unsigned long DB_QuerySELECTusingQueryStr (char *Query,
unsigned long DB_GetNumRowsTable (const char *Table)
{
/***** Get total number of centres from database *****/
/***** Get total number of rows from database *****/
return DB_QueryCOUNT ("can not get number of rows in table",
"SELECT COUNT(*) FROM %s",
Table);

View File

@ -447,7 +447,7 @@ static void Deg_Configuration (bool PrintView)
/* Form to change degree WWW */
Frm_StartForm (ActChgDegWWWCfg);
HTM_INPUT_URL ("WWW",Gbl.Hierarchy.Deg.WWW,true,
"class=\"INPUT_WWW\"");
"class=\"INPUT_WWW_WIDE\" required=\"required\"");
Frm_EndForm ();
}
else // I can not change degree WWW
@ -792,7 +792,7 @@ static void Deg_ListDegreesForEdition (void)
Frm_StartForm (ActChgDegWWW);
Deg_PutParamOtherDegCod (Deg->DegCod);
HTM_INPUT_URL ("WWW",Deg->WWW,true,
"class=\"INPUT_WWW\"");
"class=\"INPUT_WWW_NARROW\" required=\"required\"");
Frm_EndForm ();
}
else
@ -977,7 +977,7 @@ static void Deg_PutFormToCreateDegree (void)
/***** Degree WWW *****/
HTM_TD_Begin ("class=\"LM\"");
HTM_INPUT_URL ("WWW",Deg_EditingDeg->WWW,false,
"class=\"INPUT_WWW\" required=\"required\"");
"class=\"INPUT_WWW_NARROW\" required=\"required\"");
HTM_TD_End ();
/***** Current number of courses in this degree *****/

View File

@ -575,7 +575,7 @@ static void Dpt_ListDepartmentsForEdition (void)
Frm_StartForm (ActChgDptWWW);
Dpt_PutParamDptCod (Dpt->DptCod);
HTM_INPUT_URL ("WWW",Dpt->WWW,true,
"class=\"INPUT_WWW\"");
"class=\"INPUT_WWW_NARROW\" required=\"required\"");
Frm_EndForm ();
HTM_TD_End ();
@ -940,7 +940,7 @@ static void Dpt_PutFormToCreateDepartment (void)
/***** Department WWW *****/
HTM_TD_Begin ("class=\"CM\"");
HTM_INPUT_URL ("WWW",Dpt_EditingDpt->WWW,false,
"class=\"INPUT_WWW\" required=\"required\"");
"class=\"INPUT_WWW_NARROW\" required=\"required\"");
HTM_TD_End ();
HTM_TR_End ();

View File

@ -461,7 +461,7 @@ static void Ins_Configuration (bool PrintView)
/* Form to change institution WWW */
Frm_StartForm (ActChgInsWWWCfg);
HTM_INPUT_URL ("WWW",Gbl.Hierarchy.Ins.WWW,true,
"class=\"INPUT_WWW\"");
"class=\"INPUT_WWW_WIDE\" required=\"required\"");
Frm_EndForm ();
}
else // I can not change institution WWW
@ -1513,7 +1513,7 @@ static void Ins_ListInstitutionsForEdition (void)
Frm_StartForm (ActChgInsWWW);
Ins_PutParamOtherInsCod (Ins->InsCod);
HTM_INPUT_URL ("WWW",Ins->WWW,true,
"class=\"INPUT_WWW\"");
"class=\"INPUT_WWW_NARROW\" required=\"required\"");
Frm_EndForm ();
HTM_TD_End ();
}
@ -2216,7 +2216,7 @@ static void Ins_PutFormToCreateInstitution (void)
/***** Institution WWW *****/
HTM_TD_Begin ("class=\"LM\"");
HTM_INPUT_URL ("WWW",Ins_EditingIns->WWW,false,
"class=\"INPUT_WWW\" required=\"required\"");
"class=\"INPUT_WWW_NARROW\" required=\"required\"");
HTM_TD_End ();
/***** Number of users who claim to belong to this institution ****/

View File

@ -441,7 +441,7 @@ static void Lnk_ListLinksForEdition (void)
Frm_StartForm (ActRenLnkSho);
Lnk_PutParamLnkCod (Lnk->LnkCod);
HTM_INPUT_TEXT ("ShortName",Lnk_MAX_CHARS_LINK_SHRT_NAME,Lnk->ShrtName,true,
"class=\"INPUT_SHORT_NAME\"");
"class=\"INPUT_SHORT_NAME\" required=\"required\"");
Frm_EndForm ();
HTM_TD_End ();
@ -450,7 +450,7 @@ static void Lnk_ListLinksForEdition (void)
Frm_StartForm (ActRenLnkFul);
Lnk_PutParamLnkCod (Lnk->LnkCod);
HTM_INPUT_TEXT ("FullName",Lnk_MAX_CHARS_LINK_FULL_NAME,Lnk->FullName,true,
"class=\"INPUT_FULL_NAME\"");
"class=\"INPUT_FULL_NAME\" required=\"required\"");
Frm_EndForm ();
HTM_TD_End ();
@ -459,7 +459,7 @@ static void Lnk_ListLinksForEdition (void)
Frm_StartForm (ActChgLnkWWW);
Lnk_PutParamLnkCod (Lnk->LnkCod);
HTM_INPUT_URL ("WWW",Lnk->WWW,true,
"class=\"INPUT_WWW\"");
"class=\"INPUT_WWW_NARROW\" required=\"required\"");
Frm_EndForm ();
HTM_TD_End ();
@ -756,7 +756,7 @@ static void Lnk_PutFormToCreateLink (void)
/***** Link WWW *****/
HTM_TD_Begin ("class=\"CM\"");
HTM_INPUT_URL ("WWW",Lnk_EditingLnk->WWW,false,
"class=\"INPUT_WWW\" required=\"required\"");
"class=\"INPUT_WWW_NARROW\" required=\"required\"");
HTM_TD_End ();
HTM_TR_End ();

View File

@ -1505,6 +1505,27 @@ const char *Txt_Already_existed_an_event_with_the_title_X = // Warning: it is ve
"J&aacute; existe um evento com o t&iacute;tulo <strong>%s</strong>.";
#endif
const char *Txt_Altitude =
#if L==1 // ca
"Altitud";
#elif L==2 // de
"H&ouml;he";
#elif L==3 // en
"Altitude";
#elif L==4 // es
"Altitud";
#elif L==5 // fr
"Altitude";
#elif L==6 // gn
"Altitud"; // Okoteve traducción
#elif L==7 // it
"Altitudine";
#elif L==8 // pl
"Wysoko&sacute;&cacute; bezwzgl&eogon;dna";
#elif L==9 // pt
"Altitude";
#endif
const char *Txt_and =
#if L==1 // ca
"i";
@ -9328,6 +9349,27 @@ const char *Txt_Do_you_want_to_follow_the_X_selected_users_whom_you_do_not_follo
"Voc&ecirc; quer seguir os %u usu&aacute;rios selecionados que voc&ecirc; n&atilde;o segue ainda?";
#endif
const char *Txt_Do_you_want_to_lock_the_editing_of_the_X_selected_projects = // Warning: it is very important to include %u in the following sentences
#if L==1 // ca
"Voleu bloquejar l'edici&oacute;n dels %u projectes seleccionats?";
#elif L==2 // de
"M&ouml;chten Sie die Bearbeitung der ausgew&auml;hlten %u-Projekte sperren?";
#elif L==3 // en
"Do you want to lock the editing of the %u selected projects?";
#elif L==4 // es
"&iquest;Desea bloquear la edici&oacute;n de los %u proyectos seleccionados?";
#elif L==5 // fr
"Voulez-vous verrouiller l'&eacute;dition des %u projets s&eacute;lectionn&eacute;s?";
#elif L==6 // gn
"&iquest;Desea bloquear la edici&oacute;n de los %u proyectos seleccionados?"; // Okoteve traducción
#elif L==7 // it
"Vuoi bloccare la modifica dei %u progetti selezionati?";
#elif L==8 // pl
"Czy chcesz zablokowa&cacute; edycj&eogon; %u wybranych projekt&oacute;w?";
#elif L==9 // pt
"Voc&ecirc; quer bloquear a edi&ccedil;&atilde;o dos %u projetos selecionados?";
#endif
const char *Txt_Do_you_want_to_stop_following_the_selected_user_whom_you_follow =
#if L==1 // ca
"Voleu deixar de seguir a l'usuari seleccionat a qui segueix?";
@ -9370,6 +9412,27 @@ const char *Txt_Do_you_want_to_stop_following_the_X_selected_users_whom_you_foll
"Voc&ecirc; quer parar de seguir os %u usu&aacute;rios selecionados que voc&ecirc; segue?";
#endif
const char *Txt_Do_you_want_to_unlock_the_editing_of_the_X_selected_projects = // Warning: it is very important to include %u in the following sentences
#if L==1 // ca
"Voleu desbloquejar l'edici&oacute; dels %u projectes seleccionats?";
#elif L==2 // de
"M&ouml;chten Sie die Bearbeitung der ausgew&auml;hlten %u-Projekte freischalten?";
#elif L==3 // en
"Do you want to unlock the editing of the %u selected projects?";
#elif L==4 // es
"&iquest;Desea desbloquear la edici&oacute;n de los %u proyectos seleccionados?";
#elif L==5 // fr
"Voulez-vous d&eacute;verrouiller l'&eacute;dition des %u projets s&eacute;lectionn&eacute;s?";
#elif L==6 // gn
"&iquest;Desea desbloquear la edici&oacute;n de los %u proyectos seleccionados?"; // Okoteve traducción
#elif L==7 // it
"Vuoi sbloccare la modifica dei %u progetti selezionati?";
#elif L==8 // pl
"Czy chcesz odblokowa&cacute; edycj&eogon; %u wybranych projekt&oacute;w?";
#elif L==9 // pt
"Voc&ecirc; quer desbloquear a edi&ccedil;&atilde;o dos %u projetos selecionados?";
#endif
const char *Txt_Document =
#if L==1 // ca
"Document";
@ -17103,6 +17166,27 @@ const char *Txt_Last_clicks_in_real_time =
"&Uacute;ltimos cliques em tempo real";
#endif
const char *Txt_Latitude =
#if L==1 // ca
"Latitud";
#elif L==2 // de
"Geographische Breite";
#elif L==3 // en
"Latitude";
#elif L==4 // es
"Latitud";
#elif L==5 // fr
"Latitude";
#elif L==6 // gn
"Latitud"; // Okoteve traducción
#elif L==7 // it
"Latitudine";
#elif L==8 // pl
"Szeroko&sacute;&cacute; geograficzna";
#elif L==9 // pt
"Latitude";
#endif
const char *Txt_LAYOUT_SIDE_COLUMNS[4] =
{
#if L==1 // ca
@ -17780,69 +17864,6 @@ const char *Txt_Lock_editing =
"Bloquear edi&ccedil;&atilde;o";
#endif
const char *Txt_Unlock_editing =
#if L==1 // ca
"Desbloquejar edici&oacute;";
#elif L==2 // de
"Bearbeitung freischalten";
#elif L==3 // en
"Unlock editing";
#elif L==4 // es
"Desbloquear edici&oacute;n";
#elif L==5 // fr
"D&eacute;verrouiller l'&eacute;dition";
#elif L==6 // gn
"Desbloquear edici&oacute;n"; // Okoteve traducción
#elif L==7 // it
"Sblocca la modifica";
#elif L==8 // pl
"Odblokuj edycj&eogon;";
#elif L==9 // pt
"Desbloquear edi&ccedil;&atilde;o";
#endif
const char *Txt_Do_you_want_to_lock_the_editing_of_the_X_selected_projects = // Warning: it is very important to include %u in the following sentences
#if L==1 // ca
"Voleu bloquejar l'edici&oacute;n dels %u projectes seleccionats?";
#elif L==2 // de
"M&ouml;chten Sie die Bearbeitung der ausgew&auml;hlten %u-Projekte sperren?";
#elif L==3 // en
"Do you want to lock the editing of the %u selected projects?";
#elif L==4 // es
"&iquest;Desea bloquear la edici&oacute;n de los %u proyectos seleccionados?";
#elif L==5 // fr
"Voulez-vous verrouiller l'&eacute;dition des %u projets s&eacute;lectionn&eacute;s?";
#elif L==6 // gn
"&iquest;Desea bloquear la edici&oacute;n de los %u proyectos seleccionados?"; // Okoteve traducción
#elif L==7 // it
"Vuoi bloccare la modifica dei %u progetti selezionati?";
#elif L==8 // pl
"Czy chcesz zablokowa&cacute; edycj&eogon; %u wybranych projekt&oacute;w?";
#elif L==9 // pt
"Voc&ecirc; quer bloquear a edi&ccedil;&atilde;o dos %u projetos selecionados?";
#endif
const char *Txt_Do_you_want_to_unlock_the_editing_of_the_X_selected_projects = // Warning: it is very important to include %u in the following sentences
#if L==1 // ca
"Voleu desbloquejar l'edici&oacute; dels %u projectes seleccionats?";
#elif L==2 // de
"M&ouml;chten Sie die Bearbeitung der ausgew&auml;hlten %u-Projekte freischalten?";
#elif L==3 // en
"Do you want to unlock the editing of the %u selected projects?";
#elif L==4 // es
"&iquest;Desea desbloquear la edici&oacute;n de los %u proyectos seleccionados?";
#elif L==5 // fr
"Voulez-vous d&eacute;verrouiller l'&eacute;dition des %u projets s&eacute;lectionn&eacute;s?";
#elif L==6 // gn
"&iquest;Desea desbloquear la edici&oacute;n de los %u proyectos seleccionados?"; // Okoteve traducción
#elif L==7 // it
"Vuoi sbloccare la modifica dei %u progetti selezionati?";
#elif L==8 // pl
"Czy chcesz odblokowa&cacute; edycj&eogon; %u wybranych projekt&oacute;w?";
#elif L==9 // pt
"Voc&ecirc; quer desbloquear a edi&ccedil;&atilde;o dos %u projetos selecionados?";
#endif
const char *Txt_LOG_More_info =
#if L==1 // ca
"Observaciones"; // Necessita traduccio
@ -18014,6 +18035,27 @@ const char *Txt_Logo =
"Logotipo";
#endif
const char *Txt_Longitude =
#if L==1 // ca
"Longitud";
#elif L==2 // de
"Geographische L&auml;nge";
#elif L==3 // en
"Longitude";
#elif L==4 // es
"Longitud";
#elif L==5 // fr
"Longitude";
#elif L==6 // gn
"Longitud"; // Okoteve traducción
#elif L==7 // it
"Longitudine";
#elif L==8 // pl
"D&lstrok;ugo&sacute;&cacute; geograficzna";
#elif L==9 // pt
"Longitude";
#endif
const char *Txt_Mandatory_enrolment = // (to a type of group)
#if L==1 // ca
"&iquest;Adscripci&oacute;n obligatoria?"; // Necessita traduccio
@ -46464,6 +46506,27 @@ const char *Txt_The_name_of_the_type_of_group_X_has_not_changed = // Warning: it
"O nome do tipo de grupo <strong>%s</strong> n&atilde;o foi alterado.";
#endif
const char *Txt_The_new_altitude_is_X = // Warning: it is very important to include %lg in the following sentences
#if L==1 // ca
"La nova altitud &eacute;s <strong>%lg</strong>.";
#elif L==2 // de
"Die neue H&ouml;he ist <strong>%lg</strong>.";
#elif L==3 // en
"The new altitude is <strong>%lg</strong>.";
#elif L==4 // es
"La nueva altitud es <strong>%lg</strong>.";
#elif L==5 // fr
"La nouvelle altitude est <strong>%lg</strong>.";
#elif L==6 // gn
"La nueva altitud es <strong>%lg</strong>."; // Okoteve traducción
#elif L==7 // it
"La nuova altitudine &egrave; <strong>%lg</strong>.";
#elif L==8 // pl
"Nowa wysoko&sacute;&cacute; wynosi <strong>%lg</strong>.";
#elif L==9 // pt
"O nova altitude &eacute; <strong>%lg</strong>.";
#endif
const char *Txt_The_new_IP_address_is_X = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"La nueva direcci&oacute;n IP es <strong>%s</strong>."; // Necessita traduccio
@ -46485,6 +46548,27 @@ const char *Txt_The_new_IP_address_is_X = // Warning: it is very important to in
"O novo endere&ccedil;o IP &eacute; <strong>%s</strong>.";
#endif
const char *Txt_The_new_latitude_is_X = // Warning: it is very important to include %lg in the following sentences
#if L==1 // ca
"La nova latitud &eacute;s <strong>%lg</strong>.";
#elif L==2 // de
"Der neue Breitengrad ist <strong>%lg</strong>.";
#elif L==3 // en
"The new latitude is <strong>%lg</strong>.";
#elif L==4 // es
"La nueva latitud es <strong>%lg</strong>.";
#elif L==5 // fr
"La nouvelle latitude est <strong>%lg</strong>.";
#elif L==6 // gn
"La nueva latitud es <strong>%lg</strong>."; // Okoteve traducción
#elif L==7 // it
"La nuova latitudine &egrave; <strong>%lg</strong>.";
#elif L==8 // pl
"Nowa szeroko&sacute;&cacute; geograficzna wynosi <strong>%lg</strong>.";
#elif L==9 // pt
"O nova latitude &eacute; <strong>%lg</strong>.";
#endif
const char *Txt_The_new_logo_is_X = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"El nuevo logo es <strong>%s</strong>."; // Necessita traduccio
@ -46506,6 +46590,27 @@ const char *Txt_The_new_logo_is_X = // Warning: it is very important to include
"O novo logotipo &eacute; <strong>%s</strong>.";
#endif
const char *Txt_The_new_longitude_is_X = // Warning: it is very important to include %lg in the following sentences
#if L==1 // ca
"La nova longitud &eacute;s <strong>%lg</strong>.";
#elif L==2 // de
"Der neue L&auml;ngengrad ist <strong>%lg</strong>.";
#elif L==3 // en
"The new longitude is <strong>%lg</strong>.";
#elif L==4 // es
"La nueva longitud es <strong>%lg</strong>.";
#elif L==5 // fr
"La nouvelle longitude est <strong>%lg</strong>.";
#elif L==6 // gn
"La nueva longitud es <strong>%lg</strong>."; // Okoteve traducción
#elif L==7 // it
"La nuova longitudine &egrave; <strong>%lg</strong>.";
#elif L==8 // pl
"Nowa d&lstrok;ugo&sacute;&cacute; geograficzna wynosi <strong>%lg</strong>.";
#elif L==9 // pt
"O nova longitude &eacute; <strong>%lg</strong>.";
#endif
const char *Txt_The_nickname_X_has_been_registered_successfully = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"El apodo <strong>@%s</strong>"
@ -51962,6 +52067,27 @@ const char *Txt_unknown_TIME =
"desconhecido";
#endif
const char *Txt_Unlock_editing =
#if L==1 // ca
"Desbloquejar edici&oacute;";
#elif L==2 // de
"Bearbeitung freischalten";
#elif L==3 // en
"Unlock editing";
#elif L==4 // es
"Desbloquear edici&oacute;n";
#elif L==5 // fr
"D&eacute;verrouiller l'&eacute;dition";
#elif L==6 // gn
"Desbloquear edici&oacute;n"; // Okoteve traducción
#elif L==7 // it
"Sblocca la modifica";
#elif L==8 // pl
"Odblokuj edycj&eogon;";
#elif L==9 // pt
"Desbloquear edi&ccedil;&atilde;o";
#endif
const char *Txt_unread_MESSAGE =
#if L==1 // ca
"no le&iacute;do"; // Necessita traduccio
@ -54948,7 +55074,28 @@ const char *Txt_You_can_not_leave_the_description_empty =
#elif L==9 // pt
"Voc&ecirc; n&atilde;o pode deixar a descri&ccedil;&atilde;o vazia.";
#endif
/*
const char *Txt_You_can_not_leave_the_field_empty =
#if L==1 // ca
"No podeu deixar el camp buit.";
#elif L==2 // de
"Sie k&ouml;nnen das Feld nicht leer lassen.";
#elif L==3 // en
"You can not leave the field empty.";
#elif L==4 // es
"No puede dejar el campo vac&iacute;o.";
#elif L==5 // fr
"Vous ne pouvez pas laisser le champ vide.";
#elif L==6 // gn
"No puede dejar el campo vac&iacute;o."; // Okoteve traducción
#elif L==7 // it
"Non puoi lasciare il campo vuoto.";
#elif L==8 // pl
"Nie mo&zdot;esz zostawi&cacute; pola pustego.";
#elif L==9 // pt
"Voc&ecirc; n&atilde;o pode deixar o campo vazio.";
#endif
*/
const char *Txt_You_can_not_leave_the_image_empty =
#if L==1 // ca
"No puede dejar la imagen vac&iacute;a."; // Necessita traduccio

View File

@ -2700,6 +2700,8 @@ void Usr_WelcomeUsr (void)
Ale_WARNING,Txt_Please_check_your_email_address);
}
/***** Games tool *****/
/*
Ale_ShowAlert (Ale_INFO,
"Herramienta <a href=\"https://github.com/acanas/swad-core/wiki/ASSESSMENT.Games.es\" target=\"_blank\">"
"Evaluaci&oacute;n &gt; Juegos</a><br />"
@ -2709,6 +2711,7 @@ void Usr_WelcomeUsr (void)
"<br />"
"<br />"
"<img src=\"/img/juego.png\" alt=\"Juegos\" style=\"width:100%%\">");
*/
/***** Institutional video *****/
/*