Version19.34

This commit is contained in:
Antonio Cañas Vargas 2019-10-14 00:45:46 +02:00
parent a1fbdc99a1
commit a7891916e7
2 changed files with 160 additions and 163 deletions

View File

@ -487,15 +487,15 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD: En OpenSWAD:
ps2pdf source.ps destination.pdf ps2pdf source.ps destination.pdf
*/ */
#define Log_PLATFORM_VERSION "SWAD 19.33.8 (2019-10-13)" #define Log_PLATFORM_VERSION "SWAD 19.34 (2019-10-14)"
#define CSS_FILE "swad19.33.css" #define CSS_FILE "swad19.33.css"
#define JS_FILE "swad19.30.js" #define JS_FILE "swad19.30.js"
/* /*
// TODO: Perico: poner un candado de bloqueo de creación/edición de proyectos (por ejemplo en asignaturas obsoletas) // TODO: Perico: poner un candado de bloqueo de creación/edición de proyectos (por ejemplo en asignaturas obsoletas)
// TODO: En un TFG preasignado sin estudiante tiene que salir un triángulo amarillo
// TODO: En un TFG no preasignado con estudiante tiene que salir un triángulo amarillo
// TODO: Hacer un nuevo rol en los TFG: tutor externo (profesor de áreas no vinculadas con el centro, profesionales de empresas, etc.) // TODO: Hacer un nuevo rol en los TFG: tutor externo (profesor de áreas no vinculadas con el centro, profesionales de empresas, etc.)
Version 19.34: Oct 14, 2019 Code refactoring in projects.
Show warning if preassigned project without students. (245320 lines)
Version 19.33.8: Oct 13, 2019 Fixed bug in tables. (245339 lines) Version 19.33.8: Oct 13, 2019 Fixed bug in tables. (245339 lines)
Version 19.33.7: Oct 13, 2019 Fixed bug in surveys. (245317 lines) Version 19.33.7: Oct 13, 2019 Fixed bug in surveys. (245317 lines)
Version 19.33.6: Oct 13, 2019 Fixed bug in exam announcements. (245299 lines) Version 19.33.6: Oct 13, 2019 Fixed bug in exam announcements. (245299 lines)

View File

@ -169,6 +169,7 @@ static void Prj_ShowOneProjectMembersWithARole (const struct Project *Prj,
static void Prj_ShowTableAllProjectsMembersWithARole (const struct Project *Prj, static void Prj_ShowTableAllProjectsMembersWithARole (const struct Project *Prj,
Prj_RoleInProject_t RoleInProject); Prj_RoleInProject_t RoleInProject);
static unsigned Prj_GetNumUsrsInPrj (long PrjCod,Prj_RoleInProject_t RoleInProject);
static unsigned Prj_GetUsrsInPrj (long PrjCod,Prj_RoleInProject_t RoleInProject, static unsigned Prj_GetUsrsInPrj (long PrjCod,Prj_RoleInProject_t RoleInProject,
MYSQL_RES **mysql_res); MYSQL_RES **mysql_res);
@ -963,8 +964,23 @@ static void Prj_ShowOneProject (unsigned NumIndex,struct Project *Prj,
extern const char *Txt_Required_knowledge; extern const char *Txt_Required_knowledge;
extern const char *Txt_Required_materials; extern const char *Txt_Required_materials;
char *Anchor = NULL; char *Anchor = NULL;
static unsigned UniqueId = 0;
bool ICanViewProjectFiles = Prj_CheckIfICanViewProjectFiles (Prj_GetMyRolesInProject (Prj->PrjCod)); bool ICanViewProjectFiles = Prj_CheckIfICanViewProjectFiles (Prj_GetMyRolesInProject (Prj->PrjCod));
const char *ClassLabel;
const char *ClassDate;
const char *ClassTitle;
const char *ClassData;
unsigned NumStdsInPrj;
static unsigned UniqueId = 0;
/***** Set CSS classes *****/
ClassLabel = (Prj->Hidden == Prj_HIDDEN) ? "ASG_LABEL_LIGHT" :
"ASG_LABEL";
ClassDate = (Prj->Hidden == Prj_HIDDEN) ? "DATE_BLUE_LIGHT" :
"DATE_BLUE";
ClassTitle = (Prj->Hidden == Prj_HIDDEN) ? "ASG_TITLE_LIGHT" :
"ASG_TITLE";
ClassData = (Prj->Hidden == Prj_HIDDEN) ? "DAT_LIGHT" :
"DAT";
/***** Set anchor string *****/ /***** Set anchor string *****/
Frm_SetAnchorStr (Prj->PrjCod,&Anchor); Frm_SetAnchorStr (Prj->PrjCod,&Anchor);
@ -976,9 +992,7 @@ static void Prj_ShowOneProject (unsigned NumIndex,struct Project *Prj,
switch (ProjectView) switch (ProjectView)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
Tbl_TD_Begin ("rowspan=\"3\" class=\"BIG_INDEX %s RIGHT_TOP COLOR%u\"", Tbl_TD_Begin ("rowspan=\"3\" class=\"BIG_INDEX RIGHT_TOP COLOR%u\"",
Prj->Hidden == Prj_HIDDEN ? "DATE_BLUE_LIGHT" :
"DATE_BLUE",
Gbl.RowEvenOdd); Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"%u",NumIndex); fprintf (Gbl.F.Out,"%u",NumIndex);
Tbl_TD_End (); Tbl_TD_End ();
@ -1010,16 +1024,11 @@ static void Prj_ShowOneProject (unsigned NumIndex,struct Project *Prj,
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
Tbl_TD_Begin ("id=\"prj_creat_%u\" class=\"%s LEFT_TOP COLOR%u\"", Tbl_TD_Begin ("id=\"prj_creat_%u\" class=\"%s LEFT_TOP COLOR%u\"",
UniqueId, UniqueId,ClassDate,Gbl.RowEvenOdd);
Prj->Hidden == Prj_HIDDEN ? "DATE_BLUE_LIGHT" :
"DATE_BLUE",
Gbl.RowEvenOdd);
break; break;
default: default:
Tbl_TD_Begin ("id=\"prj_creat_%u\" class=\"%s LEFT_TOP\"", Tbl_TD_Begin ("id=\"prj_creat_%u\" class=\"%s LEFT_TOP\"",
UniqueId, UniqueId,ClassDate);
Prj->Hidden == Prj_HIDDEN ? "DATE_BLUE_LIGHT" :
"DATE_BLUE");
break; break;
} }
fprintf (Gbl.F.Out,"<script type=\"text/javascript\">" fprintf (Gbl.F.Out,"<script type=\"text/javascript\">"
@ -1036,16 +1045,11 @@ static void Prj_ShowOneProject (unsigned NumIndex,struct Project *Prj,
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
Tbl_TD_Begin ("id=\"prj_modif_%u\" class=\"%s LEFT_TOP COLOR%u\"", Tbl_TD_Begin ("id=\"prj_modif_%u\" class=\"%s LEFT_TOP COLOR%u\"",
UniqueId, UniqueId,ClassDate,Gbl.RowEvenOdd);
Prj->Hidden == Prj_HIDDEN ? "DATE_BLUE_LIGHT" :
"DATE_BLUE",
Gbl.RowEvenOdd);
break; break;
default: default:
Tbl_TD_Begin ("id=\"prj_modif_%u\" class=\"%s LEFT_TOP\"", Tbl_TD_Begin ("id=\"prj_modif_%u\" class=\"%s LEFT_TOP\"",
UniqueId, UniqueId,ClassDate);
Prj->Hidden == Prj_HIDDEN ? "DATE_BLUE_LIGHT" :
"DATE_BLUE");
break; break;
} }
fprintf (Gbl.F.Out,"<script type=\"text/javascript\">" fprintf (Gbl.F.Out,"<script type=\"text/javascript\">"
@ -1060,15 +1064,10 @@ static void Prj_ShowOneProject (unsigned NumIndex,struct Project *Prj,
switch (ProjectView) switch (ProjectView)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
Tbl_TD_Begin ("class=\"%s LEFT_TOP COLOR%u\"", Tbl_TD_Begin ("class=\"%s LEFT_TOP COLOR%u\"",ClassTitle,Gbl.RowEvenOdd);
Prj->Hidden == Prj_HIDDEN ? "ASG_TITLE_LIGHT" :
"ASG_TITLE",
Gbl.RowEvenOdd);
break; break;
default: default:
Tbl_TD_Begin ("class=\"%s LEFT_TOP\"", Tbl_TD_Begin ("class=\"%s LEFT_TOP\"",ClassTitle);
Prj->Hidden == Prj_HIDDEN ? "ASG_TITLE_LIGHT" :
"ASG_TITLE");
break; break;
} }
Lay_StartArticle (Anchor); Lay_StartArticle (Anchor);
@ -1076,10 +1075,7 @@ static void Prj_ShowOneProject (unsigned NumIndex,struct Project *Prj,
{ {
Frm_StartForm (ActAdmDocPrj); Frm_StartForm (ActAdmDocPrj);
Prj_PutCurrentParams (); Prj_PutCurrentParams ();
Frm_LinkFormSubmit (Txt_Project_files, Frm_LinkFormSubmit (Txt_Project_files,ClassTitle,NULL);
Prj->Hidden == Prj_HIDDEN ? "ASG_TITLE_LIGHT" :
"ASG_TITLE",
NULL);
fprintf (Gbl.F.Out,"%s</a>",Prj->Title); fprintf (Gbl.F.Out,"%s</a>",Prj->Title);
Frm_EndForm (); Frm_EndForm ();
} }
@ -1098,14 +1094,11 @@ static void Prj_ShowOneProject (unsigned NumIndex,struct Project *Prj,
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
Tbl_TD_Begin ("colspan=\"2\" class=\"RIGHT_TOP %s COLOR%u\"", Tbl_TD_Begin ("colspan=\"2\" class=\"RIGHT_TOP %s COLOR%u\"",
Prj->Hidden == Prj_HIDDEN ? "ASG_LABEL_LIGHT" : ClassLabel,Gbl.RowEvenOdd);
"ASG_LABEL",
Gbl.RowEvenOdd);
break; break;
default: default:
Tbl_TD_Begin ("colspan=\"2\" class=\"RIGHT_TOP %s\"", Tbl_TD_Begin ("colspan=\"2\" class=\"RIGHT_TOP %s\"",
Prj->Hidden == Prj_HIDDEN ? "ASG_LABEL_LIGHT" : ClassLabel);
"ASG_LABEL");
break; break;
} }
fprintf (Gbl.F.Out,"%s:",Txt_Preassigned_QUESTION); fprintf (Gbl.F.Out,"%s:",Txt_Preassigned_QUESTION);
@ -1115,14 +1108,11 @@ static void Prj_ShowOneProject (unsigned NumIndex,struct Project *Prj,
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP %s COLOR%u\"", Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP %s COLOR%u\"",
Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : ClassData,Gbl.RowEvenOdd);
"DAT",
Gbl.RowEvenOdd);
break; break;
default: default:
Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP %s\"", Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP %s\"",
Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : ClassData);
"DAT");
break; break;
} }
fprintf (Gbl.F.Out,"%s&nbsp;",(Prj->Preassigned == Prj_PREASSIGNED) ? Txt_Yes : fprintf (Gbl.F.Out,"%s&nbsp;",(Prj->Preassigned == Prj_PREASSIGNED) ? Txt_Yes :
@ -1140,14 +1130,11 @@ static void Prj_ShowOneProject (unsigned NumIndex,struct Project *Prj,
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
Tbl_TD_Begin ("colspan=\"2\" class=\"RIGHT_TOP %s COLOR%u\"", Tbl_TD_Begin ("colspan=\"2\" class=\"RIGHT_TOP %s COLOR%u\"",
Prj->Hidden == Prj_HIDDEN ? "ASG_LABEL_LIGHT" : ClassLabel,Gbl.RowEvenOdd);
"ASG_LABEL",
Gbl.RowEvenOdd);
break; break;
default: default:
Tbl_TD_Begin ("colspan=\"2\" class=\"RIGHT_TOP %s\"", Tbl_TD_Begin ("colspan=\"2\" class=\"RIGHT_TOP %s\"",
Prj->Hidden == Prj_HIDDEN ? "ASG_LABEL_LIGHT" : ClassLabel);
"ASG_LABEL");
break; break;
} }
fprintf (Gbl.F.Out,"%s:",Txt_Number_of_students); fprintf (Gbl.F.Out,"%s:",Txt_Number_of_students);
@ -1157,17 +1144,24 @@ static void Prj_ShowOneProject (unsigned NumIndex,struct Project *Prj,
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP %s COLOR%u\"", Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP %s COLOR%u\"",
Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : ClassData,Gbl.RowEvenOdd);
"DAT",
Gbl.RowEvenOdd);
break; break;
default: default:
Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP %s\"", Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP %s\"",
Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : ClassData);
"DAT");
break; break;
} }
fprintf (Gbl.F.Out,"%u",Prj->NumStds); fprintf (Gbl.F.Out,"%u",Prj->NumStds);
/* Get number of students registered in project */
NumStdsInPrj = Prj_GetNumUsrsInPrj (Prj->PrjCod,Prj_ROLE_STD);
if (Prj->NumStds != NumStdsInPrj ||
(Prj->Preassigned == Prj_PREASSIGNED && NumStdsInPrj == 0))
fprintf (Gbl.F.Out,"&nbsp;"
"<img src=\"%s/%s\" alt=\"\" class=\"ICO16x16\" />",
Cfg_URL_ICON_PUBLIC,"exclamation-triangle.svg");
Tbl_TD_End (); Tbl_TD_End ();
Tbl_TR_End (); Tbl_TR_End ();
@ -1214,21 +1208,15 @@ static void Prj_ShowOneProject (unsigned NumIndex,struct Project *Prj,
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
Tbl_TR_Begin ("id=\"prj_pro_%u\" style=\"display:none;\"",UniqueId); Tbl_TR_Begin ("id=\"prj_pro_%u\" style=\"display:none;\"",UniqueId);
Tbl_TD_Begin ("colspan=\"4\" class=\"RIGHT_TOP %s COLOR%u\"", Tbl_TD_Begin ("colspan=\"4\" class=\"RIGHT_TOP %s COLOR%u\"",
Prj->Hidden == Prj_HIDDEN ? "ASG_LABEL_LIGHT" : ClassLabel,Gbl.RowEvenOdd);
"ASG_LABEL",
Gbl.RowEvenOdd);
break; break;
case Prj_FILE_BROWSER_PROJECT: case Prj_FILE_BROWSER_PROJECT:
Tbl_TR_Begin ("id=\"prj_pro_%u\" style=\"display:none;\"",UniqueId); Tbl_TR_Begin ("id=\"prj_pro_%u\" style=\"display:none;\"",UniqueId);
Tbl_TD_Begin ("colspan=\"3\" class=\"RIGHT_TOP %s\"", Tbl_TD_Begin ("colspan=\"3\" class=\"RIGHT_TOP %s\"",ClassLabel);
Prj->Hidden == Prj_HIDDEN ? "ASG_LABEL_LIGHT" :
"ASG_LABEL");
break; break;
default: default:
Tbl_TR_Begin (NULL); Tbl_TR_Begin (NULL);
Tbl_TD_Begin ("colspan=\"2\" class=\"RIGHT_TOP %s\"", Tbl_TD_Begin ("colspan=\"2\" class=\"RIGHT_TOP %s\"",ClassLabel);
Prj->Hidden == Prj_HIDDEN ? "ASG_LABEL_LIGHT" :
"ASG_LABEL");
break; break;
} }
fprintf (Gbl.F.Out,"%s:",Txt_Proposal); fprintf (Gbl.F.Out,"%s:",Txt_Proposal);
@ -1238,14 +1226,12 @@ static void Prj_ShowOneProject (unsigned NumIndex,struct Project *Prj,
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP %s COLOR%u\"", Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP %s COLOR%u\"",
Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : ClassData,
"DAT",
Gbl.RowEvenOdd); Gbl.RowEvenOdd);
break; break;
default: default:
Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP %s\"", Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP %s\"",
Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : ClassData);
"DAT");
break; break;
} }
fprintf (Gbl.F.Out,"%s",Txt_PROJECT_STATUS[Prj->Proposal]); fprintf (Gbl.F.Out,"%s",Txt_PROJECT_STATUS[Prj->Proposal]);
@ -1304,21 +1290,26 @@ static void Prj_ShowTableAllProjectsOneRow (struct Project *Prj)
extern const char *Txt_No; extern const char *Txt_No;
extern const char *Txt_PROJECT_STATUS[Prj_NUM_PROPOSAL_TYPES]; extern const char *Txt_PROJECT_STATUS[Prj_NUM_PROPOSAL_TYPES];
unsigned NumRoleToShow; unsigned NumRoleToShow;
const char *ClassDate;
const char *ClassData;
static unsigned UniqueId = 0; static unsigned UniqueId = 0;
/***** Get data of this project *****/ /***** Get data of this project *****/
Prj_GetDataOfProjectByCod (Prj); Prj_GetDataOfProjectByCod (Prj);
/***** Set CSS classes *****/
ClassDate = (Prj->Hidden == Prj_HIDDEN) ? "DATE_BLUE_LIGHT" :
"DATE_BLUE";
ClassData = (Prj->Hidden == Prj_HIDDEN) ? "DAT_LIGHT" :
"DAT";
/***** Start row *****/ /***** Start row *****/
Tbl_TR_Begin (NULL); Tbl_TR_Begin (NULL);
/***** Start date/time *****/ /***** Start date/time *****/
UniqueId++; UniqueId++;
Tbl_TD_Begin ("id=\"prj_creat_%u\" class=\"LEFT_TOP %s COLOR%u\"", Tbl_TD_Begin ("id=\"prj_creat_%u\" class=\"LEFT_TOP %s COLOR%u\"",
UniqueId, UniqueId,ClassDate,Gbl.RowEvenOdd);
Prj->Hidden == Prj_HIDDEN ? "DATE_BLUE_LIGHT" :
"DATE_BLUE",
Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"<script type=\"text/javascript\">" fprintf (Gbl.F.Out,"<script type=\"text/javascript\">"
"writeLocalDateHMSFromUTC('prj_creat_%u',%ld," "writeLocalDateHMSFromUTC('prj_creat_%u',%ld,"
"%u,'<br />','%s',true,true,0x7);" "%u,'<br />','%s',true,true,0x7);"
@ -1330,10 +1321,7 @@ static void Prj_ShowTableAllProjectsOneRow (struct Project *Prj)
/***** End date/time *****/ /***** End date/time *****/
UniqueId++; UniqueId++;
Tbl_TD_Begin ("id=\"prj_modif_%u\" class=\"LEFT_TOP %s COLOR%u\"", Tbl_TD_Begin ("id=\"prj_modif_%u\" class=\"LEFT_TOP %s COLOR%u\"",
UniqueId, UniqueId,ClassDate,Gbl.RowEvenOdd);
Prj->Hidden == Prj_HIDDEN ? "DATE_BLUE_LIGHT" :
"DATE_BLUE",
Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"<script type=\"text/javascript\">" fprintf (Gbl.F.Out,"<script type=\"text/javascript\">"
"writeLocalDateHMSFromUTC('prj_modif_%u',%ld," "writeLocalDateHMSFromUTC('prj_modif_%u',%ld,"
"%u,'<br />','%s',true,true,0x7);" "%u,'<br />','%s',true,true,0x7);"
@ -1344,8 +1332,7 @@ static void Prj_ShowTableAllProjectsOneRow (struct Project *Prj)
/***** Project title *****/ /***** Project title *****/
Tbl_TD_Begin ("class=\"LEFT_TOP %s COLOR%u\"", Tbl_TD_Begin ("class=\"LEFT_TOP %s COLOR%u\"",
Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : ClassData,
"DAT_N",
Gbl.RowEvenOdd); Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"%s",Prj->Title); fprintf (Gbl.F.Out,"%s",Prj->Title);
Tbl_TD_End (); Tbl_TD_End ();
@ -1354,19 +1341,13 @@ static void Prj_ShowTableAllProjectsOneRow (struct Project *Prj)
Prj_ShowTableAllProjectsDepartment (Prj); Prj_ShowTableAllProjectsDepartment (Prj);
/***** Preassigned? *****/ /***** Preassigned? *****/
Tbl_TD_Begin ("class=\"LEFT_TOP %s COLOR%u\"", Tbl_TD_Begin ("class=\"LEFT_TOP %s COLOR%u\"",ClassData,Gbl.RowEvenOdd);
Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" :
"DAT",
Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"%s",(Prj->Preassigned == Prj_PREASSIGNED) ? Txt_Yes : fprintf (Gbl.F.Out,"%s",(Prj->Preassigned == Prj_PREASSIGNED) ? Txt_Yes :
Txt_No); Txt_No);
Tbl_TD_End (); Tbl_TD_End ();
/***** Number of students *****/ /***** Number of students *****/
Tbl_TD_Begin ("class=\"LEFT_TOP %s COLOR%u\"", Tbl_TD_Begin ("class=\"LEFT_TOP %s COLOR%u\"",ClassData,Gbl.RowEvenOdd);
Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" :
"DAT",
Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"%u",Prj->NumStds); fprintf (Gbl.F.Out,"%u",Prj->NumStds);
Tbl_TD_End (); Tbl_TD_End ();
@ -1377,10 +1358,7 @@ static void Prj_ShowTableAllProjectsOneRow (struct Project *Prj)
Prj_ShowTableAllProjectsMembersWithARole (Prj,Prj_RolesToShow[NumRoleToShow]); Prj_ShowTableAllProjectsMembersWithARole (Prj,Prj_RolesToShow[NumRoleToShow]);
/***** Proposal *****/ /***** Proposal *****/
Tbl_TD_Begin ("class=\"LEFT_TOP %s COLOR%u\"", Tbl_TD_Begin ("class=\"LEFT_TOP %s COLOR%u\"",ClassData,Gbl.RowEvenOdd);
Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" :
"DAT",
Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"%s",Txt_PROJECT_STATUS[Prj->Proposal]); fprintf (Gbl.F.Out,"%s",Txt_PROJECT_STATUS[Prj->Proposal]);
Tbl_TD_End (); Tbl_TD_End ();
@ -1412,6 +1390,11 @@ static void Prj_ShowOneProjectDepartment (const struct Project *Prj,
{ {
struct Department Dpt; struct Department Dpt;
bool PutLink; bool PutLink;
const char *ClassData;
/***** Set CSS classes *****/
ClassData = (Prj->Hidden == Prj_HIDDEN) ? "DAT_LIGHT" :
"DAT";
/***** Get data of department *****/ /***** Get data of department *****/
Dpt.DptCod = Prj->DptCod; Dpt.DptCod = Prj->DptCod;
@ -1425,23 +1408,16 @@ static void Prj_ShowOneProjectDepartment (const struct Project *Prj,
switch (ProjectView) switch (ProjectView)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
Tbl_TD_Begin ("class=\"LEFT_TOP %s COLOR%u\"", Tbl_TD_Begin ("class=\"LEFT_TOP %s COLOR%u\"",ClassData,Gbl.RowEvenOdd);
Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" :
"DAT_N",
Gbl.RowEvenOdd);
break; break;
default: default:
Tbl_TD_Begin ("class=\"LEFT_TOP %s\"", Tbl_TD_Begin ("class=\"LEFT_TOP %s\"",ClassData);
Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" :
"DAT_N");
break; break;
} }
if (PutLink) if (PutLink)
fprintf (Gbl.F.Out,"<a href=\"%s\" target=\"_blank\"" fprintf (Gbl.F.Out,"<a href=\"%s\" target=\"_blank\""
" class=\"%s\">", " class=\"%s\">",
Dpt.WWW, Dpt.WWW,ClassData);
Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" :
"DAT_N");
fprintf (Gbl.F.Out,"%s",Dpt.FullName); fprintf (Gbl.F.Out,"%s",Dpt.FullName);
if (PutLink) if (PutLink)
fprintf (Gbl.F.Out,"</a>"); fprintf (Gbl.F.Out,"</a>");
@ -1452,16 +1428,18 @@ static void Prj_ShowOneProjectDepartment (const struct Project *Prj,
static void Prj_ShowTableAllProjectsDepartment (const struct Project *Prj) static void Prj_ShowTableAllProjectsDepartment (const struct Project *Prj)
{ {
struct Department Dpt; struct Department Dpt;
const char *ClassData;
/***** Set CSS classes *****/
ClassData = (Prj->Hidden == Prj_HIDDEN) ? "DAT_LIGHT" :
"DAT";
/***** Get data of department *****/ /***** Get data of department *****/
Dpt.DptCod = Prj->DptCod; Dpt.DptCod = Prj->DptCod;
Dpt_GetDataOfDepartmentByCod (&Dpt); Dpt_GetDataOfDepartmentByCod (&Dpt);
/***** Show department *****/ /***** Show department *****/
Tbl_TD_Begin ("class=\"LEFT_TOP %s COLOR%u\"", Tbl_TD_Begin ("class=\"LEFT_TOP %s COLOR%u\"",ClassData,Gbl.RowEvenOdd);
Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" :
"DAT",
Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"%s",Dpt.FullName); fprintf (Gbl.F.Out,"%s",Dpt.FullName);
Tbl_TD_End (); Tbl_TD_End ();
} }
@ -1475,6 +1453,15 @@ static void Prj_ShowOneProjectTxtField (struct Project *Prj,
const char *id,unsigned UniqueId, const char *id,unsigned UniqueId,
const char *Label,char *TxtField) const char *Label,char *TxtField)
{ {
const char *ClassLabel;
const char *ClassData;
/***** Set CSS classes *****/
ClassLabel = (Prj->Hidden == Prj_HIDDEN) ? "ASG_LABEL_LIGHT" :
"ASG_LABEL";
ClassData = (Prj->Hidden == Prj_HIDDEN) ? "DAT_LIGHT" :
"DAT";
/***** Change format *****/ /***** Change 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
@ -1493,22 +1480,15 @@ static void Prj_ShowOneProjectTxtField (struct Project *Prj,
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
Tbl_TR_Begin ("id=\"%s%u\" style=\"display:none;\"",id,UniqueId); Tbl_TR_Begin ("id=\"%s%u\" style=\"display:none;\"",id,UniqueId);
Tbl_TD_Begin ("colspan=\"4\" class=\"RIGHT_TOP %s COLOR%u\"", Tbl_TD_Begin ("colspan=\"4\" class=\"RIGHT_TOP %s COLOR%u\"",ClassLabel,Gbl.RowEvenOdd);
Prj->Hidden == Prj_HIDDEN ? "ASG_LABEL_LIGHT" :
"ASG_LABEL",
Gbl.RowEvenOdd);
break; break;
case Prj_FILE_BROWSER_PROJECT: case Prj_FILE_BROWSER_PROJECT:
Tbl_TR_Begin ("id=\"%s%u\" style=\"display:none;\"",id,UniqueId); Tbl_TR_Begin ("id=\"%s%u\" style=\"display:none;\"",id,UniqueId);
Tbl_TD_Begin ("colspan=\"3\" class=\"RIGHT_TOP %s\"", Tbl_TD_Begin ("colspan=\"3\" class=\"RIGHT_TOP %s\"",ClassLabel);
Prj->Hidden == Prj_HIDDEN ? "ASG_LABEL_LIGHT" :
"ASG_LABEL");
break; break;
case Prj_PRINT_ONE_PROJECT: case Prj_PRINT_ONE_PROJECT:
Tbl_TR_Begin (NULL); Tbl_TR_Begin (NULL);
Tbl_TD_Begin ("colspan=\"2\" class=\"RIGHT_TOP %s\"", Tbl_TD_Begin ("colspan=\"2\" class=\"RIGHT_TOP %s\"",ClassLabel);
Prj->Hidden == Prj_HIDDEN ? "ASG_LABEL_LIGHT" :
"ASG_LABEL");
break; break;
default: default:
// Not applicable // Not applicable
@ -1521,14 +1501,11 @@ static void Prj_ShowOneProjectTxtField (struct Project *Prj,
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP %s COLOR%u\"", Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP %s COLOR%u\"",
Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : ClassData,Gbl.RowEvenOdd);
"DAT",
Gbl.RowEvenOdd);
break; break;
default: default:
Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP %s\"", Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP %s\"",
Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : ClassData);
"DAT");
break; break;
} }
fprintf (Gbl.F.Out,"%s",TxtField); fprintf (Gbl.F.Out,"%s",TxtField);
@ -1540,15 +1517,18 @@ static void Prj_ShowOneProjectTxtField (struct Project *Prj,
static void Prj_ShowTableAllProjectsTxtField (struct Project *Prj, static void Prj_ShowTableAllProjectsTxtField (struct Project *Prj,
char *TxtField) char *TxtField)
{ {
const char *ClassData;
/***** Set CSS classes *****/
ClassData = (Prj->Hidden == Prj_HIDDEN) ? "DAT_LIGHT" :
"DAT";
/***** Change format *****/ /***** Change 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
/***** Write text *****/ /***** Write text *****/
Tbl_TD_Begin ("class=\"LEFT_TOP %s COLOR%u\"", Tbl_TD_Begin ("class=\"LEFT_TOP %s COLOR%u\"",ClassData,Gbl.RowEvenOdd);
Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" :
"DAT",
Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"%s",TxtField); fprintf (Gbl.F.Out,"%s",TxtField);
Tbl_TD_End (); Tbl_TD_End ();
} }
@ -1562,31 +1542,32 @@ static void Prj_ShowOneProjectURL (const struct Project *Prj,
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 *ClassData;
bool PutLink = (Prj->URL[0] && bool PutLink = (Prj->URL[0] &&
(ProjectView == Prj_LIST_PROJECTS || (ProjectView == Prj_LIST_PROJECTS ||
ProjectView == Prj_FILE_BROWSER_PROJECT)); ProjectView == Prj_FILE_BROWSER_PROJECT));
/***** Set CSS classes *****/
ClassLabel = (Prj->Hidden == Prj_HIDDEN) ? "ASG_LABEL_LIGHT" :
"ASG_LABEL";
ClassData = (Prj->Hidden == Prj_HIDDEN) ? "DAT_LIGHT" :
"DAT";
/***** Write row with label and text *****/ /***** Write row with label and text *****/
switch (ProjectView) switch (ProjectView)
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
Tbl_TR_Begin ("id=\"%s%u\" style=\"display:none;\"",id,UniqueId); Tbl_TR_Begin ("id=\"%s%u\" style=\"display:none;\"",id,UniqueId);
Tbl_TD_Begin ("colspan=\"4\" class=\"RIGHT_TOP %s COLOR%u\"", Tbl_TD_Begin ("colspan=\"4\" class=\"RIGHT_TOP %s COLOR%u\"",ClassLabel,Gbl.RowEvenOdd);
Prj->Hidden == Prj_HIDDEN ? "ASG_LABEL_LIGHT" :
"ASG_LABEL",
Gbl.RowEvenOdd);
break; break;
case Prj_FILE_BROWSER_PROJECT: case Prj_FILE_BROWSER_PROJECT:
Tbl_TR_Begin ("id=\"%s%u\" style=\"display:none;\"",id,UniqueId); Tbl_TR_Begin ("id=\"%s%u\" style=\"display:none;\"",id,UniqueId);
Tbl_TD_Begin ("colspan=\"3\" class=\"RIGHT_TOP %s\"", Tbl_TD_Begin ("colspan=\"3\" class=\"RIGHT_TOP %s\"",ClassLabel);
Prj->Hidden == Prj_HIDDEN ? "ASG_LABEL_LIGHT" :
"ASG_LABEL");
break; break;
case Prj_PRINT_ONE_PROJECT: case Prj_PRINT_ONE_PROJECT:
Tbl_TR_Begin (NULL); Tbl_TR_Begin (NULL);
Tbl_TD_Begin ("colspan=\"2\" class=\"RIGHT_TOP %s\"", Tbl_TD_Begin ("colspan=\"2\" class=\"RIGHT_TOP %s\"",ClassLabel);
Prj->Hidden == Prj_HIDDEN ? "ASG_LABEL_LIGHT" :
"ASG_LABEL");
break; break;
default: default:
// Not applicable // Not applicable
@ -1599,14 +1580,11 @@ static void Prj_ShowOneProjectURL (const struct Project *Prj,
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP %s COLOR%u\"", Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP %s COLOR%u\"",
Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : ClassData,Gbl.RowEvenOdd);
"DAT",
Gbl.RowEvenOdd);
break; break;
default: default:
Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP %s\"", Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP %s\"",
Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : ClassData);
"DAT");
break; break;
} }
if (PutLink) if (PutLink)
@ -1621,11 +1599,14 @@ static void Prj_ShowOneProjectURL (const struct Project *Prj,
static void Prj_ShowTableAllProjectsURL (const struct Project *Prj) static void Prj_ShowTableAllProjectsURL (const struct Project *Prj)
{ {
const char *ClassData;
/***** Set CSS classes *****/
ClassData = (Prj->Hidden == Prj_HIDDEN) ? "DAT_LIGHT" :
"DAT";
/***** Show URL *****/ /***** Show URL *****/
Tbl_TD_Begin ("class=\"LEFT_TOP %s COLOR%u\"", Tbl_TD_Begin ("class=\"LEFT_TOP %s COLOR%u\"",ClassData,Gbl.RowEvenOdd);
Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" :
"DAT",
Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"%s",Prj->URL); fprintf (Gbl.F.Out,"%s",Prj->URL);
Tbl_TD_End (); Tbl_TD_End ();
} }
@ -1666,6 +1647,8 @@ static void Prj_ShowOneProjectMembersWithARole (const struct Project *Prj,
unsigned NumUsrs; unsigned NumUsrs;
bool ShowPhoto; bool ShowPhoto;
char PhotoURL[PATH_MAX + 1]; char PhotoURL[PATH_MAX + 1];
const char *ClassLabel;
const char *ClassData;
static const Act_Action_t ActionReqRemUsr[Prj_NUM_ROLES_IN_PROJECT] = static const Act_Action_t ActionReqRemUsr[Prj_NUM_ROLES_IN_PROJECT] =
{ {
ActUnk, // Prj_ROLE_UNK, Unknown ActUnk, // Prj_ROLE_UNK, Unknown
@ -1681,6 +1664,12 @@ static void Prj_ShowOneProjectMembersWithARole (const struct Project *Prj,
ActReqAddEvlPrj, // Prj_ROLE_EVL, Evaluator ActReqAddEvlPrj, // Prj_ROLE_EVL, Evaluator
}; };
/***** Set CSS classes *****/
ClassLabel = (Prj->Hidden == Prj_HIDDEN) ? "ASG_LABEL_LIGHT" :
"ASG_LABEL";
ClassData = (Prj->Hidden == Prj_HIDDEN) ? "DAT_LIGHT" :
"DAT";
/***** Get users in project from database *****/ /***** Get users in project from database *****/
NumUsrs = Prj_GetUsrsInPrj (Prj->PrjCod,RoleInProject,&mysql_res); NumUsrs = Prj_GetUsrsInPrj (Prj->PrjCod,RoleInProject,&mysql_res);
WriteRow = (NumUsrs != 0 || WriteRow = (NumUsrs != 0 ||
@ -1696,25 +1685,19 @@ static void Prj_ShowOneProjectMembersWithARole (const struct Project *Prj,
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
Tbl_TD_Begin ("colspan=\"4\" class=\"RIGHT_TOP %s COLOR%u\"", Tbl_TD_Begin ("colspan=\"4\" class=\"RIGHT_TOP %s COLOR%u\"",
Prj->Hidden == Prj_HIDDEN ? "ASG_LABEL_LIGHT" : ClassLabel,Gbl.RowEvenOdd);
"ASG_LABEL",
Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"%s:", fprintf (Gbl.F.Out,"%s:",
NumUsrs == 1 ? Txt_PROJECT_ROLES_SINGUL_Abc[RoleInProject] : NumUsrs == 1 ? Txt_PROJECT_ROLES_SINGUL_Abc[RoleInProject] :
Txt_PROJECT_ROLES_PLURAL_Abc[RoleInProject]); Txt_PROJECT_ROLES_PLURAL_Abc[RoleInProject]);
break; break;
case Prj_FILE_BROWSER_PROJECT: case Prj_FILE_BROWSER_PROJECT:
Tbl_TD_Begin ("colspan=\"3\" class=\"RIGHT_TOP %s\"", Tbl_TD_Begin ("colspan=\"3\" class=\"RIGHT_TOP %s\"",ClassLabel);
Prj->Hidden == Prj_HIDDEN ? "ASG_LABEL_LIGHT" :
"ASG_LABEL");
fprintf (Gbl.F.Out,"%s:", fprintf (Gbl.F.Out,"%s:",
NumUsrs == 1 ? Txt_PROJECT_ROLES_SINGUL_Abc[RoleInProject] : NumUsrs == 1 ? Txt_PROJECT_ROLES_SINGUL_Abc[RoleInProject] :
Txt_PROJECT_ROLES_PLURAL_Abc[RoleInProject]); Txt_PROJECT_ROLES_PLURAL_Abc[RoleInProject]);
break; break;
case Prj_PRINT_ONE_PROJECT: case Prj_PRINT_ONE_PROJECT:
Tbl_TD_Begin ("colspan=\"2\" class=\"RIGHT_TOP %s\"", Tbl_TD_Begin ("colspan=\"2\" class=\"RIGHT_TOP %s\"",ClassLabel);
Prj->Hidden == Prj_HIDDEN ? "ASG_LABEL_LIGHT" :
"ASG_LABEL");
fprintf (Gbl.F.Out,"%s:", fprintf (Gbl.F.Out,"%s:",
NumUsrs == 1 ? Txt_PROJECT_ROLES_SINGUL_Abc[RoleInProject] : NumUsrs == 1 ? Txt_PROJECT_ROLES_SINGUL_Abc[RoleInProject] :
Txt_PROJECT_ROLES_PLURAL_Abc[RoleInProject]); Txt_PROJECT_ROLES_PLURAL_Abc[RoleInProject]);
@ -1731,15 +1714,12 @@ static void Prj_ShowOneProjectMembersWithARole (const struct Project *Prj,
{ {
case Prj_LIST_PROJECTS: case Prj_LIST_PROJECTS:
Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP %s COLOR%u\"", Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP %s COLOR%u\"",
Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : ClassData,Gbl.RowEvenOdd);
"DAT",
Gbl.RowEvenOdd);
break; break;
case Prj_FILE_BROWSER_PROJECT: case Prj_FILE_BROWSER_PROJECT:
case Prj_PRINT_ONE_PROJECT: case Prj_PRINT_ONE_PROJECT:
Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP %s\"", Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP %s\"",
Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : ClassData);
"DAT");
break; break;
case Prj_EDIT_ONE_PROJECT: case Prj_EDIT_ONE_PROJECT:
Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP DAT\""); Tbl_TD_Begin ("colspan=\"2\" class=\"LEFT_TOP DAT\"");
@ -1839,15 +1819,17 @@ static void Prj_ShowTableAllProjectsMembersWithARole (const struct Project *Prj,
MYSQL_ROW row; MYSQL_ROW row;
unsigned NumUsr; unsigned NumUsr;
unsigned NumUsrs; unsigned NumUsrs;
const char *ClassData;
/***** Set CSS classes *****/
ClassData = (Prj->Hidden == Prj_HIDDEN) ? "DAT_LIGHT" :
"DAT";
/***** Get users in project from database *****/ /***** Get users in project from database *****/
NumUsrs = Prj_GetUsrsInPrj (Prj->PrjCod,RoleInProject,&mysql_res); NumUsrs = Prj_GetUsrsInPrj (Prj->PrjCod,RoleInProject,&mysql_res);
/***** Start column with list of all members with this role *****/ /***** Start column with list of all members with this role *****/
Tbl_TD_Begin ("class=\"LEFT_TOP %s COLOR%u\"", Tbl_TD_Begin ("class=\"LEFT_TOP %s COLOR%u\"",ClassData,Gbl.RowEvenOdd);
Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" :
"DAT",
Gbl.RowEvenOdd);
if (NumUsrs) if (NumUsrs)
{ {
@ -1884,7 +1866,21 @@ static void Prj_ShowTableAllProjectsMembersWithARole (const struct Project *Prj,
} }
/*****************************************************************************/ /*****************************************************************************/
/******************** Get number of users in a project ***********************/ /*************** Get number of users with a role in a project ****************/
/*****************************************************************************/
static unsigned Prj_GetNumUsrsInPrj (long PrjCod,Prj_RoleInProject_t RoleInProject)
{
/***** Get users in project from database *****/
return (unsigned) DB_QueryCOUNT ("can not get number of users in project",
"SELECT COUNT(UsrCod)"
" FROM prj_usr"
" WHERE PrjCod=%ld AND RoleInProject=%u",
PrjCod,(unsigned) RoleInProject);
}
/*****************************************************************************/
/*************** Get number of users with a role in a project ****************/
/*****************************************************************************/ /*****************************************************************************/
static unsigned Prj_GetUsrsInPrj (long PrjCod,Prj_RoleInProject_t RoleInProject, static unsigned Prj_GetUsrsInPrj (long PrjCod,Prj_RoleInProject_t RoleInProject,
@ -1892,12 +1888,13 @@ static unsigned Prj_GetUsrsInPrj (long PrjCod,Prj_RoleInProject_t RoleInProject,
{ {
/***** Get users in project from database *****/ /***** Get users in project from database *****/
return (unsigned) DB_QuerySELECT (mysql_res,"can not get users in project", return (unsigned) DB_QuerySELECT (mysql_res,"can not get users in project",
"SELECT prj_usr.UsrCod," "SELECT prj_usr.UsrCod," // row[0]
"usr_data.Surname1 AS S1," "usr_data.Surname1 AS S1," // row[1]
"usr_data.Surname2 AS S2," "usr_data.Surname2 AS S2," // row[2]
"usr_data.FirstName AS FN" "usr_data.FirstName AS FN" // row[3]
" FROM prj_usr,usr_data" " FROM prj_usr,usr_data"
" WHERE prj_usr.PrjCod=%ld AND RoleInProject=%u" " WHERE prj_usr.PrjCod=%ld"
" AND prj_usr.RoleInProject=%u"
" AND prj_usr.UsrCod=usr_data.UsrCod" " AND prj_usr.UsrCod=usr_data.UsrCod"
" ORDER BY S1,S2,FN", " ORDER BY S1,S2,FN",
PrjCod,(unsigned) RoleInProject); PrjCod,(unsigned) RoleInProject);