Version19.42.8

This commit is contained in:
Antonio Cañas Vargas 2019-10-25 01:15:11 +02:00
parent 86bb09193f
commit c518faaf13
6 changed files with 123 additions and 106 deletions

View File

@ -487,14 +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.42.7 (2019-10-24)" #define Log_PLATFORM_VERSION "SWAD 19.42.8 (2019-10-25)"
#define CSS_FILE "swad19.42.6.css" #define CSS_FILE "swad19.42.6.css"
#define JS_FILE "swad19.39.js" #define JS_FILE "swad19.39.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: 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.42.7: Oct 24, 2019 Code refactoring in media. (246037 lines) Version 19.42.8: Oct 25, 2019 New warning on projects non-assigned but with registered students. (246052 lines)
Version 19.42.7: Oct 25, 2019 Code refactoring in media. (246037 lines)
Version 19.42.6: Oct 24, 2019 Code refactoring in CSS. Version 19.42.6: Oct 24, 2019 Code refactoring in CSS.
Changes icon to upload file in timeline. Changes icon to upload file in timeline.
Code refactoring in media. (246034 lines) Code refactoring in media. (246034 lines)

View File

@ -304,10 +304,12 @@ void Gbl_InitializeGlobals (void)
/* Projects */ /* Projects */
Gbl.Prjs.Filter.My_All = Prj_FILTER_WHOSE_PROJECTS_DEFAULT; Gbl.Prjs.Filter.My_All = Prj_FILTER_WHOSE_PROJECTS_DEFAULT;
Gbl.Prjs.Filter.PreNon = Prj_FILTER_PREASSIGNED_DEFAULT | Gbl.Prjs.Filter.Assign = Prj_FILTER_ASSIGNED_DEFAULT |
Prj_FILTER_NONPREASSIG_DEFAULT; Prj_FILTER_NONASSIG_DEFAULT;
Gbl.Prjs.Filter.HidVis = Prj_FILTER_HIDDEN_DEFAULT | Gbl.Prjs.Filter.Hidden = Prj_FILTER_HIDDEN_DEFAULT |
Prj_FILTER_VISIBL_DEFAULT; Prj_FILTER_VISIBL_DEFAULT;
Gbl.Prjs.Filter.Faulti = Prj_FILTER_FAULTY_DEFAULT |
Prj_FILTER_FAULTLESS_DEFAULT;
Gbl.Prjs.Filter.DptCod = Prj_FILTER_DPT_DEFAULT; Gbl.Prjs.Filter.DptCod = Prj_FILTER_DPT_DEFAULT;
Gbl.Prjs.LstIsRead = false; // List is not read Gbl.Prjs.LstIsRead = false; // List is not read
Gbl.Prjs.Num = 0; Gbl.Prjs.Num = 0;

View File

@ -91,7 +91,7 @@ static const char *Prj_Proposal_DB[Prj_NUM_PROPOSAL_TYPES] =
}; };
/***** Preassigned/non-preassigned project *****/ /***** Preassigned/non-preassigned project *****/
static const char *PreassignedNonpreassigImage[Prj_NUM_PREASSIGNED_NONPREASSIG] = static const char *PreassignedNonpreassigImage[Prj_NUM_ASSIGNED_NONASSIG] =
{ {
"user.svg", // Prj_PREASSIGNED "user.svg", // Prj_PREASSIGNED
"user-slash.svg", // Prj_NONPREASSIG "user-slash.svg", // Prj_NONPREASSIG
@ -118,6 +118,7 @@ struct Prj_Faults
bool WrongTitle; bool WrongTitle;
bool WrongDescription; bool WrongDescription;
bool WrongNumStds; bool WrongNumStds;
bool WrongAssigned;
}; };
/*****************************************************************************/ /*****************************************************************************/
@ -134,8 +135,8 @@ static void Prj_ShowFormToFilterByDpt (void);
static void Prj_PutCurrentParams (void); static void Prj_PutCurrentParams (void);
static void Prj_PutHiddenParamMy_All (Prj_WhoseProjects_t My_All); static void Prj_PutHiddenParamMy_All (Prj_WhoseProjects_t My_All);
static void Prj_PutHiddenParamPreNon (unsigned PreNon); static void Prj_PutHiddenParamAssign (unsigned Assign);
static void Prj_PutHiddenParamHidVis (unsigned HidVis); static void Prj_PutHiddenParamHidden (unsigned Hidden);
static void Prj_PutHiddenParamFaulti (unsigned Faulti); static void Prj_PutHiddenParamFaulti (unsigned Faulti);
static void Prj_PutHiddenParamDptCod (long DptCod); static void Prj_PutHiddenParamDptCod (long DptCod);
static void Prj_GetHiddenParamMy_All (void); static void Prj_GetHiddenParamMy_All (void);
@ -423,8 +424,8 @@ static void Prj_ShowFormToFilterByMy_All (void)
"PREF_OFF"); "PREF_OFF");
Frm_StartForm (ActSeePrj); Frm_StartForm (ActSeePrj);
Filter.My_All = My_All; Filter.My_All = My_All;
Filter.PreNon = Gbl.Prjs.Filter.PreNon; Filter.Assign = Gbl.Prjs.Filter.Assign;
Filter.HidVis = Gbl.Prjs.Filter.HidVis; Filter.Hidden = Gbl.Prjs.Filter.Hidden;
Filter.Faulti = Gbl.Prjs.Filter.Faulti; Filter.Faulti = Gbl.Prjs.Filter.Faulti;
Filter.DptCod = Gbl.Prjs.Filter.DptCod; Filter.DptCod = Gbl.Prjs.Filter.DptCod;
Prj_PutParams (&Filter, Prj_PutParams (&Filter,
@ -445,22 +446,22 @@ static void Prj_ShowFormToFilterByMy_All (void)
static void Prj_ShowFormToFilterByPreassignedNonPreassig (void) static void Prj_ShowFormToFilterByPreassignedNonPreassig (void)
{ {
extern const char *Txt_PROJECT_PREASSIGNED_NONPREASSIGNED_PLURAL[Prj_NUM_PREASSIGNED_NONPREASSIG]; extern const char *Txt_PROJECT_PREASSIGNED_NONPREASSIGNED_PLURAL[Prj_NUM_ASSIGNED_NONASSIG];
struct Prj_Filter Filter; struct Prj_Filter Filter;
Prj_PreassignedNonpreassig_t PreNon; Prj_AssignedNonassig_t PreNon;
Set_StartOneSettingSelector (); Set_StartOneSettingSelector ();
for (PreNon = (Prj_PreassignedNonpreassig_t) 0; for (PreNon = (Prj_AssignedNonassig_t) 0;
PreNon <= (Prj_PreassignedNonpreassig_t) (Prj_NUM_PREASSIGNED_NONPREASSIG - 1); PreNon <= (Prj_AssignedNonassig_t) (Prj_NUM_ASSIGNED_NONASSIG - 1);
PreNon++) PreNon++)
{ {
HTM_DIV_Begin ("class=\"%s\"", HTM_DIV_Begin ("class=\"%s\"",
(Gbl.Prjs.Filter.PreNon & (1 << PreNon)) ? "PREF_ON" : (Gbl.Prjs.Filter.Assign & (1 << PreNon)) ? "PREF_ON" :
"PREF_OFF"); "PREF_OFF");
Frm_StartForm (ActSeePrj); Frm_StartForm (ActSeePrj);
Filter.My_All = Gbl.Prjs.Filter.My_All; Filter.My_All = Gbl.Prjs.Filter.My_All;
Filter.PreNon = Gbl.Prjs.Filter.PreNon ^ (1 << PreNon); // Toggle Filter.Assign = Gbl.Prjs.Filter.Assign ^ (1 << PreNon); // Toggle
Filter.HidVis = Gbl.Prjs.Filter.HidVis; Filter.Hidden = Gbl.Prjs.Filter.Hidden;
Filter.Faulti = Gbl.Prjs.Filter.Faulti; Filter.Faulti = Gbl.Prjs.Filter.Faulti;
Filter.DptCod = Gbl.Prjs.Filter.DptCod; Filter.DptCod = Gbl.Prjs.Filter.DptCod;
Prj_PutParams (&Filter, Prj_PutParams (&Filter,
@ -496,12 +497,12 @@ static void Prj_ShowFormToFilterByHidden (void)
HidVis++) HidVis++)
{ {
HTM_DIV_Begin ("class=\"%s\"", HTM_DIV_Begin ("class=\"%s\"",
(Gbl.Prjs.Filter.HidVis & (1 << HidVis)) ? "PREF_ON" : (Gbl.Prjs.Filter.Hidden & (1 << HidVis)) ? "PREF_ON" :
"PREF_OFF"); "PREF_OFF");
Frm_StartForm (ActSeePrj); Frm_StartForm (ActSeePrj);
Filter.My_All = Gbl.Prjs.Filter.My_All; Filter.My_All = Gbl.Prjs.Filter.My_All;
Filter.PreNon = Gbl.Prjs.Filter.PreNon; Filter.Assign = Gbl.Prjs.Filter.Assign;
Filter.HidVis = Gbl.Prjs.Filter.HidVis ^ (1 << HidVis); // Toggle Filter.Hidden = Gbl.Prjs.Filter.Hidden ^ (1 << HidVis); // Toggle
Filter.Faulti = Gbl.Prjs.Filter.Faulti; Filter.Faulti = Gbl.Prjs.Filter.Faulti;
Filter.DptCod = Gbl.Prjs.Filter.DptCod; Filter.DptCod = Gbl.Prjs.Filter.DptCod;
Prj_PutParams (&Filter, Prj_PutParams (&Filter,
@ -541,8 +542,8 @@ static void Prj_ShowFormToFilterByWarning (void)
"PREF_OFF"); "PREF_OFF");
Frm_StartForm (ActSeePrj); Frm_StartForm (ActSeePrj);
Filter.My_All = Gbl.Prjs.Filter.My_All; Filter.My_All = Gbl.Prjs.Filter.My_All;
Filter.PreNon = Gbl.Prjs.Filter.PreNon; Filter.Assign = Gbl.Prjs.Filter.Assign;
Filter.HidVis = Gbl.Prjs.Filter.HidVis; Filter.Hidden = Gbl.Prjs.Filter.Hidden;
Filter.Faulti = Gbl.Prjs.Filter.Faulti ^ (1 << Faultiness); // Toggle Filter.Faulti = Gbl.Prjs.Filter.Faulti ^ (1 << Faultiness); // Toggle
Filter.DptCod = Gbl.Prjs.Filter.DptCod; Filter.DptCod = Gbl.Prjs.Filter.DptCod;
Prj_PutParams (&Filter, Prj_PutParams (&Filter,
@ -570,8 +571,8 @@ static void Prj_ShowFormToFilterByDpt (void)
HTM_DIV_Begin (NULL); HTM_DIV_Begin (NULL);
Frm_StartForm (ActSeePrj); Frm_StartForm (ActSeePrj);
Filter.My_All = Gbl.Prjs.Filter.My_All; Filter.My_All = Gbl.Prjs.Filter.My_All;
Filter.PreNon = Gbl.Prjs.Filter.PreNon; Filter.Assign = Gbl.Prjs.Filter.Assign;
Filter.HidVis = Gbl.Prjs.Filter.HidVis; Filter.Hidden = Gbl.Prjs.Filter.Hidden;
Filter.Faulti = Gbl.Prjs.Filter.Faulti; Filter.Faulti = Gbl.Prjs.Filter.Faulti;
Filter.DptCod = Prj_FILTER_DPT_DEFAULT; // Do not put department parameter here Filter.DptCod = Prj_FILTER_DPT_DEFAULT; // Do not put department parameter here
Prj_PutParams (&Filter, Prj_PutParams (&Filter,
@ -617,13 +618,13 @@ void Prj_PutParams (struct Prj_Filter *Filter,
if (Filter->My_All != Prj_FILTER_WHOSE_PROJECTS_DEFAULT) if (Filter->My_All != Prj_FILTER_WHOSE_PROJECTS_DEFAULT)
Prj_PutHiddenParamMy_All (Filter->My_All); Prj_PutHiddenParamMy_All (Filter->My_All);
if (Filter->PreNon != ((unsigned) Prj_FILTER_PREASSIGNED_DEFAULT | if (Filter->Assign != ((unsigned) Prj_FILTER_ASSIGNED_DEFAULT |
(unsigned) Prj_FILTER_NONPREASSIG_DEFAULT)) (unsigned) Prj_FILTER_NONASSIG_DEFAULT))
Prj_PutHiddenParamPreNon (Filter->PreNon); Prj_PutHiddenParamAssign (Filter->Assign);
if (Filter->HidVis != ((unsigned) Prj_FILTER_HIDDEN_DEFAULT | if (Filter->Hidden != ((unsigned) Prj_FILTER_HIDDEN_DEFAULT |
(unsigned) Prj_FILTER_VISIBL_DEFAULT)) (unsigned) Prj_FILTER_VISIBL_DEFAULT))
Prj_PutHiddenParamHidVis (Filter->HidVis); Prj_PutHiddenParamHidden (Filter->Hidden);
if (Filter->Faulti != ((unsigned) Prj_FILTER_FAULTY_DEFAULT | if (Filter->Faulti != ((unsigned) Prj_FILTER_FAULTY_DEFAULT |
(unsigned) Prj_FILTER_FAULTLESS_DEFAULT)) (unsigned) Prj_FILTER_FAULTLESS_DEFAULT))
@ -658,14 +659,14 @@ static void Prj_PutHiddenParamMy_All (Prj_WhoseProjects_t My_All)
Par_PutHiddenParamUnsigned (Prj_PARAM_MY__ALL_NAME,(unsigned) My_All); Par_PutHiddenParamUnsigned (Prj_PARAM_MY__ALL_NAME,(unsigned) My_All);
} }
static void Prj_PutHiddenParamPreNon (unsigned PreNon) static void Prj_PutHiddenParamAssign (unsigned Assign)
{ {
Par_PutHiddenParamUnsigned (Prj_PARAM_PRE_NON_NAME,PreNon); Par_PutHiddenParamUnsigned (Prj_PARAM_PRE_NON_NAME,Assign);
} }
static void Prj_PutHiddenParamHidVis (unsigned HidVis) static void Prj_PutHiddenParamHidden (unsigned Hidden)
{ {
Par_PutHiddenParamUnsigned (Prj_PARAM_HID_VIS_NAME,HidVis); Par_PutHiddenParamUnsigned (Prj_PARAM_HID_VIS_NAME,Hidden);
} }
static void Prj_PutHiddenParamFaulti (unsigned Faulti) static void Prj_PutHiddenParamFaulti (unsigned Faulti)
@ -692,12 +693,12 @@ static void Prj_GetHiddenParamMy_All (void)
static void Prj_GetHiddenParamPreNon (void) static void Prj_GetHiddenParamPreNon (void)
{ {
Gbl.Prjs.Filter.PreNon = (unsigned) Par_GetParToUnsignedLong (Prj_PARAM_PRE_NON_NAME, Gbl.Prjs.Filter.Assign = (unsigned) Par_GetParToUnsignedLong (Prj_PARAM_PRE_NON_NAME,
0, 0,
(1 << Prj_PREASSIGNED) | (1 << Prj_ASSIGNED) |
(1 << Prj_NONPREASSIG), (1 << Prj_NONASSIG),
(unsigned) Prj_FILTER_PREASSIGNED_DEFAULT | (unsigned) Prj_FILTER_ASSIGNED_DEFAULT |
(unsigned) Prj_FILTER_NONPREASSIG_DEFAULT); (unsigned) Prj_FILTER_NONASSIG_DEFAULT);
} }
static void Prj_GetHiddenParamHidVis (void) static void Prj_GetHiddenParamHidVis (void)
@ -705,12 +706,12 @@ static void Prj_GetHiddenParamHidVis (void)
switch (Gbl.Usrs.Me.Role.Logged) switch (Gbl.Usrs.Me.Role.Logged)
{ {
case Rol_STD: // Students can view only visible projects case Rol_STD: // Students can view only visible projects
Gbl.Prjs.Filter.HidVis = (1 << Prj_VISIBL); // Only visible projects Gbl.Prjs.Filter.Hidden = (1 << Prj_VISIBL); // Only visible projects
break; break;
case Rol_NET: case Rol_NET:
case Rol_TCH: case Rol_TCH:
case Rol_SYS_ADM: case Rol_SYS_ADM:
Gbl.Prjs.Filter.HidVis = (unsigned) Par_GetParToUnsignedLong (Prj_PARAM_HID_VIS_NAME, Gbl.Prjs.Filter.Hidden = (unsigned) Par_GetParToUnsignedLong (Prj_PARAM_HID_VIS_NAME,
0, 0,
(1 << Prj_HIDDEN) | (1 << Prj_HIDDEN) |
(1 << Prj_VISIBL), (1 << Prj_VISIBL),
@ -827,7 +828,7 @@ static void Prj_ShowProjectsHead (Prj_ProjectView_t ProjectView)
static void Prj_ShowTableAllProjectsHead (void) static void Prj_ShowTableAllProjectsHead (void)
{ {
extern const char *Txt_PROJECT_ORDER[Prj_NUM_ORDERS]; extern const char *Txt_PROJECT_ORDER[Prj_NUM_ORDERS];
extern const char *Txt_Preassigned_QUESTION; extern const char *Txt_Assigned_QUESTION;
extern const char *Txt_Number_of_students; extern const char *Txt_Number_of_students;
extern const char *Txt_PROJECT_ROLES_PLURAL_Abc[Prj_NUM_ROLES_IN_PROJECT]; extern const char *Txt_PROJECT_ROLES_PLURAL_Abc[Prj_NUM_ROLES_IN_PROJECT];
extern const char *Txt_Proposal; extern const char *Txt_Proposal;
@ -844,7 +845,7 @@ static void Prj_ShowTableAllProjectsHead (void)
Order <= (Prj_Order_t) (Prj_NUM_ORDERS - 1); Order <= (Prj_Order_t) (Prj_NUM_ORDERS - 1);
Order++) Order++)
HTM_TH (1,1,"LT DAT_N",Txt_PROJECT_ORDER[Order]); HTM_TH (1,1,"LT DAT_N",Txt_PROJECT_ORDER[Order]);
HTM_TH (1,1,"LT DAT_N",Txt_Preassigned_QUESTION); HTM_TH (1,1,"LT DAT_N",Txt_Assigned_QUESTION);
HTM_TH (1,1,"LT DAT_N",Txt_Number_of_students); HTM_TH (1,1,"LT DAT_N",Txt_Number_of_students);
for (NumRoleToShow = 0; for (NumRoleToShow = 0;
NumRoleToShow < Brw_NUM_ROLES_TO_SHOW; NumRoleToShow < Brw_NUM_ROLES_TO_SHOW;
@ -1032,10 +1033,10 @@ static void Prj_ShowOneProject (unsigned NumIndex,struct Project *Prj,
{ {
extern const char *Txt_Today; extern const char *Txt_Today;
extern const char *Txt_Project_files; extern const char *Txt_Project_files;
extern const char *Txt_Preassigned_QUESTION; extern const char *Txt_Assigned_QUESTION;
extern const char *Txt_Yes; extern const char *Txt_Yes;
extern const char *Txt_No; extern const char *Txt_No;
extern const char *Txt_PROJECT_PREASSIGNED_NONPREASSIGNED_SINGUL[Prj_NUM_PREASSIGNED_NONPREASSIG]; extern const char *Txt_PROJECT_PREASSIGNED_NONPREASSIGNED_SINGUL[Prj_NUM_ASSIGNED_NONASSIG];
extern const char *Txt_Number_of_students; extern const char *Txt_Number_of_students;
extern const char *Txt_See_more; extern const char *Txt_See_more;
extern const char *Txt_See_less; extern const char *Txt_See_less;
@ -1198,7 +1199,7 @@ static void Prj_ShowOneProject (unsigned NumIndex,struct Project *Prj,
ClassLabel); ClassLabel);
break; break;
} }
fprintf (Gbl.F.Out,"%s:",Txt_Preassigned_QUESTION); fprintf (Gbl.F.Out,"%s:",Txt_Assigned_QUESTION);
HTM_TD_End (); HTM_TD_End ();
switch (ProjectView) switch (ProjectView)
@ -1212,10 +1213,14 @@ static void Prj_ShowOneProject (unsigned NumIndex,struct Project *Prj,
ClassData); ClassData);
break; break;
} }
fprintf (Gbl.F.Out,"%s&nbsp;",(Prj->Preassigned == Prj_PREASSIGNED) ? Txt_Yes : fprintf (Gbl.F.Out,"%s&nbsp;",(Prj->Assigned == Prj_ASSIGNED) ? Txt_Yes :
Txt_No); Txt_No);
Ico_PutIconOff (PreassignedNonpreassigImage[Prj->Preassigned], Ico_PutIconOff (PreassignedNonpreassigImage[Prj->Assigned],
Txt_PROJECT_PREASSIGNED_NONPREASSIGNED_SINGUL[Prj->Preassigned]); Txt_PROJECT_PREASSIGNED_NONPREASSIGNED_SINGUL[Prj->Assigned]);
if (Faults.WrongAssigned)
Prj_PutWarningIcon ();
HTM_TD_End (); HTM_TD_End ();
HTM_TR_End (); HTM_TR_End ();
@ -1371,7 +1376,8 @@ static bool Prj_CheckIfPrjIsFaulty (long PrjCod,struct Prj_Faults *Faults)
/***** Reset faults *****/ /***** Reset faults *****/
Faults->WrongTitle = Faults->WrongTitle =
Faults->WrongDescription = Faults->WrongDescription =
Faults->WrongNumStds = false; Faults->WrongNumStds =
Faults->WrongAssigned = false;
/***** Get some project date and check faults ****/ /***** Get some project date and check faults ****/
if (PrjCod > 0) if (PrjCod > 0)
@ -1413,11 +1419,18 @@ static bool Prj_CheckIfPrjIsFaulty (long PrjCod,struct Prj_Faults *Faults)
/* 3. Check number of students */ /* 3. Check number of students */
if (NumProposedStds == 0) if (NumProposedStds == 0)
// The number of proposed students should be > 0
Faults->WrongNumStds = true; Faults->WrongNumStds = true;
else if (IsPreassigned) else
{ {
NumStdsRegisteredInPrj = Prj_GetNumUsrsInPrj (PrjCod,Prj_ROLE_STD); NumStdsRegisteredInPrj = Prj_GetNumUsrsInPrj (PrjCod,Prj_ROLE_STD);
if (IsPreassigned) // Assigned
// In an assigned project the number of proposed students...
// ...should match the number of students registered in it
Faults->WrongNumStds = (NumProposedStds != NumStdsRegisteredInPrj); Faults->WrongNumStds = (NumProposedStds != NumStdsRegisteredInPrj);
else // Not assigned
// A non assigned project should not have students registered in it
Faults->WrongAssigned = (NumStdsRegisteredInPrj != 0);
} }
} }
@ -1427,7 +1440,8 @@ static bool Prj_CheckIfPrjIsFaulty (long PrjCod,struct Prj_Faults *Faults)
return Faults->WrongTitle || return Faults->WrongTitle ||
Faults->WrongDescription || Faults->WrongDescription ||
Faults->WrongNumStds; Faults->WrongNumStds ||
Faults->WrongAssigned;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1437,7 +1451,7 @@ static bool Prj_CheckIfPrjIsFaulty (long PrjCod,struct Prj_Faults *Faults)
static void Prj_PutWarningIcon (void) static void Prj_PutWarningIcon (void)
{ {
fprintf (Gbl.F.Out,"<img src=\"%s/%s\" alt=\"\" class=\"ICO16x16\" />", fprintf (Gbl.F.Out,"<img src=\"%s/%s\" alt=\"\" class=\"ICO16x16\" />",
Cfg_URL_ICON_PUBLIC,"exclamation-triangle.svg"); Cfg_URL_ICON_PUBLIC,"warning64x64.gif");
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1521,7 +1535,7 @@ static void Prj_ShowTableAllProjectsOneRow (struct Project *Prj)
/***** Preassigned? *****/ /***** Preassigned? *****/
HTM_TD_Begin ("class=\"LT %s COLOR%u\"",ClassData,Gbl.RowEvenOdd); HTM_TD_Begin ("class=\"LT %s COLOR%u\"",ClassData,Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"%s",(Prj->Preassigned == Prj_PREASSIGNED) ? Txt_Yes : fprintf (Gbl.F.Out,"%s",(Prj->Assigned == Prj_ASSIGNED) ? Txt_Yes :
Txt_No); Txt_No);
HTM_TD_End (); HTM_TD_End ();
@ -2669,18 +2683,18 @@ void Prj_GetListProjects (void)
Prj_FreeListProjects (); Prj_FreeListProjects ();
/***** Get list of projects from database *****/ /***** Get list of projects from database *****/
if (Gbl.Prjs.Filter.PreNon && // Any selector is on if (Gbl.Prjs.Filter.Assign && // Any selector is on
Gbl.Prjs.Filter.HidVis && // Any selector is on Gbl.Prjs.Filter.Hidden && // Any selector is on
Gbl.Prjs.Filter.Faulti) // Any selector is on Gbl.Prjs.Filter.Faulti) // Any selector is on
{ {
/* Preassigned subquery */ /* Preassigned subquery */
switch (Gbl.Prjs.Filter.PreNon) switch (Gbl.Prjs.Filter.Assign)
{ {
case (1 << Prj_PREASSIGNED): // Preassigned projects case (1 << Prj_ASSIGNED): // Preassigned projects
if (asprintf (&PreNonSubQuery," AND projects.Preassigned='Y'") < 0) if (asprintf (&PreNonSubQuery," AND projects.Preassigned='Y'") < 0)
Lay_NotEnoughMemoryExit (); Lay_NotEnoughMemoryExit ();
break; break;
case (1 << Prj_NONPREASSIG): // Non-preassigned projects case (1 << Prj_NONASSIG): // Non-preassigned projects
if (asprintf (&PreNonSubQuery," AND projects.Preassigned='N'") < 0) if (asprintf (&PreNonSubQuery," AND projects.Preassigned='N'") < 0)
Lay_NotEnoughMemoryExit (); Lay_NotEnoughMemoryExit ();
break; break;
@ -2700,7 +2714,7 @@ void Prj_GetListProjects (void)
case Rol_NET: case Rol_NET:
case Rol_TCH: case Rol_TCH:
case Rol_SYS_ADM: case Rol_SYS_ADM:
switch (Gbl.Prjs.Filter.HidVis) switch (Gbl.Prjs.Filter.Hidden)
{ {
case (1 << Prj_HIDDEN): // Hidden projects case (1 << Prj_HIDDEN): // Hidden projects
if (asprintf (&HidVisSubQuery," AND projects.Hidden='Y'") < 0) if (asprintf (&HidVisSubQuery," AND projects.Hidden='Y'") < 0)
@ -2940,8 +2954,8 @@ void Prj_GetDataOfProjectByCod (struct Project *Prj)
Prj_VISIBL; Prj_VISIBL;
/* Get if project is preassigned or not (row[5]) */ /* Get if project is preassigned or not (row[5]) */
Prj->Preassigned = (row[5][0] == 'Y') ? Prj_PREASSIGNED : Prj->Assigned = (row[5][0] == 'Y') ? Prj_ASSIGNED :
Prj_NONPREASSIG; Prj_NONASSIG;
/* Get if project is preassigned or not (row[6]) */ /* Get if project is preassigned or not (row[6]) */
LongNum = Str_ConvertStrCodToLongCod (row[6]); LongNum = Str_ConvertStrCodToLongCod (row[6]);
@ -3008,7 +3022,7 @@ static void Prj_ResetProject (struct Project *Prj)
Prj->CrsCod = -1L; Prj->CrsCod = -1L;
Prj->Locked = Prj_UNLOCKED; Prj->Locked = Prj_UNLOCKED;
Prj->Hidden = Prj_NEW_PRJ_HIDDEN_VISIBL_DEFAULT; Prj->Hidden = Prj_NEW_PRJ_HIDDEN_VISIBL_DEFAULT;
Prj->Preassigned = Prj_NEW_PRJ_PREASSIGNED_NONPREASSIG_DEFAULT; Prj->Assigned = Prj_NEW_PRJ_ASSIGNED_NONASSIG_DEFAULT;
Prj->NumStds = 1; Prj->NumStds = 1;
Prj->Proposal = Prj_PROPOSAL_DEFAULT; Prj->Proposal = Prj_PROPOSAL_DEFAULT;
Prj->CreatTime = Prj->CreatTime =
@ -3525,7 +3539,7 @@ static void Prj_PutFormProject (struct Project *Prj,bool ItsANewProject)
extern const char *Txt_Title; extern const char *Txt_Title;
extern const char *Txt_Department; extern const char *Txt_Department;
extern const char *Txt_Another_department; extern const char *Txt_Another_department;
extern const char *Txt_Preassigned_QUESTION; extern const char *Txt_Assigned_QUESTION;
extern const char *Txt_Number_of_students; extern const char *Txt_Number_of_students;
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];
@ -3622,19 +3636,19 @@ static void Prj_PutFormProject (struct Project *Prj,bool ItsANewProject)
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RM\"",The_ClassFormInBox[Gbl.Prefs.Theme]); HTM_TD_Begin ("class=\"%s RM\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
fprintf (Gbl.F.Out,"%s:",Txt_Preassigned_QUESTION); fprintf (Gbl.F.Out,"%s:",Txt_Assigned_QUESTION);
HTM_TD_End (); HTM_TD_End ();
HTM_TD_Begin ("class=\"LM\""); HTM_TD_Begin ("class=\"LM\"");
fprintf (Gbl.F.Out,"<select name=\"Preassigned\">"); fprintf (Gbl.F.Out,"<select name=\"Preassigned\">");
fprintf (Gbl.F.Out,"<option value=\"Y\""); fprintf (Gbl.F.Out,"<option value=\"Y\"");
if (Prj->Preassigned == Prj_PREASSIGNED) if (Prj->Assigned == Prj_ASSIGNED)
fprintf (Gbl.F.Out," selected=\"selected\""); fprintf (Gbl.F.Out," selected=\"selected\"");
fprintf (Gbl.F.Out,">%s</option>",Txt_Yes); fprintf (Gbl.F.Out,">%s</option>",Txt_Yes);
fprintf (Gbl.F.Out,"<option value=\"N\""); fprintf (Gbl.F.Out,"<option value=\"N\"");
if (Prj->Preassigned == Prj_NONPREASSIG) if (Prj->Assigned == Prj_NONASSIG)
fprintf (Gbl.F.Out," selected=\"selected\""); fprintf (Gbl.F.Out," selected=\"selected\"");
fprintf (Gbl.F.Out,">%s</option>",Txt_No); fprintf (Gbl.F.Out,">%s</option>",Txt_No);
@ -3839,8 +3853,8 @@ void Prj_RecFormProject (void)
Prj.DptCod = Par_GetParToLong (Dpt_PARAM_DPT_COD_NAME); Prj.DptCod = Par_GetParToLong (Dpt_PARAM_DPT_COD_NAME);
/* Get whether the project is preassigned */ /* Get whether the project is preassigned */
Prj.Preassigned = (Par_GetParToBool ("Preassigned")) ? Prj_PREASSIGNED : Prj.Assigned = (Par_GetParToBool ("Preassigned")) ? Prj_ASSIGNED :
Prj_NONPREASSIG; Prj_NONASSIG;
/* Get number of students */ /* Get number of students */
Prj.NumStds = (unsigned) Prj.NumStds = (unsigned)
@ -3930,7 +3944,7 @@ static void Prj_CreateProject (struct Project *Prj)
Prj->DptCod, Prj->DptCod,
Prj->Hidden == Prj_HIDDEN ? 'Y' : Prj->Hidden == Prj_HIDDEN ? 'Y' :
'N', 'N',
Prj->Preassigned == Prj_PREASSIGNED ? 'Y' : Prj->Assigned == Prj_ASSIGNED ? 'Y' :
'N', 'N',
Prj->NumStds, Prj->NumStds,
Prj_Proposal_DB[Prj->Proposal], Prj_Proposal_DB[Prj->Proposal],
@ -3983,7 +3997,7 @@ static void Prj_UpdateProject (struct Project *Prj)
Prj->DptCod, Prj->DptCod,
Prj->Hidden == Prj_HIDDEN ? 'Y' : Prj->Hidden == Prj_HIDDEN ? 'Y' :
'N', 'N',
Prj->Preassigned == Prj_PREASSIGNED ? 'Y' : Prj->Assigned == Prj_ASSIGNED ? 'Y' :
'N', 'N',
Prj->NumStds, Prj->NumStds,
Prj_Proposal_DB[Prj->Proposal], Prj_Proposal_DB[Prj->Proposal],

View File

@ -46,16 +46,16 @@ typedef enum
} Prj_WhoseProjects_t; } Prj_WhoseProjects_t;
#define Prj_FILTER_WHOSE_PROJECTS_DEFAULT Prj_MY__PROJECTS #define Prj_FILTER_WHOSE_PROJECTS_DEFAULT Prj_MY__PROJECTS
/* Preassigned projects / non-preassigned projects */ /* Assigned projects / non-assigned projects */
#define Prj_NUM_PREASSIGNED_NONPREASSIG 2 #define Prj_NUM_ASSIGNED_NONASSIG 2
typedef enum typedef enum
{ {
Prj_PREASSIGNED = 0, Prj_ASSIGNED = 0,
Prj_NONPREASSIG = 1, Prj_NONASSIG = 1,
} Prj_PreassignedNonpreassig_t; } Prj_AssignedNonassig_t;
#define Prj_NEW_PRJ_PREASSIGNED_NONPREASSIG_DEFAULT Prj_NONPREASSIG #define Prj_NEW_PRJ_ASSIGNED_NONASSIG_DEFAULT Prj_NONASSIG
#define Prj_FILTER_PREASSIGNED_DEFAULT (1 << Prj_PREASSIGNED) // on #define Prj_FILTER_ASSIGNED_DEFAULT (1 << Prj_ASSIGNED) // on
#define Prj_FILTER_NONPREASSIG_DEFAULT (1 << Prj_NONPREASSIG) // on #define Prj_FILTER_NONASSIG_DEFAULT (1 << Prj_NONASSIG) // on
/* Locked/unlocked project */ /* Locked/unlocked project */
#define Prj_NUM_LOCKED_UNLOCKED 2 #define Prj_NUM_LOCKED_UNLOCKED 2
@ -93,8 +93,8 @@ typedef enum
struct Prj_Filter struct Prj_Filter
{ {
Prj_WhoseProjects_t My_All; // Show my / all projects Prj_WhoseProjects_t My_All; // Show my / all projects
unsigned PreNon; // Show preassigned / non preassigned projects unsigned Assign; // Show assigned / non assigned projects
unsigned HidVis; // Show hidden / visible projects unsigned Hidden; // Show hidden / visible projects
unsigned Faulti; // Show faulty / faultless projects unsigned Faulti; // Show faulty / faultless projects
long DptCod; // Show projects of this department long DptCod; // Show projects of this department
}; };
@ -142,7 +142,7 @@ struct Project
long CrsCod; long CrsCod;
Prj_Locked_t Locked; Prj_Locked_t Locked;
Prj_HiddenVisibl_t Hidden; Prj_HiddenVisibl_t Hidden;
Prj_PreassignedNonpreassig_t Preassigned; Prj_AssignedNonassig_t Assigned;
unsigned NumStds; unsigned NumStds;
Prj_Proposal_t Proposal; Prj_Proposal_t Proposal;
time_t CreatTime; time_t CreatTime;

View File

@ -2051,6 +2051,27 @@ const char *Txt_Assessment_criteria =
"Crit&eacute;rios de avalia&ccedil;&atilde;o"; "Crit&eacute;rios de avalia&ccedil;&atilde;o";
#endif #endif
const char *Txt_Assigned_QUESTION =
#if L==1 // ca
"Assignat?";
#elif L==2 // de
"Vorbelegt?";
#elif L==3 // en
"Assigned?";
#elif L==4 // es
"&iquest;Asignado?";
#elif L==5 // fr
"Assign&eacute;?";
#elif L==6 // gn
"&iquest;Asignado?"; // Okoteve traducción
#elif L==7 // it
"Assegnato?";
#elif L==8 // pl
"Zadany?";
#elif L==9 // pt
"Atribu&iacute;do?";
#endif
const char *Txt_Assignment = const char *Txt_Assignment =
#if L==1 // ca #if L==1 // ca
"Activitat"; "Activitat";
@ -29732,27 +29753,6 @@ const char *Txt_Post = // Publish (verb)
"Publicar"; "Publicar";
#endif #endif
const char *Txt_Preassigned_QUESTION =
#if L==1 // ca
"Preassignat?";
#elif L==2 // de
"Vorbelegt?";
#elif L==3 // en
"Preassigned?";
#elif L==4 // es
"&iquest;Preasignado?";
#elif L==5 // fr
"Pr&eacute;assign&eacute;?";
#elif L==6 // gn
"&iquest;Preasignado?"; // Okoteve traducción
#elif L==7 // it
"Preassegnato?";
#elif L==8 // pl
"Zadany?";
#elif L==9 // pt
"Pr&eacute;-atribu&iacute;do?";
#endif
const char *Txt_Present = const char *Txt_Present =
#if L==1 // ca #if L==1 // ca
"Present"; "Present";
@ -31033,7 +31033,7 @@ const char *Txt_PROJECT_MY_ALL_PROJECTS[Prj_NUM_WHOSE_PROJECTS] =
#endif #endif
}; };
const char *Txt_PROJECT_PREASSIGNED_NONPREASSIGNED_PLURAL[Prj_NUM_PREASSIGNED_NONPREASSIG] = const char *Txt_PROJECT_PREASSIGNED_NONPREASSIGNED_PLURAL[Prj_NUM_ASSIGNED_NONASSIG] =
{ {
// Prj_PREASSIGNED // Prj_PREASSIGNED
#if L==1 // ca #if L==1 // ca
@ -31078,7 +31078,7 @@ const char *Txt_PROJECT_PREASSIGNED_NONPREASSIGNED_PLURAL[Prj_NUM_PREASSIGNED_NO
#endif #endif
}; };
const char *Txt_PROJECT_PREASSIGNED_NONPREASSIGNED_SINGUL[Prj_NUM_PREASSIGNED_NONPREASSIG] = const char *Txt_PROJECT_PREASSIGNED_NONPREASSIGNED_SINGUL[Prj_NUM_ASSIGNED_NONASSIG] =
{ {
// Prj_PREASSIGNED // Prj_PREASSIGNED
#if L==1 // ca #if L==1 // ca