Version 17.9.1

This commit is contained in:
Antonio Cañas Vargas 2017-09-24 13:08:26 +02:00
parent b3fb8ad5e2
commit ca46f020d5
2 changed files with 116 additions and 88 deletions

View File

@ -252,13 +252,14 @@
/****************************** Public constants *****************************/ /****************************** Public constants *****************************/
/*****************************************************************************/ /*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 17.9 (2017-09-24)" #define Log_PLATFORM_VERSION "SWAD 17.9.1 (2017-09-24)"
#define CSS_FILE "swad17.0.css" #define CSS_FILE "swad17.0.css"
#define JS_FILE "swad16.206.3.js" #define JS_FILE "swad16.206.3.js"
// Number of lines (includes comments but not blank lines) has been got with the following command: // 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 // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1
/* /*
Version 17.9.1: Sep 24, 2017 Changes in listing of all projects in a table. (231172 lines)
Version 17.9: Sep 24, 2017 Action to show all projects in a table. (231151 lines) Version 17.9: Sep 24, 2017 Action to show all projects in a table. (231151 lines)
1 change necessary in database: 1 change necessary in database:
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1696','es','N','Ver tabla proyectos'); INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1696','es','N','Ver tabla proyectos');

View File

@ -88,8 +88,12 @@ static void Prj_ShowOneProjectUsrs (const struct Project *Prj,
const char *Label,Prj_RoleInProject_t RoleInProject); const char *Label,Prj_RoleInProject_t RoleInProject);
static void Prj_ShowTableAllProjectsUsrs (const struct Project *Prj, static void Prj_ShowTableAllProjectsUsrs (const struct Project *Prj,
Prj_RoleInProject_t RoleInProject); Prj_RoleInProject_t RoleInProject);
static void Prj_WriteUsrs (long PrjCod,Prj_ProjectView_t ProjectView, static void Prj_ShowOneProjectWriteUsrs (long PrjCod,Prj_ProjectView_t ProjectView,
Prj_RoleInProject_t RoleInProject); Prj_RoleInProject_t RoleInProject);
static void Prj_ShowTableAllProjectsWriteUsrs (long PrjCod,
Prj_RoleInProject_t RoleInProject);
static unsigned Prj_GetUsrsInPrj (long PrjCod,Prj_RoleInProject_t RoleInProject,
MYSQL_RES **mysql_res);
static void Prj_ReqAnotherUsrID (Prj_RoleInProject_t RoleInProject); static void Prj_ReqAnotherUsrID (Prj_RoleInProject_t RoleInProject);
static void Prj_AddUsrToProject (Prj_RoleInProject_t RoleInProject); static void Prj_AddUsrToProject (Prj_RoleInProject_t RoleInProject);
@ -153,7 +157,7 @@ void Prj_ShowTableAllProjects (void)
/***** Write all the projects *****/ /***** Write all the projects *****/
for (NumPrj = 0; for (NumPrj = 0;
NumPrj <= Gbl.Prjs.Num; NumPrj < Gbl.Prjs.Num;
NumPrj++) NumPrj++)
{ {
Prj.PrjCod = Gbl.Prjs.LstPrjCods[NumPrj]; Prj.PrjCod = Gbl.Prjs.LstPrjCods[NumPrj];
@ -773,7 +777,7 @@ static void Prj_ShowOneProjectUsrs (const struct Project *Prj,
Label); Label);
break; break;
} }
Prj_WriteUsrs (Prj->PrjCod,ProjectView,RoleInProject); Prj_ShowOneProjectWriteUsrs (Prj->PrjCod,ProjectView,RoleInProject);
fprintf (Gbl.F.Out,"</td>" fprintf (Gbl.F.Out,"</td>"
"</tr>"); "</tr>");
} }
@ -786,7 +790,7 @@ static void Prj_ShowTableAllProjectsUsrs (const struct Project *Prj,
Gbl.RowEvenOdd, Gbl.RowEvenOdd,
Prj->Hidden ? "DAT_LIGHT" : Prj->Hidden ? "DAT_LIGHT" :
"DAT"); "DAT");
Prj_WriteUsrs (Prj->PrjCod,Prj_LIST_PROJECTS,RoleInProject); Prj_ShowTableAllProjectsWriteUsrs (Prj->PrjCod,RoleInProject);
fprintf (Gbl.F.Out,"</td>"); fprintf (Gbl.F.Out,"</td>");
} }
@ -794,22 +798,17 @@ static void Prj_ShowTableAllProjectsUsrs (const struct Project *Prj,
/*************** Write list of users with a role in a project ****************/ /*************** Write list of users with a role in a project ****************/
/*****************************************************************************/ /*****************************************************************************/
static void Prj_WriteUsrs (long PrjCod,Prj_ProjectView_t ProjectView, static void Prj_ShowOneProjectWriteUsrs (long PrjCod,Prj_ProjectView_t ProjectView,
Prj_RoleInProject_t RoleInProject) Prj_RoleInProject_t RoleInProject)
{ {
extern const char *Txt_Remove; extern const char *Txt_Remove;
extern const char *Txt_ROLES_SINGUL_abc[Rol_NUM_ROLES][Usr_NUM_SEXS]; extern const char *Txt_ROLES_SINGUL_abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
extern const char *Txt_ROLES_PLURAL_abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
extern const char *Txt_Add_USER; extern const char *Txt_Add_USER;
extern const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT]; extern const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT];
char Query[2048];
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
unsigned NumUsr; unsigned NumUsr;
unsigned NumUsrs; unsigned NumUsrs;
unsigned NumUsrsKnown;
unsigned NumUsrsUnknown;
unsigned NumUsrsToShow;
bool UsrValid; bool UsrValid;
bool ShowPhoto; bool ShowPhoto;
char PhotoURL[PATH_MAX + 1]; char PhotoURL[PATH_MAX + 1];
@ -828,92 +827,56 @@ static void Prj_WriteUsrs (long PrjCod,Prj_ProjectView_t ProjectView,
ActReqAddEvaPrj, // Prj_ROLE_EVA, Evaluator ActReqAddEvaPrj, // Prj_ROLE_EVA, Evaluator
}; };
/***** Get number of users in project from database *****/
sprintf (Query,"SELECT COUNT(*) FROM prj_usr"
" WHERE PrjCod=%ld AND RoleInProject=%u",
PrjCod,(unsigned) RoleInProject);
NumUsrs = (unsigned) DB_QueryCOUNT (Query,"can not get users in project");
/***** Get users in project from database *****/ /***** Get users in project from database *****/
sprintf (Query,"SELECT prj_usr.UsrCod," NumUsrs = Prj_GetUsrsInPrj (PrjCod,RoleInProject,&mysql_res);
"usr_data.Surname1 AS S1,"
"usr_data.Surname2 AS S2,"
"usr_data.FirstName AS FN"
" FROM prj_usr,usr_data"
" WHERE prj_usr.PrjCod=%ld AND RoleInProject=%u"
" AND prj_usr.UsrCod=usr_data.UsrCod"
" ORDER BY S1,S2,FN",
PrjCod,(unsigned) RoleInProject);
NumUsrsKnown = (unsigned) DB_QuerySELECT (Query,&mysql_res,
"can not get users in project");
/***** Start table *****/ /***** Start table *****/
fprintf (Gbl.F.Out,"<table>"); fprintf (Gbl.F.Out,"<table>");
/***** Check number of users *****/ /***** Write users *****/
if (NumUsrs) for (NumUsr = 0;
NumUsr < NumUsrs;
NumUsr++)
{ {
/***** How many users will be shown? *****/ /* Get user's code */
NumUsrsToShow = NumUsrsKnown; row = mysql_fetch_row (mysql_res);
Gbl.Usrs.Other.UsrDat.UsrCod = Str_ConvertStrCodToLongCod (row[0]);
/***** Write known users *****/ /* Get user's data */
for (NumUsr = 0; UsrValid = Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat);
NumUsr < NumUsrsToShow;
NumUsr++)
{
/* Get user's code */
row = mysql_fetch_row (mysql_res);
Gbl.Usrs.Other.UsrDat.UsrCod = Str_ConvertStrCodToLongCod (row[0]);
/* Get user's data */ /* Start row for this user */
UsrValid = Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat); fprintf (Gbl.F.Out,"<tr>");
/* Start row for this user */ /* Icon to remove user */
fprintf (Gbl.F.Out,"<tr>"); if (ProjectView == Prj_EDIT_ONE_PROJECT)
{
fprintf (Gbl.F.Out,"<td class=\"CENTER_TOP\" style=\"width:30px;\">");
Lay_PutContextualLink (ActionReqRemUsr[RoleInProject],NULL,Prj_PutParams,
"remove-on64x64.png",
Txt_Remove,NULL,
NULL);
fprintf (Gbl.F.Out,"</td>");
}
/* Icon to remove user */ /* Put user's photo */
if (ProjectView == Prj_EDIT_ONE_PROJECT) fprintf (Gbl.F.Out,"<td class=\"CENTER_TOP\" style=\"width:30px;\">");
{ ShowPhoto = (UsrValid ? Pho_ShowingUsrPhotoIsAllowed (&Gbl.Usrs.Other.UsrDat,PhotoURL) :
fprintf (Gbl.F.Out,"<td class=\"CENTER_TOP\" style=\"width:30px;\">"); false);
Lay_PutContextualLink (ActionReqRemUsr[RoleInProject],NULL,Prj_PutParams, Pho_ShowUsrPhoto (&Gbl.Usrs.Other.UsrDat,ShowPhoto ? PhotoURL :
"remove-on64x64.png", NULL,
Txt_Remove,NULL, "PHOTO21x28",Pho_ZOOM,false);
NULL);
fprintf (Gbl.F.Out,"</td>");
}
/* Put user's photo */ /* Write user's name */
fprintf (Gbl.F.Out,"<td class=\"CENTER_TOP\" style=\"width:30px;\">"); fprintf (Gbl.F.Out,"</td>"
ShowPhoto = (UsrValid ? Pho_ShowingUsrPhotoIsAllowed (&Gbl.Usrs.Other.UsrDat,PhotoURL) : "<td class=\"AUTHOR_TXT LEFT_MIDDLE\">");
false); if (UsrValid)
Pho_ShowUsrPhoto (&Gbl.Usrs.Other.UsrDat,ShowPhoto ? PhotoURL : fprintf (Gbl.F.Out,"%s",Gbl.Usrs.Other.UsrDat.FullName);
NULL, else
"PHOTO21x28",Pho_ZOOM,false); fprintf (Gbl.F.Out,"[%s]",
Txt_ROLES_SINGUL_abc[Rol_UNK][Usr_SEX_UNKNOWN]); // User not found, likely a user who has been removed
/* Write user's name */ fprintf (Gbl.F.Out,"</td>"
fprintf (Gbl.F.Out,"</td>" "</tr>");
"<td class=\"AUTHOR_TXT LEFT_MIDDLE\">");
if (UsrValid)
fprintf (Gbl.F.Out,"%s",Gbl.Usrs.Other.UsrDat.FullName);
else
fprintf (Gbl.F.Out,"[%s]",
Txt_ROLES_SINGUL_abc[Rol_UNK][Usr_SEX_UNKNOWN]); // User not found, likely a user who has been removed
fprintf (Gbl.F.Out,"</td>"
"</tr>");
}
/***** If any users are unknown *****/
if ((NumUsrsUnknown = NumUsrs - NumUsrsKnown))
/***** Start form to show all the users *****/
fprintf (Gbl.F.Out,"<tr>"
"<td colspan=\"3\" class=\"AUTHOR_TXT LEFT_MIDDLE\">"
"[%u %s]"
"</td>"
"</tr>",
NumUsrsUnknown,
(NumUsrsUnknown == 1) ?
Txt_ROLES_SINGUL_abc[Rol_UNK][Usr_SEX_UNKNOWN] :
Txt_ROLES_PLURAL_abc[Rol_UNK][Usr_SEX_UNKNOWN]);
} }
/***** Row to add a new user *****/ /***** Row to add a new user *****/
@ -938,6 +901,70 @@ static void Prj_WriteUsrs (long PrjCod,Prj_ProjectView_t ProjectView,
DB_FreeMySQLResult (&mysql_res); DB_FreeMySQLResult (&mysql_res);
} }
static void Prj_ShowTableAllProjectsWriteUsrs (long PrjCod,
Prj_RoleInProject_t RoleInProject)
{
extern const char *Txt_ROLES_SINGUL_abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumUsr;
unsigned NumUsrs;
bool UsrValid;
/***** Get users in project from database *****/
NumUsrs = Prj_GetUsrsInPrj (PrjCod,RoleInProject,&mysql_res);
/***** 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 */
UsrValid = Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat);
/* Separator */
if (NumUsr)
fprintf (Gbl.F.Out,",<br />");
/* Write user's name */
if (UsrValid)
fprintf (Gbl.F.Out,"%s",Gbl.Usrs.Other.UsrDat.FullName);
else
fprintf (Gbl.F.Out,"[%s]",
Txt_ROLES_SINGUL_abc[Rol_UNK][Usr_SEX_UNKNOWN]); // User not found, likely a user who has been removed
}
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
}
/*****************************************************************************/
/******************** Get number of users in a project ***********************/
/*****************************************************************************/
static unsigned Prj_GetUsrsInPrj (long PrjCod,Prj_RoleInProject_t RoleInProject,
MYSQL_RES **mysql_res)
{
char Query[1024];
/***** Get users in project from database *****/
sprintf (Query,"SELECT prj_usr.UsrCod,"
"usr_data.Surname1 AS S1,"
"usr_data.Surname2 AS S2,"
"usr_data.FirstName AS FN"
" FROM prj_usr,usr_data"
" WHERE prj_usr.PrjCod=%ld AND RoleInProject=%u"
" AND prj_usr.UsrCod=usr_data.UsrCod"
" ORDER BY S1,S2,FN",
PrjCod,(unsigned) RoleInProject);
return (unsigned) DB_QuerySELECT (Query,mysql_res,
"can not get users in project");
}
/*****************************************************************************/ /*****************************************************************************/
/*** Request another user's ID, @nickname or email to add user to project ****/ /*** Request another user's ID, @nickname or email to add user to project ****/
/*****************************************************************************/ /*****************************************************************************/