Version 22.94: Apr 12, 2023 Code refactoring in rubrics.

This commit is contained in:
acanas 2023-04-12 00:08:02 +02:00
parent cfddb5c174
commit 45d2b2a2d9
9 changed files with 288 additions and 156 deletions

View File

@ -629,10 +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.93 (2023-04-10)"
#define Log_PLATFORM_VERSION "SWAD 22.94 (2023-04-12)"
#define CSS_FILE "swad22.88.css"
#define JS_FILE "swad22.49.js"
/*
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)
Version 22.92.3: Apr 06, 2023 Code refactoring in resources. (338493 lines)
Version 22.92.2: Apr 06, 2023 Code refactoring in resources. (338500 lines)

View File

@ -100,10 +100,10 @@ static void MchRes_ShowMchResultsSummaryRow (unsigned NumResults,
double TotalScore,
double TotalGrade);
static void MchRes_CheckIfICanSeeMatchResult (const struct Gam_Game *Game,
const struct Mch_Match *Match,
long UsrCod,
struct MchRes_ICanView *ICanView);
static void MchRes_CheckIfICanViewMatchResult (const struct Gam_Game *Game,
const struct Mch_Match *Match,
long UsrCod,
struct MchRes_ICanView *ICanView);
/*****************************************************************************/
/*************************** Show my matches results *************************/
@ -764,7 +764,7 @@ static void MchRes_ShowMchResults (struct Gam_Games *Games,
Gam_GetGameDataByCod (&Games->Game);
/* Check if I can view this match result and score */
MchRes_CheckIfICanSeeMatchResult (&Games->Game,&Match,UsrDat->UsrCod,&ICanView);
MchRes_CheckIfICanViewMatchResult (&Games->Game,&Match,UsrDat->UsrCod,&ICanView);
if (NumResult)
HTM_TR_Begin (NULL);
@ -1103,7 +1103,7 @@ void MchRes_ShowOneMchResult (void)
MchPrn_GetMatchPrintDataByMchCodAndUsrCod (&Print);
/***** Check if I can view this match result and score *****/
MchRes_CheckIfICanSeeMatchResult (&Games.Game,&Match,UsrDat->UsrCod,&ICanView);
MchRes_CheckIfICanViewMatchResult (&Games.Game,&Match,UsrDat->UsrCod,&ICanView);
if (!ICanView.Result)
Err_NoPermissionExit ();
@ -1288,13 +1288,13 @@ void MchRes_ShowOneMchResult (void)
}
/*****************************************************************************/
/********************** Get if I can see match result ************************/
/********************** Get if I can view match result ***********************/
/*****************************************************************************/
static void MchRes_CheckIfICanSeeMatchResult (const struct Gam_Game *Game,
const struct Mch_Match *Match,
long UsrCod,
struct MchRes_ICanView *ICanView)
static void MchRes_CheckIfICanViewMatchResult (const struct Gam_Game *Game,
const struct Mch_Match *Match,
long UsrCod,
struct MchRes_ICanView *ICanView)
{
/***** Check if I can view print result and score *****/
switch (Gbl.Usrs.Me.Role.Logged)

View File

@ -36,6 +36,7 @@
#include "swad_project.h"
#include "swad_project_config.h"
#include "swad_project_database.h"
#include "swad_rubric.h"
/*****************************************************************************/
/************** External global variables from others modules ****************/
@ -48,6 +49,7 @@ extern struct Globals Gbl;
/*****************************************************************************/
static void PrjCfg_ShowFormNETCanCreate (const struct Prj_Projects *Projects);
static void PrjCfg_ShowFormRubrics (void);
static void PrjCfg_GetConfigDataFromRow (MYSQL_RES *mysql_res,
struct Prj_Projects *Projects);
@ -113,6 +115,9 @@ void PrjCfg_ShowFormConfig (void)
/***** Projects are editable by non-editing teachers? *****/
PrjCfg_ShowFormNETCanCreate (&Projects);
/***** Rubrics *****/
PrjCfg_ShowFormRubrics ();
HTM_TABLE_End ();
/***** Send button *****/
@ -126,7 +131,7 @@ void PrjCfg_ShowFormConfig (void)
}
/*****************************************************************************/
/*************** Cam non-editing teachers create new projects? ***************/
/****** Show form to edit if non-editing teachers create new projects ********/
/*****************************************************************************/
static void PrjCfg_ShowFormNETCanCreate (const struct Prj_Projects *Projects)
@ -157,6 +162,102 @@ static void PrjCfg_ShowFormNETCanCreate (const struct Prj_Projects *Projects)
HTM_TR_End ();
}
/*****************************************************************************/
/************ Show form to edit rubrics associated to 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 = {};
/***** Reset rubrics context *****/
Rub_ResetRubrics (&Rubrics);
/***** 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&uacute;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&uacute;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 ();
/***** Free list of rubrics *****/
Rub_FreeListRubrics (&Rubrics);
}
/*****************************************************************************/
/************ Get configuration values from a database table row *************/
/*****************************************************************************/

View File

@ -65,10 +65,11 @@ static void Rub_PutButtonToCreateNewRubric (struct Rub_Rubrics *Rubrics);
static void Rub_PutParsToCreateNewRubric (void *Rubrics);
static void Rub_ShowRubricMainData (struct Rub_Rubrics *Rubrics,
const struct Rub_Rubric *Rubric,
bool ShowOnlyThisRubric);
static void Rub_PutIconsOneRubric (void *Rubrics);
static void Rub_WriteAuthor (struct Rub_Rubric *Rubric);
static void Rub_WriteAuthor (const struct Rub_Rubric *Rubric);
static void Rub_PutIconsToRemEditOneRubric (struct Rub_Rubrics *Rubrics);
@ -91,7 +92,7 @@ void Rub_ResetRubrics (struct Rub_Rubrics *Rubrics)
Rubrics->Num = 0; // Total number of rubrics
Rubrics->Lst = NULL; // List of rubrics
Rubrics->CurrentPage = 0;
Rubrics->Rubric.RubCod = -1L; // Current/selected rubric code
// Rubrics->Rubric.RubCod = -1L; // Current/selected rubric code
}
/*****************************************************************************/
@ -105,7 +106,6 @@ void Rub_ResetRubric (struct Rub_Rubric *Rubric)
Rubric->CrsCod = -1L;
Rubric->UsrCod = -1L;
Rubric->Title[0] = '\0';
Rubric->NumCriteria = 0;
}
/*****************************************************************************/
@ -139,9 +139,6 @@ void Rub_ListAllRubrics (struct Rub_Rubrics *Rubrics)
struct Pag_Pagination Pagination;
unsigned NumRubric;
/***** Reset rubric *****/
Rub_ResetRubric (&Rubrics->Rubric);
/***** Get number of groups in current course *****/
if (!Gbl.Crs.Grps.NumGrps)
Gbl.Crs.Grps.WhichGrps = Grp_ALL_GROUPS;
@ -189,12 +186,9 @@ void Rub_ListAllRubrics (struct Rub_Rubrics *Rubrics)
NumRubric <= Pagination.LastItemVisible;
NumRubric++)
{
/* Get data of this rubric */
Rubrics->Rubric.RubCod = Rubrics->Lst[NumRubric - 1];
Rub_GetRubricDataByCod (&Rubrics->Rubric);
/* Show a pair of rows with the main data of this rubric */
Rub_ShowRubricMainData (Rubrics,
Rubrics->RubCod = Rubrics->Lst[NumRubric - 1].RubCod;
Rub_ShowRubricMainData (Rubrics,&Rubrics->Lst[NumRubric - 1],
false); // Do not show only this rubric
}
@ -238,13 +232,16 @@ bool Rub_CheckIfICanEditRubrics (void)
/*********************** Check if edition is possible ************************/
/*****************************************************************************/
bool Rub_CheckIfEditable (const struct Rub_Rubric *Rubric)
bool Rub_CheckIfEditable (void)
{
if (Rub_CheckIfICanEditRubrics ())
/***** Rubric is editable only if ... *****/
// TODO: Change to control that a rubric is not edited in some circunstances?
/*
return Rubric->NumCriteria == 0 ||
Rubric->NumCriteria != 0;
*/
return true;
else
return false; // Questions are not editable
}
@ -329,19 +326,19 @@ static void Rub_PutParsToCreateNewRubric (void *Rubrics)
void Rub_SeeOneRubric (void)
{
struct Rub_Rubrics Rubrics;
struct Rub_Rubric Rubric;
/***** Reset rubrics context *****/
Rub_ResetRubrics (&Rubrics);
/***** Reset rubric *****/
Rub_ResetRubric (&Rubrics.Rubric);
Rub_ResetRubric (&Rubric);
/***** Get parameters *****/
Rub_GetPars (&Rubrics,true);
Rub_GetRubricDataByCod (&Rubrics.Rubric);
Rubric.RubCod = Rubrics.RubCod;
Rub_GetRubricDataByCod (&Rubric);
/***** Show rubric *****/
Rub_ShowOnlyOneRubric (&Rubrics,
Rub_ShowOnlyOneRubric (&Rubrics,&Rubric,
false); // Do not list rubric criteria
}
@ -350,13 +347,15 @@ void Rub_SeeOneRubric (void)
/*****************************************************************************/
void Rub_ShowOnlyOneRubric (struct Rub_Rubrics *Rubrics,
const struct Rub_Rubric *Rubric,
bool ListRubricCriteria)
{
Rub_ShowOnlyOneRubricBegin (Rubrics,ListRubricCriteria);
Rub_ShowOnlyOneRubricBegin (Rubrics,Rubric,ListRubricCriteria);
Rub_ShowOnlyOneRubricEnd ();
}
void Rub_ShowOnlyOneRubricBegin (struct Rub_Rubrics *Rubrics,
const struct Rub_Rubric *Rubric,
bool ListRubricCriteria)
{
extern const char *Hlp_ASSESSMENT_Rubrics;
@ -368,7 +367,7 @@ void Rub_ShowOnlyOneRubricBegin (struct Rub_Rubrics *Rubrics,
Hlp_ASSESSMENT_Rubrics,Box_NOT_CLOSABLE);
/***** Show main data of this rubric *****/
Rub_ShowRubricMainData (Rubrics,
Rub_ShowRubricMainData (Rubrics,Rubric,
true); // Show only this rubric
/***** Write criteria of this rubric *****/
@ -388,6 +387,7 @@ void Rub_ShowOnlyOneRubricEnd (void)
/*****************************************************************************/
static void Rub_ShowRubricMainData (struct Rub_Rubrics *Rubrics,
const struct Rub_Rubric *Rubric,
bool ShowOnlyThisRubric)
{
extern const char *Txt_View_rubric;
@ -421,14 +421,15 @@ static void Rub_ShowRubricMainData (struct Rub_Rubrics *Rubrics,
Rub_PutPars (Rubrics);
HTM_BUTTON_Submit_Begin (Txt_View_rubric,"class=\"LT BT_LINK ASG_TITLE_%s\"",
The_GetSuffix ());
HTM_Txt (Rubrics->Rubric.Title);
HTM_Txt (Rubric->Title);
HTM_BUTTON_End ();
Frm_EndForm ();
/* Number of criteria */
HTM_DIV_Begin ("class=\"ASG_GRP_%s\"",The_GetSuffix ());
HTM_TxtColonNBSP (Txt_Number_of_criteria);
HTM_Unsigned (Rubrics->Rubric.NumCriteria);
// HTM_Unsigned (Rubrics->Rubric.NumCriteria);
HTM_Unsigned (Rub_DB_GetNumCriteriaInRubric (Rubric->RubCod));
HTM_DIV_End ();
/***** End 1st row of this rubric *****/
@ -442,7 +443,7 @@ static void Rub_ShowRubricMainData (struct Rub_Rubrics *Rubrics,
HTM_TD_Begin ("class=\"LT\"");
else
HTM_TD_Begin ("class=\"LT %s\"",The_GetColorRows ());
Rub_WriteAuthor (&Rubrics->Rubric);
Rub_WriteAuthor (Rubric);
HTM_TD_End ();
/***** Text of the rubric *****/
@ -450,7 +451,7 @@ static void Rub_ShowRubricMainData (struct Rub_Rubrics *Rubrics,
HTM_TD_Begin ("class=\"LT\"");
else
HTM_TD_Begin ("class=\"LT %s\"",The_GetColorRows ());
Rub_DB_GetRubricTxt (Rubrics->Rubric.RubCod,Txt);
Rub_DB_GetRubricTxt (Rubric->RubCod,Txt);
Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML,
Txt,Cns_MAX_BYTES_TEXT,false); // Convert from HTML to rigorous HTML
ALn_InsertLinks (Txt,Cns_MAX_BYTES_TEXT,60); // Insert links
@ -483,7 +484,7 @@ static void Rub_PutIconsOneRubric (void *Rubrics)
/*********************** Write the author of a rubric ************************/
/*****************************************************************************/
static void Rub_WriteAuthor (struct Rub_Rubric *Rubric)
static void Rub_WriteAuthor (const struct Rub_Rubric *Rubric)
{
Usr_WriteAuthor1Line (Rubric->UsrCod,
false); // Not hidden
@ -520,7 +521,7 @@ void Rub_PutPars (void *Rubrics)
{
if (Rubrics)
{
ParCod_PutPar (ParCod_Rub,((struct Rub_Rubrics *) Rubrics)->Rubric.RubCod);
ParCod_PutPar (ParCod_Rub,((struct Rub_Rubrics *) Rubrics)->RubCod);
Pag_PutParPagNum (Pag_RUBRICS,((struct Rub_Rubrics *) Rubrics)->CurrentPage);
}
}
@ -541,7 +542,7 @@ void Rub_GetPars (struct Rub_Rubrics *Rubrics,bool CheckRubCod)
Rubrics->CurrentPage = Pag_GetParPagNum (Pag_RUBRICS);
/***** Get rubric code *****/
Rubrics->Rubric.RubCod = GetExaCo[CheckRubCod] (ParCod_Rub);
Rubrics->RubCod = GetExaCo[CheckRubCod] (ParCod_Rub);
}
/*****************************************************************************/
@ -566,15 +567,21 @@ void Rub_GetListRubrics (struct Rub_Rubrics *Rubrics)
sizeof (*Rubrics->Lst))) == NULL)
Err_NotEnoughMemoryExit ();
/***** Get the rubrics codes *****/
/***** Get the rubrics *****/
for (NumRubric = 0;
NumRubric < Rubrics->Num;
NumRubric++)
{
/* Get next rubric code (row[0]) */
row = mysql_fetch_row (mysql_res);
if ((Rubrics->Lst[NumRubric] = Str_ConvertStrCodToLongCod (row[0])) <= 0)
Err_WrongRubricExit ();
/* Get row */
row = mysql_fetch_row (mysql_res);
/* Get code of the rubric (row[0]), course (row[1] and author (row[2]) */
Rubrics->Lst[NumRubric].RubCod = Str_ConvertStrCodToLongCod (row[0]);
Rubrics->Lst[NumRubric].CrsCod = Str_ConvertStrCodToLongCod (row[1]);
Rubrics->Lst[NumRubric].UsrCod = Str_ConvertStrCodToLongCod (row[2]);
/* Get the title of the rubric (row[3]) */
Str_Copy (Rubrics->Lst[NumRubric].Title,row[3],sizeof (Rubrics->Lst[NumRubric].Title) - 1);
}
}
@ -606,9 +613,6 @@ void Rub_GetRubricDataByCod (struct Rub_Rubric *Rubric)
/* Get the title of the rubric (row[3]) */
Str_Copy (Rubric->Title,row[3],sizeof (Rubric->Title) - 1);
/* Get number of criteria */
Rubric->NumCriteria = Rub_DB_GetNumCriteriaInRubric (Rubric->RubCod);
}
else
/* Initialize to empty rubric */
@ -643,18 +647,18 @@ void Rub_AskRemRubric (void)
extern const char *Txt_Do_you_really_want_to_remove_the_rubric_X;
extern const char *Txt_Remove_rubric;
struct Rub_Rubrics Rubrics;
struct Rub_Rubric Rubric;
/***** Reset rubrics context *****/
Rub_ResetRubrics (&Rubrics);
/***** Reset rubric *****/
Rub_ResetRubric (&Rubrics.Rubric);
Rub_ResetRubric (&Rubric);
/***** Get parameters *****/
Rub_GetPars (&Rubrics,true);
Rubric.RubCod = Rubrics.RubCod;
/***** Get data of the rubric from database *****/
Rub_GetRubricDataByCod (&Rubrics.Rubric);
Rub_GetRubricDataByCod (&Rubric);
if (!Rub_CheckIfICanEditRubrics ())
Err_NoPermissionExit ();
@ -663,7 +667,7 @@ void Rub_AskRemRubric (void)
Rub_PutPars,&Rubrics,
Btn_REMOVE_BUTTON,Txt_Remove_rubric,
Ale_QUESTION,Txt_Do_you_really_want_to_remove_the_rubric_X,
Rubrics.Rubric.Title);
Rubric.Title);
/***** Show rubrics again *****/
Rub_ListAllRubrics (&Rubrics);
@ -677,27 +681,27 @@ void Rub_RemoveRubric (void)
{
extern const char *Txt_Rubric_X_removed;
struct Rub_Rubrics Rubrics;
struct Rub_Rubric Rubric;
/***** Reset rubrics context *****/
Rub_ResetRubrics (&Rubrics);
Rub_ResetRubric (&Rubric);
/***** Reset rubric *****/
Rub_ResetRubric (&Rubrics.Rubric);
/***** Get rubric code *****/
Rubrics.Rubric.RubCod = ParCod_GetAndCheckPar (ParCod_Rub);
/***** Get parameters *****/
Rub_GetPars (&Rubrics,true);
Rubric.RubCod = Rubrics.RubCod;
/***** Get data of the rubric from database *****/
Rub_GetRubricDataByCod (&Rubrics.Rubric);
Rub_GetRubricDataByCod (&Rubric);
if (!Rub_CheckIfICanEditRubrics ())
Err_NoPermissionExit ();
/***** Remove rubric from all tables *****/
Rub_RemoveRubricFromAllTables (Rubrics.Rubric.RubCod);
Rub_RemoveRubricFromAllTables (Rubric.RubCod);
/***** Write message to show the change made *****/
Ale_ShowAlert (Ale_SUCCESS,Txt_Rubric_X_removed,
Rubrics.Rubric.Title);
Rubric.Title);
/***** Show rubrics again *****/
Rub_ListAllRubrics (&Rubrics);
@ -736,24 +740,24 @@ void Rub_RemoveCrsRubrics (long CrsCod)
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);
/***** Reset rubric *****/
Rub_ResetRubric (&Rubrics.Rubric);
Rub_ResetRubric (&Rubric);
/***** Get parameters *****/
Rub_GetPars (&Rubrics,true);
Rubric.RubCod = Rubrics.RubCod;
/***** Get rubric data *****/
Rub_GetRubricDataByCod (&Rubrics.Rubric);
Rub_DB_GetRubricTxt (Rubrics.Rubric.RubCod,Txt);
Rub_GetRubricDataByCod (&Rubric);
Rub_DB_GetRubricTxt (Rubric.RubCod,Txt);
/***** Show rubric *****/
Rub_ShowOnlyOneRubric (&Rubrics,
true); // List rubric criteria
Rub_ShowOnlyOneRubric (&Rubrics,&Rubric,
true); // List rubric criteria
}
/*****************************************************************************/
@ -763,6 +767,7 @@ void Rub_ListRubric (void)
void Rub_ReqCreatOrEditRubric (void)
{
struct Rub_Rubrics Rubrics;
struct Rub_Rubric Rubric;
struct RubCri_Criterion Criterion;
Rub_ExistingNewRubric_t ExistingNewRubric;
@ -772,29 +777,30 @@ void Rub_ReqCreatOrEditRubric (void)
/***** Reset rubrics context *****/
Rub_ResetRubrics (&Rubrics);
Rub_ResetRubric (&Rubrics.Rubric);
Rub_ResetRubric (&Rubric);
RubCri_ResetCriterion (&Criterion);
/***** Get parameters *****/
Rub_GetPars (&Rubrics,false); // Don't check rubric code
ExistingNewRubric = (Rubrics.Rubric.RubCod > 0) ? Rub_EXISTING_RUBRIC :
Rub_NEW_RUBRIC;
Criterion.RubCod = Rubric.RubCod = Rubrics.RubCod;
ExistingNewRubric = (Rubric.RubCod > 0) ? Rub_EXISTING_RUBRIC :
Rub_NEW_RUBRIC;
/***** Get rubric data *****/
switch (ExistingNewRubric)
{
case Rub_EXISTING_RUBRIC:
/* Get rubric data from database */
Rub_GetRubricDataByCod (&Rubrics.Rubric);
Rub_GetRubricDataByCod (&Rubric);
break;
case Rub_NEW_RUBRIC:
/* Initialize to empty rubric */
Rub_ResetRubric (&Rubrics.Rubric);
Rub_ResetRubric (&Rubric);
break;
}
/***** Put form to create/edit a rubric and show criteria *****/
Rub_PutFormsOneRubric (&Rubrics,&Criterion,ExistingNewRubric);
Rub_PutFormsOneRubric (&Rubrics,&Rubric,&Criterion,ExistingNewRubric);
}
/*****************************************************************************/
@ -802,6 +808,7 @@ void Rub_ReqCreatOrEditRubric (void)
/*****************************************************************************/
void Rub_PutFormsOneRubric (struct Rub_Rubrics *Rubrics,
struct Rub_Rubric *Rubric,
struct RubCri_Criterion *Criterion,
Rub_ExistingNewRubric_t ExistingNewRubric)
{
@ -811,15 +818,15 @@ void Rub_PutFormsOneRubric (struct Rub_Rubrics *Rubrics,
switch (ExistingNewRubric)
{
case Rub_EXISTING_RUBRIC:
Rub_DB_GetRubricTxt (Rubrics->Rubric.RubCod,Txt);
Rub_DB_GetRubricTxt (Rubric->RubCod,Txt);
break;
case Rub_NEW_RUBRIC:
Txt[0] = '\0';
break;
}
/***** Put form to create/edit an exam *****/
Rub_PutFormEditionRubric (Rubrics,Txt,ExistingNewRubric);
/***** Put form to create/edit a rubric *****/
Rub_PutFormEditionRubric (Rubrics,Rubric,Txt,ExistingNewRubric);
/***** Show other lists *****/
switch (ExistingNewRubric)
@ -840,6 +847,7 @@ void Rub_PutFormsOneRubric (struct Rub_Rubrics *Rubrics,
/*****************************************************************************/
void Rub_PutFormEditionRubric (struct Rub_Rubrics *Rubrics,
struct Rub_Rubric *Rubric,
char Txt[Cns_MAX_BYTES_TEXT + 1],
Rub_ExistingNewRubric_t ExistingNewRubric)
{
@ -883,8 +891,8 @@ void Rub_PutFormEditionRubric (struct Rub_Rubrics *Rubrics,
/***** Begin box and table *****/
Box_BoxTableBegin (NULL,
Rubrics->Rubric.Title[0] ? Rubrics->Rubric.Title :
Title[ExistingNewRubric],
Rubric->Title[0] ? Rubric->Title :
Title[ExistingNewRubric],
NULL,NULL,
HelpLink[ExistingNewRubric],Box_NOT_CLOSABLE,2);
@ -896,7 +904,7 @@ void Rub_PutFormEditionRubric (struct Rub_Rubrics *Rubrics,
/* Data */
HTM_TD_Begin ("class=\"LT\"");
HTM_INPUT_TEXT ("Title",Rub_MAX_CHARS_TITLE,Rubrics->Rubric.Title,
HTM_INPUT_TEXT ("Title",Rub_MAX_CHARS_TITLE,Rubric->Title,
HTM_DONT_SUBMIT_ON_CHANGE,
"id=\"Title\""
" class=\"TITLE_DESCRIPTION_WIDTH INPUT_%s\""
@ -938,6 +946,7 @@ void Rub_PutFormEditionRubric (struct Rub_Rubrics *Rubrics,
void Rub_ReceiveFormRubric (void)
{
struct Rub_Rubrics Rubrics;
struct Rub_Rubric Rubric;
struct RubCri_Criterion Criterion;
Rub_ExistingNewRubric_t ExistingNewRubric;
char Txt[Cns_MAX_BYTES_TEXT + 1];
@ -948,13 +957,14 @@ void Rub_ReceiveFormRubric (void)
/***** Reset rubrics context *****/
Rub_ResetRubrics (&Rubrics);
Rub_ResetRubric (&Rubrics.Rubric);
Rub_ResetRubric (&Rubric);
RubCri_ResetCriterion (&Criterion);
/***** Get parameters *****/
Rub_GetPars (&Rubrics,false);
ExistingNewRubric = (Rubrics.Rubric.RubCod > 0) ? Rub_EXISTING_RUBRIC :
Rub_NEW_RUBRIC;
Criterion.RubCod = Rubric.RubCod = Rubrics.RubCod;
ExistingNewRubric = (Rubric.RubCod > 0) ? Rub_EXISTING_RUBRIC :
Rub_NEW_RUBRIC;
/***** Get all current rubric data from database *****/
// Some data, not received from form,
@ -962,31 +972,31 @@ void Rub_ReceiveFormRubric (void)
switch (ExistingNewRubric)
{
case Rub_EXISTING_RUBRIC:
Rub_GetRubricDataByCod (&Rubrics.Rubric);
Rub_GetRubricDataByCod (&Rubric);
break;
case Rub_NEW_RUBRIC:
break;
}
/***** Overwrite some rubric data with the data received from form *****/
Rub_ReceiveRubricFieldsFromForm (&Rubrics.Rubric,Txt);
if (Rub_CheckRubricFieldsReceivedFromForm (&Rubrics.Rubric))
Rub_ReceiveRubricFieldsFromForm (&Rubric,Txt);
if (Rub_CheckRubricFieldsReceivedFromForm (&Rubric))
{
/***** Create a new rubric or update an existing one *****/
switch (ExistingNewRubric)
{
case Rub_EXISTING_RUBRIC:
Rub_UpdateRubric (&Rubrics.Rubric,Txt); // Update rubric data in database
Rub_UpdateRubric (&Rubric,Txt); // Update rubric data in database
break;
case Rub_NEW_RUBRIC:
Rub_CreateRubric (&Rubrics.Rubric,Txt); // Add new rubric to database
Rub_CreateRubric (&Rubric,Txt); // Add new rubric to database
ExistingNewRubric = Rub_EXISTING_RUBRIC;
break;
}
}
/***** Show current rubric and its criteria *****/
Rub_PutFormsOneRubric (&Rubrics,&Criterion,ExistingNewRubric);
Rub_PutFormsOneRubric (&Rubrics,&Rubric,&Criterion,ExistingNewRubric);
}
static void Rub_ReceiveRubricFieldsFromForm (struct Rub_Rubric *Rubric,

View File

@ -46,12 +46,14 @@ void Rub_ResetRubric (struct Rub_Rubric *Rubric);
void Rub_SeeAllRubrics (void);
void Rub_ListAllRubrics (struct Rub_Rubrics *Rubrics);
bool Rub_CheckIfICanEditRubrics (void);
bool Rub_CheckIfEditable (const struct Rub_Rubric *Rubric);
bool Rub_CheckIfEditable (void);
void Rub_SeeOneRubric (void);
void Rub_ShowOnlyOneRubric (struct Rub_Rubrics *Rubrics,
bool ListRubricDims);
const struct Rub_Rubric *Rubric,
bool ListRubricCriteria);
void Rub_ShowOnlyOneRubricBegin (struct Rub_Rubrics *Rubrics,
bool ListRubricDims);
const struct Rub_Rubric *Rubric,
bool ListRubricCriteria);
void Rub_ShowOnlyOneRubricEnd (void);
void Rub_SetCurrentRubCod (long GamCod);
@ -71,9 +73,11 @@ void Rub_ListRubric (void);
void Rub_ReqCreatOrEditRubric (void);
void Rub_PutFormsOneRubric (struct Rub_Rubrics *Rubrics,
struct Rub_Rubric *Rubric,
struct RubCri_Criterion *Criterion,
Rub_ExistingNewRubric_t ExistingNewRubric);
void Rub_PutFormEditionRubric (struct Rub_Rubrics *Rubrics,
struct Rub_Rubric *Rubric,
char Txt[Cns_MAX_BYTES_TEXT + 1],
Rub_ExistingNewRubric_t ExistingNewRubric);

View File

@ -94,8 +94,9 @@ static void RubCri_GetCriterionDataFromRow (MYSQL_RES *mysql_res,
static void RubCri_PutTableHeadingForCriteria (void);
static void RubCri_GetAndCheckPars (struct Rub_Rubrics *Rubrics,
struct RubCri_Criterion *Criterion);
static void RubCri_GetAndCheckRubricAndCriterion (struct Rub_Rubrics *Rubrics,
struct Rub_Rubric *Rubric,
struct RubCri_Criterion *Criterion);
static void RubCri_ExchangeCriteria (long RubCod,
unsigned CriIndTop,unsigned CriIndBottom);
@ -232,22 +233,23 @@ static void RubCri_PutFormNewCriterion (struct Rub_Rubrics *Rubrics,
void RubCri_ReceiveFormCriterion (void)
{
struct Rub_Rubrics Rubrics;
struct Rub_Rubric Rubric;
struct RubCri_Criterion Criterion;
/***** Reset rubrics context *****/
Rub_ResetRubrics (&Rubrics);
Rub_ResetRubric (&Rubrics.Rubric);
Rub_ResetRubric (&Rubric);
RubCri_ResetCriterion (&Criterion);
/***** Get parameters *****/
Rub_GetPars (&Rubrics,true);
Criterion.RubCod = Rubrics.Rubric.RubCod;
Criterion.RubCod = Rubric.RubCod = Rubrics.RubCod;
/***** Get rubric data from database *****/
Rub_GetRubricDataByCod (&Rubrics.Rubric);
Rub_GetRubricDataByCod (&Rubric);
/***** Check if rubric is editable *****/
if (!Rub_CheckIfEditable (&Rubrics.Rubric))
if (!Rub_CheckIfEditable ())
Err_NoPermissionExit ();
/***** If I can edit rubrics ==> receive criterion from form *****/
@ -257,7 +259,7 @@ void RubCri_ReceiveFormCriterion (void)
RubCri_CreateCriterion (&Criterion); // Add new criterion to database
/***** Show current rubric and its criteria *****/
Rub_PutFormsOneRubric (&Rubrics,&Criterion,
Rub_PutFormsOneRubric (&Rubrics,&Rubric,&Criterion,
Rub_EXISTING_RUBRIC); // It's not a new rubric
}
@ -328,20 +330,21 @@ static bool RubCri_CheckCriterionTitleReceivedFromForm (const struct RubCri_Crit
void RubCri_ChangeTitle (void)
{
struct Rub_Rubrics Rubrics;
struct Rub_Rubric Rubric;
struct RubCri_Criterion Criterion;
char NewTitle[RubCri_MAX_BYTES_TITLE + 1];
/***** Reset rubrics context *****/
Rub_ResetRubrics (&Rubrics);
Rub_ResetRubric (&Rubrics.Rubric);
Rub_ResetRubric (&Rubric);
RubCri_ResetCriterion (&Criterion);
/***** Get and check parameters *****/
RubCri_GetAndCheckPars (&Rubrics,&Criterion);
RubCri_GetAndCheckRubricAndCriterion (&Rubrics,&Rubric,&Criterion);
/***** Check if rubric is editable *****/
if (!Rub_CheckIfEditable (&Rubrics.Rubric))
Err_NoPermissionExit ();
if (!Rub_CheckIfEditable ())
Err_NoPermissionExit ();
/***** Receive new title from form *****/
Par_GetParText ("Title",NewTitle,RubCri_MAX_BYTES_TITLE);
@ -355,7 +358,7 @@ void RubCri_ChangeTitle (void)
}
/***** Show current rubric and its criteria *****/
Rub_PutFormsOneRubric (&Rubrics,&Criterion,
Rub_PutFormsOneRubric (&Rubrics,&Rubric,&Criterion,
Rub_EXISTING_RUBRIC); // It's not a new rubric
}
@ -376,24 +379,25 @@ void RubCri_ChangeMaxValue (void)
static void RubCri_ChangeValueCriterion (RubCri_ValueRange_t ValueRange)
{
struct Rub_Rubrics Rubrics;
struct Rub_Rubric Rubric;
struct RubCri_Criterion Criterion;
char ValueStr[64];
/***** Reset rubrics context *****/
Rub_ResetRubrics (&Rubrics);
Rub_ResetRubric (&Rubrics.Rubric);
Rub_ResetRubric (&Rubric);
RubCri_ResetCriterion (&Criterion);
/***** Get parameters *****/
Rub_GetPars (&Rubrics,true);
Criterion.RubCod = Rubrics.Rubric.RubCod;
Criterion.RubCod = Rubric.RubCod = Rubrics.RubCod;
Rubrics.CriCod = Criterion.CriCod = ParCod_GetAndCheckPar (ParCod_Cri);
/***** Get and check parameters *****/
RubCri_GetAndCheckPars (&Rubrics,&Criterion);
RubCri_GetAndCheckRubricAndCriterion (&Rubrics,&Rubric,&Criterion);
/***** Check if rubric is editable *****/
if (!Rub_CheckIfEditable (&Rubrics.Rubric))
if (!Rub_CheckIfEditable ())
Err_NoPermissionExit ();
/***** Receive new value from form *****/
@ -405,7 +409,7 @@ static void RubCri_ChangeValueCriterion (RubCri_ValueRange_t ValueRange)
Rub_DB_UpdateCriterionValue (&Criterion,ValueRange);
/***** Show current rubric and its criteria *****/
Rub_PutFormsOneRubric (&Rubrics,&Criterion,
Rub_PutFormsOneRubric (&Rubrics,&Rubric,&Criterion,
Rub_EXISTING_RUBRIC); // It's not a new rubric
}
@ -416,24 +420,25 @@ static void RubCri_ChangeValueCriterion (RubCri_ValueRange_t ValueRange)
void RubCri_ChangeWeight (void)
{
struct Rub_Rubrics Rubrics;
struct Rub_Rubric Rubric;
struct RubCri_Criterion Criterion;
char WeightStr[64];
/***** Reset rubrics context *****/
Rub_ResetRubrics (&Rubrics);
Rub_ResetRubric (&Rubrics.Rubric);
Rub_ResetRubric (&Rubric);
RubCri_ResetCriterion (&Criterion);
/***** Get parameters *****/
Rub_GetPars (&Rubrics,true);
Criterion.RubCod = Rubrics.Rubric.RubCod;
Criterion.RubCod = Rubric.RubCod = Rubrics.RubCod;
Rubrics.CriCod = Criterion.CriCod = ParCod_GetAndCheckPar (ParCod_Cri);
/***** Get and check parameters *****/
RubCri_GetAndCheckPars (&Rubrics,&Criterion);
RubCri_GetAndCheckRubricAndCriterion (&Rubrics,&Rubric,&Criterion);
/***** Check if rubric is editable *****/
if (!Rub_CheckIfEditable (&Rubrics.Rubric))
if (!Rub_CheckIfEditable ())
Err_NoPermissionExit ();
/***** Receive new weight from form *****/
@ -445,7 +450,7 @@ void RubCri_ChangeWeight (void)
Rub_DB_UpdateCriterionWeight (&Criterion);
/***** Show current rubric and its criteria *****/
Rub_PutFormsOneRubric (&Rubrics,&Criterion,
Rub_PutFormsOneRubric (&Rubrics,&Rubric,&Criterion,
Rub_EXISTING_RUBRIC); // It's not a new rubric
}
@ -482,13 +487,13 @@ void RubCri_ListCriteria (struct Rub_Rubrics *Rubrics,
MYSQL_RES *mysql_res;
unsigned MaxCriInd;
unsigned NumCriteria;
bool ICanEditCriteria = Rub_CheckIfEditable (&Rubrics->Rubric);
bool ICanEditCriteria = Rub_CheckIfEditable ();
/***** Get maximum criterion index *****/
MaxCriInd = Rub_DB_GetMaxCriterionIndexInRubric (Rubrics->Rubric.RubCod);
MaxCriInd = Rub_DB_GetMaxCriterionIndexInRubric (Rubrics->RubCod);
/***** Get data of rubric criteria from database *****/
NumCriteria = Rub_DB_GetCriteria (&mysql_res,Rubrics->Rubric.RubCod);
NumCriteria = Rub_DB_GetCriteria (&mysql_res,Rubrics->RubCod);
/***** Begin box *****/
Box_BoxBegin (NULL,Txt_Criteria,
@ -826,18 +831,19 @@ void RubCri_ReqRemCriterion (void)
extern const char *Txt_Do_you_really_want_to_remove_the_criterion_X;
extern const char *Txt_Remove_criterion;
struct Rub_Rubrics Rubrics;
struct Rub_Rubric Rubric;
struct RubCri_Criterion Criterion;
/***** Reset rubrics context *****/
Rub_ResetRubrics (&Rubrics);
Rub_ResetRubric (&Rubrics.Rubric);
Rub_ResetRubric (&Rubric);
RubCri_ResetCriterion (&Criterion);
/***** Get and check parameters *****/
RubCri_GetAndCheckPars (&Rubrics,&Criterion);
RubCri_GetAndCheckRubricAndCriterion (&Rubrics,&Rubric,&Criterion);
/***** Check if rubric is editable *****/
if (!Rub_CheckIfEditable (&Rubrics.Rubric))
if (!Rub_CheckIfEditable ())
Err_NoPermissionExit ();
/***** Show question and button to remove question *****/
@ -848,7 +854,7 @@ void RubCri_ReqRemCriterion (void)
Criterion.Title);
/***** Show current rubric and its criteria *****/
Rub_PutFormsOneRubric (&Rubrics,&Criterion,
Rub_PutFormsOneRubric (&Rubrics,&Rubric,&Criterion,
Rub_EXISTING_RUBRIC); // It's not a new rubric
}
@ -860,18 +866,19 @@ void RubCri_RemoveCriterion (void)
{
extern const char *Txt_Criterion_removed;
struct Rub_Rubrics Rubrics;
struct Rub_Rubric Rubric;
struct RubCri_Criterion Criterion;
/***** Reset rubrics context *****/
Rub_ResetRubrics (&Rubrics);
Rub_ResetRubric (&Rubrics.Rubric);
Rub_ResetRubric (&Rubric);
RubCri_ResetCriterion (&Criterion);
/***** Get and check parameters *****/
RubCri_GetAndCheckPars (&Rubrics,&Criterion);
RubCri_GetAndCheckRubricAndCriterion (&Rubrics,&Rubric,&Criterion);
/***** Check if rubric is editable *****/
if (!Rub_CheckIfEditable (&Rubrics.Rubric))
if (!Rub_CheckIfEditable ())
Err_NoPermissionExit ();
/***** Remove the criterion from all tables *****/
@ -888,7 +895,7 @@ void RubCri_RemoveCriterion (void)
Ale_ShowAlert (Ale_SUCCESS,Txt_Criterion_removed);
/***** Show current rubric and its criteria *****/
Rub_PutFormsOneRubric (&Rubrics,&Criterion,
Rub_PutFormsOneRubric (&Rubrics,&Rubric,&Criterion,
Rub_EXISTING_RUBRIC); // It's not a new rubric
}
@ -900,41 +907,42 @@ void RubCri_MoveUpCriterion (void)
{
extern const char *Txt_Movement_not_allowed;
struct Rub_Rubrics Rubrics;
struct Rub_Rubric Rubric;
struct RubCri_Criterion Criterion;
unsigned CriIndTop;
unsigned CriIndBottom;
/***** Reset rubrics context *****/
Rub_ResetRubrics (&Rubrics);
Rub_ResetRubric (&Rubrics.Rubric);
Rub_ResetRubric (&Rubric);
RubCri_ResetCriterion (&Criterion);
/***** Get and check parameters *****/
RubCri_GetAndCheckPars (&Rubrics,&Criterion);
RubCri_GetAndCheckRubricAndCriterion (&Rubrics,&Rubric,&Criterion);
/***** Check if rubric is editable *****/
if (!Rub_CheckIfEditable (&Rubrics.Rubric))
if (!Rub_CheckIfEditable ())
Err_NoPermissionExit ();
/***** Get criterion index *****/
CriIndBottom = Rub_DB_GetCriIndFromCriCod (Rubrics.Rubric.RubCod,Criterion.CriCod);
CriIndBottom = Rub_DB_GetCriIndFromCriCod (Rubric.RubCod,Criterion.CriCod);
/***** Move up criterion *****/
if (CriIndBottom > 1)
{
/* Indexes of criteria to be exchanged */
CriIndTop = Rub_DB_GetPrevCriterionIndexInRubric (Rubrics.Rubric.RubCod,CriIndBottom);
CriIndTop = Rub_DB_GetPrevCriterionIndexInRubric (Rubric.RubCod,CriIndBottom);
if (CriIndTop == 0)
Err_ShowErrorAndExit ("Wrong criterion index.");
/* Exchange criteria */
RubCri_ExchangeCriteria (Rubrics.Rubric.RubCod,CriIndTop,CriIndBottom);
RubCri_ExchangeCriteria (Rubric.RubCod,CriIndTop,CriIndBottom);
}
else
Ale_ShowAlert (Ale_WARNING,Txt_Movement_not_allowed);
/***** Show current rubric and its criteria *****/
Rub_PutFormsOneRubric (&Rubrics,&Criterion,
Rub_PutFormsOneRubric (&Rubrics,&Rubric,&Criterion,
Rub_EXISTING_RUBRIC); // It's not a new rubric
}
@ -946,6 +954,7 @@ void RubCri_MoveDownCriterion (void)
{
extern const char *Txt_Movement_not_allowed;
struct Rub_Rubrics Rubrics;
struct Rub_Rubric Rubric;
struct RubCri_Criterion Criterion;
unsigned CriIndTop;
unsigned CriIndBottom;
@ -953,60 +962,62 @@ void RubCri_MoveDownCriterion (void)
/***** Reset rubrics context *****/
Rub_ResetRubrics (&Rubrics);
Rub_ResetRubric (&Rubrics.Rubric);
Rub_ResetRubric (&Rubric);
RubCri_ResetCriterion (&Criterion);
/***** Get and check parameters *****/
RubCri_GetAndCheckPars (&Rubrics,&Criterion);
RubCri_GetAndCheckRubricAndCriterion (&Rubrics,&Rubric,&Criterion);
/***** Check if rubric is editable *****/
if (!Rub_CheckIfEditable (&Rubrics.Rubric))
if (!Rub_CheckIfEditable ())
Err_NoPermissionExit ();
/***** Get criterion index *****/
CriIndTop = Rub_DB_GetCriIndFromCriCod (Rubrics.Rubric.RubCod,Criterion.CriCod);
CriIndTop = Rub_DB_GetCriIndFromCriCod (Rubric.RubCod,Criterion.CriCod);
/***** Get maximum criterion index *****/
MaxCriInd = Rub_DB_GetMaxCriterionIndexInRubric (Rubrics.Rubric.RubCod);
MaxCriInd = Rub_DB_GetMaxCriterionIndexInRubric (Rubric.RubCod);
/***** Move down criterion *****/
if (CriIndTop < MaxCriInd)
{
/* Indexes of criteria to be exchanged */
CriIndBottom = Rub_DB_GetNextCriterionIndexInRubric (Rubrics.Rubric.RubCod,CriIndTop);
CriIndBottom = Rub_DB_GetNextCriterionIndexInRubric (Rubric.RubCod,CriIndTop);
if (CriIndBottom == 0) // 0 means error reading from database
Err_ShowErrorAndExit ("Wrong criterion index.");
/* Exchange criteria */
RubCri_ExchangeCriteria (Rubrics.Rubric.RubCod,CriIndTop,CriIndBottom);
RubCri_ExchangeCriteria (Rubric.RubCod,CriIndTop,CriIndBottom);
}
else
Ale_ShowAlert (Ale_WARNING,Txt_Movement_not_allowed);
/***** Show current rubric and its criteria *****/
Rub_PutFormsOneRubric (&Rubrics,&Criterion,
Rub_PutFormsOneRubric (&Rubrics,&Rubric,&Criterion,
Rub_EXISTING_RUBRIC); // It's not a new trubric
}
/*****************************************************************************/
/************************** Get and check parameters *************************/
/********* Get and check parameters, rubric data and criterion data **********/
/*****************************************************************************/
static void RubCri_GetAndCheckPars (struct Rub_Rubrics *Rubrics,
struct RubCri_Criterion *Criterion)
static void RubCri_GetAndCheckRubricAndCriterion (struct Rub_Rubrics *Rubrics,
struct Rub_Rubric *Rubric,
struct RubCri_Criterion *Criterion)
{
/***** Get parameters *****/
Rub_GetPars (Rubrics,true);
Rubric->RubCod = Rubrics->RubCod;
Criterion->CriCod = ParCod_GetAndCheckPar (ParCod_Cri);
/***** Get rubric data from database *****/
Rub_GetRubricDataByCod (&Rubrics->Rubric);
if (Rubrics->Rubric.CrsCod != Gbl.Hierarchy.Crs.CrsCod)
Rub_GetRubricDataByCod (Rubric);
if (Rubric->CrsCod != Gbl.Hierarchy.Crs.CrsCod)
Err_WrongRubricExit ();
/***** Get criterion data from database *****/
RubCri_GetCriterionDataByCod (Criterion);
if (Criterion->RubCod != Rubrics->Rubric.RubCod)
if (Criterion->RubCod != Rubric->RubCod)
Err_WrongCriterionExit ();
Rubrics->CriCod = Criterion->CriCod;
}
@ -1063,18 +1074,19 @@ static void RubCri_ExchangeCriteria (long RubCod,
void RubCri_ChangeLink (void)
{
struct Rub_Rubrics Rubrics;
struct Rub_Rubric Rubric;
struct RubCri_Criterion Criterion;
/***** Reset rubrics context *****/
Rub_ResetRubrics (&Rubrics);
Rub_ResetRubric (&Rubrics.Rubric);
Rub_ResetRubric (&Rubric);
RubCri_ResetCriterion (&Criterion);
/***** Get and check parameters *****/
RubCri_GetAndCheckPars (&Rubrics,&Criterion);
RubCri_GetAndCheckRubricAndCriterion (&Rubrics,&Rubric,&Criterion);
/***** Check if rubric is editable *****/
if (!Rub_CheckIfEditable (&Rubrics.Rubric))
if (!Rub_CheckIfEditable ())
Err_NoPermissionExit ();
/***** Get link type and code *****/
@ -1088,6 +1100,6 @@ void RubCri_ChangeLink (void)
}
/***** Show current rubric and its criteria *****/
Rub_PutFormsOneRubric (&Rubrics,&Criterion,
Rub_PutFormsOneRubric (&Rubrics,&Rubric,&Criterion,
Rub_EXISTING_RUBRIC); // It's not a new rubric
}

View File

@ -98,7 +98,10 @@ unsigned Rub_DB_GetListRubrics (MYSQL_RES **mysql_res)
{
return (unsigned)
DB_QuerySELECT (mysql_res,"can not get rubrics",
"SELECT RubCod" // row[0]
"SELECT RubCod," // row[0]
"CrsCod," // row[1]
"UsrCod," // row[2]
"Title" // row[3]
" FROM rub_rubrics"
" WHERE CrsCod=%ld"
" ORDER BY Title",

View File

@ -51,6 +51,7 @@ void RubRsc_GetLinkToRubric (void)
{
extern const char *Txt_Link_to_resource_X_copied_into_clipboard;
struct Rub_Rubrics Rubrics;
struct Rub_Rubric Rubric;
char Title[Rub_MAX_BYTES_TITLE + 1];
/***** Reset rubrics context *****/
@ -58,12 +59,13 @@ void RubRsc_GetLinkToRubric (void)
/***** Get parameters *****/
Rub_GetPars (&Rubrics,false);
Rubric.RubCod = Rubrics.RubCod;
/***** Get rubric title *****/
RubRsc_GetTitleFromRubCod (Rubrics.Rubric.RubCod,Title,sizeof (Title) - 1);
RubRsc_GetTitleFromRubCod (Rubric.RubCod,Title,sizeof (Title) - 1);
/***** Copy link to rubric into resource clipboard *****/
Rsc_DB_CopyToClipboard (Rsc_RUBRIC,Rubrics.Rubric.RubCod);
Rsc_DB_CopyToClipboard (Rsc_RUBRIC,Rubric.RubCod);
/***** Write sucess message *****/
Ale_ShowAlert (Ale_SUCCESS,Txt_Link_to_resource_X_copied_into_clipboard,

View File

@ -50,7 +50,6 @@ struct Rub_Rubric
long CrsCod; // Course code
long UsrCod; // Author code
char Title[Rub_MAX_BYTES_TITLE + 1];
unsigned NumCriteria; // Number of criteria in the rubric
};
struct Rub_Rubrics
@ -58,12 +57,11 @@ struct Rub_Rubrics
bool LstIsRead; // Is the list already read from database...
// ...or it needs to be read?
unsigned Num; // Total number of rubrics
long *Lst; // List of rubric codes
struct Rub_Rubric *Lst; // List of rubrics
unsigned CurrentPage;
struct Rub_Rubric Rubric; // Selected/current rubric
long RubCod; // Selected/current rubric code
long CriCod; // Selected/current criterion code
unsigned CriInd; // Current citerion index
long QstCod; // Current question code
};
typedef enum