Version 15.4

This commit is contained in:
Antonio Cañas Vargas 2015-09-30 23:10:15 +02:00
parent 141becec4f
commit 243ceaed42
11 changed files with 140 additions and 419 deletions

View File

@ -2268,7 +2268,7 @@ void Att_RegisterStudentsInAttEvent (void)
Gbl.Usrs.LstStds.Lst[NumStd].Remove = true;
/***** 3. Get list of students marked as present by me: Gbl.Usrs.Select.Std *****/
Usr_GetListSelectedUsrs ();
Usr_GetListsSelectedUsrs ();
/***** Initialize structure with user's data *****/
Usr_UsrDataConstructor (&UsrData);
@ -2298,7 +2298,7 @@ void Att_RegisterStudentsInAttEvent (void)
/***** Free memory *****/
/* Free memory used for list of students */
Usr_FreeListsEncryptedUsrCods ();
Usr_FreeListsSelectedUsrCods ();
// 5. Delete from att_usr all the students marked as Remove=true
// 6. Replace (insert without duplicated) into att_usr all the students marked as Remove=false
@ -2608,7 +2608,7 @@ void Usr_ReqListAttendanceStdsCrs (void)
if (Usr_GetIfShowBigList (Gbl.Usrs.LstStds.NumUsrs))
{
/***** Get list of selected users *****/
Usr_GetListSelectedUsrs ();
Usr_GetListsSelectedUsrs ();
/***** Draw a class photo with students of the course *****/
/* Start form */
@ -2628,7 +2628,7 @@ void Usr_ReqListAttendanceStdsCrs (void)
Act_FormEnd ();
/***** Free memory used for by the list of users *****/
Usr_FreeListsEncryptedUsrCods ();
Usr_FreeListsSelectedUsrCods ();
}
}
else
@ -2657,10 +2657,10 @@ void Usr_ListAttendanceStdsCrs (void)
Att_GetListAttEvents (Att_OLDEST_FIRST);
/***** Get list of selected students *****/
Usr_GetListSelectedUsrs ();
Usr_GetListsSelectedUsrs ();
/* Check the number of students to list */
if ((NumStdsInList = Usr_CountNumUsrsInEncryptedList ()))
if ((NumStdsInList = Usr_CountNumUsrsInListOfSelectedUsrs ()))
{
/***** Get boolean parameter that indicates if details must be shown *****/
Par_GetParToText ("ShowDetails",YN,1);
@ -2716,7 +2716,7 @@ void Usr_ListAttendanceStdsCrs (void)
}
/***** Free memory used for by the list of users *****/
Usr_FreeListsEncryptedUsrCods ();
Usr_FreeListsSelectedUsrCods ();
/***** Free list of attendance events *****/
Att_FreeListAttEvents ();

View File

@ -98,11 +98,12 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 15.3.3 (2015/09/30)"
#define Log_PLATFORM_VERSION "SWAD 15.4 (2015/09/30)"
// 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.4: Sep 30, 2015 Changes in global/course statistics forms. (184877 lines)
Version 15.3.3: Sep 30, 2015 Changes in layout of form to selected initial and final dates. (185152 lines)
Version 15.3.2: Sep 30, 2015 Changes in layout of statistical figures. (185156 lines)
Version 15.3.1: Sep 29, 2015 Changes in background and fonts. (185156 lines)

View File

@ -2013,8 +2013,8 @@ void Brw_GetParAndInitFileBrowser (void)
{
case Brw_ADMI_ASSIG_CRS:
case Brw_ADMI_WORKS_CRS:
/* Get list of the selected users's IDs */
Usr_GetListSelectedUsrs ();
/* Get lists of the selected users */
Usr_GetListsSelectedUsrs ();
/* Get user whose folder will be used to make any operation */
Usr_GetParamOtherUsrCodEncrypted ();
/* Get whether we must create the zip file or not */
@ -2885,7 +2885,7 @@ void Brw_AskEditWorksCrs (void)
Usr_FreeUsrsList (&Gbl.Usrs.LstStds);
/***** Free the memory used by the list of users *****/
Usr_FreeListsEncryptedUsrCods ();
Usr_FreeListsSelectedUsrCods ();
/***** Free memory for list of selected groups *****/
Grp_FreeListCodSelectedGrps ();
@ -2915,7 +2915,7 @@ static void Brw_ShowFileBrowsersAsgWrkCrs (void)
struct UsrData UsrDat;
/***** Check the number of users whose works will be shown *****/
if (Usr_CountNumUsrsInEncryptedList ()) // If some users are selected...
if (Usr_CountNumUsrsInListOfSelectedUsrs ()) // If some users are selected...
{
if (Gbl.FileBrowser.ZIP.CreateZIP)
{
@ -3006,7 +3006,7 @@ static void Brw_ShowFileBrowsersAsgWrkCrs (void)
}
/***** Free the memory used for the list of users *****/
Usr_FreeListsEncryptedUsrCods ();
Usr_FreeListsSelectedUsrCods ();
}
/*****************************************************************************/

View File

@ -477,7 +477,7 @@ void Gbl_Cleanup (void)
Usr_FreeUsrsList (&Gbl.Usrs.LstTchs);
Usr_FreeUsrsList (&Gbl.Usrs.LstStds);
Usr_FreeListOtherRecipients ();
Usr_FreeListsEncryptedUsrCods ();
Usr_FreeListsSelectedUsrCods ();
Syl_FreeListItemsSyllabus ();
Tst_FreeTagsList ();
Exa_FreeMemExamAnnouncement ();

View File

@ -297,8 +297,8 @@ static void Msg_PutFormMsgUsrs (const char *Content)
if (Gbl.Usrs.LstTchs.NumUsrs ||
Gbl.Usrs.LstStds.NumUsrs)
/***** Get list of selected users *****/
Usr_GetListSelectedUsrs ();
/***** Get lists of selected users *****/
Usr_GetListsSelectedUsrs ();
}
if (Usr_GetIfShowBigList (Gbl.Usrs.LstTchs.NumUsrs +
@ -364,7 +364,7 @@ static void Msg_PutFormMsgUsrs (const char *Content)
Usr_FreeUsrsList (&Gbl.Usrs.LstStds);
/***** Free memory used by list of users *****/
Usr_FreeListsEncryptedUsrCods ();
Usr_FreeListsSelectedUsrCods ();
/***** Free memory for list of selected groups *****/
Grp_FreeListCodSelectedGrps ();
@ -581,14 +581,14 @@ void Msg_RecMsgFromUsr (void)
/* Get user's code of possible preselected recipient */
Usr_GetParamOtherUsrCodEncrypted ();
/* Get list of selected users */
Usr_GetListSelectedUsrs ();
/* Get lists of selected users */
Usr_GetListsSelectedUsrs ();
/* Get list of users' IDs or nicknames written explicitely */
Error = Usr_GetListMsgRecipientsWrittenExplicitelyBySender (true);
/***** If there are no recipients... *****/
if ((NumRecipients = Usr_CountNumUsrsInEncryptedList ()))
if ((NumRecipients = Usr_CountNumUsrsInListOfSelectedUsrs ()))
{
if (Gbl.Usrs.Me.LoggedRole == Rol_STUDENT &&
NumRecipients > Cfg_MAX_RECIPIENTS)
@ -704,7 +704,7 @@ void Msg_RecMsgFromUsr (void)
/* Free memory used for list of users */
Usr_FreeListOtherRecipients ();
Usr_FreeListsEncryptedUsrCods ();
Usr_FreeListsSelectedUsrCods ();
/***** Update received message setting Replied field to true *****/
if (Replied)

View File

@ -878,10 +878,10 @@ void Rec_ListRecordsGsts (void)
Rec_GetParamRecordsPerPage ();
/***** Get list of selected users *****/
Usr_GetListSelectedUsrs ();
Usr_GetListsSelectedUsrs ();
/* Check the number of students to show */
if (!Usr_CountNumUsrsInEncryptedList ()) // If no students selected...
if (!Usr_CountNumUsrsInListOfSelectedUsrs ()) // If no students selected...
{ // ...write warning notice
Lay_ShowAlert (Lay_WARNING,Txt_You_must_select_one_ore_more_users);
Usr_SeeGuests (); // ...show again the form
@ -938,7 +938,7 @@ void Rec_ListRecordsGsts (void)
Rec_FreeListFields ();
/***** Free memory used for by the list of users *****/
Usr_FreeListsEncryptedUsrCods ();
Usr_FreeListsSelectedUsrCods ();
}
/*****************************************************************************/
@ -1034,10 +1034,10 @@ void Rec_ListRecordsStds (void)
Rec_GetParamRecordsPerPage ();
/***** Get list of selected students *****/
Usr_GetListSelectedUsrs ();
Usr_GetListsSelectedUsrs ();
/* Check the number of students to show */
if (!Usr_CountNumUsrsInEncryptedList ()) // If no students selected...
if (!Usr_CountNumUsrsInListOfSelectedUsrs ()) // If no students selected...
{ // ...write warning notice
Lay_ShowAlert (Lay_WARNING,Txt_You_must_select_one_ore_more_students);
Usr_SeeStudents (); // ...show again the form
@ -1116,7 +1116,7 @@ void Rec_ListRecordsStds (void)
Rec_FreeListFields ();
/***** Free memory used for by the list of users *****/
Usr_FreeListsEncryptedUsrCods ();
Usr_FreeListsSelectedUsrCods ();
}
/*****************************************************************************/
@ -1208,10 +1208,10 @@ void Rec_ListRecordsTchs (void)
Rec_GetParamRecordsPerPage ();
/***** Get list of selected teachers *****/
Usr_GetListSelectedUsrs ();
Usr_GetListsSelectedUsrs ();
/* Check the number of teachers to show */
if (!Usr_CountNumUsrsInEncryptedList ()) // If no teachers selected...
if (!Usr_CountNumUsrsInListOfSelectedUsrs ()) // If no teachers selected...
{ // ...write warning notice
Lay_ShowAlert (Lay_WARNING,Txt_You_must_select_one_ore_more_teachers);
Usr_SeeTeachers (); // ...show again the form
@ -1285,7 +1285,7 @@ void Rec_ListRecordsTchs (void)
Usr_UsrDataDestructor (&UsrDat);
/***** Free memory used for by the list of users *****/
Usr_FreeListsEncryptedUsrCods ();
Usr_FreeListsSelectedUsrCods ();
}
/*****************************************************************************/

View File

@ -121,7 +121,6 @@ static void Sta_ShowNumAccessesPerDegree (unsigned long NumRows,MYSQL_RES *mysql
static void Sta_ShowNumAccessesPerCourse (unsigned long NumRows,MYSQL_RES *mysql_res);
static void Sta_WriteDegree (long DegCod);
static void Sta_DrawBarNumClicks (char Color,float NumPagesGenerated,float MaxPagesGenerated,float TotalPagesGenerated,unsigned MaxBarWidth);
static void Sta_WriteSelectedRangeOfDates (unsigned NumDays);
static void Sta_GetAndShowHierarchyStats (void);
static void Sta_WriteHeadDegsCrssInSWAD (void);
@ -395,7 +394,7 @@ static void Sta_PutFormToRequestAccessesCrs (void)
void Sta_AskSeeCrsAccesses (void)
{
extern const char *The_ClassForm[The_NUM_THEMES];
extern const char *Txt_Statistics_of_access;
extern const char *Txt_Statistics_of_visits_to_the_course_X;
extern const char *Txt_Users;
extern const char *Txt_Show;
extern const char *Txt_distributed_by;
@ -427,8 +426,8 @@ void Sta_AskSeeCrsAccesses (void)
if (Usr_GetIfShowBigList (Gbl.Usrs.LstTchs.NumUsrs +
Gbl.Usrs.LstStds.NumUsrs))
{
/***** Get list of selected users *****/
Usr_GetListSelectedUsrs ();
/***** Get lists of selected users *****/
Usr_GetListsSelectedUsrs ();
Act_FormStart (ActSeeAccCrs);
Grp_PutParamsCodGrps ();
@ -436,7 +435,9 @@ void Sta_AskSeeCrsAccesses (void)
Par_PutHiddenParamLong ("LastRow",0);
/***** Start frame *****/
Lay_StartRoundFrameTable (NULL,2,Txt_Statistics_of_access);
sprintf (Gbl.Title,Txt_Statistics_of_visits_to_the_course_X,
Gbl.CurrentCrs.Crs.ShortName);
Lay_StartRoundFrameTable (NULL,2,Gbl.Title);
/***** Put list of users to select some of them *****/
fprintf (Gbl.F.Out,"<tr>"
@ -532,7 +533,7 @@ void Sta_AskSeeCrsAccesses (void)
Act_FormEnd ();
/* Free the memory used by the list of users */
Usr_FreeListsEncryptedUsrCods ();
Usr_FreeListsSelectedUsrCods ();
}
}
else // No teachers nor students found
@ -553,7 +554,7 @@ void Sta_AskSeeCrsAccesses (void)
void Sta_AskSeeGblAccesses (void)
{
extern const char *The_ClassForm[The_NUM_THEMES];
extern const char *Txt_Statistics_of_access;
extern const char *Txt_Statistics_of_all_visits;
extern const char *Txt_Users;
extern const char *Txt_ROLE_STATS[Sta_NUM_ROLES_STAT];
extern const char *Txt_Scope;
@ -579,7 +580,7 @@ void Sta_AskSeeGblAccesses (void)
Act_FormStart (ActSeeAccGbl);
/***** Start frame *****/
Lay_StartRoundFrameTable (NULL,2,Txt_Statistics_of_access);
Lay_StartRoundFrameTable (NULL,2,Txt_Statistics_of_all_visits);
/***** Start and end dates for the search *****/
Dat_WriteFormIniEndDates ();
@ -788,25 +789,12 @@ void Sta_SeeGblAccesses (void)
static bool Sta_SeeAccesses (void)
{
extern const char *Txt_User;
extern const char *Txt_Users;
extern const char *Txt_ROLE_STATS[Sta_NUM_ROLES_STAT];
extern const char *Txt_Action;
extern const char *Txt_The_graph_shows_the_NUMBER;
extern const char *Txt_STAT_TYPE_COUNT_SMALL[Sta_NUM_COUNT_TYPES];
extern const char *Txt_distributed_by;
extern const char *Txt_STAT_CLICKS_GROUPED_BY[Sta_NUM_CLICKS_GROUPED_BY];
extern const char *Txt_You_must_select_one_ore_more_users;
extern const char *Txt_There_is_no_knowing_how_many_users_not_logged_have_accessed;
extern const char *Txt_The_date_range_must_be_less_than_or_equal_to_X_days;
extern const char *Txt_There_are_no_accesses_with_the_selected_search_criteria;
extern const char *Txt_List_of_detailed_clicks_in_the_course_X;
extern const char *Txt_Statistics_of_all_visits;
extern const char *Txt_Statistics_of_visits_to_COUNTRY_X;
extern const char *Txt_Statistics_of_visits_to_the_institution_X;
extern const char *Txt_Statistics_of_visits_to_the_centre_X;
extern const char *Txt_Statistics_of_visits_to_the_degree_X;
extern const char *Txt_Statistics_of_visits_to_the_course_X;
extern const char *Txt_List_of_detailed_clicks;
extern const char *Txt_STAT_TYPE_COUNT_CAPS[Sta_NUM_COUNT_TYPES];
enum {STAT_GLOBAL,STAT_COURSE} StatsGlobalOrCourse;
char Query[MAX_LENGTH_QUERY_ACCESS+1];
char QueryAux[512];
@ -823,7 +811,6 @@ static bool Sta_SeeAccesses (void)
char StrRole[256];
char StrQueryCountType[256];
unsigned NumDays;
char ActTxt[Act_MAX_LENGTH_ACTION_TXT+1];
/***** Initialize data structure of the user *****/
Usr_UsrDataConstructor (&UsrDat);
@ -914,11 +901,14 @@ static bool Sta_SeeAccesses (void)
Lay_ShowErrorAndExit ("Number of rows per page is missing.");
}
/****** Get list of selected users ******/
Usr_GetListSelectedUsrs ();
/***** Show form again *****/
Sta_AskSeeCrsAccesses ();
/****** Get lists of selected users ******/
Usr_GetListsSelectedUsrs ();
/* Check the number of users whose clicks will be shown */
if (!Usr_CountNumUsrsInEncryptedList ()) // If there are no users selected...
if (!Usr_CountNumUsrsInListOfSelectedUsrs ()) // If there are no users selected...
{ // ...write warning message and show the form again
Lay_ShowAlert (Lay_WARNING,Txt_You_must_select_one_ore_more_users);
return false;
@ -953,6 +943,9 @@ static bool Sta_SeeAccesses (void)
1 << Sco_SCOPE_CRS;
Gbl.Scope.Default = Sco_SCOPE_SYS;
Sco_GetScope ();
/***** Show form again *****/
Sta_AskSeeGblAccesses ();
}
/***** Check if range of dates is forbidden for me *****/
@ -1293,92 +1286,13 @@ static bool Sta_SeeAccesses (void)
Lay_ShowAlert (Lay_INFO,Txt_There_are_no_accesses_with_the_selected_search_criteria);
else
{
if (Gbl.Stat.ClicksGroupedBy == Sta_CLICKS_CRS_DETAILED_LIST)
{
sprintf (Gbl.Message,Txt_List_of_detailed_clicks_in_the_course_X,
Gbl.CurrentCrs.Crs.FullName);
Lay_WriteTitle (Gbl.Message);
Sta_WriteSelectedRangeOfDates (NumDays);
}
else
{
switch (Gbl.Stat.ClicksGroupedBy)
{
case Sta_CLICKS_CRS_PER_USR:
case Sta_CLICKS_CRS_PER_DAYS:
case Sta_CLICKS_CRS_PER_DAYS_AND_HOUR:
case Sta_CLICKS_CRS_PER_WEEKS:
case Sta_CLICKS_CRS_PER_MONTHS:
case Sta_CLICKS_CRS_PER_HOUR:
case Sta_CLICKS_CRS_PER_MINUTE:
case Sta_CLICKS_CRS_PER_ACTION:
sprintf (Gbl.Message,Txt_Statistics_of_visits_to_the_course_X,
Gbl.CurrentCrs.Crs.FullName);
Lay_WriteTitle (Gbl.Message);
Sta_WriteSelectedRangeOfDates (NumDays);
break;
default:
switch (Gbl.Scope.Current)
{
case Sco_SCOPE_SYS:
strcpy (Gbl.Message,Txt_Statistics_of_all_visits);
break;
case Sco_SCOPE_CTY:
sprintf (Gbl.Message,Txt_Statistics_of_visits_to_COUNTRY_X,
Gbl.CurrentCty.Cty.Name[Gbl.Prefs.Language]);
break;
case Sco_SCOPE_INS:
sprintf (Gbl.Message,Txt_Statistics_of_visits_to_the_institution_X,
Gbl.CurrentIns.Ins.ShortName);
break;
case Sco_SCOPE_CTR:
sprintf (Gbl.Message,Txt_Statistics_of_visits_to_the_centre_X,
Gbl.CurrentCtr.Ctr.ShortName);
break;
case Sco_SCOPE_DEG:
sprintf (Gbl.Message,Txt_Statistics_of_visits_to_the_degree_X,
Gbl.CurrentDeg.Deg.ShortName);
break;
case Sco_SCOPE_CRS:
sprintf (Gbl.Message,Txt_Statistics_of_visits_to_the_course_X,
Gbl.CurrentCrs.Crs.ShortName);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
break;
}
Lay_WriteTitle (Gbl.Message);
Sta_WriteSelectedRangeOfDates (NumDays);
fprintf (Gbl.F.Out,"<p class=\"DAT CENTER_MIDDLE\">");
if (Gbl.Stat.Role == Sta_ME)
fprintf (Gbl.F.Out,"%s: %s",
Txt_User,
Gbl.Usrs.Me.UsrDat.FullName);
else
fprintf (Gbl.F.Out,"%s: %s",
Txt_Users,
Txt_ROLE_STATS[Gbl.Stat.Role]);
fprintf (Gbl.F.Out,"</p>");
break;
}
fprintf (Gbl.F.Out,"<p class=\"DAT CENTER_MIDDLE\">%s: %s</p>",
Txt_Action,
Act_GetActionTextFromDB (Act_Actions[Gbl.Stat.NumAction].ActCod,ActTxt));
sprintf (Gbl.Message,"%s %s, %s %s",
Txt_The_graph_shows_the_NUMBER,
Txt_STAT_TYPE_COUNT_SMALL[Gbl.Stat.CountType],
Txt_distributed_by,
Txt_STAT_CLICKS_GROUPED_BY[Gbl.Stat.ClicksGroupedBy]);
Lay_WriteTitle (Gbl.Message);
}
/***** Put the table with the clicks *****/
/* Write start of table frame */
Lay_StartRoundFrameTable ((Gbl.Stat.ClicksGroupedBy == Sta_CLICKS_CRS_DETAILED_LIST) ? "95%" :
NULL,
0,NULL);
if (Gbl.Stat.ClicksGroupedBy == Sta_CLICKS_CRS_DETAILED_LIST)
Lay_StartRoundFrameTable ("95%",0,Txt_List_of_detailed_clicks);
else
Lay_StartRoundFrameTable (NULL,0,Txt_STAT_TYPE_COUNT_CAPS[Gbl.Stat.CountType]);
switch (Gbl.Stat.ClicksGroupedBy)
{
case Sta_CLICKS_CRS_DETAILED_LIST:
@ -1441,7 +1355,7 @@ static bool Sta_SeeAccesses (void)
/***** Free the memory used by the list of users *****/
if (Gbl.CurrentAct == ActSeeAccCrs)
Usr_FreeListsEncryptedUsrCods ();
Usr_FreeListsSelectedUsrCods ();
/***** Free memory used by the data of the user *****/
Usr_UsrDataDestructor (&UsrDat);
@ -1548,7 +1462,7 @@ static void Sta_ShowDetailedAccessesList (unsigned long NumRows,MYSQL_RES *mysql
Act_FormEnd ();
/* Write number of current page */
fprintf (Gbl.F.Out,"<td class=\"CENTER_MIDDLE\" style=\"width:60%%;\">"
fprintf (Gbl.F.Out,"<td class=\"DAT_N CENTER_MIDDLE\" style=\"width:60%%;\">"
"<strong>"
"%s %lu-%lu %s %lu (%s %ld %s %lu)"
"</strong>"
@ -3511,35 +3425,6 @@ void Sta_WriteParamsDatesSeeAccesses (void)
Par_PutHiddenParamUnsigned ("EndYear" ,Gbl.DateRange.DateEnd.Year);
}
/*****************************************************************************/
/******************** Write the selected range of dates **********************/
/*****************************************************************************/
static void Sta_WriteSelectedRangeOfDates (unsigned NumDays)
{
extern const char *Txt_Date;
extern const char *Txt_Dates;
extern const char *Txt_DATES_RANGE;
extern const char *Txt_one_day;
extern const char *Txt_days;
char StrDateIni[2+1+2+1+4+1];
char StrDateEnd[2+1+2+1+4+1];
char StrDatesRange[1024];
sprintf (StrDateIni,"%02u/%02u/%04u",Gbl.DateRange.DateIni.Day,Gbl.DateRange.DateIni.Month,Gbl.DateRange.DateIni.Year);
fprintf (Gbl.F.Out,"<p class=\"DAT CENTER_MIDDLE\">");
if (NumDays == 1)
fprintf (Gbl.F.Out,"%s: %s (%s)",Txt_Date,StrDateIni,Txt_one_day);
else
{
sprintf (StrDateEnd,"%02u/%02u/%04u",Gbl.DateRange.DateEnd.Day,Gbl.DateRange.DateEnd.Month,Gbl.DateRange.DateEnd.Year);
sprintf (StrDatesRange,Txt_DATES_RANGE,StrDateIni,StrDateEnd);
fprintf (Gbl.F.Out,"%s: %s (%u %s)",
Txt_Dates,StrDatesRange,NumDays,Txt_days);
}
fprintf (Gbl.F.Out,"</p>");
}
/*****************************************************************************/
/************************** Show use of the platform *************************/
/*****************************************************************************/

View File

@ -5945,7 +5945,7 @@ void Tst_SelUsrsToSeeUsrsTstExams (void)
Usr_FreeUsrsList (&Gbl.Usrs.LstStds);
/***** Free the memory used by the list of users *****/
Usr_FreeListsEncryptedUsrCods ();
Usr_FreeListsSelectedUsrCods ();
/***** Free memory for list of selected groups *****/
Grp_FreeListCodSelectedGrps ();
@ -6022,13 +6022,13 @@ void Tst_ShowUsrsTestResults (void)
const char *Ptr;
/***** Get list of the selected users's IDs *****/
Usr_GetListSelectedUsrs ();
Usr_GetListsSelectedUsrs ();
/***** Get starting and ending dates *****/
Dat_GetIniEndDatesFromForm ();
/***** Check the number of users whose tests results will be shown *****/
if (Usr_CountNumUsrsInEncryptedList ()) // If some users are selected...
if (Usr_CountNumUsrsInListOfSelectedUsrs ()) // If some users are selected...
{
/***** Header of the table with the list of users *****/
Lay_StartRoundFrameTable (NULL,2,Txt_Exams);
@ -6060,7 +6060,7 @@ void Tst_ShowUsrsTestResults (void)
}
/***** Free the memory used for the list of users *****/
Usr_FreeListsEncryptedUsrCods ();
Usr_FreeListsSelectedUsrCods ();
}
/*****************************************************************************/

View File

@ -6724,48 +6724,6 @@ const char *Txt_Date_of_creation =
"Data da cria&ccedil;&atilde;o";
#endif
const char *Txt_Dates =
#if L==0
"Dates";
#elif L==1
"Datum";
#elif L==2
"Dates";
#elif L==3
"Fechas";
#elif L==4
"Dates";
#elif L==5
"Fechas"; // Okoteve traducción
#elif L==6
"Date";
#elif L==7
"Daty";
#elif L==8
"Datas";
#endif
const char *Txt_DATES_RANGE = // Warning: it is very important to include two %s in the following sentences
#if L==0
"desde el %s hasta el %s"; // Necessita traduccio
#elif L==1
"von %s bis %s";
#elif L==2
"from %s to %s";
#elif L==3
"desde el %s hasta el %s";
#elif L==4
"de %s jusqu'&agrave; %s";
#elif L==5
"desde el %s hasta el %s"; // Okoteve traducción
#elif L==6
"dal %s al %s";
#elif L==7
"z %s do %s";
#elif L==8
"%s at&eacute; %s";
#endif
const char *Txt_Day =
#if L==0
"D&iacute;a"; // Necessita traduccio
@ -15640,25 +15598,25 @@ const char *Txt_Link_to_announcement_of_exam =
"Link para chamada para exame";
#endif
const char *Txt_List_of_detailed_clicks_in_the_course_X = // Warning: it is very important to include %s in the following sentences
const char *Txt_List_of_detailed_clicks =
#if L==0
"Listado de clics detallados en la asignatura <strong>%s</strong>"; // Necessita traduccio
"Listado de clics detallados"; // Necessita traduccio
#elif L==1
"List of detailed clicks in the course <strong>%s</strong>"; // Need Übersetzung
"List of detailed clicks"; // Need Übersetzung
#elif L==2
"List of detailed clicks in the course <strong>%s</strong>";
"List of detailed clicks";
#elif L==3
"Listado de clics detallados en la asignatura <strong>%s</strong>";
"Listado de clics detallados";
#elif L==4
"List of detailed clicks in the course <strong>%s</strong>"; // Besoin de traduction
"List of detailed clicks"; // Besoin de traduction
#elif L==5
"Listado de clics detallados en la asignatura <strong>%s</strong>"; // Okoteve traducción
"Listado de clics detallados"; // Okoteve traducción
#elif L==6
"Lista di scatti dettagliati nel corso <strong>%s</strong>";
"Lista di scatti dettagliati";
#elif L==7
"Lista szczeg&oacute;lowa klikniec w trakcie <strong>%s</strong>";
"Lista szczeg&oacute;lowa klikniec";
#elif L==8
"List of detailed clicks in the course <strong>%s</strong>"; // Necessita de tradução
"List of detailed clicks"; // Necessita de tradução
#endif
const char *Txt_List_of_nicks_emails_or_IDs =
@ -25505,27 +25463,6 @@ const char *Txt_Official_students =
"Estudantes oficiais";
#endif
const char *Txt_one_day =
#if L==0
"un d&iacute;a"; // Necessita traduccio
#elif L==1
"ein Tag";
#elif L==2
"one day";
#elif L==3
"un d&iacute;a";
#elif L==4
"un jour";
#elif L==5
"un d&iacute;a"; // Okoteve traducción
#elif L==6
"un giorno";
#elif L==7
"jeden dzien";
#elif L==8
"um dia";
#endif
const char *Txt_One_message_has_been_deleted =
#if L==0
"Se ha eliminado un mensaje."; // Necessita traduccio
@ -36451,27 +36388,6 @@ const char *Txt_Statistic =
"Estat&iacute;sticas";
#endif
const char *Txt_Statistics_of_access =
#if L==0
"Estad&iacute;stiques d'accesso";
#elif L==1
"Zugriffsstatistik";
#elif L==2
"Statistics of access";
#elif L==3
"Estad&iacute;sticas de acceso";
#elif L==4
"Statistiques de connexion";
#elif L==5
"Estad&iacute;sticas de acceso"; // Okoteve traducción
#elif L==6
"Statistiche di accesso";
#elif L==7
"Statystyki dost&eogon;p";
#elif L==8
"Estat&iacute;sticas de acesso";
#endif
const char *Txt_Statistics_of_all_visits =
#if L==0
"Estad&iacute;stica de todos los accesos"; // Necessita traduccio
@ -36493,48 +36409,6 @@ const char *Txt_Statistics_of_all_visits =
"Statistics of all visits"; // Necessita de tradução
#endif
const char *Txt_Statistics_of_visits_to_COUNTRY_X = // Warning: it is very important to include %s in the following sentences
#if L==0
"Estad&iacute;stica de accesos a <strong>%s</strong>"; // Necessita traduccio
#elif L==1
"Statistics of visits to <strong>%s</strong>"; // Need Übersetzung
#elif L==2
"Statistics of visits to <strong>%s</strong>";
#elif L==3
"Estad&iacute;stica de accesos a <strong>%s</strong>";
#elif L==4
"Statistics of visits to <strong>%s</strong>"; // Besoin de traduction
#elif L==5
"Estad&iacute;stica de accesos a <strong>%s</strong>"; // Okoteve traducción
#elif L==6
"Statistiche degli accessi al centro <strong>%s</strong>";
#elif L==7
"Statistics of visits to the centre <strong>%s</strong>"; // Potrzebujesz tlumaczenie
#elif L==8
"Statistics of visits to the centre <strong>%s</strong>"; // Necessita de tradução
#endif
const char *Txt_Statistics_of_visits_to_the_centre_X = // Warning: it is very important to include %s in the following sentences
#if L==0
"Estad&iacute;stica de accesos al centro <strong>%s</strong>"; // Necessita traduccio
#elif L==1
"Statistics of visits to the centre <strong>%s</strong>"; // Need Übersetzung
#elif L==2
"Statistics of visits to the centre <strong>%s</strong>";
#elif L==3
"Estad&iacute;stica de accesos al centro <strong>%s</strong>";
#elif L==4
"Statistics of visits to the centre <strong>%s</strong>"; // Besoin de traduction
#elif L==5
"Estad&iacute;stica de accesos al centro <strong>%s</strong>"; // Okoteve traducción
#elif L==6
"Statistiche degli accessi al centro <strong>%s</strong>";
#elif L==7
"Statistics of visits to the centre <strong>%s</strong>"; // Potrzebujesz tlumaczenie
#elif L==8
"Statistics of visits to the centre <strong>%s</strong>"; // Necessita de tradução
#endif
const char *Txt_Statistics_of_visits_to_the_course_X = // Warning: it is very important to include %s in the following sentences
#if L==0
"Estad&iacute;stica d'accessos a l'assignatura <strong>%s</strong>";
@ -36556,48 +36430,6 @@ const char *Txt_Statistics_of_visits_to_the_course_X = // Warning: it is very im
"Statistics of visits to the course <strong>%s</strong>"; // Necessita de tradução
#endif
const char *Txt_Statistics_of_visits_to_the_degree_X = // Warning: it is very important to include %s in the following sentences
#if L==0
"Estad&iacute;stica de accesos a la titulaci&oacute;n <strong>%s</strong>"; // Necessita traduccio
#elif L==1
"Statistics of visits to the degree <strong>%s</strong>"; // Need Übersetzung
#elif L==2
"Statistics of visits to the degree <strong>%s</strong>";
#elif L==3
"Estad&iacute;stica de accesos a la titulaci&oacute;n <strong>%s</strong>";
#elif L==4
"Statistics of visits to the degree <strong>%s</strong>"; // Besoin de traduction
#elif L==5
"Estad&iacute;stica de accesos a la titulaci&oacute;n <strong>%s</strong>"; // Okoteve traducción
#elif L==6
"Statistiche degli accessi alla laurea <strong>%s</strong>";
#elif L==7
"Statistics of visits to the degree <strong>%s</strong>"; // Potrzebujesz tlumaczenie
#elif L==8
"Statistics of visits to the degree <strong>%s</strong>"; // Necessita de tradução
#endif
const char *Txt_Statistics_of_visits_to_the_institution_X = // Warning: it is very important to include %s in the following sentences
#if L==0
"Estad&iacute;stica de accesos a la instituci&oacute;n <strong>%s</strong>"; // Necessita traduccio
#elif L==1
"Statistics of visits to the institution <strong>%s</strong>"; // Need Übersetzung
#elif L==2
"Statistics of visits to the institution <strong>%s</strong>";
#elif L==3
"Estad&iacute;stica de accesos a la instituci&oacute;n <strong>%s</strong>";
#elif L==4
"Statistics of visits to the institution <strong>%s</strong>"; // Besoin de traduction
#elif L==5
"Estad&iacute;stica de accesos a la instituci&oacute;n <strong>%s</strong>"; // Okoteve traducción
#elif L==6
"Statistiche degli accessi alla istituzione <strong>%s</strong>";
#elif L==7
"Statistics of visits to the institution <strong>%s</strong>"; // Potrzebujesz tlumaczenie
#elif L==8
"Statistics of visits to the institution <strong>%s</strong>"; // Necessita de tradução
#endif
const char *Txt_Status =
#if L==0
"Estado"; // Necessita traduccio
@ -39694,27 +39526,6 @@ const char *Txt_The_folder_name_X_has_not_changed_because_there_is_already_a_fol
" because there is already a folder or a file with the name <strong>%s</strong>."; // Necessita de tradução
#endif
const char *Txt_The_graph_shows_the_NUMBER =
#if L==0
"La gr&aacute;fica muestra el"; // Necessita traduccio
#elif L==1
"Die Grafik zeigt die";
#elif L==2
"The graph shows the";
#elif L==3
"La gr&aacute;fica muestra el";
#elif L==4
"Le graphique montre le";
#elif L==5
"La gr&aacute;fica muestra el"; // Okoteve traducción
#elif L==6
"Il grafico mostra il";
#elif L==7
"The graph shows the"; // Potrzebujesz tlumaczenie
#elif L==8
"O gr&aacute;fico mostra o";
#endif
const char *Txt_The_group_X_already_exists = // Warning: it is very important to include %s in the following sentences
#if L==0
"El grupo <strong>%s</strong> ya existe."; // Necessita traduccio

View File

@ -145,6 +145,8 @@ static void Usr_FormToSelectUsrListType (Act_Action_t NextAction,Usr_ShowUsrsTyp
static Usr_Sex_t Usr_GetSexOfUsrsLst (struct ListUsers *LstUsrs);
static void Usr_PutCheckboxToSelectUser (struct UsrData *UsrDat,bool UsrIsTheMsgSender);
static void Usr_SetUsrDatMainFieldNames (void);
static void Usr_ListMainDataGsts (bool PutCheckBoxToSelectUsr);
static void Usr_ListMainDataStds (bool PutCheckBoxToSelectUsr);
@ -2650,7 +2652,7 @@ static void Usr_WriteRowGstMainData (unsigned NumUsr,struct UsrData *UsrDat)
// Two colors are used alternatively to better distinguish the rows
fprintf (Gbl.F.Out,"<td class=\"CENTER_MIDDLE COLOR%u\">",
Gbl.RowEvenOdd);
Usr_PutCheckboxToSelectUser (Rol__GUEST_,UsrDat->EncryptedUsrCod,false);
Usr_PutCheckboxToSelectUser (UsrDat,false);
fprintf (Gbl.F.Out,"</td>");
/***** Student has accepted enrollment in current course? *****/
@ -2737,7 +2739,9 @@ void Usr_WriteRowStdMainData (unsigned NumUsr,struct UsrData *UsrDat,bool PutChe
if (PutCheckBoxToSelectUsr)
{
fprintf (Gbl.F.Out,"<td class=\"CENTER_MIDDLE %s\">",BgColor);
Usr_PutCheckboxToSelectUser (Rol_STUDENT,UsrDat->EncryptedUsrCod,UsrIsTheMsgSender);
Usr_PutCheckboxToSelectUser (UsrDat,UsrIsTheMsgSender);
fprintf (Gbl.F.Out,"</td>");
}
@ -3049,7 +3053,9 @@ static void Usr_WriteRowTchMainData (unsigned NumUsr,struct UsrData *UsrDat,bool
if (PutCheckBoxToSelectUsr)
{
fprintf (Gbl.F.Out,"<td class=\"CENTER_MIDDLE %s\">",BgColor);
Usr_PutCheckboxToSelectUser (Rol_TEACHER,UsrDat->EncryptedUsrCod,UsrIsTheMsgSender);
Usr_PutCheckboxToSelectUser (UsrDat,UsrIsTheMsgSender);
fprintf (Gbl.F.Out,"</td>");
}
@ -4382,14 +4388,14 @@ void Usr_PutHiddenParUsrCodAll (Act_Action_t NextAction,const char *ListUsrCods)
/************************* Get list of selected users ************************/
/*****************************************************************************/
void Usr_GetListSelectedUsrs (void)
void Usr_GetListsSelectedUsrs (void)
{
unsigned Length;
/***** Allocate memory for the lists of users *****/
Usr_AllocateListEncryptedUsrCodAll ();
Usr_AllocateListEncryptedUsrCodTch ();
Usr_AllocateListEncryptedUsrCodStd ();
Usr_AllocateListSelectedUsrCodAll ();
Usr_AllocateListSelectedUsrCodTch ();
Usr_AllocateListSelectedUsrCodStd ();
/***** Get selected users *****/
if (Gbl.Session.IsOpen) // If the session is open, get parameter from DB
@ -4402,9 +4408,9 @@ void Usr_GetListSelectedUsrs (void)
else
Par_GetParMultiToText ("UsrCodAll",Gbl.Usrs.Select.All,Usr_MAX_BYTES_LIST_ENCRYPTED_USR_CODS);
Par_GetParMultiToText ("UsrCodTch",Gbl.Usrs.Select.Tch,Usr_MAX_BYTES_LIST_ENCRYPTED_USR_CODS);
Par_GetParMultiToText ("UsrCodTch",Gbl.Usrs.Select.Tch,Usr_MAX_BYTES_LIST_ENCRYPTED_USR_CODS); // Teachers or guests
Par_GetParMultiToText ("UsrCodStd",Gbl.Usrs.Select.Std,Usr_MAX_BYTES_LIST_ENCRYPTED_USR_CODS);
Par_GetParMultiToText ("UsrCodStd",Gbl.Usrs.Select.Std,Usr_MAX_BYTES_LIST_ENCRYPTED_USR_CODS); // Students
/*
sprintf (Gbl.Message,"UsrCodAll = %s / UsrCodTch = %s / UsrCodStd = %s",
Gbl.Usrs.Select.All,Gbl.Usrs.Select.Tch,Gbl.Usrs.Select.Std);
@ -4457,7 +4463,7 @@ bool Usr_GetListMsgRecipientsWrittenExplicitelyBySender (bool WriteErrorMsgs)
bool Error = false;
/***** Allocate memory for the lists of users's IDs *****/
Usr_AllocateListEncryptedUsrCodAll ();
Usr_AllocateListSelectedUsrCodAll ();
/***** Allocate memory for the lists of recipients written explicetely *****/
Usr_AllocateListOtherRecipients ();
@ -4580,7 +4586,7 @@ bool Usr_GetListMsgRecipientsWrittenExplicitelyBySender (bool WriteErrorMsgs)
Usr_GetUsrDataFromUsrCod (&UsrDat); // Really only EncryptedUsrCod is needed
/* Find if encrypted user's code is already in list */
if (!Usr_FindEncryptedUsrCodInList (UsrDat.EncryptedUsrCod)) // If not in list ==> add it
if (!Usr_FindUsrCodInListOfSelectedUsrs (UsrDat.EncryptedUsrCod)) // If not in list ==> add it
{
/* Add encrypted user's code to list of users */
if ((Length = strlen (Gbl.Usrs.Select.All)) == 0) // First user in list
@ -4614,26 +4620,29 @@ bool Usr_GetListMsgRecipientsWrittenExplicitelyBySender (bool WriteErrorMsgs)
/*****************************************************************************/
// Returns true if EncryptedUsrCodToFind is in Gbl.Usrs.Select.All
bool Usr_FindEncryptedUsrCodInList (const char *EncryptedUsrCodToFind)
bool Usr_FindUsrCodInListOfSelectedUsrs (const char *EncryptedUsrCodToFind)
{
const char *Ptr;
char EncryptedUsrCod[Cry_LENGTH_ENCRYPTED_STR_SHA256_BASE64+1];
Ptr = Gbl.Usrs.Select.All;
while (*Ptr)
if (Gbl.Usrs.Select.All)
{
Par_GetNextStrUntilSeparParamMult (&Ptr,EncryptedUsrCod,Cry_LENGTH_ENCRYPTED_STR_SHA256_BASE64);
if (!strcmp (EncryptedUsrCodToFind,EncryptedUsrCod))
return true; // Found!
Ptr = Gbl.Usrs.Select.All;
while (*Ptr)
{
Par_GetNextStrUntilSeparParamMult (&Ptr,EncryptedUsrCod,Cry_LENGTH_ENCRYPTED_STR_SHA256_BASE64);
if (!strcmp (EncryptedUsrCodToFind,EncryptedUsrCod))
return true; // Found!
}
}
return false; // Not found
return false; // List not allocated or user not found
}
/*****************************************************************************/
/************ Count number of valid users' IDs in encrypted list *************/
/*****************************************************************************/
unsigned Usr_CountNumUsrsInEncryptedList (void)
unsigned Usr_CountNumUsrsInListOfSelectedUsrs (void)
{
const char *Ptr;
unsigned NumUsrs = 0;
@ -4655,7 +4664,7 @@ unsigned Usr_CountNumUsrsInEncryptedList (void)
/********************* Allocate memory for list of users *********************/
/*****************************************************************************/
void Usr_AllocateListEncryptedUsrCodAll (void)
void Usr_AllocateListSelectedUsrCodAll (void)
{
if (!Gbl.Usrs.Select.All)
{
@ -4669,26 +4678,26 @@ void Usr_AllocateListEncryptedUsrCodAll (void)
/****************** Allocate memory for list of students *********************/
/*****************************************************************************/
void Usr_AllocateListEncryptedUsrCodStd (void)
void Usr_AllocateListSelectedUsrCodStd (void)
{
if (!Gbl.Usrs.Select.Std)
{
if ((Gbl.Usrs.Select.Std = (char *) malloc (Usr_MAX_BYTES_LIST_ENCRYPTED_USR_CODS+1)) == NULL)
Lay_ShowErrorAndExit ("Not enough memory to store list of students.");
Lay_ShowErrorAndExit ("Not enough memory to store list of users.");
Gbl.Usrs.Select.Std[0] = '\0';
}
}
/*****************************************************************************/
/****************** Allocate memory for list of teachers *********************/
/************* Allocate memory for list of teachers or guests ****************/
/*****************************************************************************/
void Usr_AllocateListEncryptedUsrCodTch (void)
void Usr_AllocateListSelectedUsrCodTch (void)
{
if (!Gbl.Usrs.Select.Tch)
{
if ((Gbl.Usrs.Select.Tch = (char *) malloc (Usr_MAX_BYTES_LIST_ENCRYPTED_USR_CODS+1)) == NULL)
Lay_ShowErrorAndExit ("Not enough memory to store list of teachers.");
Lay_ShowErrorAndExit ("Not enough memory to store list of users.");
Gbl.Usrs.Select.Tch[0] = '\0';
}
}
@ -4697,7 +4706,7 @@ void Usr_AllocateListEncryptedUsrCodTch (void)
/********************** Free memory for lists of users ***********************/
/*****************************************************************************/
void Usr_FreeListsEncryptedUsrCods (void)
void Usr_FreeListsSelectedUsrCods (void)
{
if (Gbl.Usrs.Select.All)
{
@ -4911,7 +4920,7 @@ void Usr_PutCheckboxToSelectAllTheUsers (Rol_Role_t Role)
" onclick=\"togglecheckChildren(this,'UsrCodStd')\" />");
LstUsrs = &Gbl.Usrs.LstStds;
}
else
else // Role == Rol_TEACHER or Role == Rol__GUEST_
{
fprintf (Gbl.F.Out,"<input type=\"checkbox\" name=\"SEL_UNSEL_TCHS\" value=\"\""
" onclick=\"togglecheckChildren(this,'UsrCodTch')\" />");
@ -4922,7 +4931,7 @@ void Usr_PutCheckboxToSelectAllTheUsers (Rol_Role_t Role)
"</th>"
"</tr>",
LstUsrs->NumUsrs == 1 ? Txt_ROLES_SINGUL_Abc[Role][Sex] :
Txt_ROLES_PLURAL_Abc [Role][Sex]);
Txt_ROLES_PLURAL_Abc[Role][Sex]);
}
/*****************************************************************************/
@ -4966,15 +4975,31 @@ unsigned Usr_GetColumnsForSelectUsrs (void)
/******* Put a checkbox, in a classphoto or a list, to select a user *********/
/*****************************************************************************/
void Usr_PutCheckboxToSelectUser (Rol_Role_t Role,const char *EncryptedUsrCod,bool UsrIsTheMsgSender)
static void Usr_PutCheckboxToSelectUser (struct UsrData *UsrDat,bool UsrIsTheMsgSender)
{
bool CheckboxChecked;
/***** Check box *****/
fprintf (Gbl.F.Out,"<input type=\"checkbox\" name=\"");
if (Role == Rol_STUDENT)
fprintf (Gbl.F.Out,"UsrCodStd\" value=\"%s\" onclick=\"checkParent(this,'SEL_UNSEL_STDS')\"",EncryptedUsrCod);
if (UsrDat->RoleInCurrentCrsDB == Rol_STUDENT)
fprintf (Gbl.F.Out,"UsrCodStd\" value=\"%s\""
" onclick=\"checkParent(this,'SEL_UNSEL_STDS')\"",
UsrDat->EncryptedUsrCod);
else // Role == Rol_TEACHER or Role == Rol__GUEST_
fprintf (Gbl.F.Out,"UsrCodTch\" value=\"%s\""
" onclick=\"checkParent(this,'SEL_UNSEL_TCHS')\"",
UsrDat->EncryptedUsrCod);
/***** Check box must be checked? *****/
CheckboxChecked = false;
if (UsrIsTheMsgSender)
CheckboxChecked = true;
else
fprintf (Gbl.F.Out,"UsrCodTch\" value=\"%s\" onclick=\"checkParent(this,'SEL_UNSEL_TCHS')\"",EncryptedUsrCod);
if (UsrIsTheMsgSender) // Reply to a user
/* Check if user is in lists of selected users */
CheckboxChecked = Usr_FindUsrCodInListOfSelectedUsrs (UsrDat->EncryptedUsrCod);
if (CheckboxChecked)
fprintf (Gbl.F.Out," checked=\"checked\"");
fprintf (Gbl.F.Out," />");
}
@ -6398,7 +6423,7 @@ void Usr_SeeGuests (void)
if (Usr_GetIfShowBigList (Gbl.Usrs.LstGsts.NumUsrs))
{
/***** Get list of selected users *****/
Usr_GetListSelectedUsrs ();
Usr_GetListsSelectedUsrs ();
fprintf (Gbl.F.Out,"<div class=\"CONTEXT_MENU\">");
switch (Gbl.Usrs.Me.ListType)
@ -6574,7 +6599,7 @@ void Usr_SeeStudents (void)
if (Usr_GetIfShowBigList (Gbl.Usrs.LstStds.NumUsrs))
{
/***** Get list of selected users *****/
Usr_GetListSelectedUsrs ();
Usr_GetListsSelectedUsrs ();
switch (Gbl.Usrs.Me.ListType)
{
@ -7056,7 +7081,7 @@ static void Usr_DrawClassPhoto (Usr_ClassPhotoType_t ClassPhotoType,
/***** Checkbox to select this user *****/
if (PutCheckBoxToSelectUsr)
Usr_PutCheckboxToSelectUser (RoleInClassPhoto,UsrDat.EncryptedUsrCod,UsrIsTheMsgSender);
Usr_PutCheckboxToSelectUser (&UsrDat,UsrIsTheMsgSender);
/***** Show photo *****/
ShowPhoto = Pho_ShowUsrPhotoIsAllowed (&UsrDat,PhotoURL);

View File

@ -292,14 +292,14 @@ void Usr_GetUnorderedStdsCodesInDeg (long DegCod);
void Usr_FreeUsrsList (struct ListUsers *LstUsrs);
bool Usr_GetIfShowBigList (unsigned NumUsrs);
void Usr_PutHiddenParUsrCodAll (Act_Action_t NextAction,const char *ListUsrCods);
void Usr_GetListSelectedUsrs (void);
void Usr_GetListsSelectedUsrs (void);
bool Usr_GetListMsgRecipientsWrittenExplicitelyBySender (bool WriteErrorMsgs);
bool Usr_FindEncryptedUsrCodInList (const char *EncryptedUsrCodToFind);
unsigned Usr_CountNumUsrsInEncryptedList (void);
void Usr_AllocateListEncryptedUsrCodAll (void);
void Usr_AllocateListEncryptedUsrCodStd (void);
void Usr_AllocateListEncryptedUsrCodTch (void);
void Usr_FreeListsEncryptedUsrCods (void);
bool Usr_FindUsrCodInListOfSelectedUsrs (const char *EncryptedUsrCodToFind);
unsigned Usr_CountNumUsrsInListOfSelectedUsrs (void);
void Usr_AllocateListSelectedUsrCodAll (void);
void Usr_AllocateListSelectedUsrCodStd (void);
void Usr_AllocateListSelectedUsrCodTch (void);
void Usr_FreeListsSelectedUsrCods (void);
void Usr_FreeListOtherRecipients (void);
void Usr_ShowFormsToSelectUsrListType (Act_Action_t NextAction);
@ -307,7 +307,6 @@ void Usr_PutCheckboxToSelectAllTheUsers (Rol_Role_t Role);
unsigned Usr_GetColumnsForSelectUsrs (void);
void Usr_PutExtraParamsUsrList (Act_Action_t NextAction);
void Usr_ListUsersToSelect (Rol_Role_t Role);
void Usr_PutCheckboxToSelectUser (Rol_Role_t Role,const char *EncryptedUsrCod,bool UsrIsTheMsgSender);
void Usr_PutCheckboxListWithPhotos (void);
void Usr_ListAllDataGsts (void);