diff --git a/swad_changelog.h b/swad_changelog.h index 0a1dea904..b44a3fa7e 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -606,10 +606,11 @@ TODO: Fix bug: error al enviar un mensaje a dos recipientes, error on duplicate TODO: Attach pdf files in multimedia. */ -#define Log_PLATFORM_VERSION "SWAD 22.44.1 (2022-10-12)" +#define Log_PLATFORM_VERSION "SWAD 22.44.2 (2022-10-12)" #define CSS_FILE "swad22.40.css" #define JS_FILE "swad21.100.js" /* + Version 22.44.2: Oct 12, 2022 Code refactoring in projects. (333001 lines) Version 22.44.1: Oct 12, 2022 Code refactoring in projects. (332985 lines) Version 22.44: Oct 12, 2022 Code refactoring in projects. (332980 lines) Version 22.43.2: Oct 12, 2022 Code refactoring in projects. (332984 lines) diff --git a/swad_project.c b/swad_project.c index ad477243a..33be3ec0a 100644 --- a/swad_project.c +++ b/swad_project.c @@ -145,11 +145,13 @@ struct Usr_SelectedUsrs Prj_MembersToAdd = struct Prj_Faults { + bool PrjIsFaulty; bool WrongTitle; bool WrongDescription; bool WrongNumStds; bool WrongAssigned; }; + /*****************************************************************************/ /***************************** Private variables *****************************/ /*****************************************************************************/ @@ -197,6 +199,9 @@ static void Prj_PutIconsOnePrj (void *Projects); //---------------------- Show one project in a row ---------------------------- static void Prj_ShowProjectRow (struct Prj_Projects *Projects, unsigned NumIndex); +static void Prj_ShowProjectFirstRow (struct Prj_Projects *Projects, + const struct Prj_Faults *Faults, + unsigned NumIndex,unsigned UniqueId); static void Prj_ShowProjectReviewStatus (const struct Prj_Projects *Projects); static void Prj_ShowProjectAssigned (const struct Prj_Projects *Projects, const struct Prj_Faults *Faults); @@ -211,7 +216,7 @@ static void Prj_ShowOneProjectProposal (const struct Prj_Projects *Projects, unsigned UniqueId); //------------------------------------------------ ---------------------------- -static bool Prj_CheckIfPrjIsFaulty (long PrjCod,struct Prj_Faults *Faults); +static void Prj_CheckIfPrjIsFaulty (long PrjCod,struct Prj_Faults *Faults); static void Prj_PutWarningIcon (void); static void Prj_PutIconToToggleProject (unsigned UniqueId, const char *Icon,const char *Text); @@ -1351,25 +1356,75 @@ void Prj_PrintOneProject (void) static void Prj_ShowProjectRow (struct Prj_Projects *Projects, unsigned NumIndex) { - extern const char *Txt_Actions[Act_NUM_ACTIONS]; extern const char *Txt_Description; extern const char *Txt_Required_knowledge; extern const char *Txt_Required_materials; + struct Prj_Faults Faults; + static unsigned UniqueId = 0; + + /***** Check project faults *****/ + Prj_CheckIfPrjIsFaulty (Projects->Prj.PrjCod,&Faults); + + /***** First row with main data (dates, title...) *****/ + UniqueId++; + Prj_ShowProjectFirstRow (Projects,&Faults,NumIndex,UniqueId); + + /***** Review status *****/ + Prj_ShowProjectReviewStatus (Projects); + + /***** Assigned? *****/ + Prj_ShowProjectAssigned (Projects,&Faults); + + /***** Number of students *****/ + Prj_ShowProjectNumStds (Projects,&Faults); + + /***** Project members *****/ + Prj_ShowProjectMembers (Projects); + + /***** Link to show hidden info *****/ + Prj_ShowOneProjectLinkToShowHiddenInfo (Projects,UniqueId); + + /***** Proposal *****/ + Prj_ShowOneProjectProposal (Projects,UniqueId); + + /***** Write rows of data of this project *****/ + /* Description of the project */ + Prj_ShowOneProjectTxtField (Projects,"prj_dsc_",UniqueId, + Txt_Description,Projects->Prj.Description, + Faults.WrongDescription); + + /* Required knowledge to carry out the project */ + Prj_ShowOneProjectTxtField (Projects,"prj_knw_",UniqueId, + Txt_Required_knowledge,Projects->Prj.Knowledge, + false); // No warning + + /* Required materials to carry out the project */ + Prj_ShowOneProjectTxtField (Projects,"prj_mtr_",UniqueId, + Txt_Required_materials,Projects->Prj.Materials, + false); // No warning + + /* Link to view more info about the project */ + Prj_ShowOneProjectURL (Projects,"prj_url_",UniqueId); + } + +/*****************************************************************************/ +/** When listing a project, show first row with main data (dates, title...) **/ +/*****************************************************************************/ + +static void Prj_ShowProjectFirstRow (struct Prj_Projects *Projects, + const struct Prj_Faults *Faults, + unsigned NumIndex,unsigned UniqueId) + { + extern const char *Txt_Actions[Act_NUM_ACTIONS]; + char *Id; Act_Action_t NextAction; char *Anchor = NULL; const char *ClassDate = (Projects->Prj.Hidden == Prj_HIDDEN) ? "DATE_BLUE_LIGHT" : "DATE_BLUE"; - struct Prj_Faults Faults; - bool PrjIsFaulty; - static unsigned UniqueId = 0; - char *Id; /***** Set anchor string *****/ Frm_SetAnchorStr (Projects->Prj.PrjCod,&Anchor); - /***** Check if project is faulty or faultless *****/ - PrjIsFaulty = Prj_CheckIfPrjIsFaulty (Projects->Prj.PrjCod,&Faults); - /***** Write first row of data of this project *****/ HTM_TR_Begin (NULL); @@ -1381,7 +1436,7 @@ static void Prj_ShowProjectRow (struct Prj_Projects *Projects, The_GetSuffix (), The_GetColorRows ()); HTM_Unsigned (NumIndex); - if (PrjIsFaulty) + if (Faults->PrjIsFaulty) { HTM_BR (); Prj_PutWarningIcon (); @@ -1406,7 +1461,6 @@ static void Prj_ShowProjectRow (struct Prj_Projects *Projects, } /* Creation date/time */ - UniqueId++; if (asprintf (&Id,"prj_creat_%u",UniqueId) < 0) Err_NotEnoughMemoryExit (); switch (Projects->View) @@ -1479,7 +1533,7 @@ static void Prj_ShowProjectRow (struct Prj_Projects *Projects, HTM_BUTTON_End (); Frm_EndForm (); } - if (Faults.WrongTitle) + if (Faults->WrongTitle) Prj_PutWarningIcon (); HTM_ARTICLE_End (); HTM_TD_End (); @@ -1489,43 +1543,6 @@ static void Prj_ShowProjectRow (struct Prj_Projects *Projects, HTM_TR_End (); - /***** Review status *****/ - Prj_ShowProjectReviewStatus (Projects); - - /***** Assigned? *****/ - Prj_ShowProjectAssigned (Projects,&Faults); - - /***** Number of students *****/ - Prj_ShowProjectNumStds (Projects,&Faults); - - /***** Project members *****/ - Prj_ShowProjectMembers (Projects); - - /***** Link to show hidden info *****/ - Prj_ShowOneProjectLinkToShowHiddenInfo (Projects,UniqueId); - - /***** Proposal *****/ - Prj_ShowOneProjectProposal (Projects,UniqueId); - - /***** Write rows of data of this project *****/ - /* Description of the project */ - Prj_ShowOneProjectTxtField (Projects,"prj_dsc_",UniqueId, - Txt_Description,Projects->Prj.Description, - Faults.WrongDescription); - - /* Required knowledge to carry out the project */ - Prj_ShowOneProjectTxtField (Projects,"prj_knw_",UniqueId, - Txt_Required_knowledge,Projects->Prj.Knowledge, - false); // No warning - - /* Required materials to carry out the project */ - Prj_ShowOneProjectTxtField (Projects,"prj_mtr_",UniqueId, - Txt_Required_materials,Projects->Prj.Materials, - false); // No warning - - /* Link to view more info about the project */ - Prj_ShowOneProjectURL (Projects,"prj_url_",UniqueId); - /***** Free anchor string *****/ Frm_FreeAnchorStr (Anchor); } @@ -1983,7 +2000,7 @@ static void Prj_ShowOneProjectProposal (const struct Prj_Projects *Projects, /********************** Check if a project has faults ************************/ /*****************************************************************************/ -static bool Prj_CheckIfPrjIsFaulty (long PrjCod,struct Prj_Faults *Faults) +static void Prj_CheckIfPrjIsFaulty (long PrjCod,struct Prj_Faults *Faults) { MYSQL_RES *mysql_res; MYSQL_ROW row; @@ -2048,10 +2065,10 @@ static bool Prj_CheckIfPrjIsFaulty (long PrjCod,struct Prj_Faults *Faults) DB_FreeMySQLResult (&mysql_res); } - return Faults->WrongTitle || - Faults->WrongDescription || - Faults->WrongNumStds || - Faults->WrongAssigned; + Faults->PrjIsFaulty = Faults->WrongTitle || + Faults->WrongDescription || + Faults->WrongNumStds || + Faults->WrongAssigned; } /*****************************************************************************/ @@ -3069,11 +3086,13 @@ static void Prj_GetListProjects (struct Prj_Projects *Projects) switch (Projects->Filter.Faulti) { case (1 << Prj_FAULTY): // Faulty projects - if (Prj_CheckIfPrjIsFaulty (PrjCod,&Faults)) + Prj_CheckIfPrjIsFaulty (PrjCod,&Faults); + if (Faults.PrjIsFaulty) Projects->LstPrjCods[NumPrjsAfterFilter++] = PrjCod; break; case (1 << Prj_FAULTLESS): // Faultless projects - if (!Prj_CheckIfPrjIsFaulty (PrjCod,&Faults)) + Prj_CheckIfPrjIsFaulty (PrjCod,&Faults); + if (!Faults.PrjIsFaulty) Projects->LstPrjCods[NumPrjsAfterFilter++] = PrjCod; break; default: // All projects