Version 14.31.1

This commit is contained in:
Antonio Cañas Vargas 2014-12-05 02:33:47 +01:00
parent effeac12de
commit 8095c8e4a0
2 changed files with 175 additions and 67 deletions

View File

@ -95,7 +95,8 @@ static void Att_RegUsrInAttEventChangingComments (long AttCod,long UsrCod,bool P
const char *CommentStd,const char *CommentTch);
static void Att_RemoveUsrFromAttEvent (long AttCod,long UsrCod);
static void Att_ListAttEventsWithStds (struct UsrData *UsrDat);
static void Att_ListAttEventsWithStds (void);
static void Att_ListAttEventsForAStd (unsigned NumStd,struct UsrData *UsrDat);
static void Att_WriteTableHeadSeveralAttEvents (void);
static void Att_WriteRowStdSeveralAttEvents (unsigned NumStd,struct UsrData *UsrDat);
@ -2639,6 +2640,7 @@ void Usr_ListAttendanceStdsCrs (void)
extern const char *The_ClassFormul[The_NUM_THEMES];
extern const char *Txt_Attendance;
extern const char *Txt_Number_of_students;
extern const char *Txt_Comments;
extern const char *Txt_You_must_select_one_ore_more_students;
unsigned NumStd = 0;
unsigned NumStdsInList;
@ -2685,7 +2687,7 @@ void Usr_ListAttendanceStdsCrs (void)
Gbl.AttEvents.Lst[NumAttEvent].NumStdsFromList = Att_GetNumStdsFromAListWhoAreInAttEvent (Gbl.AttEvents.Lst[NumAttEvent].AttCod,LstSelectedUsrCods,NumStdsInList);
/***** List those events that have students (without comments) *****/
Att_ListAttEventsWithStds (NULL);
Att_ListAttEventsWithStds ();
/***** Get my preference about photos in users' list for current course *****/
Usr_GetMyPrefAboutListWithPhotosFromDB ();
@ -2738,9 +2740,26 @@ void Usr_ListAttendanceStdsCrs (void)
else
Lay_EndSquareFrameTable ();
/***** List events that have students (with comments) *****/
if (NumStdsInList == 1) // Only if one unique student in list
Att_ListAttEventsWithStds (&UsrDat);
/***** List the students with details and comments *****/
if (Gbl.CurrentAct == ActSeeLstAttStd)
Lay_StartRoundFrameTable10 (NULL,2,Txt_Comments);
else
Lay_StartSquareFrameTable (NULL,NULL,NULL,2);
for (NumStd = 0;
NumStd < NumStdsInList;
NumStd++)
{
UsrDat.UsrCod = LstSelectedUsrCods[NumStd];
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat)) // Get from the database the data of the student
{
UsrDat.Accepted = Usr_GetIfUserHasAcceptedEnrollmentInCurrentCrs (UsrDat.UsrCod);
Att_ListAttEventsForAStd (NumStd,&UsrDat);
}
}
if (Gbl.CurrentAct == ActSeeLstAttStd)
Lay_EndRoundFrameTable10 ();
else
Lay_EndSquareFrameTable ();
/***** Free memory used for user's data *****/
Usr_UsrDataDestructor (&UsrDat);
@ -2764,12 +2783,9 @@ void Usr_ListAttendanceStdsCrs (void)
/*****************************************************************************/
/********** Write list of those attendance events that have students *********/
/*****************************************************************************/
// If UsrDat == NULL ==> don't show comments
// If UsrDat != NULL ==> show comments
static void Att_ListAttEventsWithStds (struct UsrData *UsrDat)
static void Att_ListAttEventsWithStds (void)
{
extern const char *Txt_Comments;
extern const char *Txt_Events;
extern const char *Txt_Event;
extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
@ -2778,16 +2794,13 @@ static void Att_ListAttEventsWithStds (struct UsrData *UsrDat)
extern const char *Txt_Student_comment;
extern const char *Txt_Teachers_comment;
unsigned NumAttEvent;
bool Present;
char CommentStd[Cns_MAX_BYTES_TEXT+1];
char CommentTch[Cns_MAX_BYTES_TEXT+1];
/***** Header *****/
/***** Start frame *****/
if (Gbl.CurrentAct == ActSeeLstAttStd)
Lay_StartRoundFrameTable10 (NULL,2,UsrDat ? Txt_Comments :
Txt_Events);
Lay_StartRoundFrameTable10 (NULL,2,Txt_Events);
else
Lay_StartSquareFrameTable (NULL,NULL,NULL,2);
fprintf (Gbl.F.Out,"<tr>"
"<th colspan=\"2\" align=\"left\" class=\"TIT_TBL\">%s</th>"
"<th align=\"right\" class=\"TIT_TBL\">%s</th>"
@ -2819,61 +2832,156 @@ static void Att_ListAttEventsWithStds (struct UsrData *UsrDat)
Gbl.AttEvents.Lst[NumAttEvent].DateTimes[Att_START_TIME].Time.Minute,
Gbl.AttEvents.Lst[NumAttEvent].Title,
Gbl.AttEvents.Lst[NumAttEvent].NumStdsTotal);
/***** Write comments for this student *****/
if (UsrDat)
{
/* Get comments for this student */
Present = Att_CheckIfUsrIsPresentInAttEventAndGetComments (Gbl.AttEvents.Lst[NumAttEvent].AttCod,UsrDat->UsrCod,CommentStd,CommentTch);
/* Show comments */
fprintf (Gbl.F.Out,"<tr>"
"<td align=\"right\" class=\"DAT\"></td>"
"<td align=\"left\" class=\"DAT\">");
fprintf (Gbl.F.Out,"<img src=\"%s/%s16x16.gif\""
" alt=\"\" title=\"%s\" class=\"ICON16x16\" /> %s",
Gbl.Prefs.IconsURL,
Present ? "check" :
"check-empty",
Present ? Txt_Present :
Txt_Absent,
Present ? Txt_Present :
Txt_Absent);
if (CommentStd[0] ||
CommentTch[0])
{
fprintf (Gbl.F.Out,"<dl>");
if (CommentStd[0])
{
Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML,
CommentStd,Cns_MAX_BYTES_TEXT,false);
fprintf (Gbl.F.Out,"<dt>%s:</dt><dd>%s</dd>",
Txt_Student_comment,
CommentStd);
}
if (CommentTch[0])
{
Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML,
CommentTch,Cns_MAX_BYTES_TEXT,false);
fprintf (Gbl.F.Out,"<dt>%s:</dt><dd>%s</dd>",
Txt_Teachers_comment,
CommentTch);
}
fprintf (Gbl.F.Out,"</dl>");
}
fprintf (Gbl.F.Out,"</td>"
"<td align=\"right\" class=\"DAT\"></td>"
"</tr>");
}
}
/***** Footer *****/
/***** End frame *****/
if (Gbl.CurrentAct == ActSeeLstAttStd)
Lay_EndRoundFrameTable10 ();
else
Lay_EndSquareFrameTable ();
}
/*****************************************************************************/
/********** Write list of those attendance events that have students *********/
/*****************************************************************************/
// If UsrDat == NULL ==> don't show comments
// If UsrDat != NULL ==> show comments
static void Att_ListAttEventsForAStd (unsigned NumStd,struct UsrData *UsrDat)
{
extern const char *Txt_Present;
extern const char *Txt_Absent;
extern const char *Txt_Student_comment;
extern const char *Txt_Teachers_comment;
const char *BgColor;
char PhotoURL[PATH_MAX+1];
bool ShowPhoto;
unsigned NumAttEvent;
bool Present;
char CommentStd[Cns_MAX_BYTES_TEXT+1];
char CommentTch[Cns_MAX_BYTES_TEXT+1];
BgColor = Gbl.ColorRows[Gbl.RowEvenOdd];
/***** Write number of student in the list *****/
fprintf (Gbl.F.Out,"<tr>"
"<td align=\"right\" valign=\"middle\" bgcolor=\"%s\" class=\"%s\">%u:</td>",
BgColor,
UsrDat->Accepted ? "DAT_SMALL_N" :
"DAT_SMALL",
NumStd + 1);
/***** Show student's photo *****/
fprintf (Gbl.F.Out,"<td align=\"left\" valign=\"middle\" bgcolor=\"%s\" width=\"18\">",
BgColor);
ShowPhoto = Pho_ShowUsrPhotoIsAllowed (UsrDat,PhotoURL);
Pho_ShowUsrPhoto (UsrDat,
ShowPhoto ? PhotoURL :
NULL,
18,24,
Act_Actions[Gbl.CurrentAct].BrowserWindow == Act_MAIN_WINDOW);
fprintf (Gbl.F.Out,"</td>");
/***** Write user's ID ******/
fprintf (Gbl.F.Out,"<td align=\"left\" bgcolor=\"%s\">"
"<table>"
"<tr>"
"<td align=\"left\" valign=\"middle\" class=\"%s\">",
BgColor,
UsrDat->Accepted ? "DAT_SMALL_N" :
"DAT_SMALL");
ID_WriteUsrIDs (UsrDat,true);
fprintf (Gbl.F.Out,"</td>");
/***** Write student's name *****/
fprintf (Gbl.F.Out,"<td align=\"left\" valign=\"middle\" class=\"%s\">%s",
UsrDat->Accepted ? "DAT_SMALL_N" :
"DAT_SMALL",
UsrDat->Surname1);
if (UsrDat->Surname2[0])
fprintf (Gbl.F.Out," %s",UsrDat->Surname2);
fprintf (Gbl.F.Out,", %s</td>"
"</tr>"
"</table>"
"</td>"
"</tr>",
UsrDat->FirstName);
/***** List the events with students *****/
for (NumAttEvent = 0;
NumAttEvent < Gbl.AttEvents.Num;
NumAttEvent++)
if (Gbl.AttEvents.Lst[NumAttEvent].NumStdsFromList)
{
/***** Get data of the attendance event from database *****/
Att_GetDataOfAttEventByCodAndCheckCrs (&Gbl.AttEvents.Lst[NumAttEvent]);
Att_GetNumStdsTotalWhoAreInAttEvent (&Gbl.AttEvents.Lst[NumAttEvent]);
/***** Get comments for this student *****/
Present = Att_CheckIfUsrIsPresentInAttEventAndGetComments (Gbl.AttEvents.Lst[NumAttEvent].AttCod,UsrDat->UsrCod,CommentStd,CommentTch);
/***** Write a row for this event *****/
fprintf (Gbl.F.Out,"<tr>"
"<td bgcolor=\"%s\"></td>"
"<td align=\"right\" bgcolor=\"%s\" class=\"DAT\">%u:</td>"
"<td align=\"left\" bgcolor=\"%s\" class=\"DAT\">"
"<img src=\"%s/%s16x16.gif\""
" alt=\"\" title=\"%s\" class=\"ICON16x16\" />"
" %02u/%02u/%04u %02u:%02u h %s</td>"
"</tr>",
BgColor,
BgColor,
NumAttEvent + 1,
BgColor,
Gbl.Prefs.IconsURL,
Present ? "check" :
"check-empty",
Present ? Txt_Present :
Txt_Absent,
Gbl.AttEvents.Lst[NumAttEvent].DateTimes[Att_START_TIME].Date.Day,
Gbl.AttEvents.Lst[NumAttEvent].DateTimes[Att_START_TIME].Date.Month,
Gbl.AttEvents.Lst[NumAttEvent].DateTimes[Att_START_TIME].Date.Year,
Gbl.AttEvents.Lst[NumAttEvent].DateTimes[Att_START_TIME].Time.Hour,
Gbl.AttEvents.Lst[NumAttEvent].DateTimes[Att_START_TIME].Time.Minute,
Gbl.AttEvents.Lst[NumAttEvent].Title);
/***** Write comments for this student *****/
if (CommentStd[0] ||
CommentTch[0])
{
fprintf (Gbl.F.Out,"<tr>"
"<td bgcolor=\"%s\"></td>"
"<td bgcolor=\"%s\"></td>"
"<td align=\"left\" bgcolor=\"%s\" class=\"DAT\">"
"<dl>",
BgColor,
BgColor,
BgColor);
if (CommentStd[0])
{
Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML,
CommentStd,Cns_MAX_BYTES_TEXT,false);
fprintf (Gbl.F.Out,"<dt>%s:</dt><dd>%s</dd>",
Txt_Student_comment,
CommentStd);
}
if (CommentTch[0])
{
Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML,
CommentTch,Cns_MAX_BYTES_TEXT,false);
fprintf (Gbl.F.Out,"<dt>%s:</dt><dd>%s</dd>",
Txt_Teachers_comment,
CommentTch);
}
fprintf (Gbl.F.Out,"</dl>"
"</td>"
"</tr>");
}
}
Gbl.RowEvenOdd = 1 - Gbl.RowEvenOdd;
}
/*****************************************************************************/
/* Write table heading for listing of students in several attendance events **/
/*****************************************************************************/
@ -2885,10 +2993,9 @@ static void Att_WriteTableHeadSeveralAttEvents (void)
unsigned NumAttEvent;
fprintf (Gbl.F.Out,"<tr>"
"<th align=\"left\" class=\"TIT_TBL\"></th>");
if (Gbl.Usrs.Listing.WithPhotos)
fprintf (Gbl.F.Out,"<th align=\"left\" class=\"TIT_TBL\" width=\"18\"></th>");
fprintf (Gbl.F.Out,"<th align=\"left\" colspan=\"2\" class=\"TIT_TBL\">%s</th>",
"<th align=\"left\" colspan=\"%u\" class=\"TIT_TBL\">%s</th>",
Gbl.Usrs.Listing.WithPhotos ? 4 :
3,
Txt_ROLES_SINGULAR_Abc[Rol_ROLE_STUDENT][Usr_SEX_UNKNOWN]);
for (NumAttEvent = 0;

View File

@ -35,12 +35,13 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 14.31 (2014/12/04)"
#define Log_PLATFORM_VERSION "SWAD 14.31.1 (2014/12/05)"
// 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 | tail -1
/*
Version 14.31.1 :Dic 05, 2014 Comments are shown in list of attendances when several students are listed. (170450 lines)
Version 14.31 :Dic 04, 2014 Comments are shown in list of attendances when one unique student is listed. (170353 lines)
Version 14.30.2 :Dic 03, 2014 Changes in sign up.
Fixed bug when deleting user's IDs. (170252 lines)