Version 22.44: Oct 12, 2022 Code refactoring in projects.

This commit is contained in:
acanas 2022-10-12 14:25:35 +02:00
parent 32bbdd9031
commit 9b957d71d8
3 changed files with 341 additions and 343 deletions

View File

@ -606,10 +606,11 @@ TODO: Fix bug: error al enviar un mensaje a dos recipientes, error on duplicate
TODO: Attach pdf files in multimedia. TODO: Attach pdf files in multimedia.
*/ */
#define Log_PLATFORM_VERSION "SWAD 22.43.2 (2022-10-12)" #define Log_PLATFORM_VERSION "SWAD 22.44 (2022-10-12)"
#define CSS_FILE "swad22.40.css" #define CSS_FILE "swad22.40.css"
#define JS_FILE "swad21.100.js" #define JS_FILE "swad21.100.js"
/* /*
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) Version 22.43.2: Oct 12, 2022 Code refactoring in projects. (332984 lines)
Version 22.43.1: Oct 12, 2022 Code refactoring in projects. (332952 lines) Version 22.43.1: Oct 12, 2022 Code refactoring in projects. (332952 lines)
Version 22.43: Oct 11, 2022 Review of projects (not finished). (332930 lines) Version 22.43: Oct 11, 2022 Review of projects (not finished). (332930 lines)

View File

@ -71,15 +71,6 @@ extern struct Globals Gbl;
#define Prj_PARAM_FAULTIN_NAME "Faulti" #define Prj_PARAM_FAULTIN_NAME "Faulti"
#define Prj_PARAM_REVIEW_NAME "Review" #define Prj_PARAM_REVIEW_NAME "Review"
/***** Type of view when writing one project *****/
typedef enum
{
Prj_LIST_PROJECTS,
Prj_FILE_BROWSER_PROJECT,
Prj_PRINT_ONE_PROJECT,
Prj_EDIT_ONE_PROJECT,
} Prj_ProjectView_t;
/***** User roles are shown in this order *****/ /***** User roles are shown in this order *****/
static const Prj_RoleInProject_t Prj_RolesToShow[] = static const Prj_RoleInProject_t Prj_RolesToShow[] =
{ {
@ -87,7 +78,7 @@ static const Prj_RoleInProject_t Prj_RolesToShow[] =
Prj_ROLE_STD, // Student Prj_ROLE_STD, // Student
Prj_ROLE_EVL, // Evaluator Prj_ROLE_EVL, // Evaluator
}; };
static const unsigned Brw_NUM_ROLES_TO_SHOW = sizeof (Prj_RolesToShow) / static const unsigned Prj_NUM_ROLES_TO_SHOW = sizeof (Prj_RolesToShow) /
sizeof (Prj_RolesToShow[0]); sizeof (Prj_RolesToShow[0]);
/***** Assigned/non-assigned project *****/ /***** Assigned/non-assigned project *****/
@ -193,8 +184,7 @@ static unsigned Prj_GetHiddenParamReview (void);
static long Prj_GetHiddenParamDptCod (void); static long Prj_GetHiddenParamDptCod (void);
static Usr_Who_t Prj_GetParamWho (void); static Usr_Who_t Prj_GetParamWho (void);
static void Prj_ShowProjectsHead (struct Prj_Projects *Projects, static void Prj_ShowProjectsHead (struct Prj_Projects *Projects);
Prj_ProjectView_t ProjectView);
static void Prj_ShowTableAllProjectsHead (void); static void Prj_ShowTableAllProjectsHead (void);
static bool Prj_CheckIfICanCreateProjects (void); static bool Prj_CheckIfICanCreateProjects (void);
static void Prj_PutIconsListProjects (void *Projects); static void Prj_PutIconsListProjects (void *Projects);
@ -204,42 +194,36 @@ static void Prj_PutIconToShowAllData (struct Prj_Projects *Projects);
static void Prj_PutIconsOnePrj (void *Projects); static void Prj_PutIconsOnePrj (void *Projects);
//---------------------- Show one project in a row ----------------------------
static void Prj_ShowProjectRow (struct Prj_Projects *Projects, static void Prj_ShowProjectRow (struct Prj_Projects *Projects,
Prj_ProjectView_t ProjectView,
unsigned NumIndex); unsigned NumIndex);
static void Prj_ShowProjectReviewStatus (const struct Prj_Projects *Projects, static void Prj_ShowProjectReviewStatus (const struct Prj_Projects *Projects);
Prj_ProjectView_t ProjectView);
static void Prj_ShowProjectAssigned (const struct Prj_Projects *Projects, static void Prj_ShowProjectAssigned (const struct Prj_Projects *Projects,
Prj_ProjectView_t ProjectView,
const struct Prj_Faults *Faults); const struct Prj_Faults *Faults);
static void Prj_ShowProjectNumStds (const struct Prj_Projects *Projects, static void Prj_ShowProjectNumStds (const struct Prj_Projects *Projects,
Prj_ProjectView_t ProjectView,
const struct Prj_Faults *Faults); const struct Prj_Faults *Faults);
static void Prj_ShowProjectMembers (struct Prj_Projects *Projects);
static void Prj_ShowProjectMembersWithARole (struct Prj_Projects *Projects,
Prj_RoleInProject_t RoleInPrj);
static void Prj_ShowOneProjectLinkToShowHiddenInfo (const struct Prj_Projects *Projects,
unsigned UniqueId);
static bool Prj_CheckIfPrjIsFaulty (long PrjCod,struct Prj_Faults *Faults); static bool Prj_CheckIfPrjIsFaulty (long PrjCod,struct Prj_Faults *Faults);
static void Prj_PutWarningIcon (void); static void Prj_PutWarningIcon (void);
static void Prj_PutIconToToggleProject (unsigned UniqueId, static void Prj_PutIconToToggleProject (unsigned UniqueId,
const char *Icon,const char *Text); const char *Icon,const char *Text);
static void Prj_ShowTableAllProjectsOneRow (struct Prj_Project *Prj); static void Prj_ShowTableAllProjectsOneRow (struct Prj_Project *Prj);
static void Prj_ShowOneProjectDepartment (const struct Prj_Project *Prj, static void Prj_ShowOneProjectDepartment (const struct Prj_Projects *Projects);
Prj_ProjectView_t ProjectView);
static void Prj_ShowTableAllProjectsDepartment (const struct Prj_Project *Prj); static void Prj_ShowTableAllProjectsDepartment (const struct Prj_Project *Prj);
static void Prj_ShowOneProjectTxtField (struct Prj_Project *Prj, static void Prj_ShowOneProjectTxtField (const struct Prj_Projects *Projects,
Prj_ProjectView_t ProjectView,
const char *id,unsigned UniqueId, const char *id,unsigned UniqueId,
const char *Label,char *TxtField, const char *Label,char *TxtField,
bool Warning); bool Warning);
static void Prj_ShowTableAllProjectsTxtField (struct Prj_Project *Prj, static void Prj_ShowTableAllProjectsTxtField (struct Prj_Project *Prj,
char *TxtField); char *TxtField);
static void Prj_ShowOneProjectURL (const struct Prj_Project *Prj, static void Prj_ShowOneProjectURL (const struct Prj_Projects *Projects,
Prj_ProjectView_t ProjectView,
const char *id,unsigned UniqueId); const char *id,unsigned UniqueId);
static void Prj_ShowTableAllProjectsURL (const struct Prj_Project *Prj); static void Prj_ShowTableAllProjectsURL (const struct Prj_Project *Prj);
static void Prj_ShowOneProjectMembers (struct Prj_Projects *Projects,
Prj_ProjectView_t ProjectView);
static void Prj_ShowOneProjectMembersWithARole (struct Prj_Projects *Projects,
Prj_ProjectView_t ProjectView,
Prj_RoleInProject_t RoleInPrj);
static void Prj_ShowTableAllProjectsMembersWithARole (const struct Prj_Project *Prj, static void Prj_ShowTableAllProjectsMembersWithARole (const struct Prj_Project *Prj,
Prj_RoleInProject_t RoleInPrj); Prj_RoleInProject_t RoleInPrj);
@ -528,7 +512,8 @@ static void Prj_ShowPrjsInCurrentPage (void *Projects)
HTM_TABLE_BeginWideMarginPadding (2); HTM_TABLE_BeginWideMarginPadding (2);
/***** Table head *****/ /***** Table head *****/
Prj_ShowProjectsHead ((struct Prj_Projects *) Projects,Prj_LIST_PROJECTS); ((struct Prj_Projects *) Projects)->View = Prj_LIST_PROJECTS;
Prj_ShowProjectsHead ((struct Prj_Projects *) Projects);
/***** Write all projects *****/ /***** Write all projects *****/
for (NumPrj = Pagination.FirstItemVisible, The_ResetRowColor (); for (NumPrj = Pagination.FirstItemVisible, The_ResetRowColor ();
@ -554,8 +539,8 @@ static void Prj_ShowPrjsInCurrentPage (void *Projects)
} }
/* Show project */ /* Show project */
Prj_ShowProjectRow ((struct Prj_Projects *) Projects, ((struct Prj_Projects *) Projects)->View = Prj_LIST_PROJECTS;
Prj_LIST_PROJECTS,NumIndex); Prj_ShowProjectRow ((struct Prj_Projects *) Projects,NumIndex);
} }
/***** End table *****/ /***** End table *****/
@ -1029,8 +1014,7 @@ static Usr_Who_t Prj_GetParamWho (void)
/******************* Write header with fields of a project *******************/ /******************* Write header with fields of a project *******************/
/*****************************************************************************/ /*****************************************************************************/
static void Prj_ShowProjectsHead (struct Prj_Projects *Projects, static void Prj_ShowProjectsHead (struct Prj_Projects *Projects)
Prj_ProjectView_t ProjectView)
{ {
extern const char *Txt_No_INDEX; extern const char *Txt_No_INDEX;
extern const char *Txt_PROJECT_ORDER_HELP[Prj_NUM_ORDERS]; extern const char *Txt_PROJECT_ORDER_HELP[Prj_NUM_ORDERS];
@ -1040,7 +1024,7 @@ static void Prj_ShowProjectsHead (struct Prj_Projects *Projects,
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
/***** Column for number of project *****/ /***** Column for number of project *****/
switch (ProjectView) switch (Projects->View)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
HTM_TH (Txt_No_INDEX,HTM_HEAD_CENTER); HTM_TH (Txt_No_INDEX,HTM_HEAD_CENTER);
@ -1050,7 +1034,7 @@ static void Prj_ShowProjectsHead (struct Prj_Projects *Projects,
} }
/***** Column for contextual icons *****/ /***** Column for contextual icons *****/
switch (ProjectView) switch (Projects->View)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
HTM_TH_Span (NULL,HTM_HEAD_CENTER,1,1,"CONTEXT_COL"); HTM_TH_Span (NULL,HTM_HEAD_CENTER,1,1,"CONTEXT_COL");
@ -1066,7 +1050,7 @@ static void Prj_ShowProjectsHead (struct Prj_Projects *Projects,
{ {
HTM_TH_Begin (HTM_HEAD_LEFT); HTM_TH_Begin (HTM_HEAD_LEFT);
switch (ProjectView) switch (Projects->View)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
case Prj_FILE_BROWSER_PROJECT: case Prj_FILE_BROWSER_PROJECT:
@ -1118,7 +1102,7 @@ static void Prj_ShowTableAllProjectsHead (void)
HTM_TH (Txt_Assigned_QUESTION ,HTM_HEAD_LEFT); HTM_TH (Txt_Assigned_QUESTION ,HTM_HEAD_LEFT);
HTM_TH (Txt_Number_of_students,HTM_HEAD_LEFT); HTM_TH (Txt_Number_of_students,HTM_HEAD_LEFT);
for (NumRoleToShow = 0; for (NumRoleToShow = 0;
NumRoleToShow < Brw_NUM_ROLES_TO_SHOW; NumRoleToShow < Prj_NUM_ROLES_TO_SHOW;
NumRoleToShow++) NumRoleToShow++)
HTM_TH (Txt_PROJECT_ROLES_PLURAL_Abc[Prj_RolesToShow[NumRoleToShow]],HTM_HEAD_LEFT); HTM_TH (Txt_PROJECT_ROLES_PLURAL_Abc[Prj_RolesToShow[NumRoleToShow]],HTM_HEAD_LEFT);
HTM_TH (Txt_Proposal ,HTM_HEAD_LEFT); HTM_TH (Txt_Proposal ,HTM_HEAD_LEFT);
@ -1278,11 +1262,10 @@ void Prj_ShowOneProjectWithFileBrowser (struct Prj_Projects *Projects)
/***** Begin table *****/ /***** Begin table *****/
HTM_TABLE_BeginWidePadding (2); HTM_TABLE_BeginWidePadding (2);
/***** Write project head *****/ /***** Table head and project *****/
Prj_ShowProjectsHead (Projects,Prj_FILE_BROWSER_PROJECT); Projects->View = Prj_FILE_BROWSER_PROJECT;
Prj_ShowProjectsHead (Projects);
/***** Show project *****/ Prj_ShowProjectRow (Projects,0);
Prj_ShowProjectRow (Projects,Prj_FILE_BROWSER_PROJECT,0);
/***** End table *****/ /***** End table *****/
HTM_TABLE_End (); HTM_TABLE_End ();
@ -1346,11 +1329,10 @@ void Prj_PrintOneProject (void)
/***** Begin table *****/ /***** Begin table *****/
HTM_TABLE_BeginWideMarginPadding (2); HTM_TABLE_BeginWideMarginPadding (2);
/***** Table head *****/ /***** Table head and project *****/
Prj_ShowProjectsHead (&Projects,Prj_PRINT_ONE_PROJECT); Projects.View = Prj_PRINT_ONE_PROJECT;
Prj_ShowProjectsHead (&Projects);
/***** Write project *****/ Prj_ShowProjectRow (&Projects,0);
Prj_ShowProjectRow (&Projects,Prj_PRINT_ONE_PROJECT,0);
/***** End table *****/ /***** End table *****/
HTM_TABLE_End (); HTM_TABLE_End ();
@ -1364,12 +1346,9 @@ void Prj_PrintOneProject (void)
/*****************************************************************************/ /*****************************************************************************/
static void Prj_ShowProjectRow (struct Prj_Projects *Projects, static void Prj_ShowProjectRow (struct Prj_Projects *Projects,
Prj_ProjectView_t ProjectView,
unsigned NumIndex) unsigned NumIndex)
{ {
extern const char *Txt_Actions[Act_NUM_ACTIONS]; extern const char *Txt_Actions[Act_NUM_ACTIONS];
extern const char *Txt_See_more;
extern const char *Txt_See_less;
extern const char *Txt_Proposal; extern const char *Txt_Proposal;
extern const char *Txt_PROJECT_STATUS[Prj_NUM_PROPOSAL_TYPES]; extern const char *Txt_PROJECT_STATUS[Prj_NUM_PROPOSAL_TYPES];
extern const char *Txt_Description; extern const char *Txt_Description;
@ -1403,7 +1382,7 @@ static void Prj_ShowProjectRow (struct Prj_Projects *Projects,
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
/* Number of project */ /* Number of project */
switch (ProjectView) switch (Projects->View)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
HTM_TD_Begin ("rowspan=\"4\" class=\"RT BIG_INDEX_%s %s\"", HTM_TD_Begin ("rowspan=\"4\" class=\"RT BIG_INDEX_%s %s\"",
@ -1422,7 +1401,7 @@ static void Prj_ShowProjectRow (struct Prj_Projects *Projects,
} }
/* Forms to remove/edit this project */ /* Forms to remove/edit this project */
switch (ProjectView) switch (Projects->View)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
HTM_TD_Begin ("rowspan=\"4\" class=\"CONTEXT_COL %s\"", HTM_TD_Begin ("rowspan=\"4\" class=\"CONTEXT_COL %s\"",
@ -1438,7 +1417,7 @@ static void Prj_ShowProjectRow (struct Prj_Projects *Projects,
UniqueId++; UniqueId++;
if (asprintf (&Id,"prj_creat_%u",UniqueId) < 0) if (asprintf (&Id,"prj_creat_%u",UniqueId) < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
switch (ProjectView) switch (Projects->View)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s %s\"", HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s %s\"",
@ -1462,7 +1441,7 @@ static void Prj_ShowProjectRow (struct Prj_Projects *Projects,
UniqueId++; UniqueId++;
if (asprintf (&Id,"prj_modif_%u",UniqueId) < 0) if (asprintf (&Id,"prj_modif_%u",UniqueId) < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
switch (ProjectView) switch (Projects->View)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s %s\"", HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s %s\"",
@ -1483,7 +1462,7 @@ static void Prj_ShowProjectRow (struct Prj_Projects *Projects,
free (Id); free (Id);
/* Project title */ /* Project title */
switch (ProjectView) switch (Projects->View)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
HTM_TD_Begin ("class=\"LT %s\"",The_GetColorRows ()); HTM_TD_Begin ("class=\"LT %s\"",The_GetColorRows ());
@ -1514,59 +1493,27 @@ static void Prj_ShowProjectRow (struct Prj_Projects *Projects,
HTM_TD_End (); HTM_TD_End ();
/* Department */ /* Department */
Prj_ShowOneProjectDepartment (&Projects->Prj,ProjectView); Prj_ShowOneProjectDepartment (Projects);
HTM_TR_End (); HTM_TR_End ();
/***** Review status *****/ /***** Review status *****/
Prj_ShowProjectReviewStatus (Projects,ProjectView); Prj_ShowProjectReviewStatus (Projects);
/***** Assigned? *****/ /***** Assigned? *****/
Prj_ShowProjectAssigned (Projects,ProjectView,&Faults); Prj_ShowProjectAssigned (Projects,&Faults);
/***** Number of students *****/ /***** Number of students *****/
Prj_ShowProjectNumStds (Projects,ProjectView,&Faults); Prj_ShowProjectNumStds (Projects,&Faults);
/***** Project members *****/ /***** Project members *****/
Prj_ShowOneProjectMembers (Projects,ProjectView); Prj_ShowProjectMembers (Projects);
/***** Link to show hidden info *****/ /***** Link to show hidden info *****/
switch (ProjectView) Prj_ShowOneProjectLinkToShowHiddenInfo (Projects,UniqueId);
{
case Prj_LIST_PROJECTS:
HTM_TR_Begin ("id=\"prj_exp_%u\"",UniqueId);
HTM_TD_Begin ("colspan=\"6\" class=\"CM %s\"",
The_GetColorRows ());
Prj_PutIconToToggleProject (UniqueId,"angle-down.svg",Txt_See_more);
HTM_TD_End ();
HTM_TR_End ();
HTM_TR_Begin ("id=\"prj_con_%u\" style=\"display:none;\"",UniqueId);
HTM_TD_Begin ("colspan=\"6\" class=\"CM %s\"",
The_GetColorRows ());
Prj_PutIconToToggleProject (UniqueId,"angle-up.svg",Txt_See_less);
HTM_TD_End ();
HTM_TR_End ();
break;
case Prj_FILE_BROWSER_PROJECT:
HTM_TR_Begin ("id=\"prj_exp_%u\"",UniqueId);
HTM_TD_Begin ("colspan=\"5\" class=\"CM\"");
Prj_PutIconToToggleProject (UniqueId,"angle-down.svg",Txt_See_more);
HTM_TD_End ();
HTM_TR_End ();
HTM_TR_Begin ("id=\"prj_con_%u\" style=\"display:none;\"",UniqueId);
HTM_TD_Begin ("colspan=\"5\" class=\"CM\"");
Prj_PutIconToToggleProject (UniqueId,"angle-up.svg",Txt_See_less);
HTM_TD_End ();
HTM_TR_End ();
break;
default:
break;
}
/***** Proposal *****/ /***** Proposal *****/
switch (ProjectView) switch (Projects->View)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
HTM_TR_Begin ("id=\"prj_pro_%u\" style=\"display:none;\"",UniqueId); HTM_TR_Begin ("id=\"prj_pro_%u\" style=\"display:none;\"",UniqueId);
@ -1587,7 +1534,7 @@ static void Prj_ShowProjectRow (struct Prj_Projects *Projects,
HTM_TxtColon (Txt_Proposal); HTM_TxtColon (Txt_Proposal);
HTM_TD_End (); HTM_TD_End ();
switch (ProjectView) switch (Projects->View)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
HTM_TD_Begin ("colspan=\"2\" class=\"LT %s_%s %s\"", HTM_TD_Begin ("colspan=\"2\" class=\"LT %s_%s %s\"",
@ -1606,22 +1553,22 @@ static void Prj_ShowProjectRow (struct Prj_Projects *Projects,
/***** Write rows of data of this project *****/ /***** Write rows of data of this project *****/
/* Description of the project */ /* Description of the project */
Prj_ShowOneProjectTxtField (&Projects->Prj,ProjectView,"prj_dsc_",UniqueId, Prj_ShowOneProjectTxtField (Projects,"prj_dsc_",UniqueId,
Txt_Description,Projects->Prj.Description, Txt_Description,Projects->Prj.Description,
Faults.WrongDescription); Faults.WrongDescription);
/* Required knowledge to carry out the project */ /* Required knowledge to carry out the project */
Prj_ShowOneProjectTxtField (&Projects->Prj,ProjectView,"prj_knw_",UniqueId, Prj_ShowOneProjectTxtField (Projects,"prj_knw_",UniqueId,
Txt_Required_knowledge,Projects->Prj.Knowledge, Txt_Required_knowledge,Projects->Prj.Knowledge,
false); // No warning false); // No warning
/* Required materials to carry out the project */ /* Required materials to carry out the project */
Prj_ShowOneProjectTxtField (&Projects->Prj,ProjectView,"prj_mtr_",UniqueId, Prj_ShowOneProjectTxtField (Projects,"prj_mtr_",UniqueId,
Txt_Required_materials,Projects->Prj.Materials, Txt_Required_materials,Projects->Prj.Materials,
false); // No warning false); // No warning
/* Link to view more info about the project */ /* Link to view more info about the project */
Prj_ShowOneProjectURL (&Projects->Prj,ProjectView,"prj_url_",UniqueId); Prj_ShowOneProjectURL (Projects,"prj_url_",UniqueId);
/***** Free anchor string *****/ /***** Free anchor string *****/
Frm_FreeAnchorStr (Anchor); Frm_FreeAnchorStr (Anchor);
@ -1631,8 +1578,7 @@ static void Prj_ShowProjectRow (struct Prj_Projects *Projects,
/********* When listing a project, show one row with review status ***********/ /********* When listing a project, show one row with review status ***********/
/*****************************************************************************/ /*****************************************************************************/
static void Prj_ShowProjectReviewStatus (const struct Prj_Projects *Projects, static void Prj_ShowProjectReviewStatus (const struct Prj_Projects *Projects)
Prj_ProjectView_t ProjectView)
{ {
extern const char *Txt_Review; extern const char *Txt_Review;
extern const char *Txt_PROJECT_REVIEW_SINGUL[Prj_NUM_REVIEW_STATUS]; extern const char *Txt_PROJECT_REVIEW_SINGUL[Prj_NUM_REVIEW_STATUS];
@ -1643,7 +1589,7 @@ static void Prj_ShowProjectReviewStatus (const struct Prj_Projects *Projects,
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
switch (ProjectView) switch (Projects->View)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
HTM_TD_Begin ("colspan=\"2\" class=\"RT %s_%s %s\"", HTM_TD_Begin ("colspan=\"2\" class=\"RT %s_%s %s\"",
@ -1657,7 +1603,7 @@ static void Prj_ShowProjectReviewStatus (const struct Prj_Projects *Projects,
HTM_TxtColon (Txt_Review); HTM_TxtColon (Txt_Review);
HTM_TD_End (); HTM_TD_End ();
switch (ProjectView) switch (Projects->View)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
HTM_TD_Begin ("colspan=\"2\" class=\"LT %s_%s %s\"", HTM_TD_Begin ("colspan=\"2\" class=\"LT %s_%s %s\"",
@ -1687,7 +1633,6 @@ static void Prj_ShowProjectReviewStatus (const struct Prj_Projects *Projects,
/*****************************************************************************/ /*****************************************************************************/
static void Prj_ShowProjectAssigned (const struct Prj_Projects *Projects, static void Prj_ShowProjectAssigned (const struct Prj_Projects *Projects,
Prj_ProjectView_t ProjectView,
const struct Prj_Faults *Faults) const struct Prj_Faults *Faults)
{ {
extern const char *Txt_Assigned_QUESTION; extern const char *Txt_Assigned_QUESTION;
@ -1701,7 +1646,7 @@ static void Prj_ShowProjectAssigned (const struct Prj_Projects *Projects,
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
switch (ProjectView) switch (Projects->View)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
HTM_TD_Begin ("colspan=\"2\" class=\"RT %s_%s %s\"", HTM_TD_Begin ("colspan=\"2\" class=\"RT %s_%s %s\"",
@ -1715,7 +1660,7 @@ static void Prj_ShowProjectAssigned (const struct Prj_Projects *Projects,
HTM_TxtColon (Txt_Assigned_QUESTION); HTM_TxtColon (Txt_Assigned_QUESTION);
HTM_TD_End (); HTM_TD_End ();
switch (ProjectView) switch (Projects->View)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
HTM_TD_Begin ("colspan=\"2\" class=\"LT %s_%s %s\"", HTM_TD_Begin ("colspan=\"2\" class=\"LT %s_%s %s\"",
@ -1744,7 +1689,6 @@ static void Prj_ShowProjectAssigned (const struct Prj_Projects *Projects,
/*****************************************************************************/ /*****************************************************************************/
static void Prj_ShowProjectNumStds (const struct Prj_Projects *Projects, static void Prj_ShowProjectNumStds (const struct Prj_Projects *Projects,
Prj_ProjectView_t ProjectView,
const struct Prj_Faults *Faults) const struct Prj_Faults *Faults)
{ {
extern const char *Txt_Number_of_students; extern const char *Txt_Number_of_students;
@ -1755,7 +1699,7 @@ static void Prj_ShowProjectNumStds (const struct Prj_Projects *Projects,
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
switch (ProjectView) switch (Projects->View)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
HTM_TD_Begin ("colspan=\"2\" class=\"RT %s_%s %s\"", HTM_TD_Begin ("colspan=\"2\" class=\"RT %s_%s %s\"",
@ -1769,7 +1713,7 @@ static void Prj_ShowProjectNumStds (const struct Prj_Projects *Projects,
HTM_TxtColon (Txt_Number_of_students); HTM_TxtColon (Txt_Number_of_students);
HTM_TD_End (); HTM_TD_End ();
switch (ProjectView) switch (Projects->View)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
HTM_TD_Begin ("colspan=\"2\" class=\"LT %s_%s %s\"", HTM_TD_Begin ("colspan=\"2\" class=\"LT %s_%s %s\"",
@ -1788,6 +1732,248 @@ static void Prj_ShowProjectNumStds (const struct Prj_Projects *Projects,
HTM_TR_End (); HTM_TR_End ();
} }
/*****************************************************************************/
/****** When listing a project, show several rows with projects members ******/
/*****************************************************************************/
static void Prj_ShowProjectMembers (struct Prj_Projects *Projects)
{
unsigned NumRoleToShow;
for (NumRoleToShow = 0;
NumRoleToShow < Prj_NUM_ROLES_TO_SHOW;
NumRoleToShow++)
Prj_ShowProjectMembersWithARole (Projects,Prj_RolesToShow[NumRoleToShow]);
}
/*****************************************************************************/
/*** When listing a project, show one row with projects members with a role **/
/*****************************************************************************/
static void Prj_ShowProjectMembersWithARole (struct Prj_Projects *Projects,
Prj_RoleInProject_t RoleInPrj)
{
;
extern const char *Txt_PROJECT_ROLES_SINGUL_Abc[Prj_NUM_ROLES_IN_PROJECT];
extern const char *Txt_PROJECT_ROLES_PLURAL_Abc[Prj_NUM_ROLES_IN_PROJECT];
static const Act_Action_t ActionReqRemUsr[Prj_NUM_ROLES_IN_PROJECT] =
{
[Prj_ROLE_UNK] = ActUnk, // Unknown
[Prj_ROLE_STD] = ActReqRemStdPrj, // Student
[Prj_ROLE_TUT] = ActReqRemTutPrj, // Tutor
[Prj_ROLE_EVL] = ActReqRemEvlPrj, // Evaluator
};
static const Act_Action_t ActionReqAddUsr[Prj_NUM_ROLES_IN_PROJECT] =
{
[Prj_ROLE_UNK] = ActUnk, // Unknown
[Prj_ROLE_STD] = ActReqAddStdPrj, // Student
[Prj_ROLE_TUT] = ActReqAddTutPrj, // Tutor
[Prj_ROLE_EVL] = ActReqAddEvlPrj, // Evaluator
};
static const char *ClassPhoto[PhoSha_NUM_SHAPES] =
{
[PhoSha_SHAPE_CIRCLE ] = "PHOTOC21x28",
[PhoSha_SHAPE_ELLIPSE ] = "PHOTOE21x28",
[PhoSha_SHAPE_OVAL ] = "PHOTOO21x28",
[PhoSha_SHAPE_RECTANGLE] = "PHOTOR21x28",
};
MYSQL_RES *mysql_res;
MYSQL_ROW row;
bool WriteRow;
unsigned NumUsr;
unsigned NumUsrs;
const char *ClassLabel;
const char *ClassData;
/***** Set CSS classes *****/
ClassLabel = (Projects->Prj.Hidden == Prj_HIDDEN) ? "ASG_LABEL_LIGHT" :
"ASG_LABEL";
ClassData = (Projects->Prj.Hidden == Prj_HIDDEN) ? "DAT_LIGHT" :
"DAT";
/***** Get users in project from database *****/
NumUsrs = Prj_DB_GetUsrsInPrj (&mysql_res,Projects->Prj.PrjCod,RoleInPrj);
WriteRow = (NumUsrs != 0 ||
Projects->View == Prj_EDIT_ONE_PROJECT);
if (WriteRow)
{
/***** Begin row with label and listing of users *****/
HTM_TR_Begin (NULL);
/* Column for label */
switch (Projects->View)
{
case Prj_LIST_PROJECTS:
HTM_TD_Begin ("colspan=\"4\" class=\"RT %s_%s %s\"",
ClassLabel,The_GetSuffix (),The_GetColorRows ());
HTM_TxtColon (NumUsrs == 1 ? Txt_PROJECT_ROLES_SINGUL_Abc[RoleInPrj] :
Txt_PROJECT_ROLES_PLURAL_Abc[RoleInPrj]);
break;
case Prj_FILE_BROWSER_PROJECT:
case Prj_PRINT_ONE_PROJECT:
HTM_TD_Begin ("colspan=\"2\" class=\"RT %s_%s\"",
ClassLabel,The_GetSuffix ());
HTM_TxtColon (NumUsrs == 1 ? Txt_PROJECT_ROLES_SINGUL_Abc[RoleInPrj] :
Txt_PROJECT_ROLES_PLURAL_Abc[RoleInPrj]);
break;
case Prj_EDIT_ONE_PROJECT:
HTM_TD_Begin ("class=\"RT %s_%s\"",
ClassLabel,The_GetSuffix ());
HTM_TxtColon (Txt_PROJECT_ROLES_PLURAL_Abc[RoleInPrj]);
break;
}
HTM_TD_End ();
/* Begin column with list of users */
switch (Projects->View)
{
case Prj_LIST_PROJECTS:
HTM_TD_Begin ("colspan=\"2\" class=\"LT %s_%s %s\"",
ClassData,The_GetSuffix (),
The_GetColorRows ());
break;
case Prj_FILE_BROWSER_PROJECT:
case Prj_PRINT_ONE_PROJECT:
HTM_TD_Begin ("colspan=\"2\" class=\"LT %s_%s\"",
ClassData,The_GetSuffix ());
break;
case Prj_EDIT_ONE_PROJECT:
HTM_TD_Begin ("colspan=\"2\" class=\"LT DAT_%s\"",
The_GetSuffix ());
break;
}
/***** Begin table with all members with this role *****/
HTM_TABLE_BeginPadding (2);
/***** Write users *****/
for (NumUsr = 0;
NumUsr < NumUsrs;
NumUsr++)
{
/* Get user's code */
row = mysql_fetch_row (mysql_res);
Gbl.Usrs.Other.UsrDat.UsrCod = Str_ConvertStrCodToLongCod (row[0]);
/* Get user's data */
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat,
Usr_DONT_GET_PREFS,
Usr_DONT_GET_ROLE_IN_CURRENT_CRS))
{
/* Begin row for this user */
HTM_TR_Begin (NULL);
/* Icon to remove user */
if (Projects->View == Prj_EDIT_ONE_PROJECT)
{
HTM_TD_Begin ("class=\"PRJ_MEMBER_ICO\"");
Lay_PutContextualLinkOnlyIcon (ActionReqRemUsr[RoleInPrj],NULL,
Prj_PutCurrentParams,Projects,
"trash.svg",Ico_RED);
HTM_TD_End ();
}
/* Put user's photo */
HTM_TD_Begin ("class=\"PRJ_MEMBER_PHO\"");
Pho_ShowUsrPhotoIfAllowed (&Gbl.Usrs.Other.UsrDat,
ClassPhoto[Gbl.Prefs.PhotoShape],Pho_ZOOM,
false);
HTM_TD_End ();
/* Write user's name */
HTM_TD_Begin ("class=\"LM %s_%s\"",
Projects->Prj.Hidden == Prj_HIDDEN ? "MSG_AUT_LIGHT" :
"MSG_AUT",
The_GetSuffix ());
HTM_Txt (Gbl.Usrs.Other.UsrDat.FullName);
HTM_TD_End ();
/* End row for this user */
HTM_TR_End ();
}
}
/***** Row to add a new user *****/
switch (Projects->View)
{
case Prj_EDIT_ONE_PROJECT:
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"PRJ_MEMBER_ICO\"");
Ico_PutContextualIconToAdd (ActionReqAddUsr[RoleInPrj],NULL,
Prj_PutCurrentParams,Projects);
HTM_TD_End ();
HTM_TD_Begin ("class=\"PRJ_MEMBER_PHO\""); // Column for photo
HTM_TD_End ();
HTM_TD_Begin ("class=\"LM MSG_AUT_%s\"", // Column for name
The_GetSuffix ());
HTM_TD_End ();
HTM_TR_End ();
break;
default:
break;
}
/***** End table with all members with this role *****/
HTM_TABLE_End ();
/***** End row with label and listing of users *****/
HTM_TD_End ();
HTM_TR_End ();
}
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
}
/*****************************************************************************/
/***** When listing a project, show one row with link to show hidden info ****/
/*****************************************************************************/
static void Prj_ShowOneProjectLinkToShowHiddenInfo (const struct Prj_Projects *Projects,
unsigned UniqueId)
{
extern const char *Txt_See_more;
extern const char *Txt_See_less;
switch (Projects->View)
{
case Prj_LIST_PROJECTS:
HTM_TR_Begin ("id=\"prj_exp_%u\"",UniqueId);
HTM_TD_Begin ("colspan=\"6\" class=\"CM %s\"",
The_GetColorRows ());
Prj_PutIconToToggleProject (UniqueId,"angle-down.svg",Txt_See_more);
HTM_TD_End ();
HTM_TR_End ();
HTM_TR_Begin ("id=\"prj_con_%u\" style=\"display:none;\"",UniqueId);
HTM_TD_Begin ("colspan=\"6\" class=\"CM %s\"",
The_GetColorRows ());
Prj_PutIconToToggleProject (UniqueId,"angle-up.svg",Txt_See_less);
HTM_TD_End ();
HTM_TR_End ();
break;
case Prj_FILE_BROWSER_PROJECT:
HTM_TR_Begin ("id=\"prj_exp_%u\"",UniqueId);
HTM_TD_Begin ("colspan=\"5\" class=\"CM\"");
Prj_PutIconToToggleProject (UniqueId,"angle-down.svg",Txt_See_more);
HTM_TD_End ();
HTM_TR_End ();
HTM_TR_Begin ("id=\"prj_con_%u\" style=\"display:none;\"",UniqueId);
HTM_TD_Begin ("colspan=\"5\" class=\"CM\"");
Prj_PutIconToToggleProject (UniqueId,"angle-up.svg",Txt_See_less);
HTM_TD_End ();
HTM_TR_End ();
break;
default:
break;
}
}
/*****************************************************************************/ /*****************************************************************************/
/********************** Check if a project has faults ************************/ /********************** Check if a project has faults ************************/
/*****************************************************************************/ /*****************************************************************************/
@ -1963,7 +2149,7 @@ static void Prj_ShowTableAllProjectsOneRow (struct Prj_Project *Prj)
/***** Project members *****/ /***** Project members *****/
for (NumRoleToShow = 0; for (NumRoleToShow = 0;
NumRoleToShow < Brw_NUM_ROLES_TO_SHOW; NumRoleToShow < Prj_NUM_ROLES_TO_SHOW;
NumRoleToShow++) NumRoleToShow++)
Prj_ShowTableAllProjectsMembersWithARole (Prj,Prj_RolesToShow[NumRoleToShow]); Prj_ShowTableAllProjectsMembersWithARole (Prj,Prj_RolesToShow[NumRoleToShow]);
@ -1994,27 +2180,26 @@ static void Prj_ShowTableAllProjectsOneRow (struct Prj_Project *Prj)
/****************** Show department associated to project ********************/ /****************** Show department associated to project ********************/
/*****************************************************************************/ /*****************************************************************************/
static void Prj_ShowOneProjectDepartment (const struct Prj_Project *Prj, static void Prj_ShowOneProjectDepartment (const struct Prj_Projects *Projects)
Prj_ProjectView_t ProjectView)
{ {
struct Dpt_Department Dpt; struct Dpt_Department Dpt;
bool PutLink; bool PutLink;
const char *ClassData; const char *ClassData;
/***** Set CSS classes *****/ /***** Set CSS classes *****/
ClassData = (Prj->Hidden == Prj_HIDDEN) ? "DAT_LIGHT" : ClassData = (Projects->Prj.Hidden == Prj_HIDDEN) ? "DAT_LIGHT" :
"DAT"; "DAT";
/***** Get data of department *****/ /***** Get data of department *****/
Dpt.DptCod = Prj->DptCod; Dpt.DptCod = Projects->Prj.DptCod;
Dpt_GetDataOfDepartmentByCod (&Dpt); Dpt_GetDataOfDepartmentByCod (&Dpt);
/***** Show department *****/ /***** Show department *****/
PutLink = (Dpt.WWW[0] && PutLink = (Dpt.WWW[0] &&
(ProjectView == Prj_LIST_PROJECTS || (Projects->View == Prj_LIST_PROJECTS ||
ProjectView == Prj_FILE_BROWSER_PROJECT)); Projects->View == Prj_FILE_BROWSER_PROJECT));
switch (ProjectView) switch (Projects->View)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
HTM_TD_Begin ("class=\"LT %s_%s %s\"", HTM_TD_Begin ("class=\"LT %s_%s %s\"",
@ -2058,8 +2243,7 @@ static void Prj_ShowTableAllProjectsDepartment (const struct Prj_Project *Prj)
/********************** Show text field about a project **********************/ /********************** Show text field about a project **********************/
/*****************************************************************************/ /*****************************************************************************/
static void Prj_ShowOneProjectTxtField (struct Prj_Project *Prj, static void Prj_ShowOneProjectTxtField (const struct Prj_Projects *Projects,
Prj_ProjectView_t ProjectView,
const char *id,unsigned UniqueId, const char *id,unsigned UniqueId,
const char *Label,char *TxtField, const char *Label,char *TxtField,
bool Warning) bool Warning)
@ -2068,13 +2252,13 @@ static void Prj_ShowOneProjectTxtField (struct Prj_Project *Prj,
const char *ClassData; const char *ClassData;
/***** Set CSS classes *****/ /***** Set CSS classes *****/
ClassLabel = (Prj->Hidden == Prj_HIDDEN) ? "ASG_LABEL_LIGHT" : ClassLabel = (Projects->Prj.Hidden == Prj_HIDDEN) ? "ASG_LABEL_LIGHT" :
"ASG_LABEL"; "ASG_LABEL";
ClassData = (Prj->Hidden == Prj_HIDDEN) ? "DAT_LIGHT" : ClassData = (Projects->Prj.Hidden == Prj_HIDDEN) ? "DAT_LIGHT" :
"DAT"; "DAT";
/***** Label *****/ /***** Label *****/
switch (ProjectView) switch (Projects->View)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
HTM_TR_Begin ("id=\"%s%u\" style=\"display:none;\"",id,UniqueId); HTM_TR_Begin ("id=\"%s%u\" style=\"display:none;\"",id,UniqueId);
@ -2101,7 +2285,7 @@ static void Prj_ShowOneProjectTxtField (struct Prj_Project *Prj,
/***** Change text format *****/ /***** Change text format *****/
Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML, Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML,
TxtField,Cns_MAX_BYTES_TEXT,false); // Convert from HTML to recpectful HTML TxtField,Cns_MAX_BYTES_TEXT,false); // Convert from HTML to recpectful HTML
switch (ProjectView) switch (Projects->View)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
case Prj_FILE_BROWSER_PROJECT: case Prj_FILE_BROWSER_PROJECT:
@ -2112,7 +2296,7 @@ static void Prj_ShowOneProjectTxtField (struct Prj_Project *Prj,
} }
/***** Text *****/ /***** Text *****/
switch (ProjectView) switch (Projects->View)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
HTM_TD_Begin ("colspan=\"2\" class=\"LT %s_%s %s\"", HTM_TD_Begin ("colspan=\"2\" class=\"LT %s_%s %s\"",
@ -2156,25 +2340,24 @@ static void Prj_ShowTableAllProjectsTxtField (struct Prj_Project *Prj,
/********************** Show URL associated to project ***********************/ /********************** Show URL associated to project ***********************/
/*****************************************************************************/ /*****************************************************************************/
static void Prj_ShowOneProjectURL (const struct Prj_Project *Prj, static void Prj_ShowOneProjectURL (const struct Prj_Projects *Projects,
Prj_ProjectView_t ProjectView,
const char *id,unsigned UniqueId) const char *id,unsigned UniqueId)
{ {
extern const char *Txt_URL; extern const char *Txt_URL;
const char *ClassLabel; const char *ClassLabel;
const char *ClassData; const char *ClassData;
bool PutLink = (Prj->URL[0] && bool PutLink = (Projects->Prj.URL[0] &&
(ProjectView == Prj_LIST_PROJECTS || (Projects->View == Prj_LIST_PROJECTS ||
ProjectView == Prj_FILE_BROWSER_PROJECT)); Projects->View == Prj_FILE_BROWSER_PROJECT));
/***** Set CSS classes *****/ /***** Set CSS classes *****/
ClassLabel = (Prj->Hidden == Prj_HIDDEN) ? "ASG_LABEL_LIGHT" : ClassLabel = (Projects->Prj.Hidden == Prj_HIDDEN) ? "ASG_LABEL_LIGHT" :
"ASG_LABEL"; "ASG_LABEL";
ClassData = (Prj->Hidden == Prj_HIDDEN) ? "DAT_LIGHT" : ClassData = (Projects->Prj.Hidden == Prj_HIDDEN) ? "DAT_LIGHT" :
"DAT"; "DAT";
/***** Write row with label and text *****/ /***** Write row with label and text *****/
switch (ProjectView) switch (Projects->View)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
HTM_TR_Begin ("id=\"%s%u\" style=\"display:none;\"",id,UniqueId); HTM_TR_Begin ("id=\"%s%u\" style=\"display:none;\"",id,UniqueId);
@ -2198,7 +2381,7 @@ static void Prj_ShowOneProjectURL (const struct Prj_Project *Prj,
HTM_TxtColon (Txt_URL); HTM_TxtColon (Txt_URL);
HTM_TD_End (); HTM_TD_End ();
switch (ProjectView) switch (Projects->View)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
HTM_TD_Begin ("colspan=\"2\" class=\"LT %s_%s %s\"", HTM_TD_Begin ("colspan=\"2\" class=\"LT %s_%s %s\"",
@ -2211,8 +2394,8 @@ static void Prj_ShowOneProjectURL (const struct Prj_Project *Prj,
break; break;
} }
if (PutLink) if (PutLink)
HTM_A_Begin ("href=\"%s\" target=\"_blank\"",Prj->URL); HTM_A_Begin ("href=\"%s\" target=\"_blank\"",Projects->Prj.URL);
HTM_Txt (Prj->URL); HTM_Txt (Projects->Prj.URL);
if (PutLink) if (PutLink)
HTM_A_End (); HTM_A_End ();
HTM_TD_End (); HTM_TD_End ();
@ -2236,205 +2419,9 @@ static void Prj_ShowTableAllProjectsURL (const struct Prj_Project *Prj)
} }
/*****************************************************************************/ /*****************************************************************************/
/************** Show projects members when showing one project ***************/ /***** Show table cell for members with a role in table with all projects ****/
/*****************************************************************************/ /*****************************************************************************/
static void Prj_ShowOneProjectMembers (struct Prj_Projects *Projects,
Prj_ProjectView_t ProjectView)
{
unsigned NumRoleToShow;
for (NumRoleToShow = 0;
NumRoleToShow < Brw_NUM_ROLES_TO_SHOW;
NumRoleToShow++)
Prj_ShowOneProjectMembersWithARole (Projects,ProjectView,
Prj_RolesToShow[NumRoleToShow]);
}
/*****************************************************************************/
/************************* Show users row in a project ***********************/
/*****************************************************************************/
static void Prj_ShowOneProjectMembersWithARole (struct Prj_Projects *Projects,
Prj_ProjectView_t ProjectView,
Prj_RoleInProject_t RoleInPrj)
{
;
extern const char *Txt_PROJECT_ROLES_SINGUL_Abc[Prj_NUM_ROLES_IN_PROJECT];
extern const char *Txt_PROJECT_ROLES_PLURAL_Abc[Prj_NUM_ROLES_IN_PROJECT];
static const Act_Action_t ActionReqRemUsr[Prj_NUM_ROLES_IN_PROJECT] =
{
[Prj_ROLE_UNK] = ActUnk, // Unknown
[Prj_ROLE_STD] = ActReqRemStdPrj, // Student
[Prj_ROLE_TUT] = ActReqRemTutPrj, // Tutor
[Prj_ROLE_EVL] = ActReqRemEvlPrj, // Evaluator
};
static const Act_Action_t ActionReqAddUsr[Prj_NUM_ROLES_IN_PROJECT] =
{
[Prj_ROLE_UNK] = ActUnk, // Unknown
[Prj_ROLE_STD] = ActReqAddStdPrj, // Student
[Prj_ROLE_TUT] = ActReqAddTutPrj, // Tutor
[Prj_ROLE_EVL] = ActReqAddEvlPrj, // Evaluator
};
static const char *ClassPhoto[PhoSha_NUM_SHAPES] =
{
[PhoSha_SHAPE_CIRCLE ] = "PHOTOC21x28",
[PhoSha_SHAPE_ELLIPSE ] = "PHOTOE21x28",
[PhoSha_SHAPE_OVAL ] = "PHOTOO21x28",
[PhoSha_SHAPE_RECTANGLE] = "PHOTOR21x28",
};
MYSQL_RES *mysql_res;
MYSQL_ROW row;
bool WriteRow;
unsigned NumUsr;
unsigned NumUsrs;
const char *ClassLabel;
const char *ClassData;
/***** Set CSS classes *****/
ClassLabel = (Projects->Prj.Hidden == Prj_HIDDEN) ? "ASG_LABEL_LIGHT" :
"ASG_LABEL";
ClassData = (Projects->Prj.Hidden == Prj_HIDDEN) ? "DAT_LIGHT" :
"DAT";
/***** Get users in project from database *****/
NumUsrs = Prj_DB_GetUsrsInPrj (&mysql_res,Projects->Prj.PrjCod,RoleInPrj);
WriteRow = (NumUsrs != 0 ||
ProjectView == Prj_EDIT_ONE_PROJECT);
if (WriteRow)
{
/***** Begin row with label and listing of users *****/
HTM_TR_Begin (NULL);
/* Column for label */
switch (ProjectView)
{
case Prj_LIST_PROJECTS:
HTM_TD_Begin ("colspan=\"4\" class=\"RT %s_%s %s\"",
ClassLabel,The_GetSuffix (),The_GetColorRows ());
HTM_TxtColon (NumUsrs == 1 ? Txt_PROJECT_ROLES_SINGUL_Abc[RoleInPrj] :
Txt_PROJECT_ROLES_PLURAL_Abc[RoleInPrj]);
break;
case Prj_FILE_BROWSER_PROJECT:
case Prj_PRINT_ONE_PROJECT:
HTM_TD_Begin ("colspan=\"2\" class=\"RT %s_%s\"",
ClassLabel,The_GetSuffix ());
HTM_TxtColon (NumUsrs == 1 ? Txt_PROJECT_ROLES_SINGUL_Abc[RoleInPrj] :
Txt_PROJECT_ROLES_PLURAL_Abc[RoleInPrj]);
break;
case Prj_EDIT_ONE_PROJECT:
HTM_TD_Begin ("class=\"RT %s_%s\"",
ClassLabel,The_GetSuffix ());
HTM_TxtColon (Txt_PROJECT_ROLES_PLURAL_Abc[RoleInPrj]);
break;
}
HTM_TD_End ();
/* Begin column with list of users */
switch (ProjectView)
{
case Prj_LIST_PROJECTS:
HTM_TD_Begin ("colspan=\"2\" class=\"LT %s_%s %s\"",
ClassData,The_GetSuffix (),
The_GetColorRows ());
break;
case Prj_FILE_BROWSER_PROJECT:
case Prj_PRINT_ONE_PROJECT:
HTM_TD_Begin ("colspan=\"2\" class=\"LT %s_%s\"",
ClassData,The_GetSuffix ());
break;
case Prj_EDIT_ONE_PROJECT:
HTM_TD_Begin ("colspan=\"2\" class=\"LT DAT_%s\"",
The_GetSuffix ());
break;
}
/***** Begin table with all members with this role *****/
HTM_TABLE_BeginPadding (2);
/***** Write users *****/
for (NumUsr = 0;
NumUsr < NumUsrs;
NumUsr++)
{
/* Get user's code */
row = mysql_fetch_row (mysql_res);
Gbl.Usrs.Other.UsrDat.UsrCod = Str_ConvertStrCodToLongCod (row[0]);
/* Get user's data */
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat,
Usr_DONT_GET_PREFS,
Usr_DONT_GET_ROLE_IN_CURRENT_CRS))
{
/* Begin row for this user */
HTM_TR_Begin (NULL);
/* Icon to remove user */
if (ProjectView == Prj_EDIT_ONE_PROJECT)
{
HTM_TD_Begin ("class=\"PRJ_MEMBER_ICO\"");
Lay_PutContextualLinkOnlyIcon (ActionReqRemUsr[RoleInPrj],NULL,
Prj_PutCurrentParams,Projects,
"trash.svg",Ico_RED);
HTM_TD_End ();
}
/* Put user's photo */
HTM_TD_Begin ("class=\"PRJ_MEMBER_PHO\"");
Pho_ShowUsrPhotoIfAllowed (&Gbl.Usrs.Other.UsrDat,
ClassPhoto[Gbl.Prefs.PhotoShape],Pho_ZOOM,
false);
HTM_TD_End ();
/* Write user's name */
HTM_TD_Begin ("class=\"LM %s_%s\"",
Projects->Prj.Hidden == Prj_HIDDEN ? "MSG_AUT_LIGHT" :
"MSG_AUT",
The_GetSuffix ());
HTM_Txt (Gbl.Usrs.Other.UsrDat.FullName);
HTM_TD_End ();
/* End row for this user */
HTM_TR_End ();
}
}
/***** Row to add a new user *****/
switch (ProjectView)
{
case Prj_EDIT_ONE_PROJECT:
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"PRJ_MEMBER_ICO\"");
Ico_PutContextualIconToAdd (ActionReqAddUsr[RoleInPrj],NULL,
Prj_PutCurrentParams,Projects);
HTM_TD_End ();
HTM_TD_Begin ("class=\"PRJ_MEMBER_PHO\""); // Column for photo
HTM_TD_End ();
HTM_TD_Begin ("class=\"LM MSG_AUT_%s\"", // Column for name
The_GetSuffix ());
HTM_TD_End ();
HTM_TR_End ();
break;
default:
break;
}
/***** End table with all members with this role *****/
HTM_TABLE_End ();
/***** End row with label and listing of users *****/
HTM_TD_End ();
HTM_TR_End ();
}
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
}
static void Prj_ShowTableAllProjectsMembersWithARole (const struct Prj_Project *Prj, static void Prj_ShowTableAllProjectsMembersWithARole (const struct Prj_Project *Prj,
Prj_RoleInProject_t RoleInPrj) Prj_RoleInProject_t RoleInPrj)
{ {
@ -3540,11 +3527,11 @@ static void Prj_PutFormProject (struct Prj_Projects *Projects,
Box_BoxTableBegin (NULL,Txt_Members, Box_BoxTableBegin (NULL,Txt_Members,
NULL,NULL, NULL,NULL,
NULL,Box_NOT_CLOSABLE,2); NULL,Box_NOT_CLOSABLE,2);
Projects->View = Prj_EDIT_ONE_PROJECT;
for (NumRoleToShow = 0; for (NumRoleToShow = 0;
NumRoleToShow < Brw_NUM_ROLES_TO_SHOW; NumRoleToShow < Prj_NUM_ROLES_TO_SHOW;
NumRoleToShow++) NumRoleToShow++)
Prj_ShowOneProjectMembersWithARole (Projects,Prj_EDIT_ONE_PROJECT, Prj_ShowProjectMembersWithARole (Projects,Prj_RolesToShow[NumRoleToShow]);
Prj_RolesToShow[NumRoleToShow]);
Box_BoxTableEnd (); Box_BoxTableEnd ();
} }

View File

@ -146,6 +146,15 @@ typedef enum
Prj_ROLE_EVL = 3, // Evaluator Prj_ROLE_EVL = 3, // Evaluator
} Prj_RoleInProject_t; } Prj_RoleInProject_t;
/***** Type of view when writing one project *****/
typedef enum
{
Prj_LIST_PROJECTS,
Prj_FILE_BROWSER_PROJECT,
Prj_PRINT_ONE_PROJECT,
Prj_EDIT_ONE_PROJECT,
} Prj_ProjectView_t;
/***** Struct to store a project *****/ /***** Struct to store a project *****/
struct Prj_Project struct Prj_Project
{ {
@ -172,6 +181,7 @@ struct Prj_Project
/***** Struct to store context/status of projects *****/ /***** Struct to store context/status of projects *****/
struct Prj_Projects struct Prj_Projects
{ {
Prj_ProjectView_t View;
struct struct
{ {
bool Editable; bool Editable;