mirror of https://github.com/acanas/swad-core.git
Version 15.225.6
This commit is contained in:
parent
db079c2b9f
commit
ea2aa6df16
|
@ -128,13 +128,14 @@
|
|||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define Log_PLATFORM_VERSION "SWAD 15.225.5 (2016-06-15)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 15.225.6 (2016-06-15)"
|
||||
#define CSS_FILE "swad15.224.3.css"
|
||||
#define JS_FILE "swad15.216.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 15.225.6: Jun 15, 2016 Listing possible duplicate users. (202761 lines)
|
||||
Version 15.225.5: Jun 15, 2016 Simplification in texts (links) to view guests and admins. (202586 lines)
|
||||
Version 15.225.4: Jun 15, 2016 Listing possible duplicate users. Not finished. (202623 lines)
|
||||
1 change necessary in database:
|
||||
|
|
|
@ -2836,6 +2836,7 @@ static void Enr_ShowEnrollmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
/***** User name *****/
|
||||
fprintf (Gbl.F.Out,"<td class=\"DAT LEFT_TOP\">");
|
||||
Usr_RestrictLengthAndWriteName (&UsrDat,20);
|
||||
fprintf (Gbl.F.Out,"</td>");
|
||||
|
||||
/***** Requested role (row[3]) *****/
|
||||
fprintf (Gbl.F.Out,"<td class=\"DAT LEFT_TOP\">"
|
||||
|
|
|
@ -4047,7 +4047,7 @@ static void Tst_WriteFloatAnsAssessExam (unsigned NumQst,MYSQL_RES *mysql_res,
|
|||
|
||||
static void Tst_WriteHeadUserCorrect (void)
|
||||
{
|
||||
extern const char *Txt_User;
|
||||
extern const char *Txt_User[Usr_NUM_SEXS];
|
||||
extern const char *Txt_TST_Correct_ANSWER;
|
||||
|
||||
fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_MIDDLE\">"
|
||||
|
@ -4056,7 +4056,7 @@ static void Tst_WriteHeadUserCorrect (void)
|
|||
"<td class=\"DAT_SMALL CENTER_MIDDLE\">"
|
||||
" %s "
|
||||
"</td>",
|
||||
Txt_User,Txt_TST_Correct_ANSWER);
|
||||
Txt_User[Usr_SEX_UNKNOWN],Txt_TST_Correct_ANSWER);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -7006,7 +7006,7 @@ void Tst_ShowUsrsExams (void)
|
|||
|
||||
static void Tst_ShowHeaderTestResults (void)
|
||||
{
|
||||
extern const char *Txt_User;
|
||||
extern const char *Txt_User[Usr_NUM_SEXS];
|
||||
extern const char *Txt_Date;
|
||||
extern const char *Txt_Questions;
|
||||
extern const char *Txt_Non_blank_BR_questions;
|
||||
|
@ -7039,7 +7039,7 @@ static void Tst_ShowHeaderTestResults (void)
|
|||
"</th>"
|
||||
"<th></th>"
|
||||
"</tr>",
|
||||
Txt_User,
|
||||
Txt_User[Usr_SEX_UNKNOWN],
|
||||
Txt_Date,
|
||||
Txt_Questions,
|
||||
Txt_Non_blank_BR_questions,
|
||||
|
|
103
swad_text.c
103
swad_text.c
|
@ -15299,6 +15299,27 @@ const char *Txt_INFO_SRC_SHORT_TEXT[Inf_NUM_INFO_SOURCES] =
|
|||
#endif
|
||||
};
|
||||
|
||||
const char *Txt_Informants =
|
||||
#if L==1
|
||||
"Informadors";
|
||||
#elif L==2
|
||||
"Informanten";
|
||||
#elif L==3
|
||||
"Informants";
|
||||
#elif L==4
|
||||
"Informantes";
|
||||
#elif L==5
|
||||
"Informateurs";
|
||||
#elif L==6
|
||||
"Informantes"; // Okoteve traducción
|
||||
#elif L==7
|
||||
"Informatori";
|
||||
#elif L==8
|
||||
"informatorów";
|
||||
#elif L==9
|
||||
"Informantes";
|
||||
#endif
|
||||
|
||||
const char *Txt_Inline_math =
|
||||
#if L==1
|
||||
"Fórmula";
|
||||
|
@ -49018,26 +49039,88 @@ const char *Txt_Use_this_nickname =
|
|||
"Utilizar esta alcunha";
|
||||
#endif
|
||||
|
||||
const char *Txt_User =
|
||||
const char *Txt_User[Usr_NUM_SEXS] =
|
||||
{ // Usr_SEX_UNKNOWN
|
||||
#if L==1
|
||||
"Usuari";
|
||||
"Usuari/a"
|
||||
#elif L==2
|
||||
"Benutzer";
|
||||
"Benutzer"
|
||||
#elif L==3
|
||||
"User";
|
||||
"User"
|
||||
#elif L==4
|
||||
"Usuario";
|
||||
"Usuario/a"
|
||||
#elif L==5
|
||||
"Utilisateur";
|
||||
"Utilisateur/se"
|
||||
#elif L==6
|
||||
"Puruhára";
|
||||
"Puruhãra"
|
||||
#elif L==7
|
||||
"Utente";
|
||||
"Utente"
|
||||
#elif L==8
|
||||
"User"; // Potrzebujesz tlumaczenie
|
||||
"Użytkownika"
|
||||
#elif L==9
|
||||
"Utilizador";
|
||||
"Utilizador/a"
|
||||
#endif
|
||||
, // Usr_SEX_FEMALE
|
||||
#if L==1
|
||||
"Usuaria"
|
||||
#elif L==2
|
||||
"Benutzer"
|
||||
#elif L==3
|
||||
"User"
|
||||
#elif L==4
|
||||
"Usuaria"
|
||||
#elif L==5
|
||||
"Utilisateuse"
|
||||
#elif L==6
|
||||
"Puruhãra"
|
||||
#elif L==7
|
||||
"Utente"
|
||||
#elif L==8
|
||||
"Użytkownika"
|
||||
#elif L==9
|
||||
"Utilizadora"
|
||||
#endif
|
||||
, // Usr_SEX_MALE
|
||||
#if L==1
|
||||
"Usuari"
|
||||
#elif L==2
|
||||
"Benutzer"
|
||||
#elif L==3
|
||||
"User"
|
||||
#elif L==4
|
||||
"Usuario"
|
||||
#elif L==5
|
||||
"Utilisateur"
|
||||
#elif L==6
|
||||
"Puruhãra"
|
||||
#elif L==7
|
||||
"Utente"
|
||||
#elif L==8
|
||||
"Użytkownika"
|
||||
#elif L==9
|
||||
"Utilizador"
|
||||
#endif
|
||||
, // Usr_SEX_ALL
|
||||
#if L==1
|
||||
"Usuari/a"
|
||||
#elif L==2
|
||||
"Benutzer"
|
||||
#elif L==3
|
||||
"User"
|
||||
#elif L==4
|
||||
"Usuario/a"
|
||||
#elif L==5
|
||||
"Utilisateur/se"
|
||||
#elif L==6
|
||||
"Puruhãra"
|
||||
#elif L==7
|
||||
"Utente"
|
||||
#elif L==8
|
||||
"Użytkownika"
|
||||
#elif L==9
|
||||
"Utilizador/a"
|
||||
#endif
|
||||
};
|
||||
|
||||
const char *Txt_user[Usr_NUM_SEXS] =
|
||||
{ // Usr_SEX_UNKNOWN
|
||||
|
|
110
swad_user.c
110
swad_user.c
|
@ -1486,7 +1486,7 @@ void Usr_PutLinkToLogin (void)
|
|||
void Usr_WriteFormLogin (void)
|
||||
{
|
||||
extern const char *Txt_Log_in;
|
||||
extern const char *Txt_User;
|
||||
extern const char *Txt_User[Usr_NUM_SEXS];
|
||||
extern const char *Txt_nick_email_or_ID;
|
||||
extern const char *Txt_Password;
|
||||
extern const char *Txt_password;
|
||||
|
@ -1530,8 +1530,8 @@ void Usr_WriteFormLogin (void)
|
|||
"</td>"
|
||||
"</tr>",
|
||||
Gbl.Prefs.IconsURL,
|
||||
Txt_User,
|
||||
Txt_User,
|
||||
Txt_User[Usr_SEX_UNKNOWN],
|
||||
Txt_User[Usr_SEX_UNKNOWN],
|
||||
Usr_MAX_LENGTH_USR_LOGIN,
|
||||
Txt_nick_email_or_ID,
|
||||
Gbl.Usrs.Me.UsrIdLogin,
|
||||
|
@ -7903,11 +7903,113 @@ void Usr_PutLinkToListDupUsrs (void)
|
|||
void Usr_ListDuplicateUsrs (void)
|
||||
{
|
||||
extern const char *Txt_Possibly_duplicate_users;
|
||||
extern const char *Txt_User[Usr_NUM_SEXS];
|
||||
extern const char *Txt_Informants;
|
||||
extern const char *Txt_Date;
|
||||
extern const char *Txt_No_users_found[Rol_NUM_ROLES];
|
||||
char Query[1024];
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumUsrs;
|
||||
unsigned NumUsr;
|
||||
struct UsrData UsrDat;
|
||||
unsigned NumInformers;
|
||||
bool ShowPhoto = false;
|
||||
char PhotoURL[PATH_MAX+1];
|
||||
|
||||
/***** Start frame with list of possible duplicate users *****/
|
||||
Lay_StartRoundFrame (NULL,Txt_Possibly_duplicate_users,NULL);
|
||||
|
||||
Lay_ShowAlert (Lay_INFO,"Option under development."); // TODO: Write listing of users
|
||||
/***** Build query *****/
|
||||
sprintf (Query,"SELECT UsrCod,COUNT(*) AS N,MIN(UNIX_TIMESTAMP(InformTime)) AS T"
|
||||
" FROM usr_duplicated"
|
||||
" GROUP BY UsrCod"
|
||||
" ORDER BY N DESC,T DESC");
|
||||
NumUsrs = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get requests for enrollment");
|
||||
|
||||
/***** List possible duplicated users *****/
|
||||
if (NumUsrs)
|
||||
{
|
||||
/* Initialize structure with user's data */
|
||||
Usr_UsrDataConstructor (&UsrDat);
|
||||
|
||||
/* Start table */
|
||||
fprintf (Gbl.F.Out,"<table class=\"CELLS_PAD_2\""
|
||||
" style=\"margin:0 auto;\">"
|
||||
"<th></th>"
|
||||
"<th colspan=\"2\" class=\"LEFT_TOP\">"
|
||||
"%s"
|
||||
"</th>"
|
||||
"<th class=\"RIGHT_TOP\">"
|
||||
"%s"
|
||||
"</th>"
|
||||
"<th class=\"CENTER_TOP\">"
|
||||
"%s"
|
||||
"</th>"
|
||||
"</tr>",
|
||||
Txt_User[Usr_SEX_UNKNOWN],
|
||||
Txt_Informants,
|
||||
Txt_Date);
|
||||
|
||||
/* List users */
|
||||
for (NumUsr = 0;
|
||||
NumUsr < NumUsrs;
|
||||
NumUsr++)
|
||||
{
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
||||
/* Get user code (row[0]) */
|
||||
UsrDat.UsrCod = Str_ConvertStrCodToLongCod (row[0]);
|
||||
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat))
|
||||
{
|
||||
/***** Number *****/
|
||||
fprintf (Gbl.F.Out,"<tr>"
|
||||
"<td class=\"DAT RIGHT_TOP\">"
|
||||
"%u"
|
||||
"</td>",
|
||||
NumUsrs - NumUsr);
|
||||
|
||||
/***** User photo *****/
|
||||
fprintf (Gbl.F.Out,"<td class=\"DAT CENTER_TOP\""
|
||||
" style=\"width:22px;\">");
|
||||
ShowPhoto = Pho_ShowUsrPhotoIsAllowed (&UsrDat,PhotoURL);
|
||||
Pho_ShowUsrPhoto (&UsrDat,ShowPhoto ? PhotoURL :
|
||||
NULL,
|
||||
"PHOTO21x28",Pho_ZOOM,false);
|
||||
fprintf (Gbl.F.Out,"</td>");
|
||||
|
||||
/***** User name *****/
|
||||
fprintf (Gbl.F.Out,"<td class=\"DAT LEFT_TOP\">");
|
||||
Usr_RestrictLengthAndWriteName (&UsrDat,20);
|
||||
fprintf (Gbl.F.Out,"</td>");
|
||||
|
||||
/***** Number of informers (row[1]) *****/
|
||||
if (sscanf (row[1],"%u",&NumInformers) != 1)
|
||||
Lay_ShowErrorAndExit ("Wrong number of informers.");
|
||||
fprintf (Gbl.F.Out,"<td class=\"DAT RIGHT_TOP\">"
|
||||
"%u"
|
||||
"</td>",
|
||||
NumInformers);
|
||||
|
||||
/***** Inform time (row[2]) *****/
|
||||
Msg_WriteMsgDate (Dat_GetUNIXTimeFromStr (row[2]),"DAT");
|
||||
|
||||
fprintf (Gbl.F.Out,"</tr>");
|
||||
}
|
||||
else // User does not exists or user already belongs to course ==> remove user from table of possible duplicate users
|
||||
{
|
||||
// TODO: Remove user from table of possible duplicate users
|
||||
}
|
||||
}
|
||||
|
||||
/* End table */
|
||||
fprintf (Gbl.F.Out,"</table>");
|
||||
|
||||
/* Free memory used for user's data */
|
||||
Usr_UsrDataDestructor (&UsrDat);
|
||||
}
|
||||
else // There are no users
|
||||
Lay_ShowAlert (Lay_INFO,Txt_No_users_found[Rol_UNKNOWN]);
|
||||
|
||||
/***** End frame *****/
|
||||
Lay_EndRoundFrame ();
|
||||
|
|
Loading…
Reference in New Issue