mirror of https://github.com/acanas/swad-core.git
Version 15.4
This commit is contained in:
parent
141becec4f
commit
243ceaed42
|
@ -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 ();
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -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 ();
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
169
swad_statistic.c
169
swad_statistic.c
|
@ -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 *************************/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -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 ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
209
swad_text.c
209
swad_text.c
|
@ -6724,48 +6724,6 @@ const char *Txt_Date_of_creation =
|
|||
"Data da criaçã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'à %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é %s";
|
||||
#endif
|
||||
|
||||
const char *Txt_Day =
|
||||
#if L==0
|
||||
"Dí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ólowa klikniec w trakcie <strong>%s</strong>";
|
||||
"Lista szczegó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ía"; // Necessita traduccio
|
||||
#elif L==1
|
||||
"ein Tag";
|
||||
#elif L==2
|
||||
"one day";
|
||||
#elif L==3
|
||||
"un día";
|
||||
#elif L==4
|
||||
"un jour";
|
||||
#elif L==5
|
||||
"un dí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ísticas";
|
||||
#endif
|
||||
|
||||
const char *Txt_Statistics_of_access =
|
||||
#if L==0
|
||||
"Estadístiques d'accesso";
|
||||
#elif L==1
|
||||
"Zugriffsstatistik";
|
||||
#elif L==2
|
||||
"Statistics of access";
|
||||
#elif L==3
|
||||
"Estadísticas de acceso";
|
||||
#elif L==4
|
||||
"Statistiques de connexion";
|
||||
#elif L==5
|
||||
"Estadísticas de acceso"; // Okoteve traducción
|
||||
#elif L==6
|
||||
"Statistiche di accesso";
|
||||
#elif L==7
|
||||
"Statystyki dostęp";
|
||||
#elif L==8
|
||||
"Estatísticas de acesso";
|
||||
#endif
|
||||
|
||||
const char *Txt_Statistics_of_all_visits =
|
||||
#if L==0
|
||||
"Estadí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í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ística de accesos a <strong>%s</strong>";
|
||||
#elif L==4
|
||||
"Statistics of visits to <strong>%s</strong>"; // Besoin de traduction
|
||||
#elif L==5
|
||||
"Estadí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í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í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í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í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ística de accesos a la titulació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ística de accesos a la titulación <strong>%s</strong>";
|
||||
#elif L==4
|
||||
"Statistics of visits to the degree <strong>%s</strong>"; // Besoin de traduction
|
||||
#elif L==5
|
||||
"Estadística de accesos a la titulació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ística de accesos a la institució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ística de accesos a la institución <strong>%s</strong>";
|
||||
#elif L==4
|
||||
"Statistics of visits to the institution <strong>%s</strong>"; // Besoin de traduction
|
||||
#elif L==5
|
||||
"Estadística de accesos a la institució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áfica muestra el"; // Necessita traduccio
|
||||
#elif L==1
|
||||
"Die Grafik zeigt die";
|
||||
#elif L==2
|
||||
"The graph shows the";
|
||||
#elif L==3
|
||||
"La gráfica muestra el";
|
||||
#elif L==4
|
||||
"Le graphique montre le";
|
||||
#elif L==5
|
||||
"La grá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á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
|
||||
|
|
97
swad_user.c
97
swad_user.c
|
@ -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);
|
||||
|
|
15
swad_user.h
15
swad_user.h
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue