From c74c6e2f3e9d6295cdfd5e8623fd0b4c29905d90 Mon Sep 17 00:00:00 2001 From: acanas Date: Mon, 27 Mar 2023 19:24:10 +0200 Subject: [PATCH] Version 22.83.1: Mar 27, 2023 Changes in rubric criteria. --- swad_action_list.c | 6 ++- swad_action_list.h | 11 ++-- swad_changelog.h | 3 +- swad_rubric_criteria.c | 111 ++++++++++++++++++++++++++++++----------- swad_rubric_criteria.h | 2 + swad_rubric_database.c | 26 ++++++++-- swad_rubric_database.h | 1 + swad_text_action.c | 45 +++++++++++++---- 8 files changed, 154 insertions(+), 51 deletions(-) diff --git a/swad_action_list.c b/swad_action_list.c index 6d86d218..d2fb613d 100644 --- a/swad_action_list.c +++ b/swad_action_list.c @@ -852,7 +852,8 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] = [ActUp_RubCri ] = {1962,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,RubCri_MoveUpCriterion ,NULL}, [ActDwnRubCri ] = {1963,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,RubCri_MoveDownCriterion ,NULL}, [ActChgTitRubCri ] = {1964,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,RubCri_ChangeTitle ,NULL}, - [ActChgSrcRubCri ] = {1968,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,RubCri_ChangeType ,NULL}, + [ActChgTypRubCri ] = {1968,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,RubCri_ChangeType ,NULL}, + [ActChgLnkRubCri ] = {1970,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,RubCri_ChangeLink ,NULL}, [ActChgMinRubCri ] = {1965,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,RubCri_ChangeMinValue ,NULL}, [ActChgMaxRubCri ] = {1966,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,RubCri_ChangeMaxValue ,NULL}, [ActChgWeiRubCri ] = {1967,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,RubCri_ChangeWeight ,NULL}, @@ -3855,6 +3856,7 @@ Act_Action_t ActLst_FromActCodToAction[1 + ActLst_MAX_ACTION_COD] = // Do not re ActChgMinRubCri, // #1965 ActChgMaxRubCri, // #1966 ActChgWeiRubCri, // #1967 - ActChgSrcRubCri, // #1968 + ActChgTypRubCri, // #1968 ActReqLnkRub, // #1969 + ActChgLnkRubCri, // #1970 }; diff --git a/swad_action_list.h b/swad_action_list.h index 7fa13d30..408cdd93 100644 --- a/swad_action_list.h +++ b/swad_action_list.h @@ -774,10 +774,11 @@ #define ActUp_RubCri (ActChgCrsTT1stDay + 231) #define ActDwnRubCri (ActChgCrsTT1stDay + 232) #define ActChgTitRubCri (ActChgCrsTT1stDay + 233) -#define ActChgSrcRubCri (ActChgCrsTT1stDay + 234) -#define ActChgMinRubCri (ActChgCrsTT1stDay + 235) -#define ActChgMaxRubCri (ActChgCrsTT1stDay + 236) -#define ActChgWeiRubCri (ActChgCrsTT1stDay + 237) +#define ActChgTypRubCri (ActChgCrsTT1stDay + 234) +#define ActChgLnkRubCri (ActChgCrsTT1stDay + 235) +#define ActChgMinRubCri (ActChgCrsTT1stDay + 236) +#define ActChgMaxRubCri (ActChgCrsTT1stDay + 237) +#define ActChgWeiRubCri (ActChgCrsTT1stDay + 238) /*****************************************************************************/ /******************************** Files tab **********************************/ @@ -1770,7 +1771,7 @@ #define ActLst_NUM_ACTIONS (ActChgMyTT1stDay + 1) -#define ActLst_MAX_ACTION_COD 1969 +#define ActLst_MAX_ACTION_COD 1970 #define ActLst_DEFAULT_ACTION_AFTER_LOGIN ActSeeGblTL diff --git a/swad_changelog.h b/swad_changelog.h index 6e15571d..6e3753b2 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.83 (2023-03-27)" +#define Log_PLATFORM_VERSION "SWAD 22.83.1 (2023-03-27)" #define CSS_FILE "swad22.78.15.css" #define JS_FILE "swad22.49.js" /* + Version 22.83.1: Mar 27, 2023 Changes in rubric criteria. (338297 lines) Version 22.83: Mar 27, 2023 New module swad_resource_database. (338208 lines) 1 change necessary in database: RENAME TABLE prg_clipboards TO rsc_clipboards; diff --git a/swad_rubric_criteria.c b/swad_rubric_criteria.c index 82d5ad8b..38b7ca70 100644 --- a/swad_rubric_criteria.c +++ b/swad_rubric_criteria.c @@ -97,9 +97,12 @@ static void RubCri_GetAndCheckPars (struct Rub_Rubrics *Rubrics, static void RubCri_ExchangeCriteria (long RubCod, unsigned CriIndTop,unsigned CriIndBottom); -static void RubCri_ShowResource (const struct RubCri_Criterion *Criterion, +static void RubCri_ShowResource (struct Rub_Rubrics *Rubrics, + const struct RubCri_Criterion *Criterion, bool Editing,const char *Anchor); -static void RubCri_ShowClipboard (const struct RubCri_Criterion *Criterion,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 ******************/ @@ -193,7 +196,7 @@ static void RubCri_PutFormNewCriterion (struct Rub_Rubrics *Rubrics, /***** Source *****/ HTM_TD_Begin ("class=\"LM %s\"",The_GetColorRows ()); HTM_SELECT_Begin (HTM_DONT_SUBMIT_ON_CHANGE, - "name=\"Source\" class=\"INPUT_%s\"", + "name=\"Type\" class=\"INPUT_%s\"", The_GetSuffix ()); for (Type = (Rsc_Type_t) 0; Type <= (Rsc_Type_t) (Rsc_NUM_TYPES - 1); @@ -592,7 +595,7 @@ void RubCri_ListCriteria (struct Rub_Rubrics *Rubrics, } /*****************************************************************************/ -/********************** List rubric criteria for edition **********************/ +/********************** List rubric criteria for edition *********************/ /*****************************************************************************/ static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics, @@ -712,10 +715,10 @@ static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics, /***** Source *****/ HTM_TD_Begin ("class=\"LT %s\"",The_GetColorRows ()); /* Type of source selector */ - Frm_BeginFormAnchor (ActChgSrcRubCri,Anchor); + Frm_BeginFormAnchor (ActChgTypRubCri,Anchor); RubCri_PutParsOneCriterion (Rubrics); HTM_SELECT_Begin (HTM_SUBMIT_ON_CHANGE, - "name=\"Source\" class=\"INPUT_%s\"", + "name=\"Type\" class=\"INPUT_%s\"", The_GetSuffix ()); for (Type = (Rsc_Type_t) 0; Type <= (Rsc_Type_t) (Rsc_NUM_TYPES - 1); @@ -732,7 +735,7 @@ static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics, HTM_BR (); /* Resource */ - RubCri_ShowResource (&Criterion, + RubCri_ShowResource (Rubrics,&Criterion, true,Anchor); // Editing HTM_TD_End (); @@ -1155,17 +1158,15 @@ static void RubCri_ExchangeCriteria (long RubCod, /************************** Show criterion resource **************************/ /*****************************************************************************/ -static void RubCri_ShowResource (const struct RubCri_Criterion *Criterion, +static void RubCri_ShowResource (struct Rub_Rubrics *Rubrics, + const struct RubCri_Criterion *Criterion, bool Editing,const char *Anchor) { extern const char *Rsc_ResourceTypesIcons[Rsc_NUM_TYPES]; extern const char *Txt_RESOURCE_TYPES[Rsc_NUM_TYPES]; - return; // TODO: Provisional. Remove! - - // TODO if (Editing) - RubCri_ShowClipboard (Criterion,Anchor); + RubCri_ShowClipboard (Rubrics,Criterion,Anchor); else Rsc_WriteLinkName (&Criterion->Link, true, // Put form @@ -1177,28 +1178,28 @@ static void RubCri_ShowResource (const struct RubCri_Criterion *Criterion, /***************** Show clipboard to change resource link ********************/ /*****************************************************************************/ -static void RubCri_ShowClipboard (const struct RubCri_Criterion *Criterion,const char *Anchor) +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 PrgRsc_Link EmptyLink = + static const struct Rsc_Link EmptyLink = { - .Type = PrgRsc_NONE, + .Type = Rsc_NONE, .Cod = -1L, - }; */ + }; /***** Begin form *****/ - Frm_BeginFormAnchor (ActChgLnkPrgRsc,Anchor); - /* - 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); - */ + Frm_BeginFormAnchor (ActChgLnkRubCri,Anchor); + RubCri_PutParsOneCriterion (Rubrics); + if (Criterion->CriCod > 0) + ParCod_PutPar (ParCod_Cri,Criterion->CriCod); + // 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=\"PRG_CLIPBOARD\""); @@ -1207,9 +1208,8 @@ static void RubCri_ShowClipboard (const struct RubCri_Criterion *Criterion,const Rsc_WriteRowClipboard (false,&Criterion->Link); /***** Row with empty link to remove the current link *****/ - /* - if (Criterion->Source != RubCri_FROM_TEACHER) - RubCri_WriteRowClipboard (true,&EmptyLink); */ + if (Criterion->Link.Type != Rsc_NONE) + Rsc_WriteRowClipboard (true,&EmptyLink); /***** Get links in clipboard from database and write them *****/ NumLinks = Rsc_DB_GetClipboard (&mysql_res); @@ -1228,3 +1228,58 @@ static void RubCri_ShowClipboard (const struct RubCri_Criterion *Criterion,const /***** End form *****/ Frm_EndForm (); } + +/*****************************************************************************/ +/***************** Show clipboard to change resource link ********************/ +/*****************************************************************************/ + +void RubCri_ChangeLink (void) + { + struct Rub_Rubrics Rubrics; + struct RubCri_Criterion Criterion; + char TypeCod[3 + 1 + Cns_MAX_DECIMAL_DIGITS_LONG + 1]; + char TypeStr[3 + 1]; + long Cod; + + /***** Reset rubrics context *****/ + Rub_ResetRubrics (&Rubrics); + Rub_ResetRubric (&Rubrics.Rubric); + RubCri_ResetCriterion (&Criterion); + + /***** Get and check parameters *****/ + RubCri_GetAndCheckPars (&Rubrics,&Criterion); + + /***** Check if rubric is editable *****/ + if (!Rub_CheckIfEditable (&Rubrics.Rubric)) + Err_NoPermissionExit (); + + /***** Get link type and code *****/ + Par_GetParText ("Link",TypeCod,sizeof (TypeCod) - 1); + if (sscanf (TypeCod,"%3s_%ld",TypeStr,&Cod) == 2) + { + Criterion.Link.Type = Rsc_GetTypeFromString (TypeStr); + Criterion.Link.Cod = Cod; + + /***** Is it an existing resource? *****/ + // if (Criterion.CriCod <= 0) + //{ + /* No resource selected, so it's a new resource at the end of the item */ + /* Get the new title for the new resource from link title */ + //Rsc_GetResourceTitleFromLink (&Item.Resource.Link, + // Item.Resource.Title); + + /***** Create resource *****/ + // Item.Resource.Hierarchy.RscCod = Prg_DB_CreateResource (&Item); + //} + + /***** Update link to resource in criterion *****/ + Rub_DB_UpdateCriterionLink (&Criterion); + + /***** Remove link from clipboard *****/ + Rsc_DB_RemoveLinkFromClipboard (&Criterion.Link); + } + + /***** Show current rubric and its criteria *****/ + Rub_PutFormsOneRubric (&Rubrics,&Criterion, + Rub_EXISTING_RUBRIC); // It's not a new rubric + } diff --git a/swad_rubric_criteria.h b/swad_rubric_criteria.h index b7b14c24..5692914b 100644 --- a/swad_rubric_criteria.h +++ b/swad_rubric_criteria.h @@ -53,4 +53,6 @@ void RubCri_RemoveCriterion (void); void RubCri_MoveUpCriterion (void); void RubCri_MoveDownCriterion (void); +void RubCri_ChangeLink (void); + #endif diff --git a/swad_rubric_database.c b/swad_rubric_database.c index 547219d5..43ea5336 100644 --- a/swad_rubric_database.c +++ b/swad_rubric_database.c @@ -358,7 +358,7 @@ long Rub_DB_CreateCriterion (const struct RubCri_Criterion *Criterion) CriCod = DB_QueryINSERTandReturnCode ("can not create new criterion", "INSERT INTO rub_criteria" - " (RubCod,CriInd,Source,Cod,%s,%s,Weight,Title)" + " (RubCod,CriInd,Type,Cod,%s,%s,Weight,Title)" " VALUES" " (%ld,%u,'%s',%ld,%.15lg,%.15lg,%.15lg,'%s')", RubCri_ValuesFields[RubCri_MIN], @@ -402,7 +402,7 @@ void Rub_DB_UpdateCriterionType (const struct RubCri_Criterion *Criterion) DB_QueryUPDATE ("can not update the value of a criterion", "UPDATE rub_criteria" - " SET Source='%s'" + " SET Type='%s'" " WHERE CriCod=%ld" " AND RubCod=%ld", // Extra check Rsc_ResourceTypesDB[Criterion->Link.Type], @@ -478,6 +478,24 @@ void Rub_DB_UpdateCriterionIndex (long CriInd,long CriCod,long RubCod) RubCod); } +/*****************************************************************************/ +/******** Update the link to a resource in a criterion given its code ********/ +/*****************************************************************************/ + +void Rub_DB_UpdateCriterionLink (const struct RubCri_Criterion *Criterion) + { + extern const char *Rsc_ResourceTypesDB[Rsc_NUM_TYPES]; + + DB_QueryUPDATE ("can not update link of criterion", + "UPDATE rub_criteria" + " SET Type='%s'," + "Cod=%ld" + " WHERE CriCod=%ld", + Rsc_ResourceTypesDB[Criterion->Link.Type], + Criterion->Link.Cod, + Criterion->CriCod); + } + /*****************************************************************************/ /************ Lock table to make the exchange of criteria atomic ***********/ /*****************************************************************************/ @@ -609,7 +627,7 @@ unsigned Rub_DB_GetCriteria (MYSQL_RES **mysql_res,long RubCod) "SELECT CriCod," // row[0] "RubCod," // row[1] "CriInd," // row[2] - "Source," // row[3] + "Type," // row[3] "Cod," // row[4] "%s," // row[5] "%s," // row[6] @@ -634,7 +652,7 @@ unsigned Rub_DB_GetCriterionDataByCod (MYSQL_RES **mysql_res,long CriCod) "SELECT CriCod," // row[0] "RubCod," // row[1] "CriInd," // row[2] - "Source," // row[3] + "Type," // row[3] "Cod," // row[4] "%s," // row[5] "%s," // row[6] diff --git a/swad_rubric_database.h b/swad_rubric_database.h index 60a2bebe..5d6a6026 100644 --- a/swad_rubric_database.h +++ b/swad_rubric_database.h @@ -62,6 +62,7 @@ void Rub_DB_UpdateCriterionValue (const struct RubCri_Criterion *Criterion, void Rub_DB_UpdateCriterionWeight (const struct RubCri_Criterion *Criterion); void Rub_DB_UpdateCriteriaIndexesInRubricGreaterThan (long RubCod,unsigned CriInd); void Rub_DB_UpdateCriterionIndex (long CriInd,long CriCod,long RubCod); +void Rub_DB_UpdateCriterionLink (const struct RubCri_Criterion *Criterion); void Rub_DB_LockTable (void); unsigned Rub_DB_GetNumCriteriaInRubric (long RubCod); diff --git a/swad_text_action.c b/swad_text_action.c index 56998476..afd5064c 100644 --- a/swad_text_action.c +++ b/swad_text_action.c @@ -6412,25 +6412,25 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = , [ActChgLnkPrgRsc] = #if L==1 // ca - "Change resource link" // Necessita traducció + "Canviar enllaç a recurs des del programa" #elif L==2 // de - "Change resource link" // Need Übersetzung + "Ändern Sie den Link zur Ressource aus dem Programm" #elif L==3 // en - "Change resource link" + "Change link to resource from the program" #elif L==4 // es - "Cambiar enlace de recurso" + "Cambiar enlace a recurso desde el programa" #elif L==5 // fr - "Change resource link" // Besoin de traduction + "Modifier le lien vers la ressource du programme" #elif L==6 // gn - "Cambiar enlace de recurso" // Okoteve traducción + "Emoambue enlace recurso-pe programa-gui" #elif L==7 // it - "Change resource link" // Bisogno di traduzione + "Modificare il collegamento alla risorsa dal programma" #elif L==8 // pl - "Change resource link" // Potrzebujesz tlumaczenie + "Zmień link do zasobu z programu" #elif L==9 // pt - "Change resource link" // Precisa de tradução + "Alterar link para recurso do programa" #elif L==10 // tr - "Change resource link" // Çeviri lazim! + "Programdan kaynağa bağlantıyı değiştir" #endif , [ActEdiTchGui] = @@ -14207,7 +14207,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = "Puan anahtarı ölçüt başlığını değiştir" // Çeviri lazim! #endif , - [ActChgSrcRubCri] = + [ActChgTypRubCri] = #if L==1 // ca "Canviar font de criteri de rúbrica" #elif L==2 // de @@ -14228,6 +14228,29 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = "Alterar origem do critério de rubrica" #elif L==10 // tr "Puan anahtarı ölçüt yazı tipini değiştir" +#endif + , + [ActChgLnkRubCri] = +#if L==1 // ca + "Canviar enllaç a recurs des de rúbrica" +#elif L==2 // de + "Link zu Ressource aus Rubrik ändern" +#elif L==3 // en + "Change link to resource from rubric" +#elif L==4 // es + "Cambiar enlace a recurso desde rúbrica" +#elif L==5 // fr + "Modifier lien vers ressource à partir de rubrique" +#elif L==6 // gn + "Omoambue enlace recurso-pe rúbrica-gui" +#elif L==7 // it + "Modificare il collegamento alla risorsa dalla rubrica" +#elif L==8 // pl + "Zmień link do zasobu z rubryki" +#elif L==9 // pt + "Alterar link para recurso da rubrica" +#elif L==10 // tr + "Puan anahtarından kaynağa bağlantıyı değiştir" #endif , [ActChgMinRubCri] =