mirror of https://github.com/acanas/swad-core.git
Version19.96
This commit is contained in:
parent
8e22bf07f2
commit
774c3fb6d0
|
@ -60,7 +60,7 @@ static void RSS_WriteExamAnnouncements (FILE *FileRSS,struct Course *Crs);
|
|||
void RSS_UpdateRSSFileForACrs (struct Course *Crs)
|
||||
{
|
||||
char PathRelPublRSSDir[PATH_MAX + 1];
|
||||
char PathRelPublRSSFile[PATH_MAX + 1];
|
||||
char PathRelPublRSSFile[PATH_MAX + 1 + NAME_MAX + 1];
|
||||
FILE *FileRSS;
|
||||
char RSSLink[Cns_MAX_BYTES_WWW + 1];
|
||||
struct tm *tm;
|
||||
|
|
|
@ -75,7 +75,7 @@ extern struct Globals Gbl;
|
|||
|
||||
static void Acc_ShowFormCheckIfIHaveAccount (const char *Title);
|
||||
static void Acc_WriteRowEmptyAccount (unsigned NumUsr,const char *ID,struct UsrData *UsrDat);
|
||||
static void Acc_ShowFormRequestNewAccountWithParams (const char *NewNicknameWithoutArroba,
|
||||
static void Acc_ShowFormRequestNewAccountWithParams (const char NewNicknameWithoutArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1],
|
||||
const char *NewEmail);
|
||||
static bool Acc_GetParamsNewAccount (char NewNicknameWithoutArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1],
|
||||
char *NewEmail,
|
||||
|
@ -343,7 +343,7 @@ void Acc_ShowFormCreateMyAccount (void)
|
|||
/************ Show form to create a new account using parameters *************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Acc_ShowFormRequestNewAccountWithParams (const char *NewNicknameWithoutArroba,
|
||||
static void Acc_ShowFormRequestNewAccountWithParams (const char NewNicknameWithoutArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1],
|
||||
const char *NewEmail)
|
||||
{
|
||||
extern const char *Hlp_PROFILE_SignUp;
|
||||
|
@ -632,7 +632,7 @@ static bool Acc_GetParamsNewAccount (char NewNicknameWithoutArroba[Nck_MAX_BYTES
|
|||
extern const char *Txt_The_nickname_entered_X_is_not_valid_;
|
||||
extern const char *Txt_The_email_address_X_had_been_registered_by_another_user;
|
||||
extern const char *Txt_The_email_address_entered_X_is_not_valid;
|
||||
char NewNicknameWithArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1];
|
||||
char NewNicknameWithArroba[1 + Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1];
|
||||
char NewPlainPassword[Pwd_MAX_BYTES_PLAIN_PASSWORD + 1];
|
||||
bool Error = false;
|
||||
|
||||
|
|
|
@ -492,14 +492,16 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
|
|||
En OpenSWAD:
|
||||
ps2pdf source.ps destination.pdf
|
||||
*/
|
||||
#define Log_PLATFORM_VERSION "SWAD 19.95.2 (2019-12-18)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 19.96 (2019-12-19)"
|
||||
#define CSS_FILE "swad19.95.css"
|
||||
#define JS_FILE "swad19.91.1.js"
|
||||
/*
|
||||
// TODO: Hacer un nuevo rol en los TFG: tutor externo (profesor de áreas no vinculadas con el centro, profesionales de empresas, etc.)
|
||||
// TODO: Impedir la creación y edición de proyectos si no son editables.
|
||||
// TODO: No se puede entrar con DNI '1' suponiendo que no tenga password ¿por qué?
|
||||
|
||||
Version 19.95.2: Dec 18, 2019 Buf fixes in swad.sql. (? lines)
|
||||
Version 19.96: Dec 19, 2019 Bug fixes and code refactoring. (249423 lines)
|
||||
Version 19.95.2: Dec 18, 2019 Bug fixes. (? lines)
|
||||
1 change necessary in database:
|
||||
DROP TABLE IF EXISTS log;
|
||||
|
||||
|
|
|
@ -1553,7 +1553,7 @@ void Exa_GetSummaryAndContentExamAnnouncement (char SummaryStr[Ntf_MAX_BYTES_SUM
|
|||
long ExaCod,bool GetContent)
|
||||
{
|
||||
extern const char *Txt_hours_ABBREVIATION;
|
||||
char CrsNameAndDate[Hie_MAX_BYTES_FULL_NAME + (2 + Cns_MAX_BYTES_DATE + 6) + 1];
|
||||
char CrsNameAndDate[Hie_MAX_BYTES_FULL_NAME + (2 + Cns_MAX_BYTES_DATE + 7) + 1];
|
||||
char StrExamDate[Cns_MAX_BYTES_DATE + 1];
|
||||
|
||||
/***** Initializations *****/
|
||||
|
|
|
@ -5078,7 +5078,7 @@ void Brw_CreateDirDownloadTmp (void)
|
|||
static unsigned NumDir = 0; // When this function is called several times in the same execution of the program, each time a new directory is created
|
||||
// This happens when the trees of assignments and works of several users are being listed
|
||||
char PathUniqueDirL[PATH_MAX + 1];
|
||||
char PathUniqueDirR[PATH_MAX + 1];
|
||||
char PathUniqueDirR[PATH_MAX + 1 + NAME_MAX + 1];
|
||||
|
||||
/* Example: /var/www/html/swad/tmp/SS/ujCNWsy4ZOdmgMKYBe0sKPAJu6szaZOQlIlJs_QIY */
|
||||
|
||||
|
@ -8689,8 +8689,8 @@ void Brw_RenFolderFileBrowser (void)
|
|||
extern const char *Txt_You_can_not_rename_this_folder;
|
||||
char OldPathInTree[PATH_MAX + 1 + NAME_MAX + 1];
|
||||
char NewPathInTree[PATH_MAX + 1 + NAME_MAX + 1];
|
||||
char OldPath[PATH_MAX + 1 + PATH_MAX + 1];
|
||||
char NewPath[PATH_MAX + 1 + PATH_MAX + 1];
|
||||
char OldPath[PATH_MAX + 1 + PATH_MAX + 1 + NAME_MAX + 1];
|
||||
char NewPath[PATH_MAX + 1 + PATH_MAX + 1 + NAME_MAX + 1];
|
||||
|
||||
/***** Get parameters related to file browser *****/
|
||||
Brw_GetParAndInitFileBrowser ();
|
||||
|
@ -8852,7 +8852,7 @@ static bool Brw_RcvFileInFileBrw (Brw_UploadType_t UploadType)
|
|||
char SrcFileName[PATH_MAX + 1];
|
||||
char PathUntilFileName[PATH_MAX + 1];
|
||||
char Path[PATH_MAX + 1 + PATH_MAX + 1];
|
||||
char PathTmp[PATH_MAX + 1];
|
||||
char PathTmp[PATH_MAX + 1 + PATH_MAX + 4 + 1];
|
||||
char PathCompleteInTreeIncludingFile[PATH_MAX + 1 + NAME_MAX + 1];
|
||||
char MIMEType[Brw_MAX_BYTES_MIME_TYPE + 1];
|
||||
bool AdminMarks;
|
||||
|
@ -9044,7 +9044,7 @@ void Brw_RecLinkFileBrowser (void)
|
|||
char FileName[NAME_MAX + 1];
|
||||
char Path[PATH_MAX + 1 + PATH_MAX + 1];
|
||||
FILE *FileURL;
|
||||
char PathCompleteInTreeIncludingFile[PATH_MAX + 1 + NAME_MAX + 1];
|
||||
char PathCompleteInTreeIncludingFile[PATH_MAX + 1 + NAME_MAX + 4 + 1];
|
||||
long FilCod = -1L; // Code of new file in database
|
||||
char FileNameToShow[NAME_MAX + 1];
|
||||
struct FileMetadata FileMetadata;
|
||||
|
|
10
swad_info.c
10
swad_info.c
|
@ -724,7 +724,7 @@ void Inf_RemoveUsrFromCrsInfoRead (long UsrCod,long CrsCod)
|
|||
static bool Inf_CheckPage (long CrsCod,Inf_InfoType_t InfoType)
|
||||
{
|
||||
char PathRelDirHTML[PATH_MAX + 1];
|
||||
char PathRelFileHTML[PATH_MAX + 1];
|
||||
char PathRelFileHTML[PATH_MAX + 1 + 10 + 1];
|
||||
|
||||
// TODO !!!!!!!!!!!! If the page is hosted in server ==> it should be created a temporary public directory
|
||||
// and host the page in a private directory !!!!!!!!!!!!!!!!!
|
||||
|
@ -758,7 +758,7 @@ static bool Inf_CheckPage (long CrsCod,Inf_InfoType_t InfoType)
|
|||
static bool Inf_CheckAndShowPage (void)
|
||||
{
|
||||
char PathRelDirHTML[PATH_MAX + 1];
|
||||
char PathRelFileHTML[PATH_MAX + 1];
|
||||
char PathRelFileHTML[PATH_MAX + 1 + 10 + 1];
|
||||
char URL[PATH_MAX + 1];
|
||||
|
||||
// TODO !!!!!!!!!!!! If the page is hosted in server ==> it should be created a temporary public directory
|
||||
|
@ -821,7 +821,7 @@ static void Inf_BuildPathPage (long CrsCod,Inf_InfoType_t InfoType,char PathDir[
|
|||
int Inf_WritePageIntoHTMLBuffer (char **HTMLBuffer)
|
||||
{
|
||||
char PathRelDirHTML[PATH_MAX + 1];
|
||||
char PathRelFileHTML[PATH_MAX + 1];
|
||||
char PathRelFileHTML[PATH_MAX + 1 + 10 + 1];
|
||||
FILE *FileHTML;
|
||||
bool FileExists = false;
|
||||
size_t Length;
|
||||
|
@ -2249,10 +2249,10 @@ void Inf_ReceivePagInfo (void)
|
|||
struct Param *Param;
|
||||
char SourceFileName[PATH_MAX + 1];
|
||||
char PathRelDirHTML[PATH_MAX + 1];
|
||||
char PathRelFileHTML[PATH_MAX + 1];
|
||||
char PathRelFileHTML[PATH_MAX + 1 + 10 + 1];
|
||||
char PathRelFileZIP[PATH_MAX + 1 + NAME_MAX + 1];
|
||||
char MIMEType[Brw_MAX_BYTES_MIME_TYPE + 1];
|
||||
char StrUnzip[128 + PATH_MAX * 2 + 1];
|
||||
char StrUnzip[128 + PATH_MAX + 1 + NAME_MAX + 1 + PATH_MAX + 1];
|
||||
bool WrongType = false;
|
||||
bool FileIsOK = false;
|
||||
|
||||
|
|
|
@ -706,7 +706,7 @@ void Mrk_GetNotifMyMarks (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
|
|||
char FullPathInTreeFromDBMarksTable[PATH_MAX + 1];
|
||||
char PathUntilFileName[PATH_MAX + 1];
|
||||
char FileName[NAME_MAX + 1];
|
||||
char PathMarks[PATH_MAX + 1];
|
||||
char PathMarks[PATH_MAX + 1 + Cns_MAX_DECIMAL_DIGITS_LONG + 1 + 3 + 1 + Cns_MAX_DECIMAL_DIGITS_LONG + 1 + PATH_MAX + 1];
|
||||
char FileNameUsrMarks[PATH_MAX + 1];
|
||||
FILE *FileUsrMarks;
|
||||
size_t SizeOfMyMarks;
|
||||
|
|
78
swad_media.c
78
swad_media.c
|
@ -1521,16 +1521,16 @@ static void Med_ShowJPG (struct Media *Media,
|
|||
{
|
||||
extern const char *Txt_File_not_found;
|
||||
char FileNameMedia[NAME_MAX + 1];
|
||||
char FullPathMediaPriv[PATH_MAX + 1];
|
||||
char *FullPathMediaPriv;
|
||||
char *URL;
|
||||
|
||||
/***** Build private path to JPG *****/
|
||||
snprintf (FileNameMedia,sizeof (FileNameMedia),
|
||||
"%s.%s",
|
||||
Media->Name,Med_Extensions[Med_JPG]);
|
||||
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv),
|
||||
"%s/%s",
|
||||
PathMedPriv,FileNameMedia);
|
||||
if (asprintf (&FullPathMediaPriv,"%s/%s",
|
||||
PathMedPriv,FileNameMedia) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
|
||||
/***** Check if private media file exists *****/
|
||||
if (Fil_CheckIfPathExists (FullPathMediaPriv))
|
||||
|
@ -1551,6 +1551,8 @@ static void Med_ShowJPG (struct Media *Media,
|
|||
}
|
||||
else
|
||||
HTM_Txt (Txt_File_not_found);
|
||||
|
||||
free (FullPathMediaPriv);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -1563,7 +1565,8 @@ static void Med_ShowGIF (struct Media *Media,
|
|||
{
|
||||
extern const char *Txt_File_not_found;
|
||||
char FileNameMedia[NAME_MAX + 1];
|
||||
char FullPathMediaPriv[PATH_MAX + 1];
|
||||
char *FullPathGIFPriv;
|
||||
char *FullPathPNGPriv;
|
||||
char *URL;
|
||||
char *URL_GIF;
|
||||
char *URL_PNG;
|
||||
|
@ -1572,16 +1575,16 @@ static void Med_ShowGIF (struct Media *Media,
|
|||
snprintf (FileNameMedia,sizeof (FileNameMedia),
|
||||
"%s.%s",
|
||||
Media->Name,Med_Extensions[Med_GIF]);
|
||||
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv), // The animated GIF image
|
||||
"%s/%s",
|
||||
PathMedPriv,FileNameMedia);
|
||||
if (asprintf (&FullPathGIFPriv,"%s/%s", // The animated GIF image
|
||||
PathMedPriv,FileNameMedia) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
|
||||
/***** Check if private media file exists *****/
|
||||
if (Fil_CheckIfPathExists (FullPathMediaPriv)) // The animated GIF image
|
||||
if (Fil_CheckIfPathExists (FullPathGIFPriv)) // The animated GIF image
|
||||
{
|
||||
/***** Create symbolic link from temporary public directory to private file
|
||||
in order to gain access to it for showing/downloading *****/
|
||||
Brw_CreateTmpPublicLinkToPrivateFile (FullPathMediaPriv,FileNameMedia);
|
||||
Brw_CreateTmpPublicLinkToPrivateFile (FullPathGIFPriv,FileNameMedia);
|
||||
|
||||
/***** Create URL pointing to symbolic link *****/
|
||||
if (asprintf (&URL,"%s/%s/%s",
|
||||
|
@ -1596,18 +1599,18 @@ static void Med_ShowGIF (struct Media *Media,
|
|||
snprintf (FileNameMedia,sizeof (FileNameMedia),
|
||||
"%s.png",
|
||||
Media->Name);
|
||||
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv),
|
||||
"%s/%s",
|
||||
PathMedPriv,FileNameMedia);
|
||||
if (asprintf (&FullPathPNGPriv,"%s/%s",
|
||||
PathMedPriv,FileNameMedia) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
if (asprintf (&URL_PNG,"%s/%s",URL,FileNameMedia) < 0) // The static PNG image
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
|
||||
/***** Check if private media file exists *****/
|
||||
if (Fil_CheckIfPathExists (FullPathMediaPriv)) // The static PNG image
|
||||
if (Fil_CheckIfPathExists (FullPathPNGPriv)) // The static PNG image
|
||||
{
|
||||
/***** Create symbolic link from temporary public directory to private file
|
||||
in order to gain access to it for showing/downloading *****/
|
||||
Brw_CreateTmpPublicLinkToPrivateFile (FullPathMediaPriv,FileNameMedia);
|
||||
Brw_CreateTmpPublicLinkToPrivateFile (FullPathPNGPriv,FileNameMedia);
|
||||
|
||||
/***** Show static PNG and animated GIF *****/
|
||||
HTM_DIV_Begin ("class=\"MED_PLAY\""
|
||||
|
@ -1630,6 +1633,8 @@ static void Med_ShowGIF (struct Media *Media,
|
|||
else
|
||||
HTM_Txt (Txt_File_not_found);
|
||||
|
||||
free (FullPathPNGPriv);
|
||||
|
||||
/***** Free URLs *****/
|
||||
free (URL_PNG);
|
||||
free (URL_GIF);
|
||||
|
@ -1637,6 +1642,8 @@ static void Med_ShowGIF (struct Media *Media,
|
|||
}
|
||||
else
|
||||
HTM_Txt (Txt_File_not_found);
|
||||
|
||||
free (FullPathGIFPriv);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -1649,16 +1656,16 @@ static void Med_ShowVideo (struct Media *Media,
|
|||
{
|
||||
extern const char *Txt_File_not_found;
|
||||
char FileNameMediaPriv[NAME_MAX + 1];
|
||||
char FullPathMediaPriv[PATH_MAX + 1];
|
||||
char *FullPathMediaPriv;
|
||||
char URL_Video[PATH_MAX + 1];
|
||||
|
||||
/***** Build private path to video *****/
|
||||
snprintf (FileNameMediaPriv,sizeof (FileNameMediaPriv),
|
||||
"%s.%s",
|
||||
Media->Name,Med_Extensions[Media->Type]);
|
||||
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv),
|
||||
"%s/%s",
|
||||
PathMedPriv,FileNameMediaPriv);
|
||||
if (asprintf (&FullPathMediaPriv,"%s/%s",
|
||||
PathMedPriv,FileNameMediaPriv) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
|
||||
/***** Check if private media file exists *****/
|
||||
if (Fil_CheckIfPathExists (FullPathMediaPriv))
|
||||
|
@ -1689,6 +1696,8 @@ static void Med_ShowVideo (struct Media *Media,
|
|||
}
|
||||
else
|
||||
HTM_Txt (Txt_File_not_found);
|
||||
|
||||
free (FullPathMediaPriv);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -1824,7 +1833,7 @@ void Med_RemoveMediaFromAllRows (unsigned NumMedia,MYSQL_RES *mysql_res)
|
|||
void Med_RemoveMedia (long MedCod)
|
||||
{
|
||||
char PathMedPriv[PATH_MAX + 1];
|
||||
char FullPathMediaPriv[PATH_MAX + 1];
|
||||
char *FullPathMediaPriv;
|
||||
struct Media Media;
|
||||
|
||||
/***** Trivial case *****/
|
||||
|
@ -1860,34 +1869,37 @@ void Med_RemoveMedia (long MedCod)
|
|||
{
|
||||
case Med_JPG:
|
||||
/***** Remove private JPG file *****/
|
||||
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv),
|
||||
"%s/%s.%s",
|
||||
PathMedPriv,Media.Name,Med_Extensions[Med_JPG]);
|
||||
if (asprintf (&FullPathMediaPriv,"%s/%s.%s",
|
||||
PathMedPriv,Media.Name,Med_Extensions[Med_JPG]) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
unlink (FullPathMediaPriv);
|
||||
|
||||
free (FullPathMediaPriv);
|
||||
break;
|
||||
case Med_GIF:
|
||||
/***** Remove private GIF file *****/
|
||||
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv),
|
||||
"%s/%s.%s",
|
||||
PathMedPriv,Media.Name,Med_Extensions[Med_GIF]);
|
||||
if (asprintf (&FullPathMediaPriv,"%s/%s.%s",
|
||||
PathMedPriv,Media.Name,Med_Extensions[Med_GIF]) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
unlink (FullPathMediaPriv);
|
||||
free (FullPathMediaPriv);
|
||||
|
||||
/***** Remove private PNG file *****/
|
||||
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv),
|
||||
"%s/%s.png",
|
||||
PathMedPriv,Media.Name);
|
||||
if (asprintf (&FullPathMediaPriv,"%s/%s.png",
|
||||
PathMedPriv,Media.Name) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
unlink (FullPathMediaPriv);
|
||||
free (FullPathMediaPriv);
|
||||
|
||||
break;
|
||||
case Med_MP4:
|
||||
case Med_WEBM:
|
||||
case Med_OGG:
|
||||
/***** Remove private video file *****/
|
||||
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv),
|
||||
"%s/%s.%s",
|
||||
PathMedPriv,Media.Name,Med_Extensions[Media.Type]);
|
||||
if (asprintf (&FullPathMediaPriv,"%s/%s.%s",
|
||||
PathMedPriv,Media.Name,Med_Extensions[Media.Type]) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
unlink (FullPathMediaPriv);
|
||||
free (FullPathMediaPriv);
|
||||
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -120,7 +120,7 @@ struct Media
|
|||
};
|
||||
|
||||
/***** Parameters used in a form to upload an image/video *****/
|
||||
#define Med_MAX_BYTES_PARAM_UPLOAD_MEDIA (16 - 1)
|
||||
#define Med_MAX_BYTES_PARAM_UPLOAD_MEDIA (32 - 1)
|
||||
struct ParamUploadMedia
|
||||
{
|
||||
char Action [Med_MAX_BYTES_PARAM_UPLOAD_MEDIA + 1];
|
||||
|
|
|
@ -1592,42 +1592,54 @@ static bool Msg_CheckIfReceivedMsgIsDeletedForAllItsRecipients (long MsgCod)
|
|||
|
||||
static unsigned Msg_GetNumUnreadMsgs (long FilterCrsCod,const char *FilterFromToSubquery)
|
||||
{
|
||||
char SubQuery[Msg_MAX_BYTES_MESSAGES_QUERY + 1];
|
||||
char *SubQuery;
|
||||
unsigned NumMsgs;
|
||||
|
||||
/***** Get number of unread messages from database *****/
|
||||
if (FilterCrsCod >= 0) // If origin course selected
|
||||
{
|
||||
if (FilterFromToSubquery[0])
|
||||
sprintf (SubQuery,"SELECT msg_rcv.MsgCod FROM msg_rcv,msg_snt,usr_data"
|
||||
" WHERE msg_rcv.UsrCod=%ld AND msg_rcv.Open='N'"
|
||||
" AND msg_rcv.MsgCod=msg_snt.MsgCod"
|
||||
" AND msg_snt.CrsCod=%ld"
|
||||
" AND msg_snt.UsrCod=usr_data.UsrCod%s",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||
FilterCrsCod,
|
||||
FilterFromToSubquery);
|
||||
{
|
||||
if (asprintf (&SubQuery,"SELECT msg_rcv.MsgCod FROM msg_rcv,msg_snt,usr_data"
|
||||
" WHERE msg_rcv.UsrCod=%ld AND msg_rcv.Open='N'"
|
||||
" AND msg_rcv.MsgCod=msg_snt.MsgCod"
|
||||
" AND msg_snt.CrsCod=%ld"
|
||||
" AND msg_snt.UsrCod=usr_data.UsrCod%s",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||
FilterCrsCod,
|
||||
FilterFromToSubquery) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
}
|
||||
else
|
||||
sprintf (SubQuery,"SELECT msg_rcv.MsgCod FROM msg_rcv,msg_snt"
|
||||
" WHERE msg_rcv.UsrCod=%ld AND msg_rcv.Open='N'"
|
||||
" AND msg_rcv.MsgCod=msg_snt.MsgCod"
|
||||
" AND msg_snt.CrsCod=%ld",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||
FilterCrsCod);
|
||||
{
|
||||
if (asprintf (&SubQuery,"SELECT msg_rcv.MsgCod FROM msg_rcv,msg_snt"
|
||||
" WHERE msg_rcv.UsrCod=%ld AND msg_rcv.Open='N'"
|
||||
" AND msg_rcv.MsgCod=msg_snt.MsgCod"
|
||||
" AND msg_snt.CrsCod=%ld",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||
FilterCrsCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
}
|
||||
}
|
||||
else // If no origin course selected
|
||||
{
|
||||
if (FilterFromToSubquery[0])
|
||||
sprintf (SubQuery,"SELECT msg_rcv.MsgCod FROM msg_rcv,msg_snt,usr_data"
|
||||
" WHERE msg_rcv.UsrCod=%ld AND msg_rcv.Open='N'"
|
||||
" AND msg_rcv.MsgCod=msg_snt.MsgCod"
|
||||
" AND msg_snt.UsrCod=usr_data.UsrCod%s",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||
FilterFromToSubquery);
|
||||
{
|
||||
if (asprintf (&SubQuery,"SELECT msg_rcv.MsgCod FROM msg_rcv,msg_snt,usr_data"
|
||||
" WHERE msg_rcv.UsrCod=%ld AND msg_rcv.Open='N'"
|
||||
" AND msg_rcv.MsgCod=msg_snt.MsgCod"
|
||||
" AND msg_snt.UsrCod=usr_data.UsrCod%s",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||
FilterFromToSubquery) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
}
|
||||
else
|
||||
sprintf (SubQuery,"SELECT MsgCod FROM msg_rcv"
|
||||
" WHERE UsrCod=%ld AND Open='N'",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
{
|
||||
if (asprintf (&SubQuery,"SELECT MsgCod FROM msg_rcv"
|
||||
" WHERE UsrCod=%ld AND Open='N'",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
}
|
||||
}
|
||||
|
||||
if (Gbl.Msg.FilterContent[0])
|
||||
|
@ -1644,6 +1656,8 @@ static unsigned Msg_GetNumUnreadMsgs (long FilterCrsCod,const char *FilterFromTo
|
|||
"SELECT COUNT(*) FROM (%s) AS T",
|
||||
SubQuery);
|
||||
|
||||
free (SubQuery);
|
||||
|
||||
return NumMsgs;
|
||||
}
|
||||
|
||||
|
|
|
@ -1587,7 +1587,7 @@ static void Pho_ComputeAveragePhoto (long DegCod,Usr_Sex_t Sex,Rol_Role_t Role,
|
|||
char PathRelAvgPhoto[PATH_MAX + 1];
|
||||
char FileNamePhotoNames[PATH_MAX + 1];
|
||||
FILE *FilePhotoNames = NULL; // Initialized to avoid warning
|
||||
char StrCallToProgram[256]; // Call to photo processing program
|
||||
char StrCallToProgram[3 * (PATH_MAX + 1)]; // Call to photo processing program
|
||||
int ReturnCode;
|
||||
/* To compute execution time of this function */
|
||||
struct timeval tvStartComputingStat;
|
||||
|
|
|
@ -66,10 +66,8 @@
|
|||
|
||||
struct Rep_CurrentTimeUTC
|
||||
{
|
||||
char StrDate[10 + 1]; // Example: 2016-10-02
|
||||
// 1234567890
|
||||
char StrTime[8 + 1]; // Example: 19:03:49
|
||||
// 12345678
|
||||
char StrDate[3 * (Cns_MAX_DECIMAL_DIGITS_INT + 1)]; // Example: 2016-10-02
|
||||
char StrTime[3 * (Cns_MAX_DECIMAL_DIGITS_INT + 1)]; // Example: 19:03:49
|
||||
unsigned Date; // Example: 20161002
|
||||
unsigned Time; // Example: 190349
|
||||
};
|
||||
|
@ -374,8 +372,8 @@ static void Rep_GetCurrentDateTimeUTC (struct Rep_Report *Report)
|
|||
static void Rep_CreateNewReportFile (struct Rep_Report *Report)
|
||||
{
|
||||
char PathUniqueDirL[PATH_MAX + 1];
|
||||
char PathUniqueDirR[PATH_MAX + 1];
|
||||
char PathFileReport[PATH_MAX + 1];
|
||||
char PathUniqueDirR[PATH_MAX + 1 + Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64 + 1];
|
||||
char PathFileReport[PATH_MAX + 1 + Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64 + 1 + NAME_MAX + 1];
|
||||
char Permalink[128 +
|
||||
Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64 +
|
||||
NAME_MAX];
|
||||
|
|
|
@ -9193,7 +9193,7 @@ void Usr_PutSelectorNumColsClassPhoto (void)
|
|||
/********** Build the relative path of a user from his user's code ***********/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Usr_ConstructPathUsr (long UsrCod,char PathUsr[PATH_MAX + 1])
|
||||
void Usr_ConstructPathUsr (long UsrCod,char PathUsr[PATH_MAX + 1 + Cns_MAX_DECIMAL_DIGITS_LONG + 1])
|
||||
{
|
||||
char PathAboveUsr[PATH_MAX + 1];
|
||||
|
||||
|
@ -9207,7 +9207,7 @@ void Usr_ConstructPathUsr (long UsrCod,char PathUsr[PATH_MAX + 1])
|
|||
Fil_CreateDirIfNotExists (PathAboveUsr);
|
||||
|
||||
/***** Path for user *****/
|
||||
snprintf (PathUsr,PATH_MAX + 1,
|
||||
snprintf (PathUsr,PATH_MAX + 1 + Cns_MAX_DECIMAL_DIGITS_LONG + 1,
|
||||
"%s/%ld",
|
||||
PathAboveUsr,UsrCod);
|
||||
}
|
||||
|
|
|
@ -504,7 +504,7 @@ void Usr_SeeStdClassPhotoPrn (void);
|
|||
void Usr_SeeTchClassPhotoPrn (void);
|
||||
void Usr_PutSelectorNumColsClassPhoto (void);
|
||||
|
||||
void Usr_ConstructPathUsr (long UsrCod,char PathUsr[PATH_MAX + 1]);
|
||||
void Usr_ConstructPathUsr (long UsrCod,char PathUsr[PATH_MAX + 1 + Cns_MAX_DECIMAL_DIGITS_LONG + 1]);
|
||||
bool Usr_ChkIfUsrCodExists (long UsrCod);
|
||||
|
||||
void Usr_ShowWarningNoUsersFound (Rol_Role_t Role);
|
||||
|
|
|
@ -256,7 +256,7 @@ static void ZIP_CreateDirCompressionUsr (struct UsrData *UsrDat)
|
|||
char FullNameAndUsrID[NAME_MAX + 1];
|
||||
char PathFolderUsrInsideCrs[128 + PATH_MAX + NAME_MAX];
|
||||
char LinkTmpUsr[PATH_MAX + 1];
|
||||
char Link[PATH_MAX + 1];
|
||||
char Link[PATH_MAX + 1 + Cns_MAX_DECIMAL_DIGITS_UINT + 1];
|
||||
unsigned NumTry;
|
||||
bool Success;
|
||||
|
||||
|
|
Loading…
Reference in New Issue