Version 24.2: Sep 17, 2024 Use users' clipboard in enrolment of several users.

This commit is contained in:
acanas 2024-09-17 19:15:39 +02:00
parent 356976a3fb
commit 67e48c9efd
6 changed files with 254 additions and 199 deletions

View File

@ -2493,13 +2493,13 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;}
.USR_LIST_NUM_N_DARK {color:#e0e0e0; font-size:15pt; font-weight:bold;}
/*****************************************************************************/
.TITLE_WHITE {color:#505050; font-size:18pt;}
.TITLE_GREY {color:#505050; font-size:18pt;}
.TITLE_PURPLE {color:#573c4d; font-size:18pt;}
.TITLE_BLUE {color:#4d88a1; font-size:18pt;}
.TITLE_YELLOW {color:#7c4d2a; font-size:18pt;}
.TITLE_PINK {color:#63474e; font-size:18pt;}
.TITLE_DARK {color:#505050; font-size:18pt;}
.TITLE_WHITE {color:#505050; font-size:18pt; padding:12px 0 6px 0;}
.TITLE_GREY {color:#505050; font-size:18pt; padding:12px 0 6px 0;}
.TITLE_PURPLE {color:#573c4d; font-size:18pt; padding:12px 0 6px 0;}
.TITLE_BLUE {color:#4d88a1; font-size:18pt; padding:12px 0 6px 0;}
.TITLE_YELLOW {color:#7c4d2a; font-size:18pt; padding:12px 0 6px 0;}
.TITLE_PINK {color:#63474e; font-size:18pt; padding:12px 0 6px 0;}
.TITLE_DARK {color:#505050; font-size:18pt; padding:12px 0 6px 0;}
/*********************** Icon and checkbox highlighting **********************/
.ICO_HIDDEN

View File

@ -633,10 +633,11 @@ Me sale este error, no s
"can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod')
*/
#define Log_PLATFORM_VERSION "SWAD 24.1 (2024-09-17)"
#define Log_PLATFORM_VERSION "SWAD 24.2 (2024-09-17)"
#define CSS_FILE "swad24.1.css"
#define JS_FILE "swad23.89.js"
/*
Version 24.2: Sep 17, 2024 Use users' clipboard in enrolment of several users. (335897 lines)
Version 24.1: Sep 17, 2024 New options to copy users. (335857 lines)
1 change necessary in database:
CREATE TABLE IF NOT EXISTS usr_clipboards (UsrCod INT NOT NULL,OthUsrCod INT NOT NULL,CopyTime TIMESTAMP,UNIQUE INDEX(UsrCod,OthUsrCod),INDEX(CopyTime));

View File

@ -69,6 +69,7 @@
#include "swad_setting_database.h"
#include "swad_test_print.h"
#include "swad_user.h"
#include "swad_user_clipboard.h"
#include "swad_user_database.h"
/*****************************************************************************/
@ -109,6 +110,7 @@ static void Enr_NotifyAfterEnrolment (const struct Usr_Data *UsrDat,
static void Enr_ReqAdminUsrs (Rol_Role_t Role);
static void Enr_ShowFormRegRemSeveralUsrs (Rol_Role_t Role);
static void Enr_PutAreaToEnterUsrsIDs (void);
static void Enr_PutUsrsClipboard (void);
static void Enr_PutActionsRegRemSeveralUsrs (void);
static void Enr_ReceiveUsrsCrs (Rol_Role_t Role);
@ -541,7 +543,6 @@ static void Enr_ShowFormRegRemSeveralUsrs (Rol_Role_t Role)
extern const char *Txt_Administer_multiple_non_editing_teachers;
extern const char *Txt_Administer_multiple_teachers;
extern const char *Txt_Step_1_Provide_a_list_of_users;
extern const char *Txt_Type_or_paste_a_list_of_IDs_nicks_or_emails_;
extern const char *Txt_Step_2_Select_the_desired_action;
extern const char *Txt_Step_3_Optionally_select_groups;
extern const char *Txt_Select_the_groups_in_from_which_you_want_to_register_remove_users_;
@ -606,8 +607,10 @@ static void Enr_ShowFormRegRemSeveralUsrs (Rol_Role_t Role)
HTM_Txt (Txt_Step_1_Provide_a_list_of_users);
HTM_DIV_End ();
Ale_ShowAlert (Ale_INFO,Txt_Type_or_paste_a_list_of_IDs_nicks_or_emails_);
HTM_TABLE_BeginCenterPadding (2);
Enr_PutAreaToEnterUsrsIDs ();
Enr_PutUsrsClipboard ();
HTM_TABLE_End ();
/***** Step 2: Put different actions to register/remove users to/from current course *****/
HTM_DIV_Begin ("class=\"TITLE_%s LM\"",The_GetSuffix ());
@ -779,9 +782,9 @@ void Enr_RemoveOldUsrs (void)
static void Enr_PutAreaToEnterUsrsIDs (void)
{
extern const char *Txt_List_of_nicks_emails_or_IDs;
extern const char *Txt_The_nicks_emails_or_IDs_can_be_separated_;
/***** Text area for users' IDs *****/
HTM_TABLE_BeginCenterPadding (2);
HTM_TR_Begin (NULL);
/* Label */
@ -791,13 +794,57 @@ static void Enr_PutAreaToEnterUsrsIDs (void)
HTM_TD_Begin ("class=\"LT\"");
HTM_TEXTAREA_Begin (HTM_NO_ATTR,
"id=\"UsrsIDs\" name=\"UsrsIDs\""
" placeholder=\"%s\""
" cols=\"60\" rows=\"10\" class=\"INPUT_%s\"",
Txt_The_nicks_emails_or_IDs_can_be_separated_,
The_GetSuffix ());
HTM_TEXTAREA_End ();
HTM_TD_End ();
HTM_TR_End ();
HTM_TABLE_End ();
}
/*****************************************************************************/
/************************ Put current users' clipboard ***********************/
/*****************************************************************************/
static void Enr_PutUsrsClipboard (void)
{
extern const char *Txt_User_clipboard;
unsigned NumUsrs;
MYSQL_RES *mysql_res;
/***** Get and show users in clipboard *****/
NumUsrs = Usr_DB_GetUsrsInMyClipboard (&mysql_res);
/***** Users' clipboard *****/
HTM_TR_Begin (NULL);
/* Label */
Frm_LabelColumn ("RT","UseClipboard",Txt_User_clipboard);
/* Data */
HTM_TD_Begin ("class=\"LT\"");
/* Checkbox */
HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",The_GetSuffix ());
HTM_INPUT_CHECKBOX ("UseClipboard",
NumUsrs ? HTM_NO_ATTR :
HTM_DISABLED,
"id=\"UseClipboard\" value=\"Y\"");
HTM_TxtF ("%u usuarios",NumUsrs); // TODO: Need translation!!!!!
HTM_LABEL_End ();
/* Clipboard */
if (NumUsrs)
UsrClp_ListUsrsInMyClipboard (NumUsrs,&mysql_res);
HTM_TD_End ();
HTM_TR_End ();
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
}
/*****************************************************************************/
@ -928,6 +975,10 @@ static void Enr_ReceiveUsrsCrs (Rol_Role_t Role)
bool ItLooksLikeAUsrID;
Enr_RegRemUsrsAction_t RegRemUsrsAction;
bool SelectionIsValid = true;
bool UseClipboard;
unsigned NumUsrsInClipboard;
unsigned NumUsrInClipboard;
MYSQL_RES *mysql_res;
/***** Check the role of users to register / remove *****/
switch (Role)
@ -952,6 +1003,9 @@ static void Enr_ReceiveUsrsCrs (Rol_Role_t Role)
if (!Pwd_GetConfirmationOnDangerousAction ())
return;
/***** Get if users' clipboard will be used *****/
UseClipboard = Par_GetParBool ("UseClipboard");
/***** Get the action to do *****/
WhatToDo.RemoveUsrs = false;
WhatToDo.RemoveSpecifiedUsrs = false;
@ -1040,6 +1094,10 @@ static void Enr_ReceiveUsrsCrs (Rol_Role_t Role)
if (SelectionIsValid)
{
/***** Get users' clipboard *****/
if (UseClipboard)
NumUsrsInClipboard = Usr_DB_GetUsrsInMyClipboard (&mysql_res);
/***** Get list of users' IDs *****/
if ((ListUsrsIDs = malloc (ID_MAX_BYTES_LIST_USRS_IDS + 1)) == NULL)
Err_NotEnoughMemoryExit ();
@ -1137,6 +1195,21 @@ static void Enr_ReceiveUsrsCrs (Rol_Role_t Role)
Usr_FreeListUsrCods (&ListUsrCods);
}
/* Get users from clipboard */
if (UseClipboard)
for (NumUsrInClipboard = 0;
NumUsrInClipboard < NumUsrsInClipboard;
NumUsrInClipboard++)
{
UsrDat.UsrCod = DB_GetNextCode (mysql_res);
for (NumCurrentUsr = 0;
NumCurrentUsr < Gbl.Usrs.LstUsrs[Role].NumUsrs;
NumCurrentUsr++)
if (Gbl.Usrs.LstUsrs[Role].Lst[NumCurrentUsr].UsrCod == UsrDat.UsrCod) // User found
Gbl.Usrs.LstUsrs[Role].Lst[NumCurrentUsr].Remove = WhatToDo.RemoveSpecifiedUsrs;
}
/***** Loop 2: go through users list removing users *****/
for (NumCurrentUsr = 0;
NumCurrentUsr < Gbl.Usrs.LstUsrs[Role].NumUsrs;
@ -1257,11 +1330,31 @@ static void Enr_ReceiveUsrsCrs (Rol_Role_t Role)
/* Free memory used for list of users' codes found for this ID */
Usr_FreeListUsrCods (&ListUsrCods);
}
/* Register users in clipboard */
if (UseClipboard)
{
mysql_data_seek (mysql_res,0);
for (NumUsrInClipboard = 0;
NumUsrInClipboard < NumUsrsInClipboard;
NumUsrInClipboard++)
{
UsrDat.UsrCod = DB_GetNextCode (mysql_res);
Enr_RegisterUsr (&UsrDat,Role,&LstGrps,&NumUsrsRegistered);
}
}
}
/***** Free memory used for user's data *****/
Usr_UsrDataDestructor (&UsrDat);
/***** Free memory used by the list of user's IDs *****/
free (ListUsrsIDs);
/***** Free structure that stores the query result about users' clipboard *****/
if (UseClipboard)
DB_FreeMySQLResult (&mysql_res);
if (NumUsrsEliminated)
/***** Move unused contents of messages to table of deleted contents of messages *****/
Msg_DB_MoveUnusedMsgsContentToDeleted ();
@ -1312,9 +1405,6 @@ static void Enr_ReceiveUsrsCrs (Rol_Role_t Role)
NumUsrsRegistered);
break;
}
/***** Free memory used by the list of user's IDs *****/
free (ListUsrsIDs);
}
else // Selection of groups not valid
Ale_ShowAlert (Ale_WARNING,Txt_In_a_type_of_group_with_single_enrolment_students_can_not_be_registered_in_more_than_one_group);

View File

@ -49448,6 +49448,80 @@ const char *Txt_The_nickname_matches_the_one_you_had_previously_registered =
"The nickname matches the one you had previously registered."; // Çeviri lazim!
#endif
const char *Txt_The_nicks_emails_or_IDs_can_be_separated_ =
#if L==1 // ca
"Els @nicks, correus electr&ograve;nics o IDs"
" es poden separar per cadenes arbitr&agrave;ries"
" (per exemple, noms, llocs, etc.)."
" Nom&eacute;s es tindran en compte les paraules"
" que sembli @nicks, correus electr&ograve;nics o IDs;"
" la resta del text s'ignorar&agrave;.";
#elif L==2 // de
"Die @nicks, E-Mails oder IDs"
" k&ouml;nnen durch beliebige Zeichenfolgen"
" (z. B. Namen, Orte usw.) getrennt werden."
" Nur die W&ouml;rter, die wie @nicks, E-Mails oder IDs aussehen,"
" werden ber&uuml;cksichtigt;"
" der Rest des Textes wird ignoriert.";
#elif L==3 // en
"The @nicks, emails or IDs"
" can be separated by arbitrary strings"
" (eg. names, places, etc.)."
" Only the words that seems @nicks, emails or IDs"
" will be taken into account;"
" the rest of the text will be ignored.";
#elif L==4 // es
"Los @apodos, correos o ID (DNI/c&eacute;dulas)"
" pueden ir separados por cadenas de caracteres arbitrarias"
" (por ej. nombres, apellidos, espacios, etc.)."
" Solo se tendr&aacute;n en cuenta aquellas palabras"
" que parezcan @apodos, correos o ID (DNI/c&eacute;dulas);"
" el resto del texto se ignorar&aacute;.";
#elif L==5 // fr
"Les @nicks, emails ou identifiants"
" peuvent &ecirc;tre s&eacute;par&eacute;s par des chaînes arbitraires"
" (ex. noms, lieux, etc.)."
" Seuls les mots qui semblent @nicks, emails ou identifiants"
" seront pris en compte;"
" le reste du texte sera ignor&eacute;.";
#elif L==6 // gn
"Los @apodos, correos o ID (DNI/c&eacute;dulas)"
" pueden ir separados por cadenas de caracteres arbitrarias"
" (por ej. nombres, apellidos, espacios, etc.)."
" Solo se tendr&aacute;n en cuenta aquellas palabras"
" que parezcan @apodos, correos o ID (DNI/c&eacute;dulas);"
" el resto del texto se ignorar&aacute;."; // Okoteve traducción
#elif L==7 // it
"I @nome-utenti, emails o IDs"
" possono essere separati da caratteri arbitrari"
" (eg. nomi, luoghi, etc.)."
" Solo le parole che sembrano"
" @nome-utenti, emails o IDs"
" saranno presi in considerazione;"
" il resto del testo sar&agrave; ignorato.";
#elif L==8 // pl
"@nicki, e-maile lub ID"
" mog&aogon; by&cacute; oddzielone dowolnymi ci&aogon;gami"
" (np. nazwy, miejsca itp.)."
" Tylko s&lstrok;owa, kt&oacute;re wygl&aogon;daj&aogon; jak @nick, e-maile lub ID,"
" b&eogon;d&aogon; brane pod uwag&eogon;;"
" reszta tekstu zostanie zignorowana.";
#elif L==9 // pt
"As @alcunhas, os emails ou os IDs"
" podem ser separados por strings arbitr&aacute;rias"
" (por exemplo, nomes, lugares, etc.)."
" Apenas as palavras que parecem @alcunhas, emails ou IDs"
" ser%atilde;o levadas em conta;"
" o resto do texto ser&aacute; ignorado.";
#elif L==10 // tr
"The @nicks, emails or IDs"
" can be separated by arbitrary strings"
" (eg. names, places, etc.)."
" Only the words that seems @nicks, emails or IDs"
" will be taken into account;"
" the rest of the text will be ignored."; // Çeviri lazim!
#endif
const char *Txt_The_number_of_editing_lines_in_the_record_field_X_has_not_changed = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"El nombre de l&iacute;nies d'edici&oacute;"
@ -50197,30 +50271,7 @@ const char *Txt_The_session_has_expired =
#elif L==10 // tr
"Oturumun s&uuml;resi doldu."; // Çeviri lazim!
#endif
/*
const char *Txt_The_set_of_questions_has_been_modified =
#if L==1 // ca
"El conjunt de preguntes ha estat modificat.";
#elif L==2 // de
"Der Satz von Fragen wurde ge&auml;ndert.";
#elif L==3 // en
"The set of questions has been modified.";
#elif L==4 // es
"El conjunto de preguntas ha sido modificado.";
#elif L==5 // fr
"L'ensemble de questions a &eacute;t&eacute; modifi&eacute;.";
#elif L==6 // gn
"El conjunto de preguntas ha sido modificado."; // Okoteve traducción
#elif L==7 // it
"Il set di domande &egrave; stato modificato.";
#elif L==8 // pl
"Zestaw pyta&nacute; zosta&lstrok; zmodyfikowany.";
#elif L==9 // pt
"O conjunto de perguntas foi modificado.";
#elif L==10 // tr
"Soru seti de&gbreve;i&scedil;tirildi.";
#endif
*/
const char *Txt_The_size_of_the_file_exceeds_the_maximum_allowed_X = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"La mida del fitxer"
@ -54753,100 +54804,6 @@ const char *Txt_Type_of_group_X_removed = // Warning: it is very important to in
"Type of group <strong>%s</strong> removed."; // Çeviri lazim!
#endif
const char *Txt_Type_or_paste_a_list_of_IDs_nicks_or_emails_ =
#if L==1 // ca
"Escriviu o enganxeu una llista"
" de @nicks, correus electr&ograve;nics o IDs."
" Els @nicks, correus electr&ograve;nics o IDs"
" es poden separar per cadenes arbitr&agrave;ries"
" (per exemple, noms, llocs, etc.)."
" Nom&eacute;s es tindran en compte les paraules"
" que sembli @nicks, correus electr&ograve;nics o IDs;"
" la resta del text s'ignorar&agrave;.";
#elif L==2 // de
"Geben oder f&uuml;gen Sie eine Liste"
" mit @nicks, E-Mails oder IDs ein."
" Die @nicks, E-Mails oder IDs"
" k&ouml;nnen durch beliebige Zeichenfolgen"
" (z. B. Namen, Orte usw.) getrennt werden."
" Nur die W&ouml;rter, die wie @nicks, E-Mails oder IDs aussehen,"
" werden ber&uuml;cksichtigt;"
" der Rest des Textes wird ignoriert.";
#elif L==3 // en
"Type or paste a list"
" of @nicks, emails or IDs."
" The @nicks, emails or IDs"
" can be separated by arbitrary strings"
" (eg. names, places, etc.)."
" Only the words that seems @nicks, emails or IDs"
" will be taken into account;"
" the rest of the text will be ignored.";
#elif L==4 // es
"Escriba o pegue una lista"
" con @apodos, correos o ID (DNI/c&eacute;dulas)."
" Los @apodos, correos o ID (DNI/c&eacute;dulas)"
" pueden ir separados por cadenas de caracteres arbitrarias"
" (por ej. nombres, apellidos, espacios, etc.)."
" Solo se tendr&aacute;n en cuenta aquellas palabras"
" que parezcan @apodos, correos o ID (DNI/c&eacute;dulas);"
" el resto del texto se ignorar&aacute;.";
#elif L==5 // fr
"Tapez ou collez une liste"
" de @nicks, e-mails ou identifiants."
" Les @nicks, emails ou identifiants"
" peuvent &ecirc;tre s&eacute;par&eacute;s par des chaînes arbitraires"
" (ex. noms, lieux, etc.)."
" Seuls les mots qui semblent @nicks, emails ou identifiants"
" seront pris en compte;"
" le reste du texte sera ignor&eacute;.";
#elif L==6 // gn
"Escriba o pegue una lista"
" con @apodos, correos o ID (DNI/c&eacute;dulas)."
" Los @apodos, correos o ID (DNI/c&eacute;dulas)"
" pueden ir separados por cadenas de caracteres arbitrarias"
" (por ej. nombres, apellidos, espacios, etc.)."
" Solo se tendr&aacute;n en cuenta aquellas palabras"
" que parezcan @apodos, correos o ID (DNI/c&eacute;dulas);"
" el resto del texto se ignorar&aacute;."; // Okoteve traducción
#elif L==7 // it
"Scrivi o incolla la lista"
" di @nome-utenti, emails o IDs."
" I @nome-utenti, emails o IDs"
" possono essere separati da caratteri arbitrari"
" (eg. nomi, luoghi, etc.)."
" Solo le parole che sembrano"
" @nome-utenti, emails o IDs"
" saranno presi in considerazione;"
" il resto del testo sar&agrave; ignorato.";
#elif L==8 // pl
"Wpisz lub wklej list&eogon;"
" @nick&oacute;w, e-maili lub ID."
" @nicki, e-maile lub ID"
" mog&aogon; by&cacute; oddzielone dowolnymi ci&aogon;gami"
" (np. nazwy, miejsca itp.)."
" Tylko s&lstrok;owa, kt&oacute;re wygl&aogon;daj&aogon; jak @nick, e-maile lub ID,"
" b&eogon;d&aogon; brane pod uwag&eogon;;"
" reszta tekstu zostanie zignorowana.";
#elif L==9 // pt
"Digite ou cole uma lista"
" de @alcunhas, emails ou IDs."
" As @alcunhas, os emails ou os IDs"
" podem ser separados por strings arbitr&aacute;rias"
" (por exemplo, nomes, lugares, etc.)."
" Apenas as palavras que parecem @alcunhas, emails ou IDs"
" ser%atilde;o levadas em conta;"
" o resto do texto ser&aacute; ignorado.";
#elif L==10 // tr
"Type or paste a list"
" of @nicks, emails or IDs."
" The @nicks, emails or IDs"
" can be separated by arbitrary strings"
" (eg. names, places, etc.)."
" Only the words that seems @nicks, emails or IDs"
" will be taken into account;"
" the rest of the text will be ignored."; // Çeviri lazim!
#endif
const char *Txt_Types_of_degree =
#if L==1 // ca
"Tipus de titulaci&oacute;";
@ -55826,6 +55783,29 @@ const char *Txt_user[Usr_NUM_SEXS] =
#endif
};
const char *Txt_User_clipboard =
#if L==1 // ca
"Portapapers d'usuaris";
#elif L==2 // de
"Zwischenablage der Benutzer";
#elif L==3 // en
"User clipboard";
#elif L==4 // es
"Portapapeles de usuarios";
#elif L==5 // fr
"Presse-papiers des utilisateurs";
#elif L==6 // gn
"Portapapeles de usuarios"; // Okoteve traducción
#elif L==7 // it
"Appunti degli utenti";
#elif L==8 // pl
"Schowek u&zdot;ytkownika";
#elif L==9 // pt
"&Aacute;rea de transfer&ecirc;ncia de utilizadores";
#elif L==10 // tr
"Kullan&inodot;c&inodot; panosu";
#endif
const char *Txt_USER_comments =
#if L==1 // ca
"Observacions";

View File

@ -25,12 +25,14 @@
/*********************************** Headers *********************************/
/*****************************************************************************/
// #include "swad_alert.h"
#include "swad_cryptography.h"
#include "swad_database.h"
#include "swad_global.h"
#include "swad_parameter.h"
#include "swad_photo.h"
#include "swad_user.h"
#include "swad_user_clipboard.h"
#include "swad_user_database.h"
/*****************************************************************************/
@ -64,7 +66,6 @@ extern struct Globals Gbl;
/*****************************************************************************/
static void UsrClp_CopyUsrsToClipboard (void);
static void UsrClp_ListUsrsInMyClipboard (void);
/*****************************************************************************/
/******************** Copy selected users to clipboard ***********************/
@ -87,9 +88,10 @@ void UsrClp_CopyTchsToClipboard (void)
static void UsrClp_CopyUsrsToClipboard (void)
{
unsigned NumUsr = 0;
unsigned NumUsrs;
const char *Ptr;
struct Usr_Data UsrDat;
MYSQL_RES *mysql_res;
/***** Remove my clipboard *****/
Usr_DB_RemoveMyClipboard ();
@ -113,16 +115,8 @@ static void UsrClp_CopyUsrsToClipboard (void)
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat, // Get student's data from database
Usr_DONT_GET_PREFS,
Usr_GET_ROLE_IN_CRS))
{
/* Check if this user has accepted
his/her inscription in the current course */
UsrDat.Accepted = Enr_CheckIfUsrHasAcceptedInCurrentCrs (&UsrDat);
/* Add user to clipboard */
Usr_DB_CopyToClipboard (UsrDat.UsrCod);
NumUsr++;
}
}
/***** Free memory used for user's data *****/
@ -131,19 +125,17 @@ static void UsrClp_CopyUsrsToClipboard (void)
/***** Free memory used by list of selected users' codes *****/
Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
/***** Show message *****/
Ale_ShowAlert (NumUsr ? Ale_SUCCESS :
Ale_WARNING,
"Usuarios copiados en el portapapeles: %u",NumUsr);
UsrClp_ListUsrsInMyClipboard ();
/***** Get and show users in clipboard *****/
NumUsrs = Usr_DB_GetUsrsInMyClipboard (&mysql_res);
UsrClp_ListUsrsInMyClipboard (NumUsrs,&mysql_res);
DB_FreeMySQLResult (&mysql_res);
}
/*****************************************************************************/
/************************* Show users in my clipboard ************************/
/*****************************************************************************/
static void UsrClp_ListUsrsInMyClipboard (void)
void UsrClp_ListUsrsInMyClipboard (unsigned NumUsrs,MYSQL_RES **mysql_res)
{
static const char *ClassPhoto[PhoSha_NUM_SHAPES] =
{
@ -152,16 +144,10 @@ static void UsrClp_ListUsrsInMyClipboard (void)
[PhoSha_SHAPE_OVAL ] = "PHOTOO12x16",
[PhoSha_SHAPE_RECTANGLE] = "PHOTOR12x16",
};
unsigned NumUsrs;
unsigned NumUsr;
struct Usr_Data UsrDat;
MYSQL_RES *mysql_res;
/***** Get users who have faved/shared *****/
NumUsrs = Usr_DB_GetUsrsInMyClipboard (&mysql_res);
if (NumUsrs)
{
/***** Get users in clipboard *****/
HTM_DIV_Begin ("class=\"UsrClp_USRS\"");
/***** Initialize structure with user's data *****/
@ -173,7 +159,7 @@ static void UsrClp_ListUsrsInMyClipboard (void)
NumUsr++)
{
/***** Get user's code *****/
UsrDat.UsrCod = DB_GetNextCode (mysql_res);
UsrDat.UsrCod = DB_GetNextCode (*mysql_res);
/***** Get user's data and show user's photo *****/
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat,
@ -197,7 +183,3 @@ static void UsrClp_ListUsrsInMyClipboard (void)
HTM_DIV_End ();
}
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
}

View File

@ -43,4 +43,6 @@ void UsrClp_CopyGstsToClipboard (void);
void UsrClp_CopyStdsToClipboard (void);
void UsrClp_CopyTchsToClipboard (void);
void UsrClp_ListUsrsInMyClipboard (unsigned NumUsrs,MYSQL_RES **mysql_res);
#endif