From d6cce8b198ac2dc25bca3177d59a0066bb74e1e1 Mon Sep 17 00:00:00 2001 From: acanas Date: Fri, 14 Apr 2023 10:28:07 +0200 Subject: [PATCH] Version 22.97: Apr 14, 2023 Changes in listing of rubrics. --- swad_changelog.h | 3 +- swad_course.c | 37 +++--- swad_group.c | 2 +- swad_rubric.c | 50 +-------- swad_rubric.h | 10 +- swad_rubric_criteria.c | 247 +++++++++++++++++++++++++++++------------ swad_rubric_criteria.h | 5 +- swad_rubric_type.h | 2 - 8 files changed, 207 insertions(+), 149 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index cfbed1fa..54b241cc 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.96.1 (2023-04-14)" +#define Log_PLATFORM_VERSION "SWAD 22.97 (2023-04-14)" #define CSS_FILE "swad22.95.css" #define JS_FILE "swad22.49.js" /* + Version 22.97: Apr 14, 2023 Changes in listing of rubrics. (339029 lines) Version 22.96.1: Apr 14, 2023 Code refactoring in selectors. (338991 lines) Version 22.96: Apr 12, 2023 Changes in configuration of projects. Code refactoring in selectors. (338977 lines) diff --git a/swad_course.c b/swad_course.c index 717c4c4a..0581f76d 100644 --- a/swad_course.c +++ b/swad_course.c @@ -66,6 +66,7 @@ #include "swad_parameter_code.h" #include "swad_project.h" #include "swad_record_database.h" +#include "swad_rubric.h" #include "swad_search.h" #include "swad_setting.h" #include "swad_setting_database.h" @@ -1754,12 +1755,29 @@ static void Crs_EmptyCourseCompletely (long CrsCod) before removing groups and projects *****/ Brw_DB_RemoveCrsFiles (CrsCod); - /***** Remove assignments of the course *****/ + /***** Assessment tab *****/ + /* Remove assignments of the course */ Asg_RemoveCrsAssignments (CrsCod); - /***** Remove projects of the course *****/ + /* Remove projects of the course */ Prj_RemoveCrsProjects (CrsCod); + /* Remove tests of the course */ + TstPrn_RemoveCrsPrints (CrsCod); + Tst_DB_RemoveTstConfig (CrsCod); + + /* Remove all exams in the course */ + Exa_RemoveCrsExams (CrsCod); + + /* Remove all games in the course */ + Gam_RemoveCrsGames (CrsCod); + + /* Remove all questions in the course */ + Qst_RemoveCrsQsts (CrsCod); + + /* Remove all rubrics in the course */ + Rub_RemoveCrsRubrics (CrsCod); + /***** Remove attendance events of the course *****/ Att_RemoveCrsEvents (CrsCod); @@ -1772,21 +1790,6 @@ static void Crs_EmptyCourseCompletely (long CrsCod) /***** Remove all surveys in the course *****/ Svy_RemoveSurveys (HieLvl_CRS,CrsCod); - /***** Remove all games in the course *****/ - Gam_RemoveCrsGames (CrsCod); - - /***** Remove all exams in the course *****/ - Exa_RemoveCrsExams (CrsCod); - - /***** Remove all test prints made in the course *****/ - TstPrn_RemoveCrsPrints (CrsCod); - - /***** Remove test configuration of the course *****/ - Tst_DB_RemoveTstConfig (CrsCod); - - /***** Remove all questions in the course *****/ - Qst_RemoveCrsQsts (CrsCod); - /***** Remove groups in the course *****/ Grp_DB_RemoveCrsGrps (CrsCod); diff --git a/swad_group.c b/swad_group.c index 9c5f2377..cfa2dda2 100644 --- a/swad_group.c +++ b/swad_group.c @@ -1538,7 +1538,7 @@ static void Grp_ListGroupsForEdition (const struct Roo_Rooms *Rooms) { RooInLst = &Rooms->Lst[NumRoo]; HTM_OPTION (HTM_Type_LONG,&RooInLst->RooCod, - RooInLst->RooCod == Grp->Room.RooCod, // Selected + RooInLst->RooCod == Grp->Room.RooCod, // Selected? HTM_OPTION_ENABLED, "%s",RooInLst->ShrtName); } diff --git a/swad_rubric.c b/swad_rubric.c index 61316e7c..0a60c2f0 100644 --- a/swad_rubric.c +++ b/swad_rubric.c @@ -338,8 +338,7 @@ void Rub_SeeOneRubric (void) Rub_GetRubricDataByCod (&Rubric); /***** Show rubric *****/ - Rub_ShowOnlyOneRubric (&Rubrics,&Rubric, - false); // Do not list rubric criteria + Rub_ShowOnlyOneRubric (&Rubrics,&Rubric); } /*****************************************************************************/ @@ -347,16 +346,7 @@ void Rub_SeeOneRubric (void) /*****************************************************************************/ void Rub_ShowOnlyOneRubric (struct Rub_Rubrics *Rubrics, - const struct Rub_Rubric *Rubric, - bool ListRubricCriteria) - { - Rub_ShowOnlyOneRubricBegin (Rubrics,Rubric,ListRubricCriteria); - Rub_ShowOnlyOneRubricEnd (); - } - -void Rub_ShowOnlyOneRubricBegin (struct Rub_Rubrics *Rubrics, - const struct Rub_Rubric *Rubric, - bool ListRubricCriteria) + const struct Rub_Rubric *Rubric) { extern const char *Hlp_ASSESSMENT_Rubrics; extern const char *Txt_Rubric; @@ -371,13 +361,8 @@ void Rub_ShowOnlyOneRubricBegin (struct Rub_Rubrics *Rubrics, true); // Show only this rubric /***** Write criteria of this rubric *****/ - if (ListRubricCriteria) - Ale_ShowAlert (Ale_INFO,"The criteria of the rubric should be listed here."); - // Rub_ListRubricCriteria (Rubrics); - } + RubCri_ListCriteriaForSeeing (Rubrics); -void Rub_ShowOnlyOneRubricEnd (void) - { /***** End box *****/ Box_BoxEnd (); } @@ -733,33 +718,6 @@ void Rub_RemoveCrsRubrics (long CrsCod) Rub_DB_RemoveCrsRubrics (CrsCod); } -/*****************************************************************************/ -/************************ List the criteria in a rubric **********************/ -/*****************************************************************************/ - -void Rub_ListRubric (void) - { - struct Rub_Rubrics Rubrics; - struct Rub_Rubric Rubric; - char Txt[Cns_MAX_BYTES_TEXT + 1]; - - /***** Reset rubrics context *****/ - Rub_ResetRubrics (&Rubrics); - Rub_ResetRubric (&Rubric); - - /***** Get parameters *****/ - Rub_GetPars (&Rubrics,true); - Rubric.RubCod = Rubrics.RubCod; - - /***** Get rubric data *****/ - Rub_GetRubricDataByCod (&Rubric); - Rub_DB_GetRubricTxt (Rubric.RubCod,Txt); - - /***** Show rubric *****/ - Rub_ShowOnlyOneRubric (&Rubrics,&Rubric, - true); // List rubric criteria - } - /*****************************************************************************/ /*************** Request the creation or edition of a rubric *****************/ /*****************************************************************************/ @@ -833,7 +791,7 @@ void Rub_PutFormsOneRubric (struct Rub_Rubrics *Rubrics, { case Rub_EXISTING_RUBRIC: /* Show list of criteria */ - RubCri_ListCriteria (Rubrics,Criterion); + RubCri_ListCriteriaForEdition (Rubrics,Criterion); break; case Rub_NEW_RUBRIC: /* Show rubrics again */ diff --git a/swad_rubric.h b/swad_rubric.h index ce88c005..c8572eb5 100644 --- a/swad_rubric.h +++ b/swad_rubric.h @@ -49,12 +49,7 @@ bool Rub_CheckIfICanEditRubrics (void); bool Rub_CheckIfEditable (void); void Rub_SeeOneRubric (void); void Rub_ShowOnlyOneRubric (struct Rub_Rubrics *Rubrics, - const struct Rub_Rubric *Rubric, - bool ListRubricCriteria); -void Rub_ShowOnlyOneRubricBegin (struct Rub_Rubrics *Rubrics, - const struct Rub_Rubric *Rubric, - bool ListRubricCriteria); -void Rub_ShowOnlyOneRubricEnd (void); + const struct Rub_Rubric *Rubric); void Rub_SetCurrentRubCod (long GamCod); void Rub_PutPars (void *Rubrics); @@ -62,15 +57,12 @@ void Rub_GetPars (struct Rub_Rubrics *Rubrics,bool CheckRubCod); void Rub_GetListRubrics (struct Rub_Rubrics *Rubrics); void Rub_GetRubricDataByCod (struct Rub_Rubric *Rubric); -void Rub_GetRubricDataByFolder (struct Rub_Rubric *Rubric); void Rub_FreeListRubrics (struct Rub_Rubrics *Rubrics); void Rub_AskRemRubric (void); void Rub_RemoveRubric (void); void Rub_RemoveCrsRubrics (long CrsCod); -void Rub_ListRubric (void); - void Rub_ReqCreatOrEditRubric (void); void Rub_PutFormsOneRubric (struct Rub_Rubrics *Rubrics, struct Rub_Rubric *Rubric, diff --git a/swad_rubric_criteria.c b/swad_rubric_criteria.c index 946a28cd..e2cf81ec 100644 --- a/swad_rubric_criteria.c +++ b/swad_rubric_criteria.c @@ -83,11 +83,12 @@ static void RubCri_ChangeValueCriterion (RubCri_ValueRange_t ValueRange); static void RubCri_CreateCriterion (struct RubCri_Criterion *Criterion); +static void RubCri_ListOneOrMoreCriteriaForSeeing (unsigned NumCriteria, + MYSQL_RES *mysql_res); static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics, unsigned MaxCriInd, unsigned NumCriteria, - MYSQL_RES *mysql_res, - bool ICanEditCriteria); + MYSQL_RES *mysql_res); static void RubCri_GetCriterionDataFromRow (MYSQL_RES *mysql_res, struct RubCri_Criterion *Criterion); @@ -476,11 +477,41 @@ static void RubCri_CreateCriterion (struct RubCri_Criterion *Criterion) } /*****************************************************************************/ -/********************** List the criteria of a rubric ************************/ +/***************** List the criteria of a rubric for seeing ******************/ /*****************************************************************************/ -void RubCri_ListCriteria (struct Rub_Rubrics *Rubrics, - struct RubCri_Criterion *Criterion) +void RubCri_ListCriteriaForSeeing (const struct Rub_Rubrics *Rubrics) + { + extern const char *Hlp_ASSESSMENT_Rubrics_criteria; + extern const char *Txt_Criteria; + MYSQL_RES *mysql_res; + unsigned NumCriteria; + + /***** Get data of rubric criteria from database *****/ + NumCriteria = Rub_DB_GetCriteria (&mysql_res,Rubrics->RubCod); + + /***** Begin box *****/ + Box_BoxBegin (NULL,Txt_Criteria, + NULL,NULL, + Hlp_ASSESSMENT_Rubrics_criteria,Box_NOT_CLOSABLE); + + /***** Show table with rubric criteria *****/ + if (NumCriteria) + RubCri_ListOneOrMoreCriteriaForSeeing (NumCriteria,mysql_res); + + /***** Free structure that stores the query result *****/ + DB_FreeMySQLResult (&mysql_res); + + /***** End box *****/ + Box_BoxEnd (); + } + +/*****************************************************************************/ +/**************** List the criteria of a rubric for edition ******************/ +/*****************************************************************************/ + +void RubCri_ListCriteriaForEdition (struct Rub_Rubrics *Rubrics, + struct RubCri_Criterion *Criterion) { extern const char *Hlp_ASSESSMENT_Rubrics_criteria; extern const char *Txt_Criteria; @@ -504,8 +535,7 @@ void RubCri_ListCriteria (struct Rub_Rubrics *Rubrics, if (NumCriteria) RubCri_ListOneOrMoreCriteriaForEdition (Rubrics, MaxCriInd, - NumCriteria,mysql_res, - ICanEditCriteria); + NumCriteria,mysql_res); /***** Free structure that stores the query result *****/ DB_FreeMySQLResult (&mysql_res); @@ -522,11 +552,116 @@ void RubCri_ListCriteria (struct Rub_Rubrics *Rubrics, /********************** List rubric criteria for edition *********************/ /*****************************************************************************/ +static void RubCri_ListOneOrMoreCriteriaForSeeing (unsigned NumCriteria, + MYSQL_RES *mysql_res) + { + extern const char *Txt_Criteria; + unsigned NumCriterion; + struct RubCri_Criterion Criterion; + RubCri_ValueRange_t ValueRange; + + /***** Trivial check *****/ + if (!NumCriteria) + return; + + /***** Begin table *****/ + HTM_TABLE_BeginWideMarginPadding (5); + + /***** Write the heading *****/ + RubCri_PutTableHeadingForCriteria (); + + /***** Write rows *****/ + for (NumCriterion = 0, The_ResetRowColor (); + NumCriterion < NumCriteria; + NumCriterion++, The_ChangeRowColor ()) + { + /***** Create criterion of questions *****/ + RubCri_ResetCriterion (&Criterion); + + /***** Get criterion data *****/ + RubCri_GetCriterionDataFromRow (mysql_res,&Criterion); + + /***** Begin first row *****/ + HTM_TR_Begin (NULL); + + /***** Icons *****/ + HTM_TD_Begin ("rowspan=\"2\" class=\"BT %s\"", + The_GetColorRows ()); + HTM_TD_End (); + + /***** Index *****/ + HTM_TD_Begin ("rowspan=\"2\" class=\"RT %s\"", + The_GetColorRows ()); + Lay_WriteIndex (Criterion.CriInd,"BIG_INDEX"); + HTM_TD_End (); + + /***** Title *****/ + HTM_TD_Begin ("class=\"LT DAT_%s %s\"", + The_GetSuffix (), + The_GetColorRows ()); + HTM_Txt (Criterion.Title); + HTM_TD_End (); + + /***** Link to resource *****/ + HTM_TD_Begin ("class=\"LT DAT_%s %s\"", + The_GetSuffix (), + The_GetColorRows ()); + // TODO: Write source + // Frm_BeginFormAnchor (ActChgLnkRubCri,Anchor); + // RubCri_PutParsOneCriterion (Rubrics); + // Rsc_ShowClipboardToChangeLink (&Criterion.Link); + // Frm_EndForm (); + HTM_TD_End (); + + /***** Minimum and maximum values of criterion *****/ + for (ValueRange = (RubCri_ValueRange_t) 0; + ValueRange <= (RubCri_ValueRange_t) (RubCri_NUM_VALUES - 1); + ValueRange++) + { + HTM_TD_Begin ("class=\"RT DAT_%s %s\"", + The_GetSuffix (), + The_GetColorRows ()); + HTM_Unsigned (Criterion.Values[ValueRange]); + HTM_TD_End (); + } + + /***** Criterion weight *****/ + HTM_TD_Begin ("class=\"RT DAT_%s %s\"", + The_GetSuffix (), + The_GetColorRows ()); + HTM_Unsigned (Criterion.Weight); + HTM_TD_End (); + + /***** End first row *****/ + HTM_TR_End (); + + /***** Begin second row *****/ + HTM_TR_Begin (NULL); + + /***** Questions *****/ + HTM_TD_Begin ("colspan=\"5\" class=\"LT %s\"", + The_GetColorRows ()); + + // Description here + + HTM_TD_End (); + + /***** End second row *****/ + HTM_TR_End (); + } + + /***** End table *****/ + HTM_TABLE_End (); + } + +/*****************************************************************************/ +/********************** List rubric criteria for edition *********************/ +/*****************************************************************************/ + static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics, unsigned MaxCriInd, unsigned NumCriteria, - MYSQL_RES *mysql_res, - bool ICanEditCriteria) + MYSQL_RES *mysql_res) { extern const char *Txt_Criteria; extern const char *Txt_Movement_not_allowed; @@ -577,14 +712,11 @@ static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics, The_GetColorRows ()); /* Put icon to remove the criterion */ - if (ICanEditCriteria) - Ico_PutContextualIconToRemove (ActReqRemRubCri,NULL, - RubCri_PutParsOneCriterion,Rubrics); - else - Ico_PutIconRemovalNotAllowed (); + Ico_PutContextualIconToRemove (ActReqRemRubCri,NULL, + RubCri_PutParsOneCriterion,Rubrics); /* Put icon to move up the question */ - if (ICanEditCriteria && Criterion.CriInd > 1) + if (Criterion.CriInd > 1) Lay_PutContextualLinkOnlyIcon (ActUp_RubCri,Anchor, RubCri_PutParsOneCriterion,Rubrics, "arrow-up.svg",Ico_BLACK); @@ -593,7 +725,7 @@ static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics, Txt_Movement_not_allowed); /* Put icon to move down the criterion */ - if (ICanEditCriteria && Criterion.CriInd < MaxCriInd) + if (Criterion.CriInd < MaxCriInd) Lay_PutContextualLinkOnlyIcon (ActDwnRubCri,Anchor, RubCri_PutParsOneCriterion,Rubrics, "arrow-down.svg",Ico_BLACK); @@ -612,24 +744,15 @@ static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics, /***** Title *****/ HTM_TD_Begin ("class=\"LT %s\"",The_GetColorRows ()); HTM_ARTICLE_Begin (Anchor); - if (ICanEditCriteria) - { - Frm_BeginFormAnchor (ActChgTitRubCri,Anchor); - RubCri_PutParsOneCriterion (Rubrics); - HTM_INPUT_TEXT ("Title",RubCri_MAX_CHARS_TITLE,Criterion.Title, - HTM_SUBMIT_ON_CHANGE, - "id=\"Title\"" - " class=\"TITLE_DESCRIPTION_WIDTH INPUT_%s\"" - " required=\"required\"", - The_GetSuffix ()); - Frm_EndForm (); - } - else - { - HTM_SPAN_Begin ("class=\"EXA_SET_TITLE\""); - HTM_Txt (Criterion.Title); - HTM_SPAN_End (); - } + Frm_BeginFormAnchor (ActChgTitRubCri,Anchor); + RubCri_PutParsOneCriterion (Rubrics); + HTM_INPUT_TEXT ("Title",RubCri_MAX_CHARS_TITLE,Criterion.Title, + HTM_SUBMIT_ON_CHANGE, + "id=\"Title\"" + " class=\"TITLE_DESCRIPTION_WIDTH INPUT_%s\"" + " required=\"required\"", + The_GetSuffix ()); + Frm_EndForm (); HTM_ARTICLE_End (); HTM_TD_End (); @@ -647,48 +770,30 @@ static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics, ValueRange++) { HTM_TD_Begin ("class=\"RT %s\"",The_GetColorRows ()); - if (ICanEditCriteria) - { - Frm_BeginFormAnchor (RubCri_ActionsValues[ValueRange],Anchor); - RubCri_PutParsOneCriterion (Rubrics); - HTM_INPUT_FLOAT (RubCri_ParValues[ValueRange],0.0,DBL_MAX,0.1, - Criterion.Values[ValueRange],false, - " class=\"INPUT_FLOAT INPUT_%s\"" - " required=\"required\"", - The_GetSuffix ()); - Frm_EndForm (); - } - else - { - HTM_SPAN_Begin ("class=\"CRI_VALUE\""); - HTM_Unsigned (Criterion.Values[ValueRange]); - HTM_SPAN_End (); - } + Frm_BeginFormAnchor (RubCri_ActionsValues[ValueRange],Anchor); + RubCri_PutParsOneCriterion (Rubrics); + HTM_INPUT_FLOAT (RubCri_ParValues[ValueRange],0.0,DBL_MAX,0.1, + Criterion.Values[ValueRange],false, + " class=\"INPUT_FLOAT INPUT_%s\"" + " required=\"required\"", + The_GetSuffix ()); + Frm_EndForm (); HTM_TD_End (); } /***** Criterion weight *****/ HTM_TD_Begin ("class=\"RT %s\"",The_GetColorRows ()); - if (ICanEditCriteria) - { - Frm_BeginFormAnchor (ActChgWeiRubCri,Anchor); - RubCri_PutParsOneCriterion (Rubrics); - HTM_INPUT_FLOAT ("Weight", - RubCri_WEIGHT_MIN, - RubCri_WEIGHT_MAX, - RubCri_WEIGHT_STEP, - Criterion.Weight,false, - " class=\"INPUT_FLOAT INPUT_%s\"" - " required=\"required\"", - The_GetSuffix ()); - Frm_EndForm (); - } - else - { - HTM_SPAN_Begin ("class=\"CRI_VALUE\""); - HTM_Unsigned (Criterion.Weight); - HTM_SPAN_End (); - } + Frm_BeginFormAnchor (ActChgWeiRubCri,Anchor); + RubCri_PutParsOneCriterion (Rubrics); + HTM_INPUT_FLOAT ("Weight", + RubCri_WEIGHT_MIN, + RubCri_WEIGHT_MAX, + RubCri_WEIGHT_STEP, + Criterion.Weight,false, + " class=\"INPUT_FLOAT INPUT_%s\"" + " required=\"required\"", + The_GetSuffix ()); + Frm_EndForm (); HTM_TD_End (); /***** End first row *****/ diff --git a/swad_rubric_criteria.h b/swad_rubric_criteria.h index 46f6e098..9a2728ce 100644 --- a/swad_rubric_criteria.h +++ b/swad_rubric_criteria.h @@ -41,8 +41,9 @@ void RubCri_ChangeMinValue (void); void RubCri_ChangeMaxValue (void); void RubCri_ChangeWeight (void); -void RubCri_ListCriteria (struct Rub_Rubrics *Rubrics, - struct RubCri_Criterion *Criterion); +void RubCri_ListCriteriaForSeeing (const struct Rub_Rubrics *Rubrics); +void RubCri_ListCriteriaForEdition (struct Rub_Rubrics *Rubrics, + struct RubCri_Criterion *Criterion); void RubCri_ResetCriterion (struct RubCri_Criterion *Criterion); diff --git a/swad_rubric_type.h b/swad_rubric_type.h index af369361..3ce0a50a 100644 --- a/swad_rubric_type.h +++ b/swad_rubric_type.h @@ -83,8 +83,6 @@ struct RubCri_Criterion long CriCod; // Criterion code unsigned CriInd; // Criterion index (position in the rubric) struct Rsc_Link Link; - // Rsc_Type_t Source; - // long Cod; double Values[RubCri_NUM_VALUES]; double Weight; // Relative weight (from 0.0 to 1.0) char Title[RubCri_MAX_BYTES_TITLE + 1]; // Title of the criterion