From b4caf9e0f887ff936cb11192e94daad1a9e800f1 Mon Sep 17 00:00:00 2001 From: acanas Date: Wed, 22 Mar 2023 01:42:27 +0100 Subject: [PATCH] Version 22.78: Mar 22, 2023 New fields Source and Cod in rubric criteria. --- swad_center.c | 54 ++++++------ swad_changelog.h | 9 +- swad_course.c | 26 +++--- swad_database.c | 31 ++++--- swad_exam_session.c | 3 +- swad_institution.c | 52 +++++------ swad_institution_database.c | 6 +- swad_match.c | 2 +- swad_project.c | 17 ++-- swad_rubric_criteria.c | 167 +++++++++++++++++++++--------------- swad_rubric_criteria.h | 3 + swad_rubric_database.c | 30 ++++--- swad_rubric_type.h | 26 ++++-- swad_scope.c | 2 +- swad_survey.c | 26 +++--- swad_test_config.c | 14 +-- swad_timeline_comment.c | 19 ++-- swad_timeline_note.c | 19 ++-- 18 files changed, 280 insertions(+), 226 deletions(-) diff --git a/swad_center.c b/swad_center.c index f36a5f8b..ea67485c 100644 --- a/swad_center.c +++ b/swad_center.c @@ -84,7 +84,9 @@ static void Ctr_GetParCtrOrder (void); static void Ctr_EditCentersInternal (void); static void Ctr_PutIconsEditingCenters (__attribute__((unused)) void *Args); -static void Ctr_GetDataOfCenterFromRow (struct Ctr_Center *Ctr,MYSQL_ROW row); +static void Ctr_GetDataOfCenterFromRow (MYSQL_RES *mysql_res, + struct Ctr_Center *Ctr, + bool GetNumUsrsWhoClaimToBelongToCtr); static void Ctr_ListCentersForEdition (const struct Plc_Places *Places); static bool Ctr_CheckIfICanEditACenter (struct Ctr_Center *Ctr); @@ -516,9 +518,7 @@ void Ctr_PutIconToViewCenters (void) void Ctr_GetBasicListOfCenters (long InsCod) { MYSQL_RES *mysql_res; - MYSQL_ROW row; unsigned NumCtr; - struct Ctr_Center *Ctr; /***** Get centers from database *****/ Gbl.Hierarchy.Ctrs.Num = Ctr_DB_GetListOfCtrsFull (&mysql_res,InsCod); @@ -534,16 +534,9 @@ void Ctr_GetBasicListOfCenters (long InsCod) for (NumCtr = 0; NumCtr < Gbl.Hierarchy.Ctrs.Num; NumCtr++) - { - Ctr = &(Gbl.Hierarchy.Ctrs.Lst[NumCtr]); - /* Get center data */ - row = mysql_fetch_row (mysql_res); - Ctr_GetDataOfCenterFromRow (Ctr,row); - - /* Reset number of users who claim to belong to this center */ - Ctr->NumUsrsWhoClaimToBelongToCtr.Valid = false; - } + Ctr_GetDataOfCenterFromRow (mysql_res,&(Gbl.Hierarchy.Ctrs.Lst[NumCtr]), + false); // Don't get number of users who claim to belong to this center } /***** Free structure that stores the query result *****/ @@ -558,9 +551,7 @@ void Ctr_GetBasicListOfCenters (long InsCod) void Ctr_GetFullListOfCenters (long InsCod,Ctr_Order_t SelectedOrder) { MYSQL_RES *mysql_res; - MYSQL_ROW row; unsigned NumCtr; - struct Ctr_Center *Ctr; /***** Get centers from database *****/ Gbl.Hierarchy.Ctrs.Num = Ctr_DB_GetListOfCtrsFullWithNumUsrs (&mysql_res,InsCod,SelectedOrder); @@ -576,18 +567,9 @@ void Ctr_GetFullListOfCenters (long InsCod,Ctr_Order_t SelectedOrder) for (NumCtr = 0; NumCtr < Gbl.Hierarchy.Ctrs.Num; NumCtr++) - { - Ctr = &(Gbl.Hierarchy.Ctrs.Lst[NumCtr]); - /* Get center data */ - row = mysql_fetch_row (mysql_res); - Ctr_GetDataOfCenterFromRow (Ctr,row); - - /* Get number of users who claim to belong to this center (row[11]) */ - Ctr->NumUsrsWhoClaimToBelongToCtr.Valid = false; - if (sscanf (row[11],"%u",&(Ctr->NumUsrsWhoClaimToBelongToCtr.NumUsrs)) == 1) - Ctr->NumUsrsWhoClaimToBelongToCtr.Valid = true; - } + Ctr_GetDataOfCenterFromRow (mysql_res,&(Gbl.Hierarchy.Ctrs.Lst[NumCtr]), + true); // Get number of users who claim to belong to this center } /***** Free structure that stores the query result *****/ @@ -601,7 +583,6 @@ void Ctr_GetFullListOfCenters (long InsCod,Ctr_Order_t SelectedOrder) bool Ctr_GetDataOfCenterByCod (struct Ctr_Center *Ctr) { MYSQL_RES *mysql_res; - MYSQL_ROW row; bool CtrFound = false; /***** Clear data *****/ @@ -620,9 +601,9 @@ bool Ctr_GetDataOfCenterByCod (struct Ctr_Center *Ctr) /***** Get data of a center from database *****/ if (Ctr_DB_GetDataOfCenterByCod (&mysql_res,Ctr->CtrCod)) // Center found... { - /* Get row */ - row = mysql_fetch_row (mysql_res); - Ctr_GetDataOfCenterFromRow (Ctr,row); + /* Get center data */ + Ctr_GetDataOfCenterFromRow (mysql_res,Ctr, + false); // Don't get number of users who claim to belong to this center /* Set return value */ CtrFound = true; @@ -639,8 +620,15 @@ bool Ctr_GetDataOfCenterByCod (struct Ctr_Center *Ctr) /********** Get data of a center from a row resulting of a query *************/ /*****************************************************************************/ -static void Ctr_GetDataOfCenterFromRow (struct Ctr_Center *Ctr,MYSQL_ROW row) +static void Ctr_GetDataOfCenterFromRow (MYSQL_RES *mysql_res, + struct Ctr_Center *Ctr, + bool GetNumUsrsWhoClaimToBelongToCtr) { + MYSQL_ROW row; + + /***** Get row *****/ + row = mysql_fetch_row (mysql_res); + /***** Get center code (row[0]) *****/ if ((Ctr->CtrCod = Str_ConvertStrCodToLongCod (row[0])) <= 0) Err_WrongCenterExit (); @@ -668,6 +656,12 @@ static void Ctr_GetDataOfCenterFromRow (struct Ctr_Center *Ctr,MYSQL_ROW row) Str_Copy (Ctr->ShrtName,row[ 8],sizeof (Ctr->ShrtName) - 1); Str_Copy (Ctr->FullName,row[ 9],sizeof (Ctr->FullName) - 1); Str_Copy (Ctr->WWW ,row[10],sizeof (Ctr->WWW ) - 1); + + /* Get number of users who claim to belong to this center (row[11]) */ + Ctr->NumUsrsWhoClaimToBelongToCtr.Valid = false; + if (GetNumUsrsWhoClaimToBelongToCtr) + if (sscanf (row[11],"%u",&(Ctr->NumUsrsWhoClaimToBelongToCtr.NumUsrs)) == 1) + Ctr->NumUsrsWhoClaimToBelongToCtr.Valid = true; } /*****************************************************************************/ diff --git a/swad_changelog.h b/swad_changelog.h index 3903f528..5a21f80f 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -629,11 +629,16 @@ 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.77 (2023-03-18)" +#define Log_PLATFORM_VERSION "SWAD 22.78 (2023-03-22)" #define CSS_FILE "swad22.57.1.css" #define JS_FILE "swad22.49.js" /* - * + Version 22.78: Mar 22, 2023 New fields Source and Cod in rubric criteria. (337770 lines) + 3 changes necessary in database: +ALTER TABLE rub_criteria ADD COLUMN Source ENUM('teacher','rubric','exam','game') NOT NULL DEFAULT 'teacher' AFTER CriInd; +ALTER TABLE rub_criteria ADD COLUMN Cod INT NOT NULL DEFAULT -1 AFTER Source; +ALTER TABLE rub_criteria ADD INDEX (Source,Cod); + Version 22.77: Mar 18, 2023 New field Weight in rubric criteria. (337735 lines) 1 change necessary in database: ALTER TABLE rub_criteria ADD COLUMN Weight DOUBLE PRECISION NOT NULL DEFAULT 1 AFTER MaxVal; diff --git a/swad_course.c b/swad_course.c index d4b8cba4..ebce8963 100644 --- a/swad_course.c +++ b/swad_course.c @@ -110,7 +110,8 @@ static void Crs_PutHeadCoursesForEdition (void); static void Crs_ReceiveFormRequestOrCreateCrs (Hie_Status_t Status); static void Crs_GetParsNewCourse (struct Crs_Course *Crs); -static void Crs_GetDataOfCourseFromRow (struct Crs_Course *Crs,MYSQL_ROW row); +static void Crs_GetDataOfCourseFromRow (MYSQL_RES *mysql_res, + struct Crs_Course *Crs); static void Crs_EmptyCourseCompletely (long CrsCod); @@ -707,10 +708,8 @@ void Crs_ShowCrssOfCurrentDeg (void) static void Crs_GetListCrssInCurrentDeg (void) { MYSQL_RES *mysql_res; - MYSQL_ROW row; unsigned NumCrss; unsigned NumCrs; - struct Crs_Course *Crs; /***** Get courses of a degree from database *****/ if ((NumCrss = Crs_DB_GetCrssInCurrentDegFull (&mysql_res))) // Courses found... @@ -724,13 +723,8 @@ static void Crs_GetListCrssInCurrentDeg (void) for (NumCrs = 0; NumCrs < NumCrss; NumCrs++) - { - Crs = &Gbl.Hierarchy.Crss.Lst[NumCrs]; - - /* Get next course */ - row = mysql_fetch_row (mysql_res); - Crs_GetDataOfCourseFromRow (Crs,row); - } + /* Get data of next course */ + Crs_GetDataOfCourseFromRow (mysql_res,&Gbl.Hierarchy.Crss.Lst[NumCrs]); } Gbl.Hierarchy.Crss.Num = NumCrss; @@ -1619,7 +1613,6 @@ void Crs_RemoveCourse (void) bool Crs_GetDataOfCourseByCod (struct Crs_Course *Crs) { MYSQL_RES *mysql_res; - MYSQL_ROW row; bool CrsFound = false; /***** Clear data *****/ @@ -1637,8 +1630,7 @@ bool Crs_GetDataOfCourseByCod (struct Crs_Course *Crs) if (Crs_DB_GetDataOfCourseByCod (&mysql_res,Crs->CrsCod)) // Course found... { /***** Get data of the course *****/ - row = mysql_fetch_row (mysql_res); - Crs_GetDataOfCourseFromRow (Crs,row); + Crs_GetDataOfCourseFromRow (mysql_res,Crs); /* Set return value */ CrsFound = true; @@ -1655,8 +1647,14 @@ bool Crs_GetDataOfCourseByCod (struct Crs_Course *Crs) /********** Get data of a course from a row resulting of a query *************/ /*****************************************************************************/ -static void Crs_GetDataOfCourseFromRow (struct Crs_Course *Crs,MYSQL_ROW row) +static void Crs_GetDataOfCourseFromRow (MYSQL_RES *mysql_res, + struct Crs_Course *Crs) { + MYSQL_ROW row; + + /***** Get row *****/ + row = mysql_fetch_row (mysql_res); + /***** Get course code (row[0]) *****/ if ((Crs->CrsCod = Str_ConvertStrCodToLongCod (row[0])) <= 0) Err_WrongCourseExit (); diff --git a/swad_database.c b/swad_database.c index 7b542593..45ca5b3f 100644 --- a/swad_database.c +++ b/swad_database.c @@ -2799,29 +2799,34 @@ mysql> DESCRIBE roo_check_in; /***** Table rub_criteria *****/ /* mysql> DESCRIBE rub_criteria; -+--------+---------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+--------+---------------+------+-----+---------+----------------+ -| CriCod | int | NO | PRI | NULL | auto_increment | -| RubCod | int | NO | MUL | NULL | | -| CriInd | int | NO | | NULL | | -| MinVal | double | NO | | 0 | | -| MaxVal | double | NO | | 1 | | -| Weight | double | NO | | 1 | | -| Title | varchar(2047) | NO | | NULL | | -+--------+---------------+------+-----+---------+----------------+ -7 rows in set (0,00 sec) ++--------+----------------------------------------+------+-----+---------+----------------+ +| Field | Type | Null | Key | Default | Extra | ++--------+----------------------------------------+------+-----+---------+----------------+ +| CriCod | int | NO | PRI | NULL | auto_increment | +| RubCod | int | NO | MUL | NULL | | +| CriInd | int | NO | | NULL | | +| Source | enum('teacher','rubric','exam','game') | NO | MUL | teacher | | +| Cod | int | NO | | -1 | | +| MinVal | double | NO | | 0 | | +| MaxVal | double | NO | | 1 | | +| Weight | double | NO | | 1 | | +| Title | varchar(2047) | NO | | NULL | | ++--------+----------------------------------------+------+-----+---------+----------------+ +9 rows in set (0,00 sec) */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS rub_criteria (" "CriCod INT NOT NULL AUTO_INCREMENT," "RubCod INT NOT NULL," "CriInd INT NOT NULL," + "Source ENUM('teacher','rubric','exam','game') NOT NULL DEFAULT 'teacher'," + "Cod INT NOT NULL DEFAULT -1," "MinVal DOUBLE PRECISION NOT NULL DEFAULT 0," "MaxVal DOUBLE PRECISION NOT NULL DEFAULT 1," "Weight DOUBLE PRECISION NOT NULL DEFAULT 1," "Title VARCHAR(2047) NOT NULL," "UNIQUE INDEX(CriCod)," - "UNIQUE INDEX(RubCod,CriInd))"); + "UNIQUE INDEX(RubCod,CriInd)," + "INDEX(Source,Cod))"); /***** Table rub_rubrics *****/ /* diff --git a/swad_exam_session.c b/swad_exam_session.c index 3383ed32..a5d11912 100644 --- a/swad_exam_session.c +++ b/swad_exam_session.c @@ -733,7 +733,7 @@ static void ExaSes_GetSessionDataFromRow (MYSQL_RES *mysql_res, MYSQL_ROW row; Dat_StartEndTime_t StartEndTime; - /***** Get exam session data *****/ + /***** Get row *****/ row = mysql_fetch_row (mysql_res); /* row[0] SesCod @@ -746,6 +746,7 @@ static void ExaSes_GetSessionDataFromRow (MYSQL_RES *mysql_res, row[7] Title row[8] ShowUsrResults */ + /***** Get session data *****/ /* Code of the session (row[0]) */ if ((Session->SesCod = Str_ConvertStrCodToLongCod (row[0])) <= 0) diff --git a/swad_institution.c b/swad_institution.c index ac213d9d..63137250 100644 --- a/swad_institution.c +++ b/swad_institution.c @@ -86,7 +86,9 @@ static void Ins_EditInstitutionsInternal (void); static void Ins_PutIconsEditingInstitutions (__attribute__((unused)) void *Args); static void Ins_PutIconToViewInstitutions (void); -static void Ins_GetDataOfInstitFromRow (struct Ins_Instit *Ins,MYSQL_ROW row); +static void Ins_GetDataOfInstitFromRow (MYSQL_RES *mysql_res, + struct Ins_Instit *Ins, + bool GetNumUsrsWhoClaimToBelongToIns); static void Ins_ListInstitutionsForEdition (void); static bool Ins_CheckIfICanEdit (struct Ins_Instit *Ins); @@ -605,9 +607,7 @@ static void Ins_PutIconToViewInstitutions (void) void Ins_GetBasicListOfInstitutions (long CtyCod) { MYSQL_RES *mysql_res; - MYSQL_ROW row; unsigned NumIns; - struct Ins_Instit *Ins; /***** Get institutions from database *****/ if ((Gbl.Hierarchy.Inss.Num = Ins_DB_GetInssInCtyOrderedByFullName (&mysql_res,CtyCod))) // Institutions found... @@ -621,16 +621,9 @@ void Ins_GetBasicListOfInstitutions (long CtyCod) for (NumIns = 0; NumIns < Gbl.Hierarchy.Inss.Num; NumIns++) - { - Ins = &(Gbl.Hierarchy.Inss.Lst[NumIns]); - /* Get institution data */ - row = mysql_fetch_row (mysql_res); - Ins_GetDataOfInstitFromRow (Ins,row); - - /* Reset number of users who claim to belong to this institution */ - Ins->NumUsrsWhoClaimToBelongToIns.Valid = false; - } + Ins_GetDataOfInstitFromRow (mysql_res,&(Gbl.Hierarchy.Inss.Lst[NumIns]), + false); // Don't get number of users who claim to belong to this institution } else Gbl.Hierarchy.Inss.Lst = NULL; @@ -647,9 +640,7 @@ void Ins_GetBasicListOfInstitutions (long CtyCod) void Ins_GetFullListOfInstitutions (long CtyCod) { MYSQL_RES *mysql_res; - MYSQL_ROW row; unsigned NumIns; - struct Ins_Instit *Ins; /***** Get institutions from database *****/ if ((Gbl.Hierarchy.Inss.Num = Ins_DB_GetFullListOfInssInCty (&mysql_res,CtyCod))) // Institutions found... @@ -663,18 +654,9 @@ void Ins_GetFullListOfInstitutions (long CtyCod) for (NumIns = 0; NumIns < Gbl.Hierarchy.Inss.Num; NumIns++) - { - Ins = &(Gbl.Hierarchy.Inss.Lst[NumIns]); - /* Get institution data */ - row = mysql_fetch_row (mysql_res); - Ins_GetDataOfInstitFromRow (Ins,row); - - /* Get number of users who claim to belong to this institution (row[7]) */ - Ins->NumUsrsWhoClaimToBelongToIns.Valid = false; - if (sscanf (row[7],"%u",&(Ins->NumUsrsWhoClaimToBelongToIns.NumUsrs)) == 1) - Ins->NumUsrsWhoClaimToBelongToIns.Valid = true; - } + Ins_GetDataOfInstitFromRow (mysql_res,&(Gbl.Hierarchy.Inss.Lst[NumIns]), + true); // Get number of users who claim to belong to this institution } else Gbl.Hierarchy.Inss.Lst = NULL; @@ -708,7 +690,6 @@ void Ins_WriteInstitutionNameAndCty (long InsCod) bool Ins_GetDataOfInstitByCod (struct Ins_Instit *Ins) { MYSQL_RES *mysql_res; - MYSQL_ROW row; bool InsFound = false; /***** Clear data *****/ @@ -727,8 +708,8 @@ bool Ins_GetDataOfInstitByCod (struct Ins_Instit *Ins) if (Ins_DB_GetDataOfInstitutionByCod (&mysql_res,Ins->InsCod)) // Institution found... { /* Get institution data */ - row = mysql_fetch_row (mysql_res); - Ins_GetDataOfInstitFromRow (Ins,row); + Ins_GetDataOfInstitFromRow (mysql_res,Ins, + false); // Don't get number of users who claim to belong to this institution /* Set return value */ InsFound = true; @@ -745,8 +726,14 @@ bool Ins_GetDataOfInstitByCod (struct Ins_Instit *Ins) /********** Get data of a center from a row resulting of a query *************/ /*****************************************************************************/ -static void Ins_GetDataOfInstitFromRow (struct Ins_Instit *Ins,MYSQL_ROW row) +static void Ins_GetDataOfInstitFromRow (MYSQL_RES *mysql_res, + struct Ins_Instit *Ins, + bool GetNumUsrsWhoClaimToBelongToIns) { + MYSQL_ROW row; + + /***** Get row *****/ + row = mysql_fetch_row (mysql_res); /* row[0]: InsCod row[1]: CtyCod @@ -755,6 +742,7 @@ static void Ins_GetDataOfInstitFromRow (struct Ins_Instit *Ins,MYSQL_ROW row) row[4]: ShortName row[5]: FullName row[6]: WWW + row[7]: number of users who claim to belong to this institution */ /***** Get institution code (row[0]) *****/ if ((Ins->InsCod = Str_ConvertStrCodToLongCod (row[0])) <= 0) @@ -775,6 +763,12 @@ static void Ins_GetDataOfInstitFromRow (struct Ins_Instit *Ins,MYSQL_ROW row) Str_Copy (Ins->ShrtName,row[4],sizeof (Ins->ShrtName) - 1); Str_Copy (Ins->FullName,row[5],sizeof (Ins->FullName) - 1); Str_Copy (Ins->WWW ,row[6],sizeof (Ins->WWW ) - 1); + + /***** Get number of users who claim to belong to this institution (row[7]) *****/ + Ins->NumUsrsWhoClaimToBelongToIns.Valid = false; + if (GetNumUsrsWhoClaimToBelongToIns) + if (sscanf (row[7],"%u",&(Ins->NumUsrsWhoClaimToBelongToIns.NumUsrs)) == 1) + Ins->NumUsrsWhoClaimToBelongToIns.Valid = true; } /*****************************************************************************/ diff --git a/swad_institution_database.c b/swad_institution_database.c index f9330ee3..b75eb007 100644 --- a/swad_institution_database.c +++ b/swad_institution_database.c @@ -137,7 +137,8 @@ unsigned Ins_DB_GetDataOfInstitutionByCod (MYSQL_RES **mysql_res,long InsCod) "RequesterUsrCod," // row[3] "ShortName," // row[4] "FullName," // row[5] - "WWW" // row[6] + "WWW," // row[6] + "0 AS NumUsrs" // row[7] (not used) " FROM ins_instits" " WHERE InsCod=%ld", InsCod); @@ -281,7 +282,8 @@ unsigned Ins_DB_GetInssInCtyOrderedByFullName (MYSQL_RES **mysql_res,long CtyCod "RequesterUsrCod," // row[3] "ShortName," // row[4] "FullName," // row[5] - "WWW" // row[6] + "WWW," // row[6] + "0 AS NumUsrs" // row[7] (not used) " FROM ins_instits" " WHERE CtyCod=%ld" " ORDER BY FullName", diff --git a/swad_match.c b/swad_match.c index d979907c..ddd1148c 100644 --- a/swad_match.c +++ b/swad_match.c @@ -884,7 +884,7 @@ static void Mch_GetMatchDataFromRow (MYSQL_RES *mysql_res, Dat_StartEndTime_t StartEndTime; long LongNum; - /***** Get match data *****/ + /***** Get row *****/ row = mysql_fetch_row (mysql_res); /* row[ 0] MchCod diff --git a/swad_project.c b/swad_project.c index f3d9a3e9..55acfce7 100644 --- a/swad_project.c +++ b/swad_project.c @@ -297,7 +297,8 @@ static void Prj_UpdateProject (struct Prj_Project *Prj); static bool Prj_CheckIfICanConfigAllProjects (void); static void Prj_GetCrsPrjsConfig (struct Prj_Projects *Projects); -static void Prj_GetConfigFromRow (struct Prj_Projects *Projects,MYSQL_ROW row); +static void Prj_GetConfigFromRow (MYSQL_RES *mysql_res, + struct Prj_Projects *Projects); static bool Prj_GetEditableFromForm (void); static void Prj_PutIconsToLockUnlockAllProjects (struct Prj_Projects *Projects); @@ -4221,14 +4222,10 @@ void Prj_ShowFormConfig (void) static void Prj_GetCrsPrjsConfig (struct Prj_Projects *Projects) { MYSQL_RES *mysql_res; - MYSQL_ROW row; /***** Get configuration of projects for current course from database *****/ if (Prj_DB_GetCrsPrjsConfig (&mysql_res)) - { - row = mysql_fetch_row (mysql_res); - Prj_GetConfigFromRow (Projects,row); - } + Prj_GetConfigFromRow (mysql_res,Projects); else Projects->Config.Editable = Prj_EDITABLE_DEFAULT; @@ -4240,8 +4237,14 @@ static void Prj_GetCrsPrjsConfig (struct Prj_Projects *Projects) /************ Get configuration values from a database table row *************/ /*****************************************************************************/ -static void Prj_GetConfigFromRow (struct Prj_Projects *Projects,MYSQL_ROW row) +static void Prj_GetConfigFromRow (MYSQL_RES *mysql_res, + struct Prj_Projects *Projects) { + MYSQL_ROW row; + + /***** Get row *****/ + row = mysql_fetch_row (mysql_res); + /***** Get whether project are visible via plugins or not *****/ Projects->Config.Editable = (row[0][0] == 'Y'); } diff --git a/swad_rubric_criteria.c b/swad_rubric_criteria.c index 47dadfaa..405719b0 100644 --- a/swad_rubric_criteria.c +++ b/swad_rubric_criteria.c @@ -80,6 +80,10 @@ static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics, unsigned NumCriteria, MYSQL_RES *mysql_res, bool ICanEditCriteria); + +static void RubCri_GetCriterionDataFromRow (MYSQL_RES *mysql_res, + struct RubCri_Criterion *Criterion); + static void RubCri_PutTableHeadingForCriteria (void); static void RubCri_GetAndCheckPars (struct Rub_Rubrics *Rubrics, @@ -108,8 +112,6 @@ static void RubCri_PutParsOneCriterion (void *Rubrics) void RubCri_GetDataOfCriterionByCod (struct RubCri_Criterion *Criterion) { MYSQL_RES *mysql_res; - MYSQL_ROW row; - RubCri_ValueRange_t ValueRange; /***** Trivial check *****/ if (Criterion->CriCod <= 0) @@ -121,39 +123,7 @@ void RubCri_GetDataOfCriterionByCod (struct RubCri_Criterion *Criterion) /***** Get data of rubric criterion from database *****/ if (Rub_DB_GetDataOfCriterionByCod (&mysql_res,Criterion->CriCod)) // Criterion found... - { - /* Get row */ - row = mysql_fetch_row (mysql_res); - /* - row[0] CriCod - row[1] RubCod - row[2] CriInd - row[3] MinVal - row[4] MaxVal - row[5] Weight - row[6] Title - */ - /* Get criterion code (row[0]) */ - Criterion->CriCod = Str_ConvertStrCodToLongCod (row[0]); - - /* Get rubric code (row[0]) */ - Criterion->RubCod = Str_ConvertStrCodToLongCod (row[1]); - - /* Get criterion index (row[2]) */ - Criterion->CriInd = Str_ConvertStrToUnsigned (row[2]); - - /* Get criterion minimum and maximum values (row[3], row[4]) */ - for (ValueRange = (RubCri_ValueRange_t) 0; - ValueRange <= (RubCri_ValueRange_t) (RubCri_NUM_VALUES - 1); - ValueRange++) - Criterion->Values[ValueRange] = Str_GetDoubleFromStr (row[3 + ValueRange]); - - /* Get criterion weight (row[5]) */ - Criterion->Weight = Str_GetDoubleFromStr (row[3 + RubCri_NUM_VALUES]); - - /* Get the title of the criterion (row[6]) */ - Str_Copy (Criterion->Title,row[3 + RubCri_NUM_VALUES + 1],sizeof (Criterion->Title) - 1); - } + RubCri_GetCriterionDataFromRow (mysql_res,Criterion); else /* Initialize to empty criterion */ RubCri_ResetCriterion (Criterion); @@ -558,7 +528,6 @@ static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics, }; unsigned NumCriterion; struct RubCri_Criterion Criterion; - MYSQL_ROW row; char *Anchor; RubCri_ValueRange_t ValueRange; @@ -579,35 +548,9 @@ static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics, { /***** Create criterion of questions *****/ RubCri_ResetCriterion (&Criterion); - Criterion.RubCod = Rubrics->Rubric.RubCod; /***** Get criterion data *****/ - row = mysql_fetch_row (mysql_res); - /* - row[0] CriCod - row[1] CriInd - row[2] MinVal - row[3] MaxVal - row[4] Weight - row[5] Title - */ - /* Get criterion code (row[0]) */ - Criterion.CriCod = Str_ConvertStrCodToLongCod (row[0]); - - /* Get criterion index (row[1]) */ - Criterion.CriInd = Str_ConvertStrToUnsigned (row[1]); - - /* Get minimum value (row[2]) and maximum value (row[3]) */ - for (ValueRange = (RubCri_ValueRange_t) 0; - ValueRange <= (RubCri_ValueRange_t) (RubCri_NUM_VALUES - 1); - ValueRange++) - Criterion.Values[ValueRange] = Str_GetDoubleFromStr (row[2 + ValueRange]); - - /* Get weight (row[4]) */ - Criterion.Weight = Str_GetDoubleFromStr (row[2 + RubCri_NUM_VALUES]); - - /* Get the title of the criterion (row[5]) */ - Str_Copy (Criterion.Title,row[2 + RubCri_NUM_VALUES + 1],sizeof (Criterion.Title) - 1); + RubCri_GetCriterionDataFromRow (mysql_res,&Criterion); /* Initialize context */ Rubrics->CriCod = Criterion.CriCod; @@ -748,6 +691,92 @@ static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics, HTM_TABLE_End (); } +/*****************************************************************************/ +/************************** Get rubric criteria data *************************/ +/*****************************************************************************/ + +static void RubCri_GetCriterionDataFromRow (MYSQL_RES *mysql_res, + struct RubCri_Criterion *Criterion) + { + MYSQL_ROW row; + RubCri_ValueRange_t ValueRange; + + /* Get row */ + row = mysql_fetch_row (mysql_res); + /* + row[0] CriCod + row[1] RubCod + row[2] CriInd + row[3] Source + row[4] Cod + row[5] MinVal + row[6] MaxVal + row[7] Weight + row[8] Title + */ + /* Get criterion code (row[0]) */ + Criterion->CriCod = Str_ConvertStrCodToLongCod (row[0]); + + /* Get rubric code (row[0]) */ + Criterion->RubCod = Str_ConvertStrCodToLongCod (row[1]); + + /* Get criterion index (row[2]) */ + Criterion->CriInd = Str_ConvertStrToUnsigned (row[2]); + + /* Get source (row[3]) and code (row[4]) */ + Criterion->Source = RubCri_GetSourceFromDBStr (row[3]); + Criterion->Cod = Str_ConvertStrCodToLongCod (row[4]); + + /* Get criterion minimum and maximum values (row[5], row[6]) */ + for (ValueRange = (RubCri_ValueRange_t) 0; + ValueRange <= (RubCri_ValueRange_t) (RubCri_NUM_VALUES - 1); + ValueRange++) + Criterion->Values[ValueRange] = Str_GetDoubleFromStr (row[5 + ValueRange]); + + /* Get criterion weight (row[7]) */ + Criterion->Weight = Str_GetDoubleFromStr (row[5 + RubCri_NUM_VALUES]); + + /* Get the title of the criterion (row[8]) */ + Str_Copy (Criterion->Title,row[5 + RubCri_NUM_VALUES + 1],sizeof (Criterion->Title) - 1); + } + +/*****************************************************************************/ +/*********************** Get source from database string *********************/ +/*****************************************************************************/ + +RubCri_Source_t RubCri_GetSourceFromDBStr (const char *SourceDBStr) + { + RubCri_Source_t Source; + + for (Source = (RubCri_Source_t) 0; + Source <= (RubCri_Source_t) (RubCri_NUM_SOURCES - 1); + Source++) + if (!strcmp (RubCri_GetDBStrFromSource (Source),SourceDBStr)) + return Source; + + return RubCri_SOURCE_DEFAULT; + } + +/*****************************************************************************/ +/*********************** Get database string from source *********************/ +/*****************************************************************************/ + +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; + + return RubCri_SourceDB[Source]; + } + /*****************************************************************************/ /****************** Put table heading for rubric criteria ********************/ /*****************************************************************************/ @@ -789,15 +818,17 @@ void RubCri_ResetCriterion (struct RubCri_Criterion *Criterion) }; RubCri_ValueRange_t ValueRange; - Criterion->RubCod = -1L; - Criterion->CriCod = -1L; - Criterion->CriInd = 0; - Criterion->Title[0] = '\0'; + Criterion->RubCod = -1L; + Criterion->CriCod = -1L; + Criterion->CriInd = 0; + Criterion->Source = RubCri_SOURCE_DEFAULT; + Criterion->Cod = -1L; for (ValueRange = (RubCri_ValueRange_t) 0; ValueRange <= (RubCri_ValueRange_t) (RubCri_NUM_VALUES - 1); ValueRange++) Criterion->Values[ValueRange] = RubCri_DefaultValues[ValueRange]; - Criterion->Weight = 1.0; + Criterion->Weight = 1.0; + Criterion->Title[0] = '\0'; } /*****************************************************************************/ diff --git a/swad_rubric_criteria.h b/swad_rubric_criteria.h index eb9faffc..d6d1067b 100644 --- a/swad_rubric_criteria.h +++ b/swad_rubric_criteria.h @@ -44,6 +44,9 @@ void RubCri_ChangeWeightCriterion (void); void RubCri_ListCriteria (struct Rub_Rubrics *Rubrics, struct RubCri_Criterion *Criterion); +RubCri_Source_t RubCri_GetSourceFromDBStr (const char *SourceDBStr); +const char *RubCri_GetDBStrFromSource (RubCri_Source_t Source); + void RubCri_ResetCriterion (struct RubCri_Criterion *Criterion); void RubCri_ReqRemCriterion (void); diff --git a/swad_rubric_database.c b/swad_rubric_database.c index 7f2eb096..d2ddb4a6 100644 --- a/swad_rubric_database.c +++ b/swad_rubric_database.c @@ -32,6 +32,7 @@ #include "swad_database.h" #include "swad_error.h" #include "swad_rubric_database.h" +#include "swad_rubric_criteria.h" #include "swad_global.h" /*****************************************************************************/ @@ -356,13 +357,15 @@ long Rub_DB_CreateCriterion (const struct RubCri_Criterion *Criterion) CriCod = DB_QueryINSERTandReturnCode ("can not create new criterion", "INSERT INTO rub_criteria" - " (RubCod,CriInd,%s,%s,Weight,Title)" + " (RubCod,CriInd,Source,Cod,%s,%s,Weight,Title)" " VALUES" - " (%ld,%u,%.15lg,%.15lg,%.15lg,'%s')", + " (%ld,%u,'%s',%ld,%.15lg,%.15lg,%.15lg,'%s')", RubCri_ValuesFields[RubCri_MIN], RubCri_ValuesFields[RubCri_MAX], Criterion->RubCod, Criterion->CriInd, + RubCri_GetDBStrFromSource (Criterion->Source), + Criterion->Cod, Criterion->Values[RubCri_MIN], Criterion->Values[RubCri_MAX], Criterion->Weight, @@ -586,11 +589,14 @@ unsigned Rub_DB_GetCriteria (MYSQL_RES **mysql_res,long RubCod) return (unsigned) DB_QuerySELECT (mysql_res,"can not get criteria", "SELECT CriCod," // row[0] - "CriInd," // row[1] - "%s," // row[2] - "%s," // row[3] - "Weight," // row[4] - "Title" // row[5] + "RubCod," // row[1] + "CriInd," // row[2] + "Source," // row[3] + "Cod," // row[4] + "%s," // row[5] + "%s," // row[6] + "Weight," // row[7] + "Title" // row[8] " FROM rub_criteria" " WHERE RubCod=%ld" " ORDER BY CriInd", @@ -610,10 +616,12 @@ unsigned Rub_DB_GetDataOfCriterionByCod (MYSQL_RES **mysql_res,long CriCod) "SELECT CriCod," // row[0] "RubCod," // row[1] "CriInd," // row[2] - "%s," // row[3] - "%s," // row[4] - "Weight," // row[5] - "Title" // row[6] + "Source," // row[3] + "Cod," // row[4] + "%s," // row[5] + "%s," // row[6] + "Weight," // row[7] + "Title" // row[8] " FROM rub_criteria" " WHERE CriCod=%ld", RubCri_ValuesFields[RubCri_MIN], diff --git a/swad_rubric_type.h b/swad_rubric_type.h index d14af1a6..ebe0fee1 100644 --- a/swad_rubric_type.h +++ b/swad_rubric_type.h @@ -44,13 +44,6 @@ #define RubCri_MAX_CHARS_TITLE (128 - 1) // 127 #define RubCri_MAX_BYTES_TITLE ((RubCri_MAX_CHARS_TITLE + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 2047 -#define RubCri_NUM_VALUES 2 -typedef enum - { - RubCri_MIN = 0, - RubCri_MAX = 1, - } RubCri_ValueRange_t; - struct Rub_Rubric { long RubCod; // Rubric code @@ -73,11 +66,30 @@ struct Rub_Rubrics long QstCod; // Current question code }; +#define RubCri_NUM_VALUES 2 +typedef enum + { + RubCri_MIN = 0, + RubCri_MAX = 1, + } RubCri_ValueRange_t; + +#define RubCri_NUM_SOURCES 4 +typedef enum + { + RubCri_FROM_TEACHER, + RubCri_FROM_ANOTHER_RUBRIC, + RubCri_FROM_EXAM_PRINT, + RubCri_FROM_GAME_MATCH, + } RubCri_Source_t; +#define RubCri_SOURCE_DEFAULT RubCri_FROM_TEACHER + struct RubCri_Criterion { long RubCod; // Rubric code long CriCod; // Criterion code unsigned CriInd; // Criterion index (position in the rubric) + RubCri_Source_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 diff --git a/swad_scope.c b/swad_scope.c index 2406928e..53b57c38 100644 --- a/swad_scope.c +++ b/swad_scope.c @@ -326,7 +326,7 @@ HieLvl_Level_t Sco_GetScopeFromDBStr (const char *ScopeDBStr) } /*****************************************************************************/ -/*********************** Get scope from database string **********************/ +/*********************** Get database string from source *********************/ /*****************************************************************************/ const char *Sco_GetDBStrFromScope (HieLvl_Level_t Scope) diff --git a/swad_survey.c b/swad_survey.c index f4ad8a19..abe48f15 100644 --- a/swad_survey.c +++ b/swad_survey.c @@ -128,9 +128,9 @@ static void Svy_FreeTextChoiceAnswer (struct Svy_Question *SvyQst,unsigned NumAn static unsigned Svy_GetNextQuestionIndexInSvy (long SvyCod); static void Svy_ListSvyQuestions (struct Svy_Surveys *Surveys); -static void Svy_GetDataOfQstFromRow (struct Svy_Question *SvyQst, - char Stem[Cns_MAX_BYTES_TEXT + 1], - MYSQL_ROW row); +static void Svy_GetDataOfQstFromRow (MYSQL_RES *mysql_res, + struct Svy_Question *SvyQst, + char Stem[Cns_MAX_BYTES_TEXT + 1]); static void Svy_PutParsToEditQuestion (void *Surveys); static void Svy_PutIconToAddNewQuestion (void *Surveys); static void Svy_PutButtonToCreateNewQuestion (struct Svy_Surveys *Surveys); @@ -2310,10 +2310,7 @@ static void Svy_ShowFormEditOneQst (struct Svy_Surveys *Surveys, { /***** Get question data from database *****/ if (Svy_DB_GetQstDataByCod (&mysql_res,SvyQst->QstCod,Surveys->Svy.SvyCod)) - { - row = mysql_fetch_row (mysql_res); - Svy_GetDataOfQstFromRow (SvyQst,Stem,row); - } + Svy_GetDataOfQstFromRow (mysql_res,SvyQst,Stem); else Err_WrongQuestionExit (); @@ -2715,7 +2712,6 @@ static void Svy_ListSvyQuestions (struct Svy_Surveys *Surveys) extern const char *Txt_This_survey_has_no_questions; extern const char *Txt_Done; MYSQL_RES *mysql_res; - MYSQL_ROW row; unsigned NumQsts; unsigned NumQst; struct Svy_Question SvyQst; @@ -2765,8 +2761,7 @@ static void Svy_ListSvyQuestions (struct Svy_Surveys *Surveys) Svy_InitQst (&SvyQst); /* Get question data from row */ - row = mysql_fetch_row (mysql_res); - Svy_GetDataOfQstFromRow (&SvyQst,Stem,row); + Svy_GetDataOfQstFromRow (mysql_res,&SvyQst,Stem); HTM_TR_Begin (NULL); @@ -2844,10 +2839,15 @@ static void Svy_ListSvyQuestions (struct Svy_Surveys *Surveys) /************************* Get question data from row ************************/ /*****************************************************************************/ -static void Svy_GetDataOfQstFromRow (struct Svy_Question *SvyQst, - char Stem[Cns_MAX_BYTES_TEXT + 1], - MYSQL_ROW row) +static void Svy_GetDataOfQstFromRow (MYSQL_RES *mysql_res, + struct Svy_Question *SvyQst, + char Stem[Cns_MAX_BYTES_TEXT + 1]) { + MYSQL_ROW row; + + /***** Get row *****/ + row = mysql_fetch_row (mysql_res); + /***** Get the code of the question (row[0]) *****/ if (sscanf (row[0],"%ld",&(SvyQst->QstCod)) != 1) Err_WrongQuestionExit (); diff --git a/swad_test_config.c b/swad_test_config.c index b235415d..3da68c91 100644 --- a/swad_test_config.c +++ b/swad_test_config.c @@ -70,7 +70,7 @@ static void TstCfg_ShowFormConfig (void); static void TstCfg_PutInputFieldNumQsts (const char *Field,const char *Label, unsigned Value); -static void TstCfg_GetConfigFromRow (MYSQL_ROW row); +static void TstCfg_GetConfigFromRow (MYSQL_RES *mysql_res); static TstCfg_Pluggable_t TstCfg_GetPluggableFromForm (void); static void TstCfg_CheckAndCorrectMinDefMax (void); @@ -308,14 +308,10 @@ static void TstCfg_PutInputFieldNumQsts (const char *Field,const char *Label, void TstCfg_GetConfig (void) { MYSQL_RES *mysql_res; - MYSQL_ROW row; /***** Get configuration of test for current course from database *****/ if (Tst_DB_GetConfig (&mysql_res,Gbl.Hierarchy.Crs.CrsCod)) - { - row = mysql_fetch_row (mysql_res); - TstCfg_GetConfigFromRow (row); - } + TstCfg_GetConfigFromRow (mysql_res); else { TstCfg_SetConfigPluggable (TstCfg_PLUGGABLE_UNKNOWN); @@ -334,13 +330,17 @@ void TstCfg_GetConfig (void) /************ Get configuration values from a database table row *************/ /*****************************************************************************/ -static void TstCfg_GetConfigFromRow (MYSQL_ROW row) +static void TstCfg_GetConfigFromRow (MYSQL_RES *mysql_res) { extern const char *Tst_DB_Pluggable[TstCfg_NUM_OPTIONS_PLUGGABLE]; + MYSQL_ROW row; int IntNum; long LongNum; TstCfg_Pluggable_t Pluggable; + /***** Get row *****/ + row = mysql_fetch_row (mysql_res); + /***** Get whether test are visible via plugins or not *****/ TstCfg_SetConfigPluggable (TstCfg_PLUGGABLE_UNKNOWN); for (Pluggable = TstCfg_PLUGGABLE_NO; diff --git a/swad_timeline_comment.c b/swad_timeline_comment.c index 60be2bf1..c1921c8d 100644 --- a/swad_timeline_comment.c +++ b/swad_timeline_comment.c @@ -108,7 +108,7 @@ static void TmlCom_RequestRemovalComm (struct Tml_Timeline *Timeline); static void TmlCom_PutParsRemoveComm (void *Timeline); static void TmlCom_RemoveComm (void); -static void TmlCom_GetDataOfCommFromRow (MYSQL_ROW row, +static void TmlCom_GetDataOfCommFromRow (MYSQL_RES *mysql_res, struct TmlCom_Comment *Com); static void TmlCom_ResetComm (struct TmlCom_Comment *Com); @@ -437,15 +437,13 @@ static void TmlCom_ListComms (const struct Tml_Timeline *Timeline, static void TmlCom_WriteOneCommInList (const struct Tml_Timeline *Timeline, MYSQL_RES *mysql_res) { - MYSQL_ROW row; struct TmlCom_Comment Com; /***** Initialize image *****/ Med_MediaConstructor (&Com.Content.Media); /***** Get data of comment *****/ - row = mysql_fetch_row (mysql_res); - TmlCom_GetDataOfCommFromRow (row,&Com); + TmlCom_GetDataOfCommFromRow (mysql_res,&Com); /***** Write comment *****/ HTM_LI_Begin ("class=\"Tml_COM\""); @@ -1045,7 +1043,6 @@ void TmlCom_RemoveCommMediaAndDBEntries (long PubCod) void TmlCom_GetDataOfCommByCod (struct TmlCom_Comment *Com) { MYSQL_RES *mysql_res; - MYSQL_ROW row; /***** Trivial check: publication code should be > 0 *****/ if (Com->PubCod <= 0) @@ -1057,11 +1054,7 @@ void TmlCom_GetDataOfCommByCod (struct TmlCom_Comment *Com) /***** Get data of comment from database *****/ if (Tml_DB_GetDataOfCommByCod (Com->PubCod,&mysql_res)) - { - /* Get data of comment */ - row = mysql_fetch_row (mysql_res); - TmlCom_GetDataOfCommFromRow (row,Com); - } + TmlCom_GetDataOfCommFromRow (mysql_res,Com); else /* Reset fields of comment */ TmlCom_ResetComm (Com); @@ -1074,9 +1067,13 @@ void TmlCom_GetDataOfCommByCod (struct TmlCom_Comment *Com) /********************** Get data of comment from row *************************/ /*****************************************************************************/ -static void TmlCom_GetDataOfCommFromRow (MYSQL_ROW row, +static void TmlCom_GetDataOfCommFromRow (MYSQL_RES *mysql_res, struct TmlCom_Comment *Com) { + MYSQL_ROW row; + + /***** Get row *****/ + row = mysql_fetch_row (mysql_res); /* row[0]: PubCod row[1]: PublisherCod] diff --git a/swad_timeline_note.c b/swad_timeline_note.c index 4dd5e7f5..763f8212 100644 --- a/swad_timeline_note.c +++ b/swad_timeline_note.c @@ -116,7 +116,8 @@ static void TmlNot_PutParsRemoveNote (void *Timeline); static void TmlNot_RemoveNote (void); static void TmlNot_RemoveNoteMediaAndDBEntries (struct TmlNot_Note *Not); -static void TmlNot_GetDataOfNoteFromRow (MYSQL_ROW row,struct TmlNot_Note *Not); +static void TmlNot_GetDataOfNoteFromRow (MYSQL_RES *mysql_res, + struct TmlNot_Note *Not); static TmlNot_Type_t TmlNot_GetNoteTypeFromStr (const char *Str); @@ -127,7 +128,7 @@ static void TmlNot_ResetNote (struct TmlNot_Note *Not); /*****************************************************************************/ void TmlNot_ShowHighlightedNote (struct Tml_Timeline *Timeline, - struct TmlNot_Note *Not) + struct TmlNot_Note *Not) { struct Usr_Data PublisherDat; Ntf_NotifyEvent_t NotifyEvent; @@ -1195,8 +1196,13 @@ static void TmlNot_RemoveNoteMediaAndDBEntries (struct TmlNot_Note *Not) /************************ Get data of note from row **************************/ /*****************************************************************************/ -static void TmlNot_GetDataOfNoteFromRow (MYSQL_ROW row,struct TmlNot_Note *Not) +static void TmlNot_GetDataOfNoteFromRow (MYSQL_RES *mysql_res, + struct TmlNot_Note *Not) { + MYSQL_ROW row; + + /***** Get row *****/ + row = mysql_fetch_row (mysql_res); /* row[0]: NotCod row[1]: NoteType @@ -1269,7 +1275,6 @@ static void TmlNot_ResetNote (struct TmlNot_Note *Not) void TmlNot_GetDataOfNoteByCod (struct TmlNot_Note *Not) { MYSQL_RES *mysql_res; - MYSQL_ROW row; /***** Trivial check: note code should be > 0 *****/ if (Not->NotCod <= 0) @@ -1281,11 +1286,7 @@ void TmlNot_GetDataOfNoteByCod (struct TmlNot_Note *Not) /***** Get data of note from database *****/ if (Tml_DB_GetDataOfNoteByCod (Not->NotCod,&mysql_res)) - { - /* Get data of note */ - row = mysql_fetch_row (mysql_res); - TmlNot_GetDataOfNoteFromRow (row,Not); - } + TmlNot_GetDataOfNoteFromRow (mysql_res,Not); else /* Reset fields of note */ TmlNot_ResetNote (Not);