mirror of https://github.com/acanas/swad-core.git
Version 15.25.2
This commit is contained in:
parent
dce34aaa2e
commit
201a2c327e
15
swad_RSS.c
15
swad_RSS.c
|
@ -155,7 +155,7 @@ static void RSS_WriteNotices (FILE *FileRSS,struct Course *Crs)
|
|||
char Content[Cns_MAX_BYTES_TEXT+1];
|
||||
|
||||
/***** Get active notices in course *****/
|
||||
sprintf (Query,"SELECT NotCod,UNIX_TIMESTAMP(CreatTime) AS T,DATE_FORMAT(CreatTime,'%%d/%%m/%%Y %%H:%%i'),UsrCod,Content"
|
||||
sprintf (Query,"SELECT NotCod,UNIX_TIMESTAMP(CreatTime) AS T,UsrCod,Content"
|
||||
" FROM notices WHERE CrsCod='%ld' AND Status='%u' ORDER BY T DESC",
|
||||
Crs->CrsCod,(unsigned) Not_ACTIVE_NOTICE);
|
||||
NumNotices = DB_QuerySELECT (Query,&mysql_res,"can not get notices from database");
|
||||
|
@ -182,14 +182,14 @@ static void RSS_WriteNotices (FILE *FileRSS,struct Course *Crs)
|
|||
sscanf (row[1],"%ld",&CreatTimeUTC);
|
||||
|
||||
/* Get author */
|
||||
UsrDat.UsrCod = Str_ConvertStrCodToLongCod (row[3]);
|
||||
UsrDat.UsrCod = Str_ConvertStrCodToLongCod (row[2]);
|
||||
Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat); // Get from the database the data of the autor
|
||||
|
||||
/***** Write item with notice *****/
|
||||
fprintf (FileRSS,"<item>\n");
|
||||
|
||||
/* Write title (first characters) of the notice */
|
||||
strncpy (Content,row[4],Cns_MAX_BYTES_TEXT);
|
||||
strncpy (Content,row[3],Cns_MAX_BYTES_TEXT);
|
||||
Content[Cns_MAX_BYTES_TEXT] = '\0';
|
||||
Str_LimitLengthHTMLStr (Content,40);
|
||||
fprintf (FileRSS,"<title>%s: ",Txt_Notice);
|
||||
|
@ -201,11 +201,11 @@ static void RSS_WriteNotices (FILE *FileRSS,struct Course *Crs)
|
|||
Cfg_HTTPS_URL_SWAD_CGI,Crs->CrsCod);
|
||||
|
||||
/* Write full content of the notice */
|
||||
strncpy (Content,row[4],Cns_MAX_BYTES_TEXT);
|
||||
strncpy (Content,row[3],Cns_MAX_BYTES_TEXT);
|
||||
Content[Cns_MAX_BYTES_TEXT] = '\0';
|
||||
Str_InsertLinkInURLs (Content,Cns_MAX_BYTES_TEXT,40);
|
||||
fprintf (FileRSS,"<description><![CDATA[<p><em>%s, %s %s %s:</em></p><p>%s</p>]]></description>\n",
|
||||
row[2],UsrDat.FirstName,UsrDat.Surname1,UsrDat.Surname2,Content);
|
||||
fprintf (FileRSS,"<description><![CDATA[<p><em>%s %s %s:</em></p><p>%s</p>]]></description>\n",
|
||||
UsrDat.FirstName,UsrDat.Surname1,UsrDat.Surname2,Content);
|
||||
|
||||
/* Write author */
|
||||
if (UsrDat.Email[0])
|
||||
|
@ -252,7 +252,8 @@ static void RSS_WriteExamAnnouncements (FILE *FileRSS,struct Course *Crs)
|
|||
if (Gbl.DB.DatabaseIsOpen)
|
||||
{
|
||||
/***** Get exam announcements (only future exams) in current course from database *****/
|
||||
sprintf (Query,"SELECT ExaCod,UNIX_TIMESTAMP(CallDate) AS T,DATE_FORMAT(ExamDate,'%%d/%%m/%%Y %%H:%%i')"
|
||||
sprintf (Query,"SELECT ExaCod,UNIX_TIMESTAMP(CallDate) AS T,"
|
||||
"DATE_FORMAT(ExamDate,'%%d/%%m/%%Y %%H:%%i')"
|
||||
" FROM exam_announcements"
|
||||
" WHERE CrsCod='%ld' AND ExamDate>=NOW() AND Status<>'%u' ORDER BY T",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,(unsigned) Exa_DELETED_EXAM_ANNOUNCEMENT);
|
||||
|
|
|
@ -108,11 +108,12 @@
|
|||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define Log_PLATFORM_VERSION "SWAD 15.25.1 (2015/10/26)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 15.25.2 (2015/10/26)"
|
||||
|
||||
// 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.25.2: Oct 26, 2015 Changes related to date-times. (186247 lines)
|
||||
Version 15.25.1: Oct 26, 2015 Warning about stats computed in server time instead of user's local time. (186263 lines)
|
||||
Version 15.25: Oct 26, 2015 Clicks in real time are displayed as time ago. (186211 lines)
|
||||
Version 15.24.2: Oct 26, 2015 Change in function that write clock. (186219 lines)
|
||||
|
|
|
@ -1977,8 +1977,7 @@ void Enr_GetNotifEnrollmentRequest (char *SummaryStr,char **ContentStr,
|
|||
SummaryStr[0] = '\0'; // Return nothing on error
|
||||
|
||||
/***** Get user and requested role from database *****/
|
||||
sprintf (Query,"SELECT UsrCod,Role,"
|
||||
"DATE_FORMAT(RequestTime,'%%Y%%m%%d%%H%%i%%S')"
|
||||
sprintf (Query,"SELECT UsrCod,Role"
|
||||
" FROM crs_usr_requests"
|
||||
" WHERE ReqCod='%ld'",
|
||||
ReqCod);
|
||||
|
@ -2006,14 +2005,10 @@ void Enr_GetNotifEnrollmentRequest (char *SummaryStr,char **ContentStr,
|
|||
Str_LimitLengthHTMLStr (SummaryStr,MaxChars);
|
||||
|
||||
if (GetContent)
|
||||
if ((*ContentStr = (char *) malloc (16+1)))
|
||||
/* Write date (row[2]) into content */
|
||||
sprintf (*ContentStr,"%c%c/%c%c/%c%c%c%c %c%c:%c%c",
|
||||
row[2][ 6],row[2][ 7],
|
||||
row[2][ 4],row[2][ 5],
|
||||
row[2][ 0],row[2][ 1],row[2][ 2],row[2][ 3],
|
||||
row[2][ 8],row[2][ 9],
|
||||
row[2][10],row[2][11]);
|
||||
if ((*ContentStr = (char *) malloc (256)))
|
||||
/* Write desired role into content */
|
||||
sprintf (*ContentStr,"%s", // TODO: Write more info in this content
|
||||
Txt_ROLES_SINGUL_Abc[DesiredRole][UsrDat.Sex]);
|
||||
|
||||
/* Free memory used for user's data */
|
||||
Usr_UsrDataDestructor (&UsrDat);
|
||||
|
|
|
@ -1365,8 +1365,7 @@ static void Ntf_SendPendingNotifByEMailToOneUsr (struct UsrData *ToUsrDat,unsign
|
|||
if (Mai_CheckIfMailDomainIsAllowedForNotifications (MailDomain))
|
||||
{
|
||||
/***** Get pending notifications of this user from database ******/
|
||||
sprintf (Query,"SELECT NotifyEvent,FromUsrCod,InsCod,CtrCod,DegCod,CrsCod,"
|
||||
"Cod,DATE_FORMAT(TimeNotif,'%%Y-%%m-%%d %%H:%%i:%%S')"
|
||||
sprintf (Query,"SELECT NotifyEvent,FromUsrCod,InsCod,CtrCod,DegCod,CrsCod,Cod"
|
||||
" FROM notif WHERE ToUsrCod='%ld'"
|
||||
" AND (Status & %u)<>0 AND (Status & %u)=0 AND (Status & %u)=0"
|
||||
" ORDER BY TimeNotif,NotifyEvent",
|
||||
|
@ -1431,9 +1430,6 @@ static void Ntf_SendPendingNotifByEMailToOneUsr (struct UsrData *ToUsrDat,unsign
|
|||
NotifyEvent == Ntf_EVENT_FORUM_REPLY)
|
||||
ForumType = For_GetForumTypeOfAPost (Cod);
|
||||
|
||||
/* Write date and time when the event happened (row[7], in YYYY-MM-DD HH:MM:SS format) */
|
||||
fprintf (Gbl.Msg.FileMail,"\n%s: ",row[7]);
|
||||
|
||||
/* Information about the type of this event */
|
||||
fprintf (Gbl.Msg.FileMail,Txt_NOTIFY_EVENTS_SINGULAR_NO_HTML[NotifyEvent][ToUsrDat->Prefs.Language],
|
||||
Cfg_PLATFORM_SHORT_NAME);
|
||||
|
|
32
swad_photo.c
32
swad_photo.c
|
@ -116,7 +116,7 @@ static void Pho_BuildQueryOfDegrees (char *Query);
|
|||
static void Pho_GetNumStdsInDegree (long DegCod,Usr_Sex_t Sex,int *NumStds,int *NumStdsWithPhoto);
|
||||
static void Pho_UpdateDegStats (long DegCod,Usr_Sex_t Sex,unsigned NumStds,unsigned NumStdsWithPhoto,long TimeToComputeAvgPhoto);
|
||||
static void Pho_ShowDegreeStat (int NumStds,int NumStdsWithPhoto);
|
||||
static void Pho_ShowDegreeAvgPhotoAndStat (struct Degree *Deg,Pho_AvgPhotoSeeOrPrint_t SeeOrPrint,Usr_Sex_t Sex,int NumStds,int NumStdsWithPhoto,struct Date *DateAvgPhoto);
|
||||
static void Pho_ShowDegreeAvgPhotoAndStat (struct Degree *Deg,Pho_AvgPhotoSeeOrPrint_t SeeOrPrint,Usr_Sex_t Sex,int NumStds,int NumStdsWithPhoto);
|
||||
static void Pho_ComputePhotoSize (int NumStds,int NumStdsWithPhoto,unsigned *PhotoWidth,unsigned *PhotoHeight);
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -1895,7 +1895,6 @@ static void Pho_ShowOrPrintClassPhotoDegrees (Pho_AvgPhotoSeeOrPrint_t SeeOrPrin
|
|||
unsigned NumDegsNotEmpty;
|
||||
int NumStds;
|
||||
int NumStdsWithPhoto;
|
||||
struct Date DateAvgPhoto;
|
||||
bool TRIsOpen = false;
|
||||
|
||||
/***** Get degrees from database *****/
|
||||
|
@ -1932,10 +1931,6 @@ static void Pho_ShowOrPrintClassPhotoDegrees (Pho_AvgPhotoSeeOrPrint_t SeeOrPrin
|
|||
|
||||
if (NumStds > 0)
|
||||
{
|
||||
/* Get year, month and day (row[1] holds the date in YYYYMMDD format) */
|
||||
if (!(Dat_GetDateFromYYYYMMDD (&DateAvgPhoto,row[1])))
|
||||
Lay_ShowErrorAndExit ("Wrong date.");
|
||||
|
||||
if ((NumDegsNotEmpty % Gbl.Usrs.ClassPhoto.Cols) == 0)
|
||||
{
|
||||
fprintf (Gbl.F.Out,"<tr>");
|
||||
|
@ -1944,7 +1939,7 @@ static void Pho_ShowOrPrintClassPhotoDegrees (Pho_AvgPhotoSeeOrPrint_t SeeOrPrin
|
|||
|
||||
/***** Show average photo of students belonging to this degree *****/
|
||||
fprintf (Gbl.F.Out,"<td class=\"CLASSPHOTO CENTER_MIDDLE\">");
|
||||
Pho_ShowDegreeAvgPhotoAndStat (&Deg,SeeOrPrint,Usr_SEX_ALL,NumStds,NumStdsWithPhoto,&DateAvgPhoto);
|
||||
Pho_ShowDegreeAvgPhotoAndStat (&Deg,SeeOrPrint,Usr_SEX_ALL,NumStds,NumStdsWithPhoto);
|
||||
fprintf (Gbl.F.Out,"</td>");
|
||||
|
||||
if ((++NumDegsNotEmpty % Gbl.Usrs.ClassPhoto.Cols) == 0)
|
||||
|
@ -1989,7 +1984,6 @@ static void Pho_ShowOrPrintListDegrees (Pho_AvgPhotoSeeOrPrint_t SeeOrPrint)
|
|||
unsigned NumDegsNotEmpty;
|
||||
int NumStds;
|
||||
int NumStdsWithPhoto;
|
||||
struct Date DateAvgPhoto;
|
||||
struct Degree Deg;
|
||||
Usr_Sex_t Sex;
|
||||
|
||||
|
@ -2041,10 +2035,6 @@ static void Pho_ShowOrPrintListDegrees (Pho_AvgPhotoSeeOrPrint_t SeeOrPrint)
|
|||
if ((Deg.DegCod = Str_ConvertStrCodToLongCod (row[0])) < 0)
|
||||
Lay_ShowErrorAndExit ("Wrong code of degree.");
|
||||
|
||||
/* Get year, month and day (row[1] holds the date in YYYYMMDD format) */
|
||||
if (!(Dat_GetDateFromYYYYMMDD (&DateAvgPhoto,row[1])))
|
||||
Lay_ShowErrorAndExit ("Wrong date.");
|
||||
|
||||
/* Get data of degree */
|
||||
Deg_GetDataOfDegreeByCod (&Deg);
|
||||
|
||||
|
@ -2078,7 +2068,7 @@ static void Pho_ShowOrPrintListDegrees (Pho_AvgPhotoSeeOrPrint_t SeeOrPrint)
|
|||
fprintf (Gbl.F.Out,"<td class=\"CENTER_MIDDLE COLOR%u\">",
|
||||
Gbl.RowEvenOdd);
|
||||
if (Gbl.Usrs.Listing.WithPhotos)
|
||||
Pho_ShowDegreeAvgPhotoAndStat (&Deg,SeeOrPrint,Sex,NumStds,NumStdsWithPhoto,&DateAvgPhoto);
|
||||
Pho_ShowDegreeAvgPhotoAndStat (&Deg,SeeOrPrint,Sex,NumStds,NumStdsWithPhoto);
|
||||
else
|
||||
Pho_ShowDegreeStat (NumStds,NumStdsWithPhoto);
|
||||
fprintf (Gbl.F.Out,"</td>");
|
||||
|
@ -2107,7 +2097,7 @@ static void Pho_BuildQueryOfDegrees (char *Query)
|
|||
switch (Gbl.Stat.DegPhotos.HowOrderDegrees)
|
||||
{
|
||||
case Pho_NUMBER_OF_STUDENTS:
|
||||
sprintf (Query,"SELECT degrees.DegCod,DATE_FORMAT(sta_degrees.TimeAvgPhoto,'%%Y%%m%%d')"
|
||||
sprintf (Query,"SELECT degrees.DegCod"
|
||||
" FROM degrees,sta_degrees"
|
||||
" WHERE sta_degrees.Sex='all'"
|
||||
" AND sta_degrees.NumStds>'0'"
|
||||
|
@ -2115,7 +2105,7 @@ static void Pho_BuildQueryOfDegrees (char *Query)
|
|||
" ORDER BY sta_degrees.NumStds DESC,sta_degrees.NumStdsWithPhoto DESC,degrees.ShortName");
|
||||
break;
|
||||
case Pho_NUMBER_OF_PHOTOS:
|
||||
sprintf (Query,"SELECT degrees.DegCod,DATE_FORMAT(sta_degrees.TimeAvgPhoto,'%%Y%%m%%d')"
|
||||
sprintf (Query,"SELECT degrees.DegCod"
|
||||
" FROM degrees,sta_degrees"
|
||||
" WHERE sta_degrees.Sex='all'"
|
||||
" AND sta_degrees.NumStds>'0'"
|
||||
|
@ -2123,7 +2113,7 @@ static void Pho_BuildQueryOfDegrees (char *Query)
|
|||
" ORDER BY sta_degrees.NumStdsWithPhoto DESC,sta_degrees.NumStds DESC,degrees.ShortName");
|
||||
break;
|
||||
case Pho_PERCENT:
|
||||
sprintf (Query,"SELECT degrees.DegCod,DATE_FORMAT(sta_degrees.TimeAvgPhoto,'%%Y%%m%%d')"
|
||||
sprintf (Query,"SELECT degrees.DegCod"
|
||||
" FROM degrees,sta_degrees"
|
||||
" WHERE sta_degrees.Sex='all'"
|
||||
" AND sta_degrees.NumStds>'0'"
|
||||
|
@ -2131,7 +2121,7 @@ static void Pho_BuildQueryOfDegrees (char *Query)
|
|||
" ORDER BY sta_degrees.NumStdsWithPhoto/sta_degrees.NumStds DESC,degrees.ShortName");
|
||||
break;
|
||||
case Pho_DEGREE_NAME:
|
||||
sprintf (Query,"SELECT degrees.DegCod,DATE_FORMAT(sta_degrees.TimeAvgPhoto,'%%Y%%m%%d')"
|
||||
sprintf (Query,"SELECT degrees.DegCod"
|
||||
" FROM degrees,sta_degrees"
|
||||
" WHERE sta_degrees.Sex='all'"
|
||||
" AND sta_degrees.NumStds>'0'"
|
||||
|
@ -2209,7 +2199,7 @@ static void Pho_ShowDegreeStat (int NumStds,int NumStdsWithPhoto)
|
|||
/******************* Show the average photo of a degree **********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Pho_ShowDegreeAvgPhotoAndStat (struct Degree *Deg,Pho_AvgPhotoSeeOrPrint_t SeeOrPrint,Usr_Sex_t Sex,int NumStds,int NumStdsWithPhoto,struct Date *DateAvgPhoto)
|
||||
static void Pho_ShowDegreeAvgPhotoAndStat (struct Degree *Deg,Pho_AvgPhotoSeeOrPrint_t SeeOrPrint,Usr_Sex_t Sex,int NumStds,int NumStdsWithPhoto)
|
||||
{
|
||||
extern const char *Usr_StringsSexDB[Usr_NUM_SEXS];
|
||||
extern const char *Txt_students_ABBREVIATION;
|
||||
|
@ -2256,14 +2246,12 @@ static void Pho_ShowDegreeAvgPhotoAndStat (struct Degree *Deg,Pho_AvgPhotoSeeOrP
|
|||
{
|
||||
sprintf (PhotoCaption,"%s<br />"
|
||||
"%d %s (%s)<br />"
|
||||
"%d %s (%d%%)<br />"
|
||||
"%02u/%02u/%04u",
|
||||
"%d %s (%d%%)",
|
||||
Deg->ShortName,
|
||||
NumStds,Txt_students_ABBREVIATION,Txt_SEX_PLURAL_abc[Sex],
|
||||
NumStdsWithPhoto,Txt_photos,
|
||||
NumStds > 0 ? (int) (((NumStdsWithPhoto * 100.0) / NumStds) + 0.5) :
|
||||
0,
|
||||
DateAvgPhoto->Day,DateAvgPhoto->Month,DateAvgPhoto->Year);
|
||||
0);
|
||||
fprintf (Gbl.F.Out," onmouseover=\"zoom(this,'%s','%s')\" onmouseout=\"noZoom(this);\"",
|
||||
PhotoURL,PhotoCaption);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue