Version 17.23

This commit is contained in:
Antonio Cañas Vargas 2017-10-10 01:26:45 +02:00
parent 7920adedd1
commit 0c96d661ab
8 changed files with 811 additions and 402 deletions

View File

@ -248,21 +248,22 @@
// TODO: "Administrar varios profesores no editores" -> debería poder hacerlo un profesor (Perico)
// TODO: Mover PROFILE.Briefcase a FILES.Briefcase en la ayuda de GitHub (aquí ya está cambiado)
// TODO: Los profesores no editores no deberían recibir notificaciones de solicitudes de inscripción.
/*****************************************************************************/
/****************************** Public constants *****************************/
/*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 17.22.1 (2017-10-08)"
#define Log_PLATFORM_VERSION "SWAD 17.23 (2017-10-10)"
#define CSS_FILE "swad17.0.css"
#define JS_FILE "swad17.17.1.js"
// Number of lines (includes comments but not blank lines) has been got with the following command:
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1
/*
Version 17.23: Oct 10, 2017 New filter to select preassigned/non-preassigned projects.
New filter to select hidden/visible projects.
Code refactoring in parameters of projects. (234140 lines)
Version 17.22.1: Oct 08, 2017 Changed commentars on actions. (233756 lines)
Version 17.22: Oct 08, 2017 New file browser for project assessment. (233755 lines)
19 changes necessary in database:

View File

@ -2363,7 +2363,7 @@ void Brw_GetParAndInitFileBrowser (void)
/***** Get other parameters *****/
if (Brw_GetIfProjectFileBrowser ())
/* Get project code */
Gbl.CurrentCrs.Prjs.PrjCod = Prj_GetParamPrjCod ();
Gbl.Prjs.PrjCod = Prj_GetParamPrjCod ();
else if (Brw_GetIfCrsAssigWorksFileBrowser ())
{
/* Get lists of the selected users */
@ -2602,7 +2602,7 @@ void Brw_PutParamsFileBrowser (Act_Action_t NextAction,
Grp_PutParamGrpCod (Gbl.CurrentCrs.Grps.GrpCod);
else if (Brw_GetIfProjectFileBrowser ()) // This file browser needs specify a project
/***** Project code *****/
Prj_PutParamPrjCod (Gbl.CurrentCrs.Prjs.PrjCod);
Prj_PutParamPrjCod (Gbl.Prjs.PrjCod);
else if (NextAction != ActUnk)
{
if (Brw_GetIfCrsAssigWorksFileBrowser ())
@ -2871,14 +2871,14 @@ static void Brw_SetPathFileBrowser (void)
project-code mod 100 */
sprintf (Path,"%s/%s/%02u",
Gbl.CurrentCrs.PathPriv,Cfg_FOLDER_PRJ,
(unsigned) (Gbl.CurrentCrs.Prjs.PrjCod % 100));
(unsigned) (Gbl.Prjs.PrjCod % 100));
Fil_CreateDirIfNotExists (Path);
/* Create path to the current project */
sprintf (Gbl.FileBrowser.Priv.PathAboveRootFolder,"%s/%s/%02u/%ld",
Gbl.CurrentCrs.PathPriv,Cfg_FOLDER_PRJ,
(unsigned) (Gbl.CurrentCrs.Prjs.PrjCod % 100),
Gbl.CurrentCrs.Prjs.PrjCod);
(unsigned) (Gbl.Prjs.PrjCod % 100),
Gbl.Prjs.PrjCod);
break;
case Brw_ADMI_BRF_USR:
Str_Copy (Gbl.FileBrowser.Priv.PathAboveRootFolder,
@ -3430,7 +3430,7 @@ static void Brw_ShowFileBrowserProject (void)
/***** Get project data *****/
Prj.PrjCod = Prj_GetParamPrjCod ();
Prj_GetDataOfProjectByCod (&Prj);
Gbl.CurrentCrs.Prjs.PrjCod = Prj.PrjCod;
Gbl.Prjs.PrjCod = Prj.PrjCod;
/***** Start box *****/
Box_StartBox (NULL,Prj.Title,NULL,
@ -3440,7 +3440,7 @@ static void Brw_ShowFileBrowserProject (void)
Prj_ShowOneUniqueProject (&Prj);
/***** Show project file browsers *****/
MyRoleInProject = Prj_GetMyRoleInProject (Gbl.CurrentCrs.Prjs.PrjCod);
MyRoleInProject = Prj_GetMyRoleInProject (Gbl.Prjs.PrjCod);
if (Prj_CheckIfICanViewProjectFiles (MyRoleInProject))
{
Brw_WriteTopBeforeShowingFileBrowser ();
@ -5252,7 +5252,7 @@ static void Brw_PutParamsFullTree (void)
if (Brw_GetIfGroupFileBrowser ())
Grp_PutParamGrpCod (Gbl.CurrentCrs.Grps.GrpCod);
else if (Brw_GetIfProjectFileBrowser ()) // This file browser needs specify a project
Prj_PutParamPrjCod (Gbl.CurrentCrs.Prjs.PrjCod);
Prj_PutParamPrjCod (Gbl.Prjs.PrjCod);
else if (Brw_GetIfCrsAssigWorksFileBrowser ())
Usr_PutHiddenParUsrCodAll (Brw_ActSeeAdm[Gbl.FileBrowser.Type],
Gbl.Usrs.Select[Rol_UNK]);
@ -5445,7 +5445,7 @@ static void Brw_GetAndUpdateDateLastAccFileBrowser (void)
break;
case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
Cod = Gbl.CurrentCrs.Prjs.PrjCod;
Cod = Gbl.Prjs.PrjCod;
break;
case Brw_ADMI_BRF_USR:
Cod = -1L;
@ -7626,7 +7626,7 @@ static bool Brw_CheckIfClipboardIsInThisTree (void)
break;
case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
if (Gbl.FileBrowser.Clipboard.Cod == Gbl.CurrentCrs.Prjs.PrjCod)
if (Gbl.FileBrowser.Clipboard.Cod == Gbl.Prjs.PrjCod)
return true; // I am in the project of the clipboard
break;
case Brw_ADMI_BRF_USR:
@ -7714,7 +7714,7 @@ static long Brw_GetCodForClipboard (void)
return Gbl.CurrentCrs.Grps.GrpCod;
case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
return Gbl.CurrentCrs.Prjs.PrjCod;
return Gbl.Prjs.PrjCod;
default:
return -1L;
}
@ -8188,7 +8188,7 @@ static void Brw_RemoveAffectedClipboards (Brw_FileBrowser_t FileBrowser,
sprintf (Query,"DELETE FROM clipboard"
" WHERE FileBrowser=%u AND Cod=%ld",
(unsigned) FileBrowser,
Gbl.CurrentCrs.Prjs.PrjCod);
Gbl.Prjs.PrjCod);
break;
case Brw_ADMI_BRF_USR:
sprintf (Query,"DELETE FROM clipboard"
@ -11439,7 +11439,7 @@ long Brw_GetCodForFiles (void)
return Gbl.CurrentCrs.Grps.GrpCod;
case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
return Gbl.CurrentCrs.Prjs.PrjCod;
return Gbl.Prjs.PrjCod;
default:
return -1L;
}
@ -11994,7 +11994,7 @@ static bool Brw_CheckIfICanModifyPrjDocFileOrFolder (void)
case Rol_STD:
case Rol_NET:
case Rol_TCH:
switch (Prj_GetMyRoleInProject (Gbl.CurrentCrs.Prjs.PrjCod))
switch (Prj_GetMyRoleInProject (Gbl.Prjs.PrjCod))
{
case Prj_ROLE_UNK: // I am not a member
return false;
@ -12027,7 +12027,7 @@ static bool Brw_CheckIfICanModifyPrjAssFileOrFolder (void)
case Rol_STD:
case Rol_NET:
case Rol_TCH:
switch (Prj_GetMyRoleInProject (Gbl.CurrentCrs.Prjs.PrjCod))
switch (Prj_GetMyRoleInProject (Gbl.Prjs.PrjCod))
{
case Prj_ROLE_UNK: // I am not a member
case Prj_ROLE_STD: // Students can not view or edit project assessment

View File

@ -349,10 +349,17 @@ void Gbl_InitializeGlobals (void)
Gbl.Asgs.LstAsgCods = NULL;
Gbl.Asgs.SelectedOrder = Asg_ORDER_DEFAULT;
/* Projects */
Gbl.Prjs.LstIsRead = false; // List is not read
Gbl.Prjs.Num = 0;
Gbl.Prjs.LstPrjCods = NULL;
Gbl.Prjs.My_All = Prj_WHOSE_PROJECTS_DEFAULT;
Gbl.Prjs.PreNon = Prj_PREASSIGNED_DEFAULT |
Prj_NONPREASSIG_DEFAULT;
Gbl.Prjs.HidVis = Prj_HIDDEN_DEFAULT |
Prj_VISIBL_DEFAULT;
Gbl.Prjs.SelectedOrder = Prj_ORDER_DEFAULT;
Gbl.Prjs.PrjCod = -1L;
Gbl.AttEvents.LstIsRead = false; // List is not read
Gbl.AttEvents.Num = 0;

View File

@ -460,11 +460,6 @@ struct Globals
char PathPriv[PATH_MAX + 1]; // Absolute path to the private directory of the course
char PathRelPubl[PATH_MAX + 1]; // Relative path to the public directory of the course
char PathURLPubl[PATH_MAX + 1]; // Abolute URL to the public part of the course
struct
{
Prj_WhichProjects_t WhichPrjs; // Show my projects or all projects
long PrjCod;
} Prjs;
struct
{
unsigned NumGrps;
@ -581,8 +576,11 @@ struct Globals
unsigned Num; // Number of projects
long *LstPrjCods; // List of project codes
Prj_Order_t SelectedOrder;
long PrjCodToEdit; // Used as parameter in contextual links
Prj_WhoseProjects_t My_All; // Show my / all projects
unsigned PreNon; // Show preassigned / non preassigned projects
unsigned HidVis; // Show hidden / visible projects
unsigned CurrentPage;
long PrjCod; // Current project
} Prjs;
struct
{

View File

@ -164,9 +164,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
break;
case Pag_PROJECTS:
Act_FormStartAnchor (ActSeePrj,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,1);
Prj_PutHiddenParamPrjOrder ();
Prj_PutParamWhichPrjs ();
Prj_PutParams (Gbl.Prjs.My_All,
Gbl.Prjs.PreNon,
Gbl.Prjs.HidVis,
Gbl.Prjs.SelectedOrder,
1,
-1L);
break;
case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
@ -271,9 +274,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
break;
case Pag_PROJECTS:
Act_FormStartAnchor (ActSeePrj,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,1);
Prj_PutHiddenParamPrjOrder ();
Prj_PutParamWhichPrjs ();
Prj_PutParams (Gbl.Prjs.My_All,
Gbl.Prjs.PreNon,
Gbl.Prjs.HidVis,
Gbl.Prjs.SelectedOrder,
1,
-1L);
break;
case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
@ -364,9 +370,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
break;
case Pag_PROJECTS:
Act_FormStartAnchor (ActSeePrj,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->LeftPage);
Prj_PutHiddenParamPrjOrder ();
Prj_PutParamWhichPrjs ();
Prj_PutParams (Gbl.Prjs.My_All,
Gbl.Prjs.PreNon,
Gbl.Prjs.HidVis,
Gbl.Prjs.SelectedOrder,
Pagination->LeftPage,
-1L);
break;
case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
@ -468,9 +477,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
break;
case Pag_PROJECTS:
Act_FormStartAnchor (ActSeePrj,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,NumPage);
Prj_PutHiddenParamPrjOrder ();
Prj_PutParamWhichPrjs ();
Prj_PutParams (Gbl.Prjs.My_All,
Gbl.Prjs.PreNon,
Gbl.Prjs.HidVis,
Gbl.Prjs.SelectedOrder,
NumPage,
-1L);
break;
case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
@ -560,9 +572,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
break;
case Pag_PROJECTS:
Act_FormStartAnchor (ActSeePrj,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->RightPage);
Prj_PutHiddenParamPrjOrder ();
Prj_PutParamWhichPrjs ();
Prj_PutParams (Gbl.Prjs.My_All,
Gbl.Prjs.PreNon,
Gbl.Prjs.HidVis,
Gbl.Prjs.SelectedOrder,
Pagination->RightPage,
-1L);
break;
case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
@ -651,9 +666,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
break;
case Pag_PROJECTS:
Act_FormStartAnchor (ActSeePrj,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->NumPags);
Prj_PutHiddenParamPrjOrder ();
Prj_PutParamWhichPrjs ();
Prj_PutParams (Gbl.Prjs.My_All,
Gbl.Prjs.PreNon,
Gbl.Prjs.HidVis,
Gbl.Prjs.SelectedOrder,
Pagination->NumPags,
-1L);
break;
case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);

File diff suppressed because it is too large Load Diff

View File

@ -39,14 +39,6 @@
#define Prj_MAX_CHARS_PROJECT_TITLE (128 - 1) // 127
#define Prj_MAX_BYTES_PROJECT_TITLE ((Prj_MAX_CHARS_PROJECT_TITLE + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 2047
#define Prj_NUM_TYPES_PREASSIGNED 2
typedef enum
{
Prj_NOT_PREASSIGNED = 0,
Prj_PREASSIGNED = 1,
} Prj_Preassigned_t;
#define Prj_PREASSIGNED_DEFAULT Prj_NOT_PREASSIGNED
#define Prj_NUM_PROPOSAL_TYPES 3
typedef enum
{
@ -67,12 +59,50 @@ typedef enum
Prj_ROLE_EVA = 3, // Evaluator
} Prj_RoleInProject_t;
#define Prj_NUM_ORDERS 4
typedef enum
{
Prj_ORDER_START_TIME = 0,
Prj_ORDER_END_TIME = 1,
Prj_ORDER_TITLE = 2,
Prj_ORDER_DEPARTMENT = 3,
} Prj_Order_t;
#define Prj_ORDER_DEFAULT Prj_ORDER_START_TIME
#define Prj_NUM_WHOSE_PROJECTS 2
typedef enum
{
Prj_MY__PROJECTS,
Prj_ALL_PROJECTS,
} Prj_WhoseProjects_t;
#define Prj_WHOSE_PROJECTS_DEFAULT Prj_MY__PROJECTS
#define Prj_NUM_PREASSIGNED_NONPREASSIG 2
typedef enum
{
Prj_PREASSIGNED = 0,
Prj_NONPREASSIG = 1,
} Prj_PreassignedNonpreassig_t;
#define Prj_NEW_PRJ_PREASSIGNED_NONPREASSIG_DEFAULT Prj_NONPREASSIG
#define Prj_PREASSIGNED_DEFAULT (1 << Prj_PREASSIGNED) // on
#define Prj_NONPREASSIG_DEFAULT (1 << Prj_NONPREASSIG) // on
#define Prj_NUM_HIDDEN_VISIBL 2
typedef enum
{
Prj_HIDDEN = 0,
Prj_VISIBL = 1,
} Prj_HiddenVisibl_t;
#define Prj_NEW_PRJ_HIDDEN_VISIBL_DEFAULT Prj_VISIBL
#define Prj_HIDDEN_DEFAULT (1 << Prj_HIDDEN) // on
#define Prj_VISIBL_DEFAULT (1 << Prj_VISIBL) // on
struct Project
{
long PrjCod;
long CrsCod;
bool Hidden;
Prj_Preassigned_t Preassigned;
Prj_HiddenVisibl_t Hidden;
Prj_PreassignedNonpreassig_t Preassigned;
unsigned NumStds;
Prj_Proposal_t Proposal;
time_t CreatTime;
@ -85,31 +115,19 @@ struct Project
char URL[Cns_MAX_BYTES_WWW + 1];
};
#define Prj_NUM_ORDERS 4
typedef enum
{
Prj_ORDER_START_TIME = 0,
Prj_ORDER_END_TIME = 1,
Prj_ORDER_TITLE = 2,
Prj_ORDER_DEPARTMENT = 3,
} Prj_Order_t;
#define Prj_ORDER_DEFAULT Prj_ORDER_START_TIME
#define Prj_NUM_WHICH_PROJECTS 2
typedef enum
{
Prj_ONLY_MY_PROJECTS,
Prj_ALL_PROJECTS,
} Prj_WhichProjects_t;
#define Prj_WHICH_PROJECTS_DEFAULT Prj_ONLY_MY_PROJECTS
/*****************************************************************************/
/***************************** Public prototypes *****************************/
/*****************************************************************************/
void Prj_SeeProjects (void);
void Prj_ShowTableAllProjects (void);
void Prj_PutParamWhichPrjs (void);
void Prj_PutParams (Prj_WhoseProjects_t My_All,
unsigned PreNon,
unsigned HidVis,
Prj_Order_t Order,
unsigned NumPage,
long PrjCod);
void Prj_ShowOneUniqueProject (struct Project *Prj);

View File

@ -30585,7 +30585,7 @@ const char *Txt_Preassigned_QUESTION =
#if L==1
"Preassignat?";
#elif L==2
"Vorzugeordnet?";
"Vorbelegt?";
#elif L==3
"Preassigned?";
#elif L==4
@ -31444,7 +31444,7 @@ const char *Txt_PROJECT_ROLES_PLURAL_Abc[Prj_NUM_ROLES_IN_PROJECT] =
};
const char *Txt_PROJECT_STATUS[Prj_NUM_PROPOSAL_TYPES] =
{
{
#if L==1 // Prj_PROPOSAL_NEW
"Projecte nou"
#elif L==2
@ -31506,8 +31506,9 @@ const char *Txt_PROJECT_STATUS[Prj_NUM_PROPOSAL_TYPES] =
#endif
};
const char *Txt_PROJECT_WHICH_PROJECTS[2] =
{
const char *Txt_PROJECT_MY_ALL_PROJECTS[Prj_NUM_WHOSE_PROJECTS] =
{
// Prj_MY__PROJECTS
#if L==1
"Nom&eacute;s els meus projectes"
#elif L==2
@ -31528,6 +31529,7 @@ const char *Txt_PROJECT_WHICH_PROJECTS[2] =
"Apenas os meus projetos"
#endif
,
// Prj_ALL_PROJECTS
#if L==1
"Tots els projectes"
#elif L==2
@ -31549,6 +31551,141 @@ const char *Txt_PROJECT_WHICH_PROJECTS[2] =
#endif
};
const char *Txt_PROJECT_PREASSIGNED_NONPREASSIGNED_PLURAL[Prj_NUM_PREASSIGNED_NONPREASSIG] =
{
// Prj_PREASSIGNED
#if L==1
"Projectes preassignats"
#elif L==2
"Vorbelegt Projekte"
#elif L==3
"Preassigned projects"
#elif L==4
"Proyectos preasignados"
#elif L==5
"Projets pr&eacute;assign&eacute;s"
#elif L==6
"Proyectos preasignados" // Okoteve traducción
#elif L==7
"Progetti preassegnati"
#elif L==8
"Zadany projekty"
#elif L==9
"Projetos pr&eacute;-atribu&iacute;dos"
#endif
,
// Prj_NONPREASSIG
#if L==1
"Projectes no preassignats"
#elif L==2
"Nicht vorbelegt Projekte"
#elif L==3
"Non-preassigned projects"
#elif L==4
"Proyectos no preasignados"
#elif L==5
"Projets non pr&eacute;assign&eacute;s"
#elif L==6
"Proyectos no preasignados" // Okoteve traducción
#elif L==7
"Progetti non-preassegnati"
#elif L==8
"Nieprzypisane projekty"
#elif L==9
"Projetos n&atilde;o pr&eacute;-atribu&iacute;dos"
#endif
};
const char *Txt_PROJECT_PREASSIGNED_NONPREASSIGNED_SINGUL[Prj_NUM_PREASSIGNED_NONPREASSIG] =
{
// Prj_PREASSIGNED
#if L==1
"Projecte preassignat"
#elif L==2
"Vorbelegt Projekt"
#elif L==3
"Preassigned project"
#elif L==4
"Proyecto preasignado"
#elif L==5
"Projet pr&eacute;assign&eacute;"
#elif L==6
"Proyecto preasignado" // Okoteve traducción
#elif L==7
"Progetto preassegnato"
#elif L==8
"Zadany projekt"
#elif L==9
"Projeto pr&eacute;-atribu&iacute;do"
#endif
,
// Prj_NONPREASSIG
#if L==1
"Projecte no preassignat"
#elif L==2
"Nicht vorbelegt Projekt"
#elif L==3
"Non-preassigned project"
#elif L==4
"Proyecto no preasignado"
#elif L==5
"Projet non pr&eacute;assign&eacute;"
#elif L==6
"Proyecto no preasignado" // Okoteve traducción
#elif L==7
"Progetto non-preassegnato"
#elif L==8
"Nieprzypisane projekt"
#elif L==9
"Projeto n&atilde;o pr&eacute;-atribu&iacute;do"
#endif
};
const char *Txt_PROJECT_HIDDEN_VISIBL_PROJECTS[Prj_NUM_HIDDEN_VISIBL] =
{
// Prj_HIDDEN
#if L==1
"Projectes ocults"
#elif L==2
"Unsichtbare Projekte"
#elif L==3
"Hidden projects"
#elif L==4
"Proyectos ocultos"
#elif L==5
"Projets cach&eacute;s"
#elif L==6
"Proyectos ocultos" // Okoteve traducción
#elif L==7
"Progetti nascosti"
#elif L==8
"Ukryte projekty"
#elif L==9
"Projetos ocultos"
#endif
,
// Prj_VISIBL
#if L==1
"Projectes visibles"
#elif L==2
"Sichtbar Projekte"
#elif L==3
"Visible projects"
#elif L==4
"Proyectos visibles"
#elif L==5
"Projets visibles"
#elif L==6
"Proyectos visibles" // Okoteve traducción
#elif L==7
"Progetti visibili"
#elif L==8
"Widoczne projekty"
#elif L==9
"Projetos vis&iacute;veis"
#endif
};
const char *Txt_Projects =
#if L==1
"Projectes (treballs fi de grau/m&agrave;ster, tesi&hellip;)";