mirror of https://github.com/acanas/swad-core.git
Version 15.111
This commit is contained in:
parent
7859e172e3
commit
f1fdffd9cd
|
@ -377,9 +377,9 @@ var objXMLHttpReqLog = false;
|
|||
function refreshLastClicks() {
|
||||
objXMLHttpReqLog = AJAXCreateObject();
|
||||
if (objXMLHttpReqLog) {
|
||||
var RefreshParams = RefreshParamNxtActLog + '&' +
|
||||
RefreshParamIdSes + '&' +
|
||||
RefreshParamCrsCod;
|
||||
var RefreshParams = RefreshParamNxtActLog + '&' +
|
||||
RefreshParamIdSes + '&' +
|
||||
RefreshParamCrsCod;
|
||||
|
||||
objXMLHttpReqLog.onreadystatechange = readLastClicksData; // onreadystatechange must be lowercase
|
||||
objXMLHttpReqLog.open('POST',ActionAJAX,true);
|
||||
|
@ -393,13 +393,13 @@ var objXMLHttpReqSoc = false;
|
|||
function refreshNewTimeline() {
|
||||
objXMLHttpReqSoc = AJAXCreateObject();
|
||||
if (objXMLHttpReqSoc) {
|
||||
var RefreshParams = RefreshParamNxtActNewPub + '&' +
|
||||
RefreshParamIdSes;
|
||||
var RefreshParams = RefreshParamNxtActNewPub + '&' +
|
||||
RefreshParamIdSes;
|
||||
|
||||
objXMLHttpReqSoc.onreadystatechange = readNewTimelineData; // onreadystatechange must be lowercase
|
||||
objXMLHttpReqSoc.open('POST',ActionAJAX,true);
|
||||
objXMLHttpReqSoc.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
||||
objXMLHttpReqSoc.send(RefreshParams);
|
||||
objXMLHttpReqSoc.onreadystatechange = readNewTimelineData; // onreadystatechange must be lowercase
|
||||
objXMLHttpReqSoc.open('POST',ActionAJAX,true);
|
||||
objXMLHttpReqSoc.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
||||
objXMLHttpReqSoc.send(RefreshParams);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -408,13 +408,15 @@ var objXMLHttpReqSoc = false;
|
|||
function refreshOldTimeline() {
|
||||
objXMLHttpReqSoc = AJAXCreateObject();
|
||||
if (objXMLHttpReqSoc) {
|
||||
var RefreshParams = RefreshParamNxtActOldPub + '&' +
|
||||
RefreshParamIdSes;
|
||||
var RefreshParams = RefreshParamNxtActOldPub + '&' + RefreshParamIdSes;
|
||||
if (RefreshParamUsr)
|
||||
if (RefreshParamUsr.length)
|
||||
RefreshParams += '&' + RefreshParamUsr;
|
||||
|
||||
objXMLHttpReqSoc.onreadystatechange = readOldTimelineData; // onreadystatechange must be lowercase
|
||||
objXMLHttpReqSoc.open('POST',ActionAJAX,true);
|
||||
objXMLHttpReqSoc.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
||||
objXMLHttpReqSoc.send(RefreshParams);
|
||||
objXMLHttpReqSoc.onreadystatechange = readOldTimelineData; // onreadystatechange must be lowercase
|
||||
objXMLHttpReqSoc.open('POST',ActionAJAX,true);
|
||||
objXMLHttpReqSoc.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
||||
objXMLHttpReqSoc.send(RefreshParams);
|
||||
}
|
||||
}
|
||||
|
|
@ -83,8 +83,9 @@ extern struct Globals Gbl;
|
|||
3. ActMnu Show menu of a tab
|
||||
4. ActRefCon Refresh number of notifications and connected users via AJAX
|
||||
5. ActRefLstClk Refresh last clicks in log via AJAX
|
||||
New!!!!!!!!. ActRefNewSocPub Refresh recent social timeline via AJAX
|
||||
New!!!!!!!!. ActRefNewSocPub View old social timeline via AJAX
|
||||
New!!!!!!!!. ActRefNewSocPubGbl Refresh recent social timeline via AJAX
|
||||
New!!!!!!!!. ActRefOldSocPubUsr View old social timeline of a user via AJAX
|
||||
New!!!!!!!!. ActRefOldSocPubGbl View old social timeline with users I follow via AJAX
|
||||
6. ActWebSvc Call plugin function
|
||||
System:
|
||||
7. ActSysReqSch Request search in system tab
|
||||
|
@ -1340,8 +1341,9 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
|
|||
/* ActMnu */{ 2,-1,TabUnk,ActMnu ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,NULL ,NULL},
|
||||
/* ActRefCon */{ 845,-1,TabUnk,ActRefCon ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Lay_RefreshNotifsAndConnected ,NULL},
|
||||
/* ActRefLstClk */{ 994,-1,TabUnk,ActRefLstClk ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Lay_RefreshLastClicks ,NULL},
|
||||
/* ActRefNewSocPub */{1509,-1,TabUnk,ActRefNewSocPub ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Lay_RefreshNewTimeline ,NULL},
|
||||
/* ActRefOldSocPub */{1510,-1,TabUnk,ActRefNewSocPub ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Lay_RefreshOldTimeline ,NULL},
|
||||
/* ActRefNewSocPubGbl*/{1509,-1,TabUnk,ActRefNewSocPubGbl ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Soc_RefreshNewTimelineGbl ,NULL},
|
||||
/* ActRefOldSocPubUsr*/{1511,-1,TabUnk,ActRefOldSocPubUsr ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Soc_RefreshOldTimelineUsr ,NULL},
|
||||
/* ActRefOldSocPubGbl*/{1510,-1,TabUnk,ActRefOldSocPubGbl ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Soc_RefreshOldTimelineGbl ,NULL},
|
||||
/* ActWebSvc */{ 892,-1,TabUnk,ActWebSvc ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Plg_WebService ,NULL},
|
||||
|
||||
// TabSys ******************************************************************
|
||||
|
@ -2349,7 +2351,7 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
|
|||
/* ActReqRemSocComGbl*/{1506,-1,TabSoc,ActReqPubPrf ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Soc_RequestRemSocialComUsr ,NULL},
|
||||
/* ActRemSocComGbl */{1508,-1,TabSoc,ActReqPubPrf ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Soc_RemoveSocialComUsr ,NULL},
|
||||
|
||||
/* ActSeePubPrf */{1402,-1,TabSoc,ActReqPubPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Prf_GetUsrCodAndShowUserProfile,NULL},
|
||||
/* ActSeePubPrf */{1402,-1,TabSoc,ActReqPubPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Prf_GetUsrDatAndShowUserProfile,NULL},
|
||||
/* ActCal1stClkTim */{1405,-1,TabSoc,ActReqPubPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Prf_CalculateFirstClickTime ,NULL},
|
||||
/* ActCalNumClk */{1406,-1,TabSoc,ActReqPubPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Prf_CalculateNumClicks ,NULL},
|
||||
/* ActCalNumFilVie */{1409,-1,TabSoc,ActReqPubPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Prf_CalculateNumFileViews ,NULL},
|
||||
|
@ -4204,8 +4206,9 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
|
|||
ActReqRemSocComUsr, // #1506
|
||||
ActRemSocComGbl, // #1507
|
||||
ActRemSocComUsr, // #1508
|
||||
ActRefNewSocPub, // #1509
|
||||
ActRefOldSocPub, // #1510
|
||||
ActRefNewSocPubGbl, // #1509
|
||||
ActRefOldSocPubGbl, // #1510
|
||||
ActRefOldSocPubUsr, // #1511
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -4504,10 +4507,11 @@ void Act_AdjustCurrentAction (void)
|
|||
return;
|
||||
|
||||
/***** Don't adjust anything when refreshing users or on a web service *****/
|
||||
if (Gbl.CurrentAct == ActRefCon ||
|
||||
Gbl.CurrentAct == ActRefLstClk ||
|
||||
Gbl.CurrentAct == ActRefNewSocPub ||
|
||||
Gbl.CurrentAct == ActRefOldSocPub ||
|
||||
if (Gbl.CurrentAct == ActRefCon ||
|
||||
Gbl.CurrentAct == ActRefLstClk ||
|
||||
Gbl.CurrentAct == ActRefNewSocPubGbl ||
|
||||
Gbl.CurrentAct == ActRefOldSocPubUsr ||
|
||||
Gbl.CurrentAct == ActRefOldSocPubGbl ||
|
||||
Gbl.WebService.IsWebService)
|
||||
return;
|
||||
|
||||
|
|
|
@ -71,24 +71,26 @@ typedef enum
|
|||
|
||||
typedef int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action
|
||||
|
||||
#define Act_NUM_ACTIONS (9+52+15+90+72+67+205+183+143+163+36+27+82)
|
||||
#define Act_NUM_ACTIONS (1+9+52+15+90+72+67+205+183+143+163+36+27+82)
|
||||
|
||||
#define Act_MAX_ACTION_COD 1510
|
||||
#define Act_MAX_ACTION_COD 1511
|
||||
|
||||
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 20
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************* Not asociates with tabs ***************************/
|
||||
/*****************************************************************************/
|
||||
#define ActAll 0
|
||||
#define ActUnk 1
|
||||
#define ActHom 2
|
||||
#define ActMnu 3
|
||||
#define ActRefCon 4
|
||||
#define ActRefLstClk 5
|
||||
#define ActRefNewSocPub 6
|
||||
#define ActRefOldSocPub 7
|
||||
#define ActWebSvc 8
|
||||
#define ActAll 0
|
||||
|
||||
#define ActUnk 1
|
||||
#define ActHom 2
|
||||
#define ActMnu 3
|
||||
#define ActRefCon 4
|
||||
#define ActRefLstClk 5
|
||||
#define ActRefNewSocPubGbl 6
|
||||
#define ActRefOldSocPubUsr 7
|
||||
#define ActRefOldSocPubGbl 8
|
||||
#define ActWebSvc 9
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************** System tab *********************************/
|
||||
|
|
|
@ -126,14 +126,15 @@
|
|||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define Log_PLATFORM_VERSION "SWAD 15.110.18 (2016-01-13)"
|
||||
#define CSS_FILE "swad15.110.13.css"
|
||||
#define JS_FILE "swad15.110.13.js"
|
||||
#define Log_PLATFORM_VERSION "SWAD 15.111 (2016-01-14)"
|
||||
#define CSS_FILE "swad15.111.css"
|
||||
#define JS_FILE "swad15.111.js"
|
||||
|
||||
// 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.110.19:Jan 13, 2016 Fixed bug in user's timeline. (? lines)
|
||||
Version 15.111: Jan 14, 2016 Fixed bug in user's timeline.
|
||||
Code refactoring related with social timeline. (192622 lines)
|
||||
Version 15.110.18:Jan 13, 2016 Optimization in query to get initial recent timeline. (192564 lines)
|
||||
Version 15.110.17:Jan 13, 2016 Reviewed code related to Soc_MAX_RECENT_PUBS_TO_GET. (192568 lines)
|
||||
Version 15.110.16:Jan 13, 2016 Form to go to public profile of author of comment in timeline. (192563 lines)
|
||||
|
|
|
@ -438,10 +438,11 @@ void Gbl_InitializeGlobals (void)
|
|||
|
||||
void Gbl_Cleanup (void)
|
||||
{
|
||||
if (Gbl.CurrentAct != ActRefCon &&
|
||||
Gbl.CurrentAct != ActRefLstClk &&
|
||||
Gbl.CurrentAct != ActRefNewSocPub &&
|
||||
Gbl.CurrentAct != ActRefOldSocPub &&
|
||||
if (Gbl.CurrentAct != ActRefCon &&
|
||||
Gbl.CurrentAct != ActRefLstClk &&
|
||||
Gbl.CurrentAct != ActRefNewSocPubGbl &&
|
||||
Gbl.CurrentAct != ActRefOldSocPubUsr &&
|
||||
Gbl.CurrentAct != ActRefOldSocPubGbl &&
|
||||
!Gbl.WebService.IsWebService &&
|
||||
Act_Actions[Gbl.CurrentAct].BrowserWindow == Act_MAIN_WINDOW &&
|
||||
!Gbl.HiddenParamsInsertedIntoDB)
|
||||
|
|
|
@ -123,10 +123,11 @@ void Lay_WriteStartOfPage (void)
|
|||
Con_ComputeConnectedUsrsBelongingToCurrentCrs ();
|
||||
|
||||
/***** Send head width the file type for the HTTP protocol *****/
|
||||
if (Gbl.CurrentAct == ActRefCon ||
|
||||
Gbl.CurrentAct == ActRefLstClk ||
|
||||
Gbl.CurrentAct == ActRefNewSocPub ||
|
||||
Gbl.CurrentAct == ActRefOldSocPub)
|
||||
if (Gbl.CurrentAct == ActRefCon ||
|
||||
Gbl.CurrentAct == ActRefLstClk ||
|
||||
Gbl.CurrentAct == ActRefNewSocPubGbl ||
|
||||
Gbl.CurrentAct == ActRefOldSocPubUsr ||
|
||||
Gbl.CurrentAct == ActRefOldSocPubGbl)
|
||||
// Don't generate a full HTML page, only the content of a DIV or similar
|
||||
{
|
||||
fprintf (Gbl.F.Out,"Content-Type: text/html; charset=windows-1252\r\n\r\n");
|
||||
|
@ -624,18 +625,41 @@ static void Lay_WriteScriptInit (void)
|
|||
|
||||
static void Lay_WriteScriptParamsAJAX (void)
|
||||
{
|
||||
fprintf (Gbl.F.Out,"<script type=\"text/javascript\">\n"
|
||||
"var RefreshParamNxtActCon = \"act=%ld\";\n"
|
||||
"var RefreshParamNxtActLog = \"act=%ld\";\n"
|
||||
"var RefreshParamNxtActNewPub = \"act=%ld\";\n"
|
||||
"var RefreshParamNxtActOldPub = \"act=%ld\";\n"
|
||||
"var RefreshParamIdSes = \"ses=%s\";\n"
|
||||
/***** Start script *****/
|
||||
fprintf (Gbl.F.Out,"<script type=\"text/javascript\">\n");
|
||||
|
||||
/***** Parameter to refresh connected users *****/
|
||||
fprintf (Gbl.F.Out,"var RefreshParamNxtActCon = \"act=%ld\";\n",
|
||||
Act_Actions[ActRefCon ].ActCod);
|
||||
|
||||
/***** Parameter to refresh clicks in realtime *****/
|
||||
fprintf (Gbl.F.Out,"var RefreshParamNxtActLog = \"act=%ld\";\n",
|
||||
Act_Actions[ActRefLstClk].ActCod);
|
||||
|
||||
/***** Parameters related with refreshing of social timeline *****/
|
||||
if (Gbl.CurrentAct == ActSeePubPrf) // TODO: Add other actions where social timeline is shown
|
||||
{
|
||||
if (Gbl.Usrs.Other.UsrDat.UsrCod <= 0)
|
||||
Usr_GetParamOtherUsrCodEncrypted ();
|
||||
if (!Gbl.Usrs.Other.UsrDat.Nickname[0])
|
||||
Nck_GetNicknameFromUsrCod (Gbl.Usrs.Other.UsrDat.UsrCod,
|
||||
Gbl.Usrs.Other.UsrDat.Nickname);
|
||||
fprintf (Gbl.F.Out,"var RefreshParamNxtActOldPub = \"act=%ld\";\n"
|
||||
"var RefreshParamUsr = \"usr=@%s\";\n",
|
||||
Act_Actions[ActRefOldSocPubUsr].ActCod,
|
||||
Gbl.Usrs.Other.UsrDat.Nickname);
|
||||
}
|
||||
else if (Gbl.CurrentAct == ActSeeSocTmlGbl) // TODO: Add other actions where social timeline is shown
|
||||
fprintf (Gbl.F.Out,"var RefreshParamNxtActNewPub = \"act=%ld\";\n"
|
||||
"var RefreshParamNxtActOldPub = \"act=%ld\";\n"
|
||||
"var RefreshParamUsr = \"\";\n", // No user specified
|
||||
Act_Actions[ActRefNewSocPubGbl].ActCod,
|
||||
Act_Actions[ActRefOldSocPubGbl].ActCod);
|
||||
|
||||
/***** Parameters with code of session and current course code *****/
|
||||
fprintf (Gbl.F.Out,"var RefreshParamIdSes = \"ses=%s\";\n"
|
||||
"var RefreshParamCrsCod = \"crs=%ld\";\n"
|
||||
"</script>\n",
|
||||
Act_Actions[ActRefCon ].ActCod,
|
||||
Act_Actions[ActRefLstClk ].ActCod,
|
||||
Act_Actions[ActRefNewSocPub].ActCod,
|
||||
Act_Actions[ActRefOldSocPub].ActCod,
|
||||
Gbl.Session.Id,
|
||||
Gbl.CurrentCrs.Crs.CrsCod);
|
||||
}
|
||||
|
@ -1298,10 +1322,11 @@ void Lay_ShowErrorAndExit (const char *Message)
|
|||
|
||||
/***** Page is generated (except </body> and </html>).
|
||||
Compute time to generate page *****/
|
||||
if (Gbl.CurrentAct != ActRefCon && // Refreshing connected users
|
||||
Gbl.CurrentAct != ActRefLstClk && // Refreshing last clics
|
||||
Gbl.CurrentAct != ActRefNewSocPub && // Refreshing new social publishings in timeline
|
||||
Gbl.CurrentAct != ActRefOldSocPub) // Refreshing old social publishings in timeline
|
||||
if (Gbl.CurrentAct != ActRefCon && // Refreshing connected users
|
||||
Gbl.CurrentAct != ActRefLstClk && // Refreshing last clics
|
||||
Gbl.CurrentAct != ActRefNewSocPubGbl && // Refreshing new social publishings in timeline
|
||||
Gbl.CurrentAct != ActRefOldSocPubUsr && // Refreshing old social publishings in timeline
|
||||
Gbl.CurrentAct != ActRefOldSocPubGbl) // Refreshing old social publishings in timeline
|
||||
Sta_ComputeTimeToGeneratePage ();
|
||||
|
||||
if (Gbl.WebService.IsWebService) // Serving a plugin request
|
||||
|
@ -1319,10 +1344,11 @@ void Lay_ShowErrorAndExit (const char *Message)
|
|||
Fil_FastCopyOfOpenFiles (Gbl.F.Out,stdout);
|
||||
Fil_CloseAndRemoveFileForHTMLOutput ();
|
||||
|
||||
if (Gbl.CurrentAct != ActRefCon && // Refreshing connected users
|
||||
Gbl.CurrentAct != ActRefLstClk && // Refreshing last clicks
|
||||
Gbl.CurrentAct != ActRefNewSocPub && // Refreshing new social publishings in timeline
|
||||
Gbl.CurrentAct != ActRefOldSocPub) // Refreshing old social publishings in timeline
|
||||
if (Gbl.CurrentAct != ActRefCon && // Refreshing connected users
|
||||
Gbl.CurrentAct != ActRefLstClk && // Refreshing last clicks
|
||||
Gbl.CurrentAct != ActRefNewSocPubGbl && // Refreshing new social publishings in timeline
|
||||
Gbl.CurrentAct != ActRefOldSocPubUsr && // Refreshing old social publishings in timeline
|
||||
Gbl.CurrentAct != ActRefOldSocPubGbl) // Refreshing old social publishings in timeline
|
||||
{
|
||||
/***** Compute time to send page *****/
|
||||
Sta_ComputeTimeToSendPage ();
|
||||
|
@ -1496,33 +1522,6 @@ void Lay_RefreshLastClicks (void)
|
|||
Gbl.Layout.DivsEndWritten = Gbl.Layout.HTMLEndWritten = true;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********** Refresh new publishings in social timeline via AJAX **************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Lay_RefreshNewTimeline (void)
|
||||
{
|
||||
// Send, before the HTML, the refresh time and the last publishing got from database
|
||||
fprintf (Gbl.F.Out,"%lu|",
|
||||
Cfg_TIME_TO_REFRESH_SOCIAL_TIMELINE);
|
||||
Soc_GetAndShowNewTimelineGbl ();
|
||||
|
||||
/***** All the output is made, so don't write anymore *****/
|
||||
Gbl.Layout.DivsEndWritten = Gbl.Layout.HTMLEndWritten = true;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************ View new publishings in social timeline via AJAX ***************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Lay_RefreshOldTimeline (void)
|
||||
{
|
||||
Soc_GetAndShowOldTimelineGbl ();
|
||||
|
||||
/***** All the output is made, so don't write anymore *****/
|
||||
Gbl.Layout.DivsEndWritten = Gbl.Layout.HTMLEndWritten = true;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************ Write the end of the page **************************/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -111,8 +111,6 @@ void Lay_ShowAlert (Lay_AlertType_t MsgType,const char *Message);
|
|||
|
||||
void Lay_RefreshNotifsAndConnected (void);
|
||||
void Lay_RefreshLastClicks (void);
|
||||
void Lay_RefreshNewTimeline (void);
|
||||
void Lay_RefreshOldTimeline (void);
|
||||
|
||||
void Lay_WriteHeaderClassPhoto (unsigned NumColumns,bool PrintView,bool DrawingClassPhoto,
|
||||
long InsCod,long DegCod,long CrsCod);
|
||||
|
|
|
@ -116,11 +116,6 @@ int main (int argc, char *argv[])
|
|||
|
||||
if (!Gbl.WebService.IsWebService)
|
||||
{
|
||||
/***** Check if clicks are made from the same IP too quickly *****/
|
||||
// Disable this call. Don't check if too fast...
|
||||
// ...because uploading files using Dropzone.js will trigger error
|
||||
// Sta_ExitIfTooFast ();
|
||||
|
||||
/***** Create file for HTML output *****/
|
||||
Fil_CreateFileForHTMLOutput ();
|
||||
|
||||
|
|
|
@ -123,7 +123,7 @@ void Par_GetMainParameters (void)
|
|||
extern const char *Ico_IconSetId[Ico_NUM_ICON_SETS];
|
||||
char UnsignedStr[10+1];
|
||||
unsigned UnsignedNum;
|
||||
char Nickname[Nck_MAX_BYTES_NICKNAME_WITH_ARROBA + 1];
|
||||
char Nickname[Nck_MAX_BYTES_NICKNAME_WITH_ARROBA+1];
|
||||
long OtherUsrCod;
|
||||
char LongStr[1+10+1];
|
||||
char YearStr[2+1];
|
||||
|
@ -158,7 +158,22 @@ void Par_GetMainParameters (void)
|
|||
}
|
||||
// SWAD is not called from external site
|
||||
|
||||
/***** Set dfault action *****/
|
||||
Gbl.CurrentAct = ActUnk;
|
||||
|
||||
/***** Get another user's nickname, if exists
|
||||
(this nickname is used to get another user's info,
|
||||
not to get the logged user) *****/
|
||||
if (Par_GetParToText ("usr",Nickname,Nck_MAX_BYTES_NICKNAME_WITH_ARROBA))
|
||||
if (Nickname[0])
|
||||
if ((OtherUsrCod = Nck_GetUsrCodFromNickname (Nickname)) > 0)
|
||||
{
|
||||
Gbl.Usrs.Other.UsrDat.UsrCod = OtherUsrCod; // Used to go to public profile
|
||||
// and to refresh old publishings in user's timeline
|
||||
Gbl.CurrentAct = ActSeePubPrf; // Set default action if no other is specified
|
||||
}
|
||||
|
||||
/***** Get action to perform *****/
|
||||
Par_GetParToText ("act",UnsignedStr,10);
|
||||
if (UnsignedStr[0])
|
||||
{
|
||||
|
@ -313,16 +328,6 @@ void Par_GetMainParameters (void)
|
|||
Gbl.CurrentCrs.Crs.CrsCod = Str_ConvertStrCodToLongCod (LongStr); // Overwrite CrsCod from session
|
||||
}
|
||||
|
||||
/***** Get user's nickname, if exists
|
||||
(this nickname is used to go to a user's profile, not to get the logged user) *****/
|
||||
if (Par_GetParToText ("usr",Nickname,Nck_MAX_BYTES_NICKNAME_WITH_ARROBA))
|
||||
if (Nickname[0])
|
||||
if ((OtherUsrCod = Nck_GetUsrCodFromNickname (Nickname)) > 0)
|
||||
{
|
||||
Gbl.Usrs.Other.UsrDat.UsrCod = OtherUsrCod;
|
||||
Gbl.CurrentAct = ActSeePubPrf;
|
||||
}
|
||||
|
||||
/***** Get tab to activate *****/
|
||||
Gbl.CurrentTab = TabUnk;
|
||||
if (Gbl.CurrentAct == ActMnu)
|
||||
|
|
|
@ -80,7 +80,6 @@ extern struct Globals Gbl;
|
|||
|
||||
static void Prf_RequestUserProfileWithDefaultNickname (const char *DefaultNickname);
|
||||
|
||||
static void Prf_GetUsrDatAndShowUserProfile (void);
|
||||
static void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat);
|
||||
static void Prf_PutLinkToUpdateAction (Act_Action_t Action,const char *EncryptedUsrCod);
|
||||
|
||||
|
@ -168,55 +167,42 @@ static void Prf_RequestUserProfileWithDefaultNickname (const char *DefaultNickna
|
|||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/**************** Get user's code and show a user's profile ******************/
|
||||
/******************** Get user and show a user's profile *********************/
|
||||
/*****************************************************************************/
|
||||
// Gbl.Usrs.Other.UsrDat.UsrCod may be already taken. If not ==> try to get it
|
||||
|
||||
void Prf_GetUsrCodAndShowUserProfile (void)
|
||||
{
|
||||
/***** Try to get user *****/
|
||||
// User's code may be already taken from nickname in Par_GetMainParameters ()
|
||||
if (Gbl.Usrs.Other.UsrDat.UsrCod <= 0)
|
||||
// If user is not set, try to get it from user code
|
||||
Usr_GetParamOtherUsrCodEncrypted ();
|
||||
|
||||
/***** Show user's profile *****/
|
||||
Prf_GetUsrDatAndShowUserProfile ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*************************** Show a user's profile ***************************/
|
||||
/*****************************************************************************/
|
||||
// If error, Nickname is used to fill the form to request another nickname
|
||||
|
||||
static void Prf_GetUsrDatAndShowUserProfile (void)
|
||||
void Prf_GetUsrDatAndShowUserProfile (void)
|
||||
{
|
||||
extern const char *Txt_User_not_found_or_you_do_not_have_permission_;
|
||||
bool Error;
|
||||
|
||||
/***** Check if user exists and get his data *****/
|
||||
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat)) // Existing user
|
||||
/***** Show public profile *****/
|
||||
/***** Get user's data *****/
|
||||
if (Gbl.Usrs.Other.UsrDat.UsrCod <= 0)
|
||||
Usr_GetParamOtherUsrCodEncrypted ();
|
||||
Error = !Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat);
|
||||
|
||||
/***** Show profile and timeline *****/
|
||||
if (!Error)
|
||||
/* Show profile */
|
||||
Error = !Prf_ShowUserProfile ();
|
||||
else
|
||||
Error = true;
|
||||
|
||||
if (Error)
|
||||
{
|
||||
/***** Show error message *****/
|
||||
/* Show error message */
|
||||
Lay_ShowAlert (Lay_WARNING,Txt_User_not_found_or_you_do_not_have_permission_);
|
||||
|
||||
/***** Request nickname again *****/
|
||||
/* Request nickname again */
|
||||
Prf_RequestUserProfileWithDefaultNickname ("");
|
||||
}
|
||||
else if (Gbl.Usrs.Me.Logged) // Timeline visible only by logged users
|
||||
{
|
||||
/***** Start section *****/
|
||||
/* Start section */
|
||||
fprintf (Gbl.F.Out,"<section id=\"timeline\">");
|
||||
|
||||
/***** Show social activity (timeline) of this user *****/
|
||||
/* Show public social activity (timeline) of this user */
|
||||
Soc_ShowTimelineUsr ();
|
||||
|
||||
/***** End section *****/
|
||||
/* End section */
|
||||
fprintf (Gbl.F.Out,"</section>");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -41,7 +41,8 @@
|
|||
|
||||
char *Prf_GetURLPublicProfile (char *URL,const char *NicknameWithoutArroba);
|
||||
void Prf_RequestUserProfile (void);
|
||||
void Prf_GetUsrCodAndShowUserProfile (void);
|
||||
void Prf_GetUsrDatAndShowUserProfile (void);
|
||||
|
||||
bool Prf_ShowUserProfile (void);
|
||||
void Prf_ChangeProfileVisibility (void);
|
||||
void Prf_CalculateFirstClickTime (void);
|
||||
|
|
143
swad_social.c
143
swad_social.c
|
@ -54,17 +54,23 @@
|
|||
#define Soc_MAX_BYTES_SUMMARY 100
|
||||
|
||||
// Number of recent publishings got and shown the first time, before refreshing
|
||||
#define Soc_MAX_RECENT_PUBS_TO_SHOW 20 // Publishings to show
|
||||
#define Soc_MAX_RECENT_PUBS_TO_SHOW 10 // Publishings to show
|
||||
/* Try to get one more publishing that the number of publishings to show
|
||||
For example, if the number of publishings to show is 10, try to get 11
|
||||
If the number of publishings shown is lesser than the number of publishing got ==> show link to get old publishings */
|
||||
#define Soc_MAX_RECENT_PUBS_TO_GET (Soc_MAX_RECENT_PUBS_TO_SHOW+1) // Publishings to get
|
||||
|
||||
// Number of old publishings got and shown when I want to see old publishings
|
||||
#define Soc_MAX_OLD_PUBS_TO_GET_AND_SHOW 20 // If you change this number, set also this constant to the new value in JavaScript
|
||||
#define Soc_MAX_OLD_PUBS_TO_GET_AND_SHOW 10 // If you change this number, set also this constant to the new value in JavaScript
|
||||
|
||||
#define Soc_MAX_LENGTH_ID (256+Cry_LENGTH_ENCRYPTED_STR_SHA256_BASE64+10+1)
|
||||
|
||||
typedef enum
|
||||
{
|
||||
Soc_TIMELINE_USR, // Show the timeline of a user
|
||||
Soc_TIMELINE_GBL, // Show the timeline of the users follwed by me
|
||||
} Soc_TimelineUsrOrGbl_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
Soc_GET_RECENT_TIMELINE, // Recent timeline is shown when user clicks on action menu,...
|
||||
|
@ -199,8 +205,12 @@ extern struct Globals Gbl;
|
|||
/***************************** Private prototypes ****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Soc_BuildQueryToGetTimelineGbl (Soc_WhatToGetFromTimeline_t WhatToGetFromTimeline,
|
||||
char *Query);
|
||||
static void Soc_GetAndShowNewTimeline (Soc_TimelineUsrOrGbl_t TimelineUsrOrGbl);
|
||||
static void Soc_GetAndShowOldTimeline (Soc_TimelineUsrOrGbl_t TimelineUsrOrGbl);
|
||||
|
||||
static void Soc_BuildQueryToGetTimeline (Soc_TimelineUsrOrGbl_t TimelineUsrOrGbl,
|
||||
Soc_WhatToGetFromTimeline_t WhatToGetFromTimeline,
|
||||
char *Query);
|
||||
static long Soc_GetPubCodFromSession (const char *FieldName);
|
||||
static void Soc_UpdateLastPubCodIntoSession (void);
|
||||
static void Soc_UpdateFirstPubCodIntoSession (long FirstPubCod);
|
||||
|
@ -298,16 +308,16 @@ void Soc_ShowTimelineUsr (void)
|
|||
char Query[512];
|
||||
|
||||
/***** Build query to show timeline with publishings of a unique user *****/
|
||||
sprintf (Query,"SELECT PubCod,NotCod,PublisherCod,PubType,UNIX_TIMESTAMP(TimePublish)"
|
||||
" FROM social_pubs"
|
||||
" WHERE PublisherCod='%ld'"
|
||||
" ORDER BY PubCod DESC LIMIT %u",
|
||||
Gbl.Usrs.Other.UsrDat.UsrCod,
|
||||
Soc_MAX_RECENT_PUBS_TO_GET);
|
||||
Soc_BuildQueryToGetTimeline (Soc_TIMELINE_USR,
|
||||
Soc_GET_RECENT_TIMELINE,
|
||||
Query);
|
||||
|
||||
/***** Show timeline *****/
|
||||
sprintf (Gbl.Title,Txt_Public_activity_OF_A_USER,Gbl.Usrs.Other.UsrDat.FirstName);
|
||||
Soc_ShowTimeline (Query,Gbl.Title);
|
||||
|
||||
/***** Drop temporary tables *****/
|
||||
Soc_DropTemporaryTablesUsedToQueryTimeline ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -325,7 +335,9 @@ void Soc_ShowTimelineGbl (void)
|
|||
Lay_ShowAlert (Lay_INFO,Txt_You_dont_follow_any_user);
|
||||
|
||||
/***** Build query to get timeline *****/
|
||||
Soc_BuildQueryToGetTimelineGbl (Soc_GET_RECENT_TIMELINE,Query);
|
||||
Soc_BuildQueryToGetTimeline (Soc_TIMELINE_GBL,
|
||||
Soc_GET_RECENT_TIMELINE,
|
||||
Query);
|
||||
|
||||
/***** Show timeline *****/
|
||||
Soc_ShowTimeline (Query,Txt_Public_activity);
|
||||
|
@ -335,39 +347,86 @@ void Soc_ShowTimelineGbl (void)
|
|||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******* Get and show recent timeline including all the users I follow *******/
|
||||
/********** Refresh new publishings in social timeline via AJAX **************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Soc_GetAndShowNewTimelineGbl (void)
|
||||
void Soc_RefreshNewTimelineGbl (void)
|
||||
{
|
||||
// Send, before the HTML, the refresh time
|
||||
fprintf (Gbl.F.Out,"%lu|",
|
||||
Cfg_TIME_TO_REFRESH_SOCIAL_TIMELINE);
|
||||
|
||||
Soc_GetAndShowNewTimeline (Soc_TIMELINE_GBL);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************** Get and show new publishings in timeline *****************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Soc_GetAndShowNewTimeline (Soc_TimelineUsrOrGbl_t TimelineUsrOrGbl)
|
||||
{
|
||||
char Query[512];
|
||||
|
||||
/***** Build query to get timeline *****/
|
||||
Soc_BuildQueryToGetTimelineGbl (Soc_GET_ONLY_NEW_PUBS,Query);
|
||||
Soc_BuildQueryToGetTimeline (TimelineUsrOrGbl,
|
||||
Soc_GET_ONLY_NEW_PUBS,
|
||||
Query);
|
||||
|
||||
/***** Show new timeline *****/
|
||||
Soc_ShowNewPubsInTimeline (Query);
|
||||
|
||||
/***** Drop temporary tables *****/
|
||||
Soc_DropTemporaryTablesUsedToQueryTimeline ();
|
||||
|
||||
/***** All the output is made, so don't write anymore *****/
|
||||
Gbl.Layout.DivsEndWritten = Gbl.Layout.HTMLEndWritten = true;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******** Get and show old timeline including all the users I follow *********/
|
||||
/************ View new publishings in social timeline via AJAX ***************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Soc_GetAndShowOldTimelineGbl (void)
|
||||
void Soc_GetOtherUsrNicknameFromUsrCod (void)
|
||||
{
|
||||
// User's code is already taken from nickname in Par_GetMainParameters ()
|
||||
if (!Nck_GetNicknameFromUsrCod (Gbl.Usrs.Other.UsrDat.UsrCod,Gbl.Usrs.Other.UsrDat.Nickname))
|
||||
Gbl.Usrs.Other.UsrDat.UsrCod = -1L;
|
||||
}
|
||||
|
||||
void Soc_RefreshOldTimelineUsr (void)
|
||||
{
|
||||
/***** If user exists, show old publishings *****/
|
||||
// User's code is already taken from nickname in Par_GetMainParameters ()
|
||||
if (Usr_ChkIfUsrCodExists (Gbl.Usrs.Other.UsrDat.UsrCod)) // Existing user
|
||||
Soc_GetAndShowOldTimeline (Soc_TIMELINE_USR);
|
||||
}
|
||||
|
||||
void Soc_RefreshOldTimelineGbl (void)
|
||||
{
|
||||
Soc_GetAndShowOldTimeline (Soc_TIMELINE_GBL);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/**************** Get and show old publishings in timeline *******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Soc_GetAndShowOldTimeline (Soc_TimelineUsrOrGbl_t TimelineUsrOrGbl)
|
||||
{
|
||||
char Query[512];
|
||||
|
||||
/***** Build query to get timeline *****/
|
||||
Soc_BuildQueryToGetTimelineGbl (Soc_GET_ONLY_OLD_PUBS,Query);
|
||||
Soc_BuildQueryToGetTimeline (TimelineUsrOrGbl,
|
||||
Soc_GET_ONLY_OLD_PUBS,
|
||||
Query);
|
||||
|
||||
/***** Show old timeline *****/
|
||||
Soc_ShowOldPubsInTimeline (Query);
|
||||
|
||||
/***** Drop temporary tables *****/
|
||||
Soc_DropTemporaryTablesUsedToQueryTimeline ();
|
||||
|
||||
/***** All the output is made, so don't write anymore *****/
|
||||
Gbl.Layout.DivsEndWritten = Gbl.Layout.HTMLEndWritten = true;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -375,9 +434,11 @@ void Soc_GetAndShowOldTimelineGbl (void)
|
|||
/*****************************************************************************/
|
||||
// Query must have space for at least 512 chars
|
||||
|
||||
static void Soc_BuildQueryToGetTimelineGbl (Soc_WhatToGetFromTimeline_t WhatToGetFromTimeline,
|
||||
char *Query)
|
||||
static void Soc_BuildQueryToGetTimeline (Soc_TimelineUsrOrGbl_t TimelineUsrOrGbl,
|
||||
Soc_WhatToGetFromTimeline_t WhatToGetFromTimeline,
|
||||
char *Query)
|
||||
{
|
||||
char SubQueryPublishers[128];
|
||||
char SubQueryRangePubs[64];
|
||||
long LastPubCod;
|
||||
long FirstPubCod;
|
||||
|
@ -390,17 +451,28 @@ static void Soc_BuildQueryToGetTimelineGbl (Soc_WhatToGetFromTimeline_t WhatToGe
|
|||
Soc_DropTemporaryTablesUsedToQueryTimeline ();
|
||||
|
||||
/***** Create temporary table with potential publishers *****/
|
||||
sprintf (Query,"CREATE TEMPORARY TABLE publishers "
|
||||
"(UsrCod INT NOT NULL,"
|
||||
"UNIQUE INDEX(UsrCod)) ENGINE=MEMORY"
|
||||
" SELECT '%ld' AS UsrCod"
|
||||
" UNION"
|
||||
" SELECT FollowedCod AS UsrCod"
|
||||
" FROM usr_follow WHERE FollowerCod='%ld'",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
if (mysql_query (&Gbl.mysql,Query))
|
||||
DB_ExitOnMySQLError ("can not create temporary table");
|
||||
switch (TimelineUsrOrGbl)
|
||||
{
|
||||
case Soc_TIMELINE_USR: // Show the timeline of a user
|
||||
sprintf (SubQueryPublishers,"PublisherCod='%ld'",
|
||||
Gbl.Usrs.Other.UsrDat.UsrCod);
|
||||
break;
|
||||
case Soc_TIMELINE_GBL: // Show the timeline of the users follwed by me
|
||||
sprintf (Query,"CREATE TEMPORARY TABLE publishers "
|
||||
"(UsrCod INT NOT NULL,"
|
||||
"UNIQUE INDEX(UsrCod)) ENGINE=MEMORY"
|
||||
" SELECT '%ld' AS UsrCod"
|
||||
" UNION"
|
||||
" SELECT FollowedCod AS UsrCod"
|
||||
" FROM usr_follow WHERE FollowerCod='%ld'",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
if (mysql_query (&Gbl.mysql,Query))
|
||||
DB_ExitOnMySQLError ("can not create temporary table");
|
||||
|
||||
sprintf (SubQueryPublishers,"PublisherCod IN (SELECT UsrCod FROM publishers)");
|
||||
break;
|
||||
}
|
||||
|
||||
/***** Create temporary table with notes already present in current timeline *****/
|
||||
if (WhatToGetFromTimeline == Soc_GET_ONLY_OLD_PUBS)
|
||||
|
@ -427,9 +499,10 @@ static void Soc_BuildQueryToGetTimelineGbl (Soc_WhatToGetFromTimeline_t WhatToGe
|
|||
"UNIQUE INDEX(NewestPubForNote)) ENGINE=MEMORY"
|
||||
" SELECT MAX(PubCod) AS NewestPubForNote"
|
||||
" FROM social_pubs"
|
||||
" WHERE PublisherCod IN (SELECT UsrCod FROM publishers)"
|
||||
" WHERE %s"
|
||||
" GROUP BY NotCod"
|
||||
" ORDER BY NewestPubForNote DESC LIMIT %u",
|
||||
SubQueryPublishers,
|
||||
Soc_MAX_RECENT_PUBS_TO_GET);
|
||||
break;
|
||||
case Soc_GET_ONLY_NEW_PUBS: // Get the publishings (without limit) newer than LastPubCod
|
||||
|
@ -444,10 +517,11 @@ static void Soc_BuildQueryToGetTimelineGbl (Soc_WhatToGetFromTimeline_t WhatToGe
|
|||
"UNIQUE INDEX(NewestPubForNote)) ENGINE=MEMORY"
|
||||
" SELECT MAX(PubCod) AS NewestPubForNote"
|
||||
" FROM social_pubs"
|
||||
" WHERE %sPublisherCod IN (SELECT UsrCod FROM publishers)"
|
||||
" WHERE %s%s"
|
||||
" GROUP BY NotCod"
|
||||
" ORDER BY NewestPubForNote DESC",
|
||||
SubQueryRangePubs);
|
||||
SubQueryRangePubs,
|
||||
SubQueryPublishers);
|
||||
break;
|
||||
case Soc_GET_ONLY_OLD_PUBS: // Get some limited publishings older than FirstPubCod
|
||||
/* This query is made via AJAX
|
||||
|
@ -462,11 +536,12 @@ static void Soc_BuildQueryToGetTimelineGbl (Soc_WhatToGetFromTimeline_t WhatToGe
|
|||
"UNIQUE INDEX(NewestPubForNote)) ENGINE=MEMORY"
|
||||
" SELECT MAX(PubCod) AS NewestPubForNote"
|
||||
" FROM social_pubs"
|
||||
" WHERE %sPublisherCod IN (SELECT UsrCod FROM publishers)"
|
||||
" WHERE %s%s"
|
||||
" AND NotCod NOT IN (SELECT NotCod FROM current_timeline)"
|
||||
" GROUP BY NotCod"
|
||||
" ORDER BY NewestPubForNote DESC LIMIT %u",
|
||||
SubQueryRangePubs,
|
||||
SubQueryPublishers,
|
||||
Soc_MAX_OLD_PUBS_TO_GET_AND_SHOW);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -93,8 +93,11 @@ typedef enum
|
|||
|
||||
void Soc_ShowTimelineUsr (void);
|
||||
void Soc_ShowTimelineGbl (void);
|
||||
void Soc_GetAndShowNewTimelineGbl (void);
|
||||
void Soc_GetAndShowOldTimelineGbl (void);
|
||||
|
||||
void Soc_RefreshNewTimelineGbl (void);
|
||||
|
||||
void Soc_RefreshOldTimelineUsr (void);
|
||||
void Soc_RefreshOldTimelineGbl (void);
|
||||
|
||||
void Soc_StoreAndPublishSocialNote (Soc_NoteType_t NoteType,long Cod);
|
||||
void Soc_MarkSocialNoteAsUnavailableUsingNotCod (long NotCod);
|
||||
|
|
|
@ -1844,11 +1844,10 @@ bool Usr_GetParamOtherUsrCodEncryptedAndGetUsrData (void)
|
|||
/***** Get parameter with encrypted user's code *****/
|
||||
Usr_GetParamOtherUsrCodEncrypted ();
|
||||
|
||||
/***** Check if user exists and get his data *****/
|
||||
/***** Check if user exists and get her/his data *****/
|
||||
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat)) // Existing user
|
||||
return true;
|
||||
|
||||
// Lay_ShowAlert (Lay_ERROR,"User does not exist.");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue