diff --git a/css/swad22.86.css b/css/swad22.88.css
similarity index 99%
rename from css/swad22.86.css
rename to css/swad22.88.css
index 719f6fbe..0a0fd70e 100644
--- a/css/swad22.86.css
+++ b/css/swad22.88.css
@@ -1851,7 +1851,7 @@ a:hover img.CENTER_PHOTO_SHOW
.PRG_LNK_DARK {color:#afc4cc; font-size:13pt;}
/***************************** Resource clipboard ****************************/
-.SRC_CLIPBOARD
+.RSC_CLIPBOARD
{
box-sizing:border-box;
list-style-type:none;
diff --git a/swad_changelog.h b/swad_changelog.h
index 6ecbbdb3..29d5e222 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.1 (2023-03-31)"
-#define CSS_FILE "swad22.86.css"
+#define Log_PLATFORM_VERSION "SWAD 22.88 (2023-03-31)"
+#define CSS_FILE "swad22.88.css"
#define JS_FILE "swad22.49.js"
/*
+ Version 22.88: Mar 31, 2023 Code refactoring in resources. (338538 lines)
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)
diff --git a/swad_program_resource.c b/swad_program_resource.c
index 52870669..5a1a5482 100644
--- a/swad_program_resource.c
+++ b/swad_program_resource.c
@@ -92,7 +92,6 @@ static bool PrgRsc_ExchangeResources (const struct Prg_ResourceHierarchy *Rsc1,
static void PrgRsc_ShowClipboard (void);
static void PrgRsc_PutIconsClipboard (__attribute__((unused)) void *Args);
-static void PrgRsc_ShowClipboardToChangeLink (struct Prg_Item *Item);
/*****************************************************************************/
/****************************** View resources *******************************/
@@ -436,8 +435,13 @@ static void PrgRsc_WriteRowEditResource (unsigned NumRsc,unsigned NumResources,
/* Edit link showing clipboard / Show current link */
if (EditLink)
+ {
/* Show clipboard to change resource link */
- PrgRsc_ShowClipboardToChangeLink (Item);
+ Frm_BeginFormAnchor (ActChgLnkPrgRsc,PrgRsc_RESOURCE_SECTION_ID);
+ ParCod_PutPar (ParCod_Rsc,Item->Resource.Hierarchy.RscCod);
+ Rsc_ShowClipboardToChangeLink (&Item->Resource.Link);
+ Frm_EndForm ();
+ }
else
/* Show current link */
Rsc_WriteLinkName (&Item->Resource.Link,
@@ -494,7 +498,10 @@ static void PrgRsc_WriteRowNewResource (unsigned NumResources,
HTM_BR ();
/* Show clipboard to change resource link */
- PrgRsc_ShowClipboardToChangeLink (Item);
+ Frm_BeginFormAnchor (ActChgLnkPrgRsc,PrgRsc_RESOURCE_SECTION_ID);
+ ParCod_PutPar (ParCod_Itm,Item->Hierarchy.ItmCod);
+ Rsc_ShowClipboardToChangeLink (&Item->Resource.Link);
+ Frm_EndForm ();
}
HTM_TD_End ();
@@ -920,64 +927,6 @@ void PrgRsc_EditProgramWithClipboard (void)
/***************** Show clipboard to change resource link ********************/
/*****************************************************************************/
-static void PrgRsc_ShowClipboardToChangeLink (struct Prg_Item *Item)
- {
- MYSQL_RES *mysql_res;
- unsigned NumLink;
- unsigned NumLinks;
- struct Rsc_Link Link;
- static const struct Rsc_Link EmptyLink =
- {
- .Type = Rsc_NONE,
- .Cod = -1L,
- };
-
- /***** Begin form *****/
- Frm_BeginFormAnchor (ActChgLnkPrgRsc,PrgRsc_RESOURCE_SECTION_ID);
- if (Item->Resource.Hierarchy.RscCod > 0)
- ParCod_PutPar (ParCod_Rsc,Item->Resource.Hierarchy.RscCod);
- else
- /* No resource selected, so it's a new resource at the end of the item */
- ParCod_PutPar (ParCod_Itm,Item->Hierarchy.ItmCod);
-
- /***** Begin list *****/
- HTM_UL_Begin ("class=\"SRC_CLIPBOARD\"");
-
- /***** Current link (empty or not) *****/
- Rsc_WriteRowClipboard (&Item->Resource.Link,
- HTM_DONT_SUBMIT_ON_CLICK,
- true); // Checked
-
- /***** Row with empty link to remove the current link *****/
- if (Item->Resource.Link.Type != Rsc_NONE)
- Rsc_WriteRowClipboard (&EmptyLink,
- HTM_SUBMIT_ON_CLICK,
- false); // Not checked
-
- /***** Get links in clipboard from database and write them *****/
- NumLinks = Rsc_DB_GetClipboard (&mysql_res);
- for (NumLink = 1;
- NumLink <= NumLinks;
- NumLink++)
- {
- Rsc_GetLinkDataFromRow (mysql_res,&Link);
- Rsc_WriteRowClipboard (&Link,
- HTM_SUBMIT_ON_CLICK,
- false); // Not checked
- }
- DB_FreeMySQLResult (&mysql_res);
-
- /***** End list *****/
- HTM_UL_End ();
-
- /***** End form *****/
- Frm_EndForm ();
- }
-
-/*****************************************************************************/
-/***************** Show clipboard to change resource link ********************/
-/*****************************************************************************/
-
void PrgRsc_ChangeLink (void)
{
struct Prg_Item Item;
diff --git a/swad_resource.c b/swad_resource.c
index 4024bd19..1c2d3b2e 100644
--- a/swad_resource.c
+++ b/swad_resource.c
@@ -118,7 +118,7 @@ void Rsc_ShowClipboard (void)
struct Rsc_Link Link;
/***** Begin list *****/
- HTM_UL_Begin ("class=\"SRC_CLIPBOARD\"");
+ HTM_UL_Begin ("class=\"RSC_CLIPBOARD\"");
/***** Get links in clipboard from database and write them *****/
NumLinks = Rsc_DB_GetClipboard (&mysql_res);
@@ -140,6 +140,61 @@ void Rsc_ShowClipboard (void)
HTM_UL_End ();
}
+/*****************************************************************************/
+/***************** Show clipboard to change resource link ********************/
+/*****************************************************************************/
+
+void Rsc_ShowClipboardToChangeLink (const struct Rsc_Link *CurrentLink)
+ {
+ MYSQL_RES *mysql_res;
+ unsigned NumLink;
+ unsigned NumLinks;
+ struct Rsc_Link Link;
+ static const struct Rsc_Link EmptyLink =
+ {
+ .Type = Rsc_NONE,
+ .Cod = -1L,
+ };
+
+ /***** Begin list *****/
+ HTM_UL_Begin ("class=\"RSC_CLIPBOARD\"");
+
+ if (CurrentLink) // Editing an existing element
+ {
+ /***** Current link (empty or not) *****/
+ Rsc_WriteRowClipboard (CurrentLink,
+ HTM_DONT_SUBMIT_ON_CLICK,
+ true); // Checked
+
+ /***** Row with empty link to remove the current link *****/
+ if (CurrentLink->Type != Rsc_NONE)
+ Rsc_WriteRowClipboard (&EmptyLink,
+ HTM_SUBMIT_ON_CLICK,
+ false); // Not checked
+ }
+ else // Inside form to create a new element
+ /***** Row with empty link *****/
+ Rsc_WriteRowClipboard (&EmptyLink,
+ HTM_DONT_SUBMIT_ON_CLICK,
+ true); // Checked
+
+ /***** Get links in clipboard from database and write them *****/
+ NumLinks = Rsc_DB_GetClipboard (&mysql_res);
+ for (NumLink = 1;
+ NumLink <= NumLinks;
+ NumLink++)
+ {
+ Rsc_GetLinkDataFromRow (mysql_res,&Link);
+ Rsc_WriteRowClipboard (&Link,
+ HTM_SUBMIT_ON_CLICK,
+ false); // Checked
+ }
+ DB_FreeMySQLResult (&mysql_res);
+
+ /***** End list *****/
+ HTM_UL_End ();
+ }
+
/*****************************************************************************/
/************************ Show one link from clipboard ***********************/
/*****************************************************************************/
diff --git a/swad_resource.h b/swad_resource.h
index 4fb3f228..89574110 100644
--- a/swad_resource.h
+++ b/swad_resource.h
@@ -74,6 +74,7 @@ struct Rsc_Link
/*****************************************************************************/
void Rsc_ShowClipboard (void);
+void Rsc_ShowClipboardToChangeLink (const struct Rsc_Link *CurrentLink);
void Rsc_WriteRowClipboard (const struct Rsc_Link *Link,
HTM_SubmitOnClick_t SubmitOnClick,bool Checked);
void Rsc_WriteLinkName (const struct Rsc_Link *Link,bool PutFormToGo,
diff --git a/swad_rubric_criteria.c b/swad_rubric_criteria.c
index 61ea6b91..1b12c9e6 100644
--- a/swad_rubric_criteria.c
+++ b/swad_rubric_criteria.c
@@ -100,13 +100,6 @@ static void RubCri_GetAndCheckPars (struct Rub_Rubrics *Rubrics,
static void RubCri_ExchangeCriteria (long RubCod,
unsigned CriIndTop,unsigned CriIndBottom);
-static void RubCri_ShowResource (struct Rub_Rubrics *Rubrics,
- const struct RubCri_Criterion *Criterion,
- bool Editing,const char *Anchor);
-static void RubCri_ShowClipboard (struct Rub_Rubrics *Rubrics,
- const struct RubCri_Criterion *Criterion,
- const char *Anchor);
-
/*****************************************************************************/
/*************** Put parameter to edit one rubric criterion ******************/
/*****************************************************************************/
@@ -158,15 +151,6 @@ static void RubCri_PutFormNewCriterion (struct Rub_Rubrics *Rubrics,
extern const char *Txt_New_criterion;
extern const char *Txt_Create_criterion;
RubCri_ValueRange_t ValueRange;
- MYSQL_RES *mysql_res;
- unsigned NumLink;
- unsigned NumLinks;
- struct Rsc_Link Link;
- static const struct Rsc_Link EmptyLink =
- {
- .Type = Rsc_NONE,
- .Cod = -1L,
- };
/***** Begin form *****/
Frm_BeginForm (ActNewRubCri);
@@ -203,32 +187,8 @@ static void RubCri_PutFormNewCriterion (struct Rub_Rubrics *Rubrics,
HTM_TD_End ();
/***** Link *****/
- HTM_TD_Begin ("class=\"LT %s\"",The_GetColorRows ());
-
- /***** Begin list *****/
- HTM_UL_Begin ("class=\"SRC_CLIPBOARD\"");
-
- /***** Row with empty link *****/
- Rsc_WriteRowClipboard (&EmptyLink,
- HTM_DONT_SUBMIT_ON_CLICK,
- true); // Checked
-
- /***** Get links in clipboard from database and write them *****/
- NumLinks = Rsc_DB_GetClipboard (&mysql_res);
- for (NumLink = 1;
- NumLink <= NumLinks;
- NumLink++)
- {
- Rsc_GetLinkDataFromRow (mysql_res,&Link);
- Rsc_WriteRowClipboard (&Link,
- HTM_DONT_SUBMIT_ON_CLICK,
- false); // Not checked
- }
- DB_FreeMySQLResult (&mysql_res);
-
- /***** End list *****/
- HTM_UL_End ();
-
+ HTM_TD_Begin ("class=\"LT\"");
+ Rsc_ShowClipboardToChangeLink (NULL);
HTM_TD_End ();
/***** Minimum and maximum values of the criterion *****/
@@ -682,8 +642,10 @@ static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics,
/***** Link to resource *****/
HTM_TD_Begin ("class=\"LT %s\"",The_GetColorRows ());
- RubCri_ShowResource (Rubrics,&Criterion,
- true,Anchor); // Editing
+ Frm_BeginFormAnchor (ActChgLnkRubCri,Anchor);
+ RubCri_PutParsOneCriterion (Rubrics);
+ Rsc_ShowClipboardToChangeLink (&Criterion.Link);
+ Frm_EndForm ();
HTM_TD_End ();
/***** Minimum and maximum values of criterion *****/
@@ -1109,7 +1071,7 @@ static void RubCri_ExchangeCriteria (long RubCod,
/*****************************************************************************/
/************************** Show criterion resource **************************/
/*****************************************************************************/
-
+/*
static void RubCri_ShowResource (struct Rub_Rubrics *Rubrics,
const struct RubCri_Criterion *Criterion,
bool Editing,const char *Anchor)
@@ -1117,71 +1079,12 @@ static void RubCri_ShowResource (struct Rub_Rubrics *Rubrics,
extern const char *Rsc_ResourceTypesIcons[Rsc_NUM_TYPES];
extern const char *Txt_RESOURCE_TYPES[Rsc_NUM_TYPES];
- if (Editing)
- RubCri_ShowClipboard (Rubrics,Criterion,Anchor);
- else
- Rsc_WriteLinkName (&Criterion->Link,
- true, // Put form to go
- Rsc_ResourceTypesIcons[Criterion->Link.Type],
- Txt_RESOURCE_TYPES[Criterion->Link.Type]);
- }
-
-/*****************************************************************************/
-/***************** Show clipboard to change resource link ********************/
-/*****************************************************************************/
-
-static void RubCri_ShowClipboard (struct Rub_Rubrics *Rubrics,
- const struct RubCri_Criterion *Criterion,
- const char *Anchor)
- {
- MYSQL_RES *mysql_res;
- unsigned NumLink;
- unsigned NumLinks;
- struct Rsc_Link Link;
- static const struct Rsc_Link EmptyLink =
- {
- .Type = Rsc_NONE,
- .Cod = -1L,
- };
-
- /***** Begin form *****/
- Frm_BeginFormAnchor (ActChgLnkRubCri,Anchor);
- RubCri_PutParsOneCriterion (Rubrics);
-
- /***** Begin list *****/
- HTM_UL_Begin ("class=\"SRC_CLIPBOARD\"");
-
- /***** Current link (empty or not) *****/
- Rsc_WriteRowClipboard (&Criterion->Link,
- HTM_DONT_SUBMIT_ON_CLICK,
- true); // Checked
-
- /***** Row with empty link to remove the current link *****/
- if (Criterion->Link.Type != Rsc_NONE)
- Rsc_WriteRowClipboard (&EmptyLink,
- HTM_SUBMIT_ON_CLICK,
- false); // Checked
-
-
- /***** Get links in clipboard from database and write them *****/
- NumLinks = Rsc_DB_GetClipboard (&mysql_res);
- for (NumLink = 1;
- NumLink <= NumLinks;
- NumLink++)
- {
- Rsc_GetLinkDataFromRow (mysql_res,&Link);
- Rsc_WriteRowClipboard (&Link,
- HTM_SUBMIT_ON_CLICK,
- false); // Checked
- }
- DB_FreeMySQLResult (&mysql_res);
-
- /***** End list *****/
- HTM_UL_End ();
-
- /***** End form *****/
- Frm_EndForm ();
+ Rsc_WriteLinkName (&Criterion->Link,
+ true, // Put form to go
+ Rsc_ResourceTypesIcons[Criterion->Link.Type],
+ Txt_RESOURCE_TYPES[Criterion->Link.Type]);
}
+*/
/*****************************************************************************/
/***************** Show clipboard to change resource link ********************/
diff --git a/swad_text.c b/swad_text.c
index b5476f1b..b797618b 100644
--- a/swad_text.c
+++ b/swad_text.c
@@ -14663,7 +14663,7 @@ const char *Txt_folder =
#elif L==5 // fr
"répertoire";
#elif L==6 // gn
- "carpeta"; // Okoteve traducción
+ "carpeta";
#elif L==7 // it
"cartella";
#elif L==8 // pl
@@ -14671,7 +14671,7 @@ const char *Txt_folder =
#elif L==9 // pt
"diretório";
#elif L==10 // tr
- "folder"; // Çeviri lazim!
+ "dosya";
#endif
const char *Txt_Folder_X_and_all_its_contents_removed = // Warning: it is very important to include %s in the following sentences
@@ -14717,7 +14717,7 @@ const char *Txt_Folder_X_removed = // Warning: it is very important to include %
#elif L==9 // pt
"Diretório %s removido.";
#elif L==10 // tr
- "Folder %s removed."; // Çeviri lazim!
+ "Folder %s removed."; // Çeviri lazim!
#endif
const char *Txt_Folders =
@@ -14732,7 +14732,7 @@ const char *Txt_Folders =
#elif L==5 // fr
"Répertoires";
#elif L==6 // gn
- "Carpetas"; // Okoteve traducción
+ "Umi carpeta";
#elif L==7 // it
"Cartelle";
#elif L==8 // pl
@@ -14740,7 +14740,7 @@ const char *Txt_Folders =
#elif L==9 // pt
"Diretórios";
#elif L==10 // tr
- "Folders"; // Çeviri lazim!
+ "Klasörler";
#endif
const char *Txt_folders =
@@ -14755,7 +14755,7 @@ const char *Txt_folders =
#elif L==5 // fr
"répertoires";
#elif L==6 // gn
- "carpetas"; // Okoteve traducción
+ "umi carpeta";
#elif L==7 // it
"cartelle";
#elif L==8 // pl
@@ -14763,7 +14763,7 @@ const char *Txt_folders =
#elif L==9 // pt
"diretórios";
#elif L==10 // tr
- "folders"; // Çeviri lazim!
+ "klasörler";
#endif
const char *Txt_Folders_copied =
@@ -21167,7 +21167,7 @@ const char *Txt_MENU_TITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
#if L==1 // ca
"Cercar"
#elif L==2 // de
- "Suchen"
+ "Suche"
#elif L==3 // en
"Search"
#elif L==4 // es
@@ -21179,11 +21179,11 @@ const char *Txt_MENU_TITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
#elif L==7 // it
"Cercare"
#elif L==8 // pl
- "Szukaj"
+ "Szukać"
#elif L==9 // pt
"Procurar"
#elif L==10 // tr
- "Arama"
+ "Aramak"
#endif
,
// 2: ActSeeTmlGbl
@@ -43024,7 +43024,7 @@ const char *Txt_Search =
#if L==1 // ca
"Cercar";
#elif L==2 // de
- "Suchen";
+ "Suche";
#elif L==3 // en
"Search";
#elif L==4 // es
@@ -43036,11 +43036,11 @@ const char *Txt_Search =
#elif L==7 // it
"Cercare";
#elif L==8 // pl
- "Szukaj";
+ "Szukać";
#elif L==9 // pt
"Procurar";
#elif L==10 // tr
- "Arama";
+ "Aramak";
#endif
const char *Txt_See_full_notice =
diff --git a/swad_text_action.c b/swad_text_action.c
index b1546df7..b68ae6c0 100644
--- a/swad_text_action.c
+++ b/swad_text_action.c
@@ -384,48 +384,48 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] =
,
[ActReqSndNewPwd] =
#if L==1 // ca
- "Request to send a new password" // Necessita traducció
+ "Sol·licitar enviament de nova contrasenya"
#elif L==2 // de
- "Request to send a new password" // Need Übersetzung
+ "Fordern Sie das Senden eines neuen Passworts an"
#elif L==3 // en
"Request to send a new password"
#elif L==4 // es
"Solicitar envío de nueva contraseña"
#elif L==5 // fr
- "Request to send a new password" // Besoin de traduction
+ "Demander l'envoi d'un nouveau mot de passe"
#elif L==6 // gn
- "Solicitar envío de nueva contraseña" // Okoteve traducción
+ "Ejerure emondo hagğua peteĩ ñe'&etilde;ñemi pyahu"
#elif L==7 // it
- "Request to send a new password" // Bisogno di traduzione
+ "Richiedi l'invio di una nuova password"
#elif L==8 // pl
- "Request to send a new password" // Potrzebujesz tlumaczenie
+ "Prośba o przesłanie nowego hasła"
#elif L==9 // pt
- "Request to send a new password" // Precisa de tradução
+ "Solicitar o envio de uma nova senha"
#elif L==10 // tr
- "Request to send a new password" // Çeviri lazim!
+ "Yeni bir şifre gönderme isteği"
#endif
,
[ActSndNewPwd] =
#if L==1 // ca
- "Send new password" // Necessita traducció
+ "Enviar nova contrasenya"
#elif L==2 // de
- "Send new password" // Need Übersetzung
+ "Neues Passwort senden"
#elif L==3 // en
"Send new password"
#elif L==4 // es
"Enviar nueva contraseña"
#elif L==5 // fr
- "Send new password" // Besoin de traduction
+ "Envoyer un nouveau mot de passe"
#elif L==6 // gn
- "Enviar nueva contraseña" // Okoteve traducción
+ "Emondo ñe'&etilde;ñemi pyahu"
#elif L==7 // it
- "Send new password" // Bisogno di traduzione
+ "Invia nuova password"
#elif L==8 // pl
- "Send new password" // Potrzebujesz tlumaczenie
+ "Wyślij nowe hasło"
#elif L==9 // pt
- "Send new password" // Precisa de tradução
+ "Enviar nova senha"
#elif L==10 // tr
- "Send new password" // Çeviri lazim!
+ "Yeni şifre gönder"
#endif
,
[ActLogOut] =
@@ -448,30 +448,30 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] =
#elif L==9 // pt
"Fechar sessão"
#elif L==10 // tr
- "Log out" // Çeviri lazim!
+ "Çıkış yap"
#endif
,
[ActSch] =
#if L==1 // ca
- "Search" // Necessita traducció
+ "Cercar"
#elif L==2 // de
- "Search" // Need Übersetzung
+ "Suche"
#elif L==3 // en
"Search"
#elif L==4 // es
"Buscar"
#elif L==5 // fr
- "Search" // Besoin de traduction
+ "Chercher"
#elif L==6 // gn
- "Buscar" // Okoteve traducción
+ "Heka"
#elif L==7 // it
- "Search" // Bisogno di traduzione
+ "Cercare"
#elif L==8 // pl
- "Search" // Potrzebujesz tlumaczenie
+ "Szukać"
#elif L==9 // pt
- "Search" // Precisa de tradução
+ "Procurar"
#elif L==10 // tr
- "Search" // Çeviri lazim!
+ "Aramak"
#endif
,
[ActRefNewPubGblTL] =