Version 20.36.29: Feb 28, 2021 Code refactoring in module swad_timeline_database.

This commit is contained in:
acanas 2021-02-28 22:42:08 +01:00
parent a38ab09b97
commit e779ee524e
4 changed files with 127 additions and 91 deletions

View File

@ -553,7 +553,7 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD: En OpenSWAD:
ps2pdf source.ps destination.pdf ps2pdf source.ps destination.pdf
*/ */
#define Log_PLATFORM_VERSION "SWAD 20.36.28 (2021-02-28)" #define Log_PLATFORM_VERSION "SWAD 20.36.29 (2021-02-28)"
#define CSS_FILE "swad20.33.9.css" #define CSS_FILE "swad20.33.9.css"
#define JS_FILE "swad20.6.2.js" #define JS_FILE "swad20.6.2.js"
/* /*
@ -601,6 +601,7 @@ TODO: DNI de un estudiante sale err
TODO: BUG: Cuando un tipo de grupo sólo tiene un grupo, inscribirse es voluntario, el estudiante sólo puede pertenecer a un grupo, y se inscribe en él, debería poder desapuntarse. Ahora no puede. TODO: BUG: Cuando un tipo de grupo sólo tiene un grupo, inscribirse es voluntario, el estudiante sólo puede pertenecer a un grupo, y se inscribe en él, debería poder desapuntarse. Ahora no puede.
TODO: Salvador Romero Cortés: @acanas opción para editar posts TODO: Salvador Romero Cortés: @acanas opción para editar posts
Version 20.36.29: Feb 28, 2021 Code refactoring in module swad_timeline_database. (305457 lines)
Version 20.36.28: Feb 28, 2021 Functions moved to module swad_timeline_database. (305426 lines) Version 20.36.28: Feb 28, 2021 Functions moved to module swad_timeline_database. (305426 lines)
Version 20.36.27: Feb 28, 2021 Functions moved to module swad_timeline_database. (305424 lines) Version 20.36.27: Feb 28, 2021 Functions moved to module swad_timeline_database. (305424 lines)
Version 20.36.26: Feb 28, 2021 Queries moved to module swad_timeline_database. (305423 lines) Version 20.36.26: Feb 28, 2021 Queries moved to module swad_timeline_database. (305423 lines)

View File

@ -54,8 +54,21 @@ extern struct Globals Gbl;
/***************************** Private prototypes ****************************/ /***************************** Private prototypes ****************************/
/*****************************************************************************/ /*****************************************************************************/
/****************************** Publications *********************************/
static long TL_DB_GetMedCodFromPub (long PubCod,const char *DBTable); static long TL_DB_GetMedCodFromPub (long PubCod,const char *DBTable);
/******************************* Favourites **********************************/
static bool TL_DB_CheckIfFavedByUsr (const char *Table,const char *Field,
long Cod,long UsrCod);
static unsigned TL_DB_GetNumTimesHasBeenFav (const char *Table,const char *Field,
long Cod,long UsrCod);
static unsigned TL_DB_GetListUsrsHaveFaved (const char *Table,const char *Field,
long Cod,long UsrCod,
unsigned MaxUsrs,
MYSQL_RES **mysql_res);
static void TL_DB_MarkAsFav (const char *Table,const char *Field,long Cod);
static void TL_DB_UnmarkAsFav (const char *Table,const char *Field,long Cod);
/*****************************************************************************/ /*****************************************************************************/
/********************* Get data of note using its code ***********************/ /********************* Get data of note using its code ***********************/
/*****************************************************************************/ /*****************************************************************************/
@ -855,115 +868,143 @@ void TL_DB_UpdateFirstLastPubCodsInSession (long FirstPubCod)
bool TL_DB_CheckIfNoteIsFavedByUsr (long NotCod,long UsrCod) bool TL_DB_CheckIfNoteIsFavedByUsr (long NotCod,long UsrCod)
{ {
return (DB_QueryCOUNT ("can not check if a user" return TL_DB_CheckIfFavedByUsr ("tl_notes_fav","NotCod",NotCod,UsrCod);
" has favourited a note",
"SELECT COUNT(*) FROM tl_notes_fav"
" WHERE NotCod=%ld AND UsrCod=%ld",
NotCod,UsrCod) != 0);
} }
/*****************************************************************************/
/**************** Check if a user has favourited a comment *******************/
/*****************************************************************************/
bool TL_DB_CheckIfCommIsFavedByUsr (long PubCod,long UsrCod) bool TL_DB_CheckIfCommIsFavedByUsr (long PubCod,long UsrCod)
{ {
return (DB_QueryCOUNT ("can not check if a user" return TL_DB_CheckIfFavedByUsr ("tl_comments_fav","PubCod",PubCod,UsrCod);
" has favourited a comment", }
"SELECT COUNT(*) FROM tl_comments_fav"
static bool TL_DB_CheckIfFavedByUsr (const char *Table,const char *Field,
long Cod,long UsrCod)
{
/***** Check if a user has favourited a note/comment from database *****/
return (DB_QueryCOUNT ("can not check if a user has favourited",
"SELECT COUNT(*) FROM %s"
" WHERE PubCod=%ld AND UsrCod=%ld", " WHERE PubCod=%ld AND UsrCod=%ld",
PubCod,UsrCod) != 0); Table,
Field,Cod,UsrCod) != 0);
} }
/*****************************************************************************/ /*****************************************************************************/
/*************** Get number of times a note has been favourited **************/ /********* Get number of times a note/comment has been favourited ************/
/*****************************************************************************/ /*****************************************************************************/
unsigned TL_DB_GetNumTimesANoteHasBeenFav (const struct TL_Not_Note *Not) unsigned TL_DB_GetNumTimesANoteHasBeenFav (const struct TL_Not_Note *Not)
{ {
/***** Get number of times (users) this note has been favourited *****/ return TL_DB_GetNumTimesHasBeenFav ("tl_notes_fav","NotCod",
return (unsigned) Not->NotCod,Not->UsrCod);
DB_QueryCOUNT ("can not get number of times"
" a note has been favourited",
"SELECT COUNT(*) FROM tl_notes_fav"
" WHERE NotCod=%ld"
" AND UsrCod<>%ld", // Extra check
Not->NotCod,
Not->UsrCod); // The author
} }
/*****************************************************************************/
/************ Get number of times a comment has been favourited **************/
/*****************************************************************************/
unsigned TL_DB_GetNumTimesACommHasBeenFav (const struct TL_Com_Comment *Com) unsigned TL_DB_GetNumTimesACommHasBeenFav (const struct TL_Com_Comment *Com)
{ {
/***** Get number of times (users) this comment has been favourited *****/ return TL_DB_GetNumTimesHasBeenFav ("tl_comments_fav","PubCod",
Com->PubCod,Com->UsrCod);
}
static unsigned TL_DB_GetNumTimesHasBeenFav (const char *Table,const char *Field,
long Cod,long UsrCod)
{
/***** Get number of times (users) a note/comment has been favourited *****/
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of times" DB_QueryCOUNT ("can not get number of times has been favourited",
" a comment has been favourited", "SELECT COUNT(*) FROM %s"
"SELECT COUNT(*) FROM tl_comments_fav" " WHERE %s=%ld"
" WHERE PubCod=%ld"
" AND UsrCod<>%ld", // Extra check " AND UsrCod<>%ld", // Extra check
Com->PubCod, Table,
Com->UsrCod); // The author Field,Cod,
UsrCod); // The author
} }
/*****************************************************************************/ /*****************************************************************************/
/********************** Mark note as favourite in database *******************/ /******* Get list of users who have marked a note/comment as favourite *******/
/*****************************************************************************/
unsigned TL_DB_GetListUsrsHaveFavedANote (const struct TL_Not_Note *Not,
unsigned MaxUsrs,
MYSQL_RES **mysql_res)
{
return TL_DB_GetListUsrsHaveFaved ("tl_notes_fav","NotCod",
Not->NotCod,Not->UsrCod,MaxUsrs,
mysql_res);
}
unsigned TL_DB_GetListUsrsHaveFavedAComm (const struct TL_Com_Comment *Com,
unsigned MaxUsrs,
MYSQL_RES **mysql_res)
{
return TL_DB_GetListUsrsHaveFaved ("tl_comments_fav","PubCod",
Com->PubCod,Com->UsrCod,MaxUsrs,
mysql_res);
}
static unsigned TL_DB_GetListUsrsHaveFaved (const char *Table,const char *Field,
long Cod,long UsrCod,
unsigned MaxUsrs,
MYSQL_RES **mysql_res)
{
/***** Get list of users who have marked a note/comment as favourite from database *****/
return (unsigned)
DB_QuerySELECT (mysql_res,"can not get favers",
"SELECT UsrCod" // row[0]
" FROM %s"
" WHERE %s=%ld"
" AND UsrCod<>%ld" // Extra check
" ORDER BY FavCod LIMIT %u",
Table,
Field,Cod,
UsrCod,
MaxUsrs);
}
/*****************************************************************************/
/**************** Mark note/comment as favourite in database *****************/
/*****************************************************************************/ /*****************************************************************************/
void TL_DB_MarkNoteAsFav (long NotCod) void TL_DB_MarkNoteAsFav (long NotCod)
{ {
/***** Insert note in favourited in database *****/ TL_DB_MarkAsFav ("tl_notes_fav","NotCod",NotCod);
DB_QueryINSERT ("can not favourite note",
"INSERT IGNORE INTO tl_notes_fav"
" (NotCod,UsrCod,TimeFav)"
" VALUES"
" (%ld,%ld,NOW())",
NotCod,
Gbl.Usrs.Me.UsrDat.UsrCod);
} }
/*****************************************************************************/
/********************** Mark note as favourite in database *******************/
/*****************************************************************************/
void TL_DB_MarkCommAsFav (long PubCod) void TL_DB_MarkCommAsFav (long PubCod)
{ {
/***** Insert comment in favourited in database *****/ TL_DB_MarkAsFav ("tl_comments_fav","PubCod",PubCod);
}
static void TL_DB_MarkAsFav (const char *Table,const char *Field,long Cod)
{
/***** Insert in favourited in database *****/
DB_QueryINSERT ("can not favourite comment", DB_QueryINSERT ("can not favourite comment",
"INSERT IGNORE INTO tl_comments_fav" "INSERT IGNORE INTO %s"
" (PubCod,UsrCod,TimeFav)" " (%s,UsrCod,TimeFav)"
" VALUES" " VALUES"
" (%ld,%ld,NOW())", " (%ld,%ld,NOW())",
PubCod, Table,
Gbl.Usrs.Me.UsrDat.UsrCod); Field,
Cod,Gbl.Usrs.Me.UsrDat.UsrCod);
} }
/*****************************************************************************/ /*****************************************************************************/
/********************* Unmark note as favourite in database ******************/ /*************** Unmark note/comment as favourite in database ****************/
/*****************************************************************************/ /*****************************************************************************/
void TL_DB_UnmarkNoteAsFav (long NotCod) void TL_DB_UnmarkNoteAsFav (long NotCod)
{ {
/***** Delete the mark as favourite from database *****/ TL_DB_UnmarkAsFav ("tl_notes_fav","NotCod",NotCod);
DB_QueryDELETE ("can not unfavourite note",
"DELETE FROM tl_notes_fav"
" WHERE NotCod=%ld AND UsrCod=%ld",
NotCod,
Gbl.Usrs.Me.UsrDat.UsrCod);
} }
/*****************************************************************************/
/******************* Unmark comment as favourite in database *****************/
/*****************************************************************************/
void TL_DB_UnmarkCommAsFav (long PubCod) void TL_DB_UnmarkCommAsFav (long PubCod)
{ {
DB_QueryDELETE ("can not unfavourite comment", TL_DB_UnmarkAsFav ("tl_comments_fav","PubCod",PubCod);
"DELETE FROM tl_comments_fav" }
" WHERE PubCod=%ld AND UsrCod=%ld",
PubCod, static void TL_DB_UnmarkAsFav (const char *Table,const char *Field,long Cod)
Gbl.Usrs.Me.UsrDat.UsrCod); {
/***** Delete the mark as favourite from database *****/
DB_QueryDELETE ("can not unfavourite",
"DELETE FROM %s"
" WHERE %s=%ld AND UsrCod=%ld",
Table,
Field,Cod,Gbl.Usrs.Me.UsrDat.UsrCod);
} }

View File

@ -116,6 +116,12 @@ bool TL_DB_CheckIfNoteIsFavedByUsr (long NotCod,long UsrCod);
bool TL_DB_CheckIfCommIsFavedByUsr (long PubCod,long UsrCod); bool TL_DB_CheckIfCommIsFavedByUsr (long PubCod,long UsrCod);
unsigned TL_DB_GetNumTimesANoteHasBeenFav (const struct TL_Not_Note *Not); unsigned TL_DB_GetNumTimesANoteHasBeenFav (const struct TL_Not_Note *Not);
unsigned TL_DB_GetNumTimesACommHasBeenFav (const struct TL_Com_Comment *Com); unsigned TL_DB_GetNumTimesACommHasBeenFav (const struct TL_Com_Comment *Com);
unsigned TL_DB_GetListUsrsHaveFavedANote (const struct TL_Not_Note *Not,
unsigned MaxUsrs,
MYSQL_RES **mysql_res);
unsigned TL_DB_GetListUsrsHaveFavedAComm (const struct TL_Com_Comment *Com,
unsigned MaxUsrs,
MYSQL_RES **mysql_res);
void TL_DB_MarkNoteAsFav (long NotCod); void TL_DB_MarkNoteAsFav (long NotCod);
void TL_DB_MarkCommAsFav (long PubCod); void TL_DB_MarkCommAsFav (long PubCod);
void TL_DB_UnmarkNoteAsFav (long NotCod); void TL_DB_UnmarkNoteAsFav (long NotCod);

View File

@ -169,7 +169,7 @@ static void TL_Fav_FavNote (struct TL_Not_Note *Not)
if (Gbl.Usrs.Me.Logged && // I am logged... if (Gbl.Usrs.Me.Logged && // I am logged...
!Usr_ItsMe (Not->UsrCod)) // ...but I am not the author !Usr_ItsMe (Not->UsrCod)) // ...but I am not the author
if (!TL_DB_CheckIfNoteIsFavedByUsr (Not->NotCod, if (!TL_DB_CheckIfNoteIsFavedByUsr (Not->NotCod,
Gbl.Usrs.Me.UsrDat.UsrCod)) // I have not yet favourited the note Gbl.Usrs.Me.UsrDat.UsrCod)) // I have not yet favourited the note
{ {
/***** Mark note as favourite in database *****/ /***** Mark note as favourite in database *****/
TL_DB_MarkNoteAsFav (Not->NotCod); TL_DB_MarkNoteAsFav (Not->NotCod);
@ -200,7 +200,7 @@ static void TL_Fav_UnfNote (struct TL_Not_Note *Not)
Gbl.Usrs.Me.Logged && // I am logged... Gbl.Usrs.Me.Logged && // I am logged...
!Usr_ItsMe (Not->UsrCod)) // ...but I am not the author !Usr_ItsMe (Not->UsrCod)) // ...but I am not the author
if (TL_DB_CheckIfNoteIsFavedByUsr (Not->NotCod, if (TL_DB_CheckIfNoteIsFavedByUsr (Not->NotCod,
Gbl.Usrs.Me.UsrDat.UsrCod)) // I have favourited the note Gbl.Usrs.Me.UsrDat.UsrCod)) // I have favourited the note
{ {
/***** Delete the mark as favourite from database *****/ /***** Delete the mark as favourite from database *****/
TL_DB_UnmarkNoteAsFav (Not->NotCod); TL_DB_UnmarkNoteAsFav (Not->NotCod);
@ -457,16 +457,10 @@ static void TL_Fav_ShowUsrsWhoHaveMarkedNoteAsFav (const struct TL_Not_Note *Not
/***** Get users who have marked this note as favourite *****/ /***** Get users who have marked this note as favourite *****/
if (Not->NumFavs) if (Not->NumFavs)
/***** Get list of users from database *****/ /***** Get list of users from database *****/
NumFirstUsrs = NumFirstUsrs = TL_DB_GetListUsrsHaveFavedANote (Not,
(unsigned) DB_QuerySELECT (&mysql_res,"can not get users", HowManyUsrs == TL_Usr_SHOW_FEW_USRS ? TL_Usr_DEF_USRS_SHOWN :
"SELECT UsrCod FROM tl_notes_fav" TL_Usr_MAX_USRS_SHOWN,
" WHERE NotCod=%ld" &mysql_res);
" AND UsrCod<>%ld" // Extra check
" ORDER BY FavCod LIMIT %u",
Not->NotCod,
Not->UsrCod,
HowManyUsrs == TL_Usr_SHOW_FEW_USRS ? TL_Usr_DEF_USRS_SHOWN :
TL_Usr_MAX_USRS_SHOWN);
else else
NumFirstUsrs = 0; NumFirstUsrs = 0;
@ -504,16 +498,10 @@ static void TL_Fav_ShowUsrsWhoHaveMarkedCommAsFav (const struct TL_Com_Comment *
/***** Get users who have marked this comment as favourite *****/ /***** Get users who have marked this comment as favourite *****/
if (Com->NumFavs) if (Com->NumFavs)
/***** Get list of users from database *****/ /***** Get list of users from database *****/
NumFirstUsrs = NumFirstUsrs = TL_DB_GetListUsrsHaveFavedAComm (Com,
(unsigned) DB_QuerySELECT (&mysql_res,"can not get users", HowManyUsrs == TL_Usr_SHOW_FEW_USRS ? TL_Usr_DEF_USRS_SHOWN :
"SELECT UsrCod FROM tl_comments_fav" TL_Usr_MAX_USRS_SHOWN,
" WHERE PubCod=%ld" &mysql_res);
" AND UsrCod<>%ld" // Extra check
" ORDER BY FavCod LIMIT %u",
Com->PubCod,
Com->UsrCod,
HowManyUsrs == TL_Usr_SHOW_FEW_USRS ? TL_Usr_DEF_USRS_SHOWN :
TL_Usr_MAX_USRS_SHOWN);
else else
NumFirstUsrs = 0; NumFirstUsrs = 0;