Version 22.80: Mar 25, 2023 Resources in rubric criteria. Not finished.

This commit is contained in:
acanas 2023-03-25 21:30:53 +01:00
parent 13aad1a6fe
commit d7b20db859
7 changed files with 230 additions and 25 deletions

View File

@ -629,11 +629,12 @@ 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.79.3 (2023-03-24)"
#define Log_PLATFORM_VERSION "SWAD 22.80 (2023-03-25)"
#define CSS_FILE "swad22.78.15.css"
#define JS_FILE "swad22.49.js"
/*
Version 22.79.3: Mar 24, 2023 Translation of some actions. (? lines)
Version 22.80: Mar 25, 2023 Resources in rubric criteria. Not finished. (338110 lines)
Version 22.79.3: Mar 24, 2023 Translation of some actions. (337938 lines)
Version 22.79.2: Mar 24, 2023 Code refactoring in rubrics. (337937 lines)
Version 22.79.1: Mar 24, 2023 Translation of some actions. (337889 lines)
Version 22.79: Mar 24, 2023 New action to change source of rubric criterion. (337888 lines)

View File

@ -70,7 +70,7 @@ typedef enum
PrgRsc_FORUM_THREAD,
} PrgRsc_Type_t;
struct Prg_Link
struct PrgRsc_Link
{
PrgRsc_Type_t Type;
long Cod;
@ -98,7 +98,7 @@ struct Prg_Item
struct
{
struct Prg_ResourceHierarchy Hierarchy;
struct Prg_Link Link;
struct PrgRsc_Link Link;
char Title[PrgRsc_MAX_BYTES_PROGRAM_RESOURCE_TITLE + 1];
} Resource;
};

View File

@ -707,7 +707,7 @@ unsigned Prg_DB_GetClipboard (MYSQL_RES **mysql_res)
/*************************** Remove link from clipboard **********************/
/*****************************************************************************/
void Prg_DB_RemoveLinkFromClipboard (struct Prg_Link *Link)
void Prg_DB_RemoveLinkFromClipboard (struct PrgRsc_Link *Link)
{
DB_QueryDELETE ("can not remove link from clipboard",
"DELETE FROM prg_clipboards"

View File

@ -79,7 +79,7 @@ void Prg_DB_UpdateRscLink (const struct Prg_Item *Item);
void Prg_DB_CopyToClipboard (PrgRsc_Type_t Type,long Cod);
unsigned Prg_DB_GetClipboard (MYSQL_RES **mysql_res);
void Prg_DB_RemoveLinkFromClipboard (struct Prg_Link *Link);
void Prg_DB_RemoveLinkFromClipboard (struct PrgRsc_Link *Link);
void Prg_DB_InsertItemInExpandedItems (long ItmCod);
bool Prg_DB_GetIfExpandedItem (long ItmCod);

View File

@ -126,15 +126,15 @@ static bool PrgRsc_ExchangeResources (const struct Prg_ResourceHierarchy *Rsc1,
const struct Prg_ResourceHierarchy *Rsc2);
static void PrgRsc_ShowClipboard (struct Prg_Item *Item);
static void PrgRsc_WriteRowClipboard (bool SubmitOnClick,const struct Prg_Link *Link);
static void PrgRsc_WriteLinkName (const struct Prg_Link *Link,bool PutFormToGo,
static void PrgRsc_WriteRowClipboard (bool SubmitOnClick,const struct PrgRsc_Link *Link);
static void PrgRsc_WriteLinkName (const struct PrgRsc_Link *Link,bool PutFormToGo,
const char *Icon,const char *IconTitle);
static void PrgRsc_WriteEmptyLinkInCrsProgram (__attribute__((unused)) long Cod,
__attribute__((unused)) bool PutFormToGo,
const char *Icon,const char *IconTitle);
static void PrgRsc_GetResourceTitleFromLink (struct Prg_Item *Item);
static void PrgRsc_GetLinkDataFromRow (MYSQL_RES *mysql_res,
struct Prg_Link *Link);
struct PrgRsc_Link *Link);
/*****************************************************************************/
/****************************** View resources *******************************/
@ -907,8 +907,8 @@ static void PrgRsc_ShowClipboard (struct Prg_Item *Item)
MYSQL_RES *mysql_res;
unsigned NumLink;
unsigned NumLinks;
struct Prg_Link Link;
static const struct Prg_Link EmptyLink =
struct PrgRsc_Link Link;
static const struct PrgRsc_Link EmptyLink =
{
.Type = PrgRsc_NONE,
.Cod = -1L,
@ -954,7 +954,7 @@ static void PrgRsc_ShowClipboard (struct Prg_Item *Item)
/************************ Show one link from clipboard ***********************/
/*****************************************************************************/
static void PrgRsc_WriteRowClipboard (bool SubmitOnClick,const struct Prg_Link *Link)
static void PrgRsc_WriteRowClipboard (bool SubmitOnClick,const struct PrgRsc_Link *Link)
{
extern const char *Prg_ResourceTypesDB[PrgRsc_NUM_TYPES];
extern const char *Txt_RESOURCE_TYPES[PrgRsc_NUM_TYPES];
@ -983,7 +983,7 @@ static void PrgRsc_WriteRowClipboard (bool SubmitOnClick,const struct Prg_Link *
/************* Write link name (filename, assignment title...) ***************/
/*****************************************************************************/
static void PrgRsc_WriteLinkName (const struct Prg_Link *Link,bool PutFormToGo,
static void PrgRsc_WriteLinkName (const struct PrgRsc_Link *Link,bool PutFormToGo,
const char *Icon,const char *IconTitle)
{
static void (*WriteLinkName[PrgRsc_NUM_TYPES]) (long Cod,bool PutFormToGo,
@ -1011,7 +1011,7 @@ static void PrgRsc_WriteLinkName (const struct Prg_Link *Link,bool PutFormToGo,
}
/*****************************************************************************/
/********************** Write survey in course program ***********************/
/******************** Write empty link in course program *********************/
/*****************************************************************************/
static void PrgRsc_WriteEmptyLinkInCrsProgram (__attribute__((unused)) long Cod,
@ -1023,7 +1023,7 @@ static void PrgRsc_WriteEmptyLinkInCrsProgram (__attribute__((unused)) long Cod,
/***** Icon depending on type ******/
Ico_PutIconOn (Icon,Ico_BLACK,IconTitle);
/***** Write Name of the course and date of exam *****/
/***** Write text *****/
HTM_Txt (Txt_RESOURCE_TYPES[PrgRsc_NONE]);
}
@ -1117,7 +1117,7 @@ void PrgRsc_ChangeLink (void)
/*****************************************************************************/
static void PrgRsc_GetLinkDataFromRow (MYSQL_RES *mysql_res,
struct Prg_Link *Link)
struct PrgRsc_Link *Link)
{
MYSQL_ROW row;

View File

@ -30,13 +30,18 @@
#include "swad_action_list.h"
#include "swad_alert.h"
#include "swad_assignment_resource.h"
#include "swad_box.h"
#include "swad_database.h"
#include "swad_error.h"
#include "swad_exam_resource.h"
#include "swad_form.h"
#include "swad_game_resource.h"
#include "swad_global.h"
#include "swad_parameter.h"
#include "swad_parameter_code.h"
#include "swad_program_database.h"
#include "swad_program_resource.h"
#include "swad_rubric.h"
#include "swad_rubric_criteria.h"
#include "swad_rubric_database.h"
@ -58,6 +63,26 @@ static const char *RubCri_ParValues[RubCri_NUM_VALUES] =
[RubCri_MAX] = "MaxVal",
};
static const char *RubCri_SourceDB[RubCri_NUM_SOURCES] =
{
[RubCri_FROM_TEACHER ] = "teacher",
[RubCri_FROM_ANOTHER_RUBRIC] = "rubric",
[RubCri_FROM_EXAM_PRINT ] = "exam",
[RubCri_FROM_GAME_MATCH ] = "game",
};
/*****************************************************************************/
/**************************** Private constants ******************************/
/*****************************************************************************/
const char *RubCri_SourceIcons[RubCri_NUM_SOURCES] =
{
[RubCri_FROM_TEACHER ] = "user-tie.svg",
[RubCri_FROM_ANOTHER_RUBRIC] = "tasks.svg",
[RubCri_FROM_EXAM_PRINT ] = "file-signature.svg",
[RubCri_FROM_GAME_MATCH ] = "gamepad.svg",
};
/*****************************************************************************/
/***************************** Private prototypes ****************************/
/*****************************************************************************/
@ -93,6 +118,18 @@ static void RubCri_GetAndCheckPars (struct Rub_Rubrics *Rubrics,
static void RubCri_ExchangeCriteria (long RubCod,
unsigned CriIndTop,unsigned CriIndBottom);
static void RubCri_ShowResource (struct RubCri_Criterion *Criterion,
bool Editing,const char *Anchor);
static void RubCri_ShowClipboard (struct RubCri_Criterion *Criterion,const char *Anchor);
static void RubCri_GetLinkDataFromRow (MYSQL_RES *mysql_res,
struct RubCri_Criterion *Criterion);
static void RubCri_WriteRowClipboard (bool SubmitOnClick,
const struct RubCri_Criterion *Criterion);
static void RubCri_WriteLinkName (const struct RubCri_Criterion *Criterion,bool PutFormToGo);
static void RubCri_WriteEmptyLinkInRubricCriterion (__attribute__((unused)) long Cod,
__attribute__((unused)) bool PutFormToGo,
const char *Icon,const char *IconTitle);
/*****************************************************************************/
/*************** Put parameter to edit one rubric criterion ******************/
/*****************************************************************************/
@ -703,6 +740,7 @@ 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);
RubCri_PutParsOneCriterion (Rubrics);
HTM_SELECT_Begin (HTM_SUBMIT_ON_CHANGE,
@ -719,6 +757,12 @@ static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics,
}
HTM_SELECT_End ();
Frm_EndForm ();
HTM_BR ();
/* Resource */
RubCri_ShowResource (&Criterion,
true,Anchor); // Editing
HTM_TD_End ();
/***** Minimum and maximum values of criterion *****/
@ -864,14 +908,6 @@ RubCri_Source_t RubCri_GetSourceFromDBStr (const char *SourceDBStr)
const char *RubCri_GetDBStrFromSource (RubCri_Source_t Source)
{
static const char *RubCri_SourceDB[RubCri_NUM_SOURCES] =
{
[RubCri_FROM_TEACHER ] = "teacher",
[RubCri_FROM_ANOTHER_RUBRIC] = "rubric",
[RubCri_FROM_EXAM_PRINT ] = "exam",
[RubCri_FROM_GAME_MATCH ] = "game",
};
if (Source >= RubCri_NUM_SOURCES)
Source = RubCri_SOURCE_DEFAULT;
@ -1172,3 +1208,171 @@ static void RubCri_ExchangeCriteria (long RubCod,
/***** Unlock table *****/
DB_UnlockTables ();
}
/*****************************************************************************/
/************************** Show criterion resource **************************/
/*****************************************************************************/
static void RubCri_ShowResource (struct RubCri_Criterion *Criterion,
bool Editing,const char *Anchor)
{
return; // TODO: Provisional. Remove!
// TODO
if (Editing)
RubCri_ShowClipboard (Criterion,Anchor);
else
RubCri_WriteLinkName (Criterion,
true); // Put form
}
/*****************************************************************************/
/***************** Show clipboard to change resource link ********************/
/*****************************************************************************/
static void RubCri_ShowClipboard (struct RubCri_Criterion *Criterion,const char *Anchor)
{
MYSQL_RES *mysql_res;
unsigned NumLink;
unsigned NumLinks;
// struct PrgRsc_Link Link;
struct RubCri_Criterion Cri;
/*
static const struct PrgRsc_Link EmptyLink =
{
.Type = PrgRsc_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);
*/
/***** Begin list *****/
HTM_UL_Begin ("class=\"PRG_CLIPBOARD\"");
/***** Current link (empty or not) *****/
RubCri_WriteRowClipboard (false,Criterion);
/***** Row with empty link to remove the current link *****/
/*
if (Criterion->Source != RubCri_FROM_TEACHER)
RubCri_WriteRowClipboard (true,&EmptyLink); */
/***** Get links in clipboard from database and write them *****/
NumLinks = Prg_DB_GetClipboard (&mysql_res);
for (NumLink = 1;
NumLink <= NumLinks;
NumLink++)
{
RubCri_GetLinkDataFromRow (mysql_res,&Cri);
/*
Cri.Source = Link->Type;
Cri.Cod = Link->Cod;
*/
RubCri_WriteRowClipboard (true,&Cri);
}
DB_FreeMySQLResult (&mysql_res);
/***** End list *****/
HTM_UL_End ();
/***** End form *****/
Frm_EndForm ();
}
/*****************************************************************************/
/********************** Get resource data from clipboard *********************/
/*****************************************************************************/
static void RubCri_GetLinkDataFromRow (MYSQL_RES *mysql_res,
struct RubCri_Criterion *Criterion)
{
MYSQL_ROW row;
/***** Get row *****/
row = mysql_fetch_row (mysql_res);
/*
Type row[0]
Cod row[1]
*/
/***** Get type (row[0]) *****/
Criterion->Source = (RubCri_Source_t) PrgRsc_GetTypeFromString (row[0]); // TODO
/***** Get code (row[1]) *****/
Criterion->Cod = Str_ConvertStrCodToLongCod (row[1]);
}
/*****************************************************************************/
/************************ Show one link from clipboard ***********************/
/*****************************************************************************/
static void RubCri_WriteRowClipboard (bool SubmitOnClick,
const struct RubCri_Criterion *Criterion)
{
HTM_LI_Begin ("class=\"PRG_RSC_%s\"",The_GetSuffix ());
HTM_LABEL_Begin (NULL);
/***** Radio selector *****/
HTM_INPUT_RADIO ("Link",SubmitOnClick,
"value=\"%s_%ld\"%s",
RubCri_SourceDB[Criterion->Source],Criterion->Cod,
SubmitOnClick ? "" :
" checked=\"checked\"");
/***** Name *****/
RubCri_WriteLinkName (Criterion,
false); // Don't put form
HTM_LABEL_End ();
HTM_LI_End ();
}
/*****************************************************************************/
/************* Write link name (filename, assignment title...) ***************/
/*****************************************************************************/
static void RubCri_WriteLinkName (const struct RubCri_Criterion *Criterion,bool PutFormToGo)
{
extern const char *Txt_RUBRIC_CRITERION_SOURCES[RubCri_NUM_SOURCES];
static void (*WriteLinkName[RubCri_NUM_SOURCES]) (long Cod,bool PutFormToGo,
const char *Icon,
const char *IconTitle) =
{
[RubCri_FROM_TEACHER ] = RubCri_WriteEmptyLinkInRubricCriterion,
[RubCri_FROM_ANOTHER_RUBRIC] = AsgRsc_WriteAssignmentInCrsProgram,
[RubCri_FROM_EXAM_PRINT ] = ExaRsc_WriteExamInCrsProgram,
[RubCri_FROM_GAME_MATCH ] = GamRsc_WriteGameInCrsProgram,
};
/***** Write link name *****/
if (WriteLinkName[Criterion->Source])
WriteLinkName[Criterion->Source] (Criterion->Cod,PutFormToGo,
RubCri_SourceIcons[Criterion->Source],
Txt_RUBRIC_CRITERION_SOURCES[Criterion->Source]);
else
Ale_ShowAlert (Ale_ERROR,"Not implemented!");
}
/*****************************************************************************/
/******************** Write empty link in course program *********************/
/*****************************************************************************/
static void RubCri_WriteEmptyLinkInRubricCriterion (__attribute__((unused)) long Cod,
__attribute__((unused)) bool PutFormToGo,
const char *Icon,const char *IconTitle)
{
extern const char *Txt_RUBRIC_CRITERION_SOURCES[RubCri_NUM_SOURCES];
/***** Icon depending on type ******/
Ico_PutIconOn (Icon,Ico_BLACK,IconTitle);
/***** Write text *****/
HTM_Txt (Txt_RUBRIC_CRITERION_SOURCES[RubCri_FROM_TEACHER]);
}

View File

@ -36675,7 +36675,7 @@ const char *Txt_Resources_of_X = // Warning: it is very important to include %s
#elif L==5 // fr
"Ressources de %s";
#elif L==6 // gn
"Recursos de %s"; // Okoteve traducción
"%s recursos rehegua";
#elif L==7 // it
"Risorse di %s";
#elif L==8 // pl