diff --git a/css/swad22.88.css b/css/swad22.95.css similarity index 99% rename from css/swad22.88.css rename to css/swad22.95.css index 0a0fd70e9..5d653616a 100644 --- a/css/swad22.88.css +++ b/css/swad22.95.css @@ -3294,6 +3294,7 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;} text-align:center; vertical-align:middle; } +.PrjCfg_RUBRIC_SEL {max-width:400px;} /********************************** Tests ************************************/ .TAG_SEL {box-sizing:border-box; width:346px;} diff --git a/swad_changelog.h b/swad_changelog.h index 68bb75948..a4b2fe860 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.94 (2023-04-12)" -#define CSS_FILE "swad22.88.css" +#define Log_PLATFORM_VERSION "SWAD 22.95 (2023-04-12)" +#define CSS_FILE "swad22.95.css" #define JS_FILE "swad22.49.js" /* + Version 22.95: Apr 12, 2023 Changes in configuration of projects. (338602 lines) Version 22.94: Apr 12, 2023 Code refactoring in rubrics. Changes in configuration of projects. (338537 lines) Version 22.93: Apr 10, 2023 Changes in configuration of projects. (338417 lines) diff --git a/swad_project_config.c b/swad_project_config.c index 4e3347e14..005550240 100644 --- a/swad_project_config.c +++ b/swad_project_config.c @@ -38,18 +38,37 @@ #include "swad_project_database.h" #include "swad_rubric.h" +/*****************************************************************************/ +/**************************** Private constants ******************************/ +/*****************************************************************************/ + +static const char *PrjCfg_RubricIDs[PrjCfg_NUM_RUBRICS] = + { + [PrjCfg_RUBRIC_TUT] = "rub_tut", + [PrjCfg_RUBRIC_EVL] = "rub_evl", + [PrjCfg_RUBRIC_GBL] = "rub_gbl", + }; + /*****************************************************************************/ /************** External global variables from others modules ****************/ /*****************************************************************************/ extern struct Globals Gbl; +/*****************************************************************************/ +/************************* Private global variables **************************/ +/*****************************************************************************/ + +static struct Rub_Rubric PrjCfg_Rubrics[PrjCfg_NUM_RUBRICS]; + /*****************************************************************************/ /***************************** Private prototypes ****************************/ /*****************************************************************************/ static void PrjCfg_ShowFormNETCanCreate (const struct Prj_Projects *Projects); static void PrjCfg_ShowFormRubrics (void); +static void PrjCfg_ShowFormRubric (struct Rub_Rubrics *Rubrics, + PrjCfg_Rubric_t WhichRubric); static void PrjCfg_GetConfigDataFromRow (MYSQL_RES *mysql_res, struct Prj_Projects *Projects); @@ -142,13 +161,13 @@ static void PrjCfg_ShowFormNETCanCreate (const struct Prj_Projects *Projects) HTM_TR_Begin (NULL); /***** Label *****/ - HTM_TD_Begin ("class=\"RT FORM_IN_%s\"", + HTM_TD_Begin ("class=\"RM FORM_IN_%s\"", The_GetSuffix ()); HTM_TxtColon (Txt_Create_project); HTM_TD_End (); /***** Data *****/ - HTM_TD_Begin ("class=\"LT\""); + HTM_TD_Begin ("class=\"LM\""); HTM_LABEL_Begin ("class=\"DAT_%s\"", The_GetSuffix ()); HTM_INPUT_CHECKBOX ("NETCanCreate",HTM_DONT_SUBMIT_ON_CHANGE, @@ -169,13 +188,7 @@ static void PrjCfg_ShowFormNETCanCreate (const struct Prj_Projects *Projects) static void PrjCfg_ShowFormRubrics (void) { struct Rub_Rubrics Rubrics; - unsigned NumRub; - struct - { - struct Rub_Rubric Tutors; - struct Rub_Rubric Evaluators; - struct Rub_Rubric Global; - } PrjRubrics = {}; + PrjCfg_Rubric_t WhichRubric; /***** Reset rubrics context *****/ Rub_ResetRubrics (&Rubrics); @@ -183,81 +196,53 @@ static void PrjCfg_ShowFormRubrics (void) /***** Get list of rubrics *****/ Rub_GetListRubrics (&Rubrics); - /***** Rubric for tutors *****/ - HTM_TR_Begin (NULL); - - /* Label */ - HTM_TD_Begin ("class=\"RT FORM_IN_%s\"", - The_GetSuffix ()); - HTM_TxtColon ("Rúbrica para tutores"); - HTM_TD_End (); - - /* Data */ - HTM_TD_Begin ("class=\"LT\""); - HTM_SELECT_Begin (HTM_DONT_SUBMIT_ON_CHANGE,NULL, - "id=\"rub_tut\" name=\"rub_tut\" class=\"LICENSE\""); - for (NumRub = 0; - NumRub < Rubrics.Num; - NumRub++) - HTM_OPTION (HTM_Type_LONG,&Rubrics.Lst[NumRub].RubCod, - Rubrics.Lst[NumRub].RubCod == PrjRubrics.Global.RubCod,false, - "%s",Rubrics.Lst[NumRub].Title); - HTM_SELECT_End (); - HTM_TD_End (); - - HTM_TR_End (); - - /***** Rubric for evaluators *****/ - HTM_TR_Begin (NULL); - /* Label */ - HTM_TD_Begin ("class=\"RT FORM_IN_%s\"", - The_GetSuffix ()); - HTM_TxtColon ("Rúbrica para evaluadores"); - HTM_TD_End (); - - /* Data */ - HTM_TD_Begin ("class=\"LT\""); - HTM_SELECT_Begin (HTM_DONT_SUBMIT_ON_CHANGE,NULL, - "id=\"rub_eva\" name=\"rub_eva\" class=\"LICENSE\""); - for (NumRub = 0; - NumRub < Rubrics.Num; - NumRub++) - HTM_OPTION (HTM_Type_LONG,&Rubrics.Lst[NumRub].RubCod, - Rubrics.Lst[NumRub].RubCod == PrjRubrics.Global.RubCod,false, - "%s",Rubrics.Lst[NumRub].Title); - HTM_SELECT_End (); - HTM_TD_End (); - - HTM_TR_End (); - - /***** Rubric global *****/ - HTM_TR_Begin (NULL); - - /* Label */ - HTM_TD_Begin ("class=\"RT FORM_IN_%s\"", - The_GetSuffix ()); - HTM_TxtColon ("Rúbrica global"); - HTM_TD_End (); - - /* Data */ - HTM_TD_Begin ("class=\"LT\""); - HTM_SELECT_Begin (HTM_DONT_SUBMIT_ON_CHANGE,NULL, - "id=\"rub_gbl\" name=\"rub_gbl\" class=\"LICENSE\""); - for (NumRub = 0; - NumRub < Rubrics.Num; - NumRub++) - HTM_OPTION (HTM_Type_LONG,&Rubrics.Lst[NumRub].RubCod, - Rubrics.Lst[NumRub].RubCod == PrjRubrics.Global.RubCod,false, - "%s",Rubrics.Lst[NumRub].Title); - HTM_SELECT_End (); - HTM_TD_End (); - - HTM_TR_End (); + /***** Rubric selectors *****/ + for (WhichRubric = (PrjCfg_Rubric_t) 0; + WhichRubric <= (PrjCfg_Rubric_t) (PrjCfg_NUM_RUBRICS - 1); + WhichRubric++) + PrjCfg_ShowFormRubric (&Rubrics,WhichRubric); /***** Free list of rubrics *****/ Rub_FreeListRubrics (&Rubrics); } +/*****************************************************************************/ +/************ Show form to edit rubrics associated to projects ***************/ +/*****************************************************************************/ + +static void PrjCfg_ShowFormRubric (struct Rub_Rubrics *Rubrics, + PrjCfg_Rubric_t WhichRubric) + { + extern const char *Txt_PROJECT_RUBRIC[PrjCfg_NUM_RUBRICS]; + unsigned NumRub; + + /***** Row with form for rubric *****/ + HTM_TR_Begin (NULL); + + /* Label */ + HTM_TD_Begin ("class=\"RM FORM_IN_%s\"", + The_GetSuffix ()); + HTM_TxtColon (Txt_PROJECT_RUBRIC[WhichRubric]); + HTM_TD_End (); + + /* Data */ + HTM_TD_Begin ("class=\"LM\""); + HTM_SELECT_Begin (HTM_DONT_SUBMIT_ON_CHANGE,NULL, + "id=\"%s\" name=\"%s\" class=\"PrjCfg_RUBRIC_SEL\"", + PrjCfg_RubricIDs[WhichRubric], + PrjCfg_RubricIDs[WhichRubric]); + for (NumRub = 0; + NumRub < Rubrics->Num; + NumRub++) + HTM_OPTION (HTM_Type_LONG,&Rubrics->Lst[NumRub].RubCod, + Rubrics->Lst[NumRub].RubCod == PrjCfg_Rubrics[WhichRubric].RubCod,false, + "%s",Rubrics->Lst[NumRub].Title); + HTM_SELECT_End (); + HTM_TD_End (); + + HTM_TR_End (); + } + /*****************************************************************************/ /************ Get configuration values from a database table row *************/ /*****************************************************************************/ diff --git a/swad_project_config.h b/swad_project_config.h index ab5429cd8..120b8b8e3 100644 --- a/swad_project_config.h +++ b/swad_project_config.h @@ -31,9 +31,16 @@ /************************** Public types and constants ***********************/ /*****************************************************************************/ -/***** Configuration *****/ #define PrjCfg_NET_CAN_CREATE_DEFAULT true +#define PrjCfg_NUM_RUBRICS 3 +typedef enum + { + PrjCfg_RUBRIC_TUT, + PrjCfg_RUBRIC_EVL, + PrjCfg_RUBRIC_GBL, + } PrjCfg_Rubric_t; + /*****************************************************************************/ /***************************** Public prototypes *****************************/ /*****************************************************************************/ diff --git a/swad_text.c b/swad_text.c index 6dc0a1fd3..db24cd30d 100644 --- a/swad_text.c +++ b/swad_text.c @@ -84,6 +84,7 @@ #include "swad_privacy.h" #include "swad_program.h" #include "swad_project.h" +#include "swad_project_config.h" #include "swad_record.h" #include "swad_role.h" #include "swad_room.h" @@ -22528,7 +22529,7 @@ const char *Txt_MENU_TITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] = #elif L==5 // fr "Étudiants" #elif L==6 // gn - "Estudiantes" // Okoteve traducción + "Temimbo'ekuéra" #elif L==7 // it "Studenti" #elif L==8 // pl @@ -33243,7 +33244,7 @@ const char *Txt_PROJECT_ROLES_PLURAL_Abc[Prj_NUM_ROLES_IN_PROJECT] = #elif L==5 // fr "Étudiants" #elif L==6 // gn - "Temimbo'e" + "Temimbo'ekuéra" #elif L==7 // it "Studenti" #elif L==8 // pl @@ -33266,7 +33267,7 @@ const char *Txt_PROJECT_ROLES_PLURAL_Abc[Prj_NUM_ROLES_IN_PROJECT] = #elif L==5 // fr "Tuteurs" #elif L==6 // gn - "Tutores" // Okoteve traducción + "Tutor-kuéra" #elif L==7 // it "Precettori" #elif L==8 // pl @@ -33274,7 +33275,7 @@ const char *Txt_PROJECT_ROLES_PLURAL_Abc[Prj_NUM_ROLES_IN_PROJECT] = #elif L==9 // pt "Tutores" #elif L==10 // tr - "Tutors" // Çeviri lazim! + "Öğretmenler" #endif , [Prj_ROLE_EVL] = @@ -33289,7 +33290,7 @@ const char *Txt_PROJECT_ROLES_PLURAL_Abc[Prj_NUM_ROLES_IN_PROJECT] = #elif L==5 // fr "Évaluateurs" #elif L==6 // gn - "Evaluadores" // Okoteve traducción + "Evaluador-kuéra" #elif L==7 // it "Valutatori" #elif L==8 // pl @@ -33297,7 +33298,7 @@ const char *Txt_PROJECT_ROLES_PLURAL_Abc[Prj_NUM_ROLES_IN_PROJECT] = #elif L==9 // pt "Avaliadores" #elif L==10 // tr - "Evaluators" // Çeviri lazim! + "Değerlendiriciler" #endif }; @@ -33338,7 +33339,7 @@ const char *Txt_PROJECT_ROLES_PLURAL_abc[Prj_NUM_ROLES_IN_PROJECT] = #elif L==5 // fr "étudiants" #elif L==6 // gn - "temimbo'e" + "temimbo'ekuéra" #elif L==7 // it "studenti" #elif L==8 // pl @@ -33346,7 +33347,7 @@ const char *Txt_PROJECT_ROLES_PLURAL_abc[Prj_NUM_ROLES_IN_PROJECT] = #elif L==9 // pt "estudantes" #elif L==10 // tr - "students" // Çeviri lazim! + "öğrenciler" #endif , [Prj_ROLE_TUT] = @@ -33361,7 +33362,7 @@ const char *Txt_PROJECT_ROLES_PLURAL_abc[Prj_NUM_ROLES_IN_PROJECT] = #elif L==5 // fr "tuteurs" #elif L==6 // gn - "tutores" // Okoteve traducción + "tutor-kuéra" #elif L==7 // it "precettori" #elif L==8 // pl @@ -33369,7 +33370,7 @@ const char *Txt_PROJECT_ROLES_PLURAL_abc[Prj_NUM_ROLES_IN_PROJECT] = #elif L==9 // pt "tutores" #elif L==10 // tr - "tutors" // Çeviri lazim! + "öğretmenler" #endif , [Prj_ROLE_EVL] = @@ -33384,7 +33385,7 @@ const char *Txt_PROJECT_ROLES_PLURAL_abc[Prj_NUM_ROLES_IN_PROJECT] = #elif L==5 // fr "évaluateurs" #elif L==6 // gn - "evaluadores" // Okoteve traducción + "evaluador-kuéra" #elif L==7 // it "valutatori" #elif L==8 // pl @@ -33392,7 +33393,79 @@ const char *Txt_PROJECT_ROLES_PLURAL_abc[Prj_NUM_ROLES_IN_PROJECT] = #elif L==9 // pt "avaliadores" #elif L==10 // tr - "evaluators" // Çeviri lazim! + "değerlendiriciler" +#endif + }; + +const char *Txt_PROJECT_RUBRIC[PrjCfg_NUM_RUBRICS] = + { + [PrjCfg_RUBRIC_TUT] = +#if L==1 // ca + "Rúbrica per a tutors" +#elif L==2 // de + "Rubrik für Tutoren" +#elif L==3 // en + "Rubric for tutors" +#elif L==4 // es + "Rúbrica para tutores" +#elif L==5 // fr + "Rubrique pour les tuteurs" +#elif L==6 // gn + "Rúbrica tutor-kuérape guarã" +#elif L==7 // it + "Rubrica per precettori" +#elif L==8 // pl + "Rubryka dla nauczyciele" +#elif L==9 // pt + "Rubrica para tutores" +#elif L==10 // tr + "Öğretmenler için değerlendirme listesi" +#endif + , + [PrjCfg_RUBRIC_EVL] = +#if L==1 // ca + "Rúbrica per a avaluadors" +#elif L==2 // de + "Rubrik für Auswerter" +#elif L==3 // en + "Rubric for evaluators" +#elif L==4 // es + "Rúbrica para evaluadores" +#elif L==5 // fr + "Rubrique pour les évaluateurs" +#elif L==6 // gn + "Rúbrica evaluador-kuérape guarã" +#elif L==7 // it + "Rubrica per valutatori" +#elif L==8 // pl + "Rubryka dla ewaluatorów" +#elif L==9 // pt + "Rubrica para avaliadores" +#elif L==10 // tr + "Değerlendiriciler için değerlendirme listesi" +#endif + , + [PrjCfg_RUBRIC_GBL] = +#if L==1 // ca + "Rúbrica global" +#elif L==2 // de + "Gesamtrubrik" +#elif L==3 // en + "Globale rubric" +#elif L==4 // es + "Rúbrica global" +#elif L==5 // fr + "Rubrique globale" +#elif L==6 // gn + "Rúbrica general" +#elif L==7 // it + "Rubrica complessiva" +#elif L==8 // pl + "Globalna rubryka" +#elif L==9 // pt + "Rubrica geral" +#elif L==10 // tr + "Genel değerlendirme listesi" #endif }; @@ -37206,7 +37279,7 @@ const char *Txt_ROLE_STATS[Sta_NUM_ROLES_STAT] = #elif L==5 // fr "étudiants" #elif L==6 // gn - "temimbo'e" + "temimbo'ekuéra" #elif L==7 // it "studenti" #elif L==8 // pl @@ -37214,7 +37287,7 @@ const char *Txt_ROLE_STATS[Sta_NUM_ROLES_STAT] = #elif L==9 // pt "estudantes" #elif L==10 // tr - "students" // Çeviri lazim! + "öğrenciler" #endif , [Sta_ROLE_USERS] = @@ -39446,7 +39519,7 @@ const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS] = #elif L==5 // fr "Étudiants" #elif L==6 // gn - "Temimbo'e" + "Temimbo'ekuéra" #elif L==7 // it "Studenti" #elif L==8 // pl @@ -39469,7 +39542,7 @@ const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS] = #elif L==5 // fr "Étudiantes" #elif L==6 // gn - "Temimbo'e" + "Temimbo'ekuéra" #elif L==7 // it "Studentesse" #elif L==8 // pl @@ -39492,7 +39565,7 @@ const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS] = #elif L==5 // fr "Étudiants" #elif L==6 // gn - "Temimbo'e" + "Temimbo'ekuéra" #elif L==7 // it "Studenti" #elif L==8 // pl @@ -39515,7 +39588,7 @@ const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS] = #elif L==5 // fr "Étudiants" #elif L==6 // gn - "Temimbo'e" + "Temimbo'ekuéra" #elif L==7 // it "Studenti" #elif L==8 // pl @@ -40602,7 +40675,7 @@ const char *Txt_ROLES_PLURAL_abc[Rol_NUM_ROLES][Usr_NUM_SEXS] = #elif L==5 // fr "étudiants" #elif L==6 // gn - "temimbo'e" + "temimbo'ekuéra" #elif L==7 // it "studenti" #elif L==8 // pl @@ -40625,7 +40698,7 @@ const char *Txt_ROLES_PLURAL_abc[Rol_NUM_ROLES][Usr_NUM_SEXS] = #elif L==5 // fr "étudiantes" #elif L==6 // gn - "temimbo'e" + "temimbo'ekuéra" #elif L==7 // it "studentesse" #elif L==8 // pl @@ -40648,7 +40721,7 @@ const char *Txt_ROLES_PLURAL_abc[Rol_NUM_ROLES][Usr_NUM_SEXS] = #elif L==5 // fr "étudiants" #elif L==6 // gn - "temimbo'e" + "temimbo'ekuéra" #elif L==7 // it "studenti" #elif L==8 // pl @@ -40671,7 +40744,7 @@ const char *Txt_ROLES_PLURAL_abc[Rol_NUM_ROLES][Usr_NUM_SEXS] = #elif L==5 // fr "étudiants" #elif L==6 // gn - "temimbo'e" + "temimbo'ekuéra" #elif L==7 // it "studenti" #elif L==8 // pl