Version 16.254.2

This commit is contained in:
Antonio Cañas Vargas 2017-09-13 16:24:29 +02:00
parent f4ff9fdf80
commit 61e6492b60
5 changed files with 181 additions and 167 deletions

View File

@ -250,14 +250,17 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 16.254.1 (2017-09-13)"
#define Log_PLATFORM_VERSION "SWAD 16.254.2 (2017-09-13)"
#define CSS_FILE "swad16.252.2.css"
#define JS_FILE "swad16.206.3.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 16.254.1: Sep 12, 2017 Icon to start playing a game. (227122 lines)
Version 16.254.2: Sep 13, 2017 Removed notifications in games.
Start playing a game.
Changes in pagination in games. (227141 lines)
Version 16.254.1: Sep 13, 2017 Icon to start playing a game. (227122 lines)
Copy the following icon to icon public directory:
sudo cp icon/play64x64.png /var/www/html/swad/icon/

View File

@ -36,7 +36,6 @@
#include "swad_game.h"
#include "swad_global.h"
#include "swad_group.h"
#include "swad_notification.h"
#include "swad_pagination.h"
#include "swad_parameter.h"
#include "swad_role.h"
@ -89,7 +88,10 @@ static void Gam_PutButtonToCreateNewGame (void);
static void Gam_PutParamsToCreateNewGame (void);
static void Gam_PutFormToSelectWhichGroupsToShow (void);
static void Gam_ParamsWhichGroupsToShow (void);
static void Gam_ShowOneGame (long GamCod,bool ShowOnlyThisGameComplete);
static void Gam_ShowOneGame (long GamCod,
bool ShowOnlyThisGame,
bool ListGameQuestions,
bool PutButtonToStart);
static void Gam_WriteAuthor (struct Game *Game);
static void Gam_WriteStatus (struct Game *Game);
static void Gam_GetParamGameOrder (void);
@ -107,8 +109,7 @@ static void Gam_PutButtonToResetGame (void);
static bool Gam_CheckIfSimilarGameExists (struct Game *Game);
static void Gam_SetDefaultAndAllowedScope (struct Game *Game);
static void Gam_ShowLstGrpsToEditGame (long GamCod);
static void Gam_UpdateNumUsrsNotifiedByEMailAboutGame (long GamCod,
unsigned NumUsrsToBeNotifiedByEMail);
static void Gam_CreateGame (struct Game *Game,const char *Txt);
static void Gam_UpdateGame (struct Game *Game,const char *Txt);
static bool Gam_CheckIfGamIsAssociatedToGrps (long GamCod);
@ -147,6 +148,8 @@ static void Gam_PutParamsOneQst (void);
static void Gam_ExchangeQuestions (long GamCod,
unsigned QstIndTop,unsigned QstIndBottom);
static void Gam_PutBigButtonToStartGame (void);
static void Gam_ReceiveAndStoreUserAnswersToAGame (long GamCod);
static void Gam_IncreaseAnswerInDB (long QstCod,unsigned AnsInd);
static void Gam_RegisterIHaveAnsweredGame (long GamCod);
@ -162,7 +165,7 @@ void Gam_SeeAllGames (void)
/***** Get parameters *****/
Gam_GetParamGameOrder ();
Grp_GetParamWhichGrps ();
Gbl.Games.CurrentPage = Pag_GetParamPagNum (Pag_SURVEYS);
Gbl.Games.CurrentPage = Pag_GetParamPagNum (Pag_GAMES);
/***** Show all the games *****/
Gam_ListAllGames ();
@ -200,7 +203,7 @@ static void Gam_ListAllGames (void)
/***** Write links to pages *****/
if (Pagination.MoreThanOnePage)
Pag_WriteLinksToPagesCentered (Pag_SURVEYS,
Pag_WriteLinksToPagesCentered (Pag_GAMES,
0,
&Pagination);
@ -227,7 +230,7 @@ static void Gam_ListAllGames (void)
/* Form to change order */
Act_FormStart (ActSeeAllGam);
Grp_PutParamWhichGrps ();
Pag_PutHiddenParamPagNum (Pag_SURVEYS,Gbl.Games.CurrentPage);
Pag_PutHiddenParamPagNum (Pag_GAMES,Gbl.Games.CurrentPage);
Par_PutHiddenParamUnsigned ("Order",(unsigned) Order);
Act_LinkFormSubmit (Txt_START_END_TIME_HELP[Order],"TIT_TBL",NULL);
if (Order == Gbl.Games.SelectedOrder)
@ -254,7 +257,10 @@ static void Gam_ListAllGames (void)
for (NumGame = Pagination.FirstItemVisible;
NumGame <= Pagination.LastItemVisible;
NumGame++)
Gam_ShowOneGame (Gbl.Games.LstGamCods[NumGame - 1],false);
Gam_ShowOneGame (Gbl.Games.LstGamCods[NumGame - 1],
false,
false,
false);
/***** End table *****/
Tbl_EndTable ();
@ -271,7 +277,7 @@ static void Gam_ListAllGames (void)
/***** Write again links to pages *****/
if (Pagination.MoreThanOnePage)
Pag_WriteLinksToPagesCentered (Pag_SURVEYS,
Pag_WriteLinksToPagesCentered (Pag_GAMES,
0,
&Pagination);
@ -354,7 +360,7 @@ static void Gam_PutParamsToCreateNewGame (void)
{
Gam_PutHiddenParamGameOrder ();
Grp_PutParamWhichGrps ();
Pag_PutHiddenParamPagNum (Pag_SURVEYS,Gbl.Games.CurrentPage);
Pag_PutHiddenParamPagNum (Pag_GAMES,Gbl.Games.CurrentPage);
}
/*****************************************************************************/
@ -371,7 +377,7 @@ static void Gam_PutFormToSelectWhichGroupsToShow (void)
static void Gam_ParamsWhichGroupsToShow (void)
{
Gam_PutHiddenParamGameOrder ();
Pag_PutHiddenParamPagNum (Pag_SURVEYS,Gbl.Games.CurrentPage);
Pag_PutHiddenParamPagNum (Pag_GAMES,Gbl.Games.CurrentPage);
}
/*****************************************************************************/
@ -385,21 +391,27 @@ void Gam_SeeOneGame (void)
/***** Get parameters *****/
Gam_GetParamGameOrder ();
Grp_GetParamWhichGrps ();
Gbl.Games.CurrentPage = Pag_GetParamPagNum (Pag_SURVEYS);
Gbl.Games.CurrentPage = Pag_GetParamPagNum (Pag_GAMES);
/***** Get game code *****/
if ((Game.GamCod = Gam_GetParamGameCod ()) == -1L)
Lay_ShowErrorAndExit ("Code of game is missing.");
/***** Show game *****/
Gam_ShowOneGame (Game.GamCod,true);
Gam_ShowOneGame (Game.GamCod,
true, // Show only this game
true, // List game questions
false);
}
/*****************************************************************************/
/****************************** Show one game ******************************/
/******************************* Show one game *******************************/
/*****************************************************************************/
static void Gam_ShowOneGame (long GamCod,bool ShowOnlyThisGameComplete)
static void Gam_ShowOneGame (long GamCod,
bool ShowOnlyThisGame,
bool ListGameQuestions,
bool PutButtonToStart)
{
extern const char *Hlp_ASSESSMENT_Games;
extern const char *Txt_Game;
@ -421,7 +433,7 @@ static void Gam_ShowOneGame (long GamCod,bool ShowOnlyThisGameComplete)
char Txt[Cns_MAX_BYTES_TEXT + 1];
/***** Start box *****/
if (ShowOnlyThisGameComplete)
if (ShowOnlyThisGame)
Box_StartBox (NULL,Txt_Game,NULL,
Hlp_ASSESSMENT_Games,Box_NOT_CLOSABLE);
@ -430,14 +442,14 @@ static void Gam_ShowOneGame (long GamCod,bool ShowOnlyThisGameComplete)
Gam_GetDataOfGameByCod (&Game);
/***** Start table *****/
if (ShowOnlyThisGameComplete)
if (ShowOnlyThisGame)
Tbl_StartTableWide (2);
/***** Write first row of data of this assignment *****/
/* Forms to remove/edit this assignment */
fprintf (Gbl.F.Out,"<tr>"
"<td rowspan=\"2\" class=\"CONTEXT_COL");
if (!ShowOnlyThisGameComplete)
if (!ShowOnlyThisGame)
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"\">");
if (Game.Status.ICanEdit)
@ -449,10 +461,10 @@ static void Gam_ShowOneGame (long GamCod,bool ShowOnlyThisGameComplete)
fprintf (Gbl.F.Out,"<td id=\"gam_date_start_%u\" class=\"%s LEFT_TOP",
UniqueId,
Game.Status.Visible ? (Game.Status.Open ? "DATE_GREEN" :
"DATE_RED") :
(Game.Status.Open ? "DATE_GREEN_LIGHT" :
"DATE_RED_LIGHT"));
if (!ShowOnlyThisGameComplete)
"DATE_RED") :
(Game.Status.Open ? "DATE_GREEN_LIGHT" :
"DATE_RED_LIGHT"));
if (!ShowOnlyThisGame)
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"\">"
"<script type=\"text/javascript\">"
@ -470,7 +482,7 @@ static void Gam_ShowOneGame (long GamCod,bool ShowOnlyThisGameComplete)
"DATE_RED") :
(Game.Status.Open ? "DATE_GREEN_LIGHT" :
"DATE_RED_LIGHT"));
if (!ShowOnlyThisGameComplete)
if (!ShowOnlyThisGame)
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"\">"
"<script type=\"text/javascript\">"
@ -483,7 +495,7 @@ static void Gam_ShowOneGame (long GamCod,bool ShowOnlyThisGameComplete)
/* Game title */
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP");
if (!ShowOnlyThisGameComplete)
if (!ShowOnlyThisGame)
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"\">");
@ -492,7 +504,7 @@ static void Gam_ShowOneGame (long GamCod,bool ShowOnlyThisGameComplete)
Gam_PutParamGameCod (GamCod);
Gam_PutHiddenParamGameOrder ();
Grp_PutParamWhichGrps ();
Pag_PutHiddenParamPagNum (Pag_SURVEYS,Gbl.Games.CurrentPage);
Pag_PutHiddenParamPagNum (Pag_GAMES,Gbl.Games.CurrentPage);
Act_LinkFormSubmit (Txt_View_game,
Game.Status.Visible ? "ASG_TITLE" :
"ASG_TITLE_LIGHT",NULL);
@ -504,7 +516,7 @@ static void Gam_ShowOneGame (long GamCod,bool ShowOnlyThisGameComplete)
fprintf (Gbl.F.Out,"<div class=\"%s\">%s: %u; %s: %u</div>"
"</td>",
Game.Status.Visible ? "ASG_GRP" :
"ASG_GRP_LIGHT",
"ASG_GRP_LIGHT",
Txt_No_of_questions,
Game.NumQsts,
Txt_No_of_users,
@ -512,12 +524,12 @@ static void Gam_ShowOneGame (long GamCod,bool ShowOnlyThisGameComplete)
/* Status of the game */
fprintf (Gbl.F.Out,"<td rowspan=\"2\" class=\"LEFT_TOP");
if (!ShowOnlyThisGameComplete)
if (!ShowOnlyThisGame)
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"\">");
Gam_WriteStatus (&Game);
if (ShowOnlyThisGameComplete)
if (ShowOnlyThisGame)
{
fprintf (Gbl.F.Out,"<div class=\"BUTTONS_AFTER_ALERT\">");
@ -525,7 +537,7 @@ static void Gam_ShowOneGame (long GamCod,bool ShowOnlyThisGameComplete)
Gam_PutParamGameCod (Game.GamCod);
Gam_PutHiddenParamGameOrder ();
Grp_PutParamWhichGrps ();
Pag_PutHiddenParamPagNum (Pag_SURVEYS,Gbl.Games.CurrentPage);
Pag_PutHiddenParamPagNum (Pag_GAMES,Gbl.Games.CurrentPage);
Btn_PutCreateButtonInline (Txt_Play);
Act_FormEnd ();
@ -542,7 +554,7 @@ static void Gam_ShowOneGame (long GamCod,bool ShowOnlyThisGameComplete)
Gam_PutParamGameCod (Game.GamCod);
Gam_PutHiddenParamGameOrder ();
Grp_PutParamWhichGrps ();
Pag_PutHiddenParamPagNum (Pag_SURVEYS,Gbl.Games.CurrentPage);
Pag_PutHiddenParamPagNum (Pag_GAMES,Gbl.Games.CurrentPage);
Btn_PutCreateButtonInline (Txt_Play);
Act_FormEnd ();
@ -557,7 +569,7 @@ static void Gam_ShowOneGame (long GamCod,bool ShowOnlyThisGameComplete)
Gam_PutParamGameCod (Game.GamCod);
Gam_PutHiddenParamGameOrder ();
Grp_PutParamWhichGrps ();
Pag_PutHiddenParamPagNum (Pag_SURVEYS,Gbl.Games.CurrentPage);
Pag_PutHiddenParamPagNum (Pag_GAMES,Gbl.Games.CurrentPage);
Btn_PutConfirmButtonInline (Txt_View_game_results);
Act_FormEnd ();
@ -571,7 +583,7 @@ static void Gam_ShowOneGame (long GamCod,bool ShowOnlyThisGameComplete)
/***** Write second row of data of this game *****/
fprintf (Gbl.F.Out,"<tr>"
"<td colspan=\"2\" class=\"LEFT_TOP");
if (!ShowOnlyThisGameComplete)
if (!ShowOnlyThisGame)
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"\">");
@ -580,14 +592,14 @@ static void Gam_ShowOneGame (long GamCod,bool ShowOnlyThisGameComplete)
fprintf (Gbl.F.Out,"</td>"
"<td class=\"LEFT_TOP");
if (!ShowOnlyThisGameComplete)
if (!ShowOnlyThisGame)
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"\">");
/* Scope of the game */
fprintf (Gbl.F.Out,"<div class=\"%s\">%s: ",
Game.Status.Visible ? "ASG_GRP" :
"ASG_GRP_LIGHT",
"ASG_GRP_LIGHT",
Txt_Scope);
switch (Game.Scope)
{
@ -624,7 +636,7 @@ static void Gam_ShowOneGame (long GamCod,bool ShowOnlyThisGameComplete)
/* Users' roles who can answer the game */
fprintf (Gbl.F.Out,"<div class=\"%s\">%s:<br />",
Game.Status.Visible ? "ASG_GRP" :
"ASG_GRP_LIGHT",
"ASG_GRP_LIGHT",
Txt_Users);
Rol_WriteSelectorRoles (1 << Rol_STD |
1 << Rol_NET |
@ -649,11 +661,11 @@ static void Gam_ShowOneGame (long GamCod,bool ShowOnlyThisGameComplete)
"</td>"
"</tr>",
Game.Status.Visible ? "DAT" :
"DAT_LIGHT",
"DAT_LIGHT",
Txt);
/***** Write questions of this game *****/
if (ShowOnlyThisGameComplete)
if (ListGameQuestions)
{
fprintf (Gbl.F.Out,"<tr>"
"<td colspan=\"5\">");
@ -662,22 +674,19 @@ static void Gam_ShowOneGame (long GamCod,bool ShowOnlyThisGameComplete)
"</tr>");
}
Gbl.RowEvenOdd = 1 - Gbl.RowEvenOdd;
/***** Mark possible notification as seen *****/
if (Game.Scope == Sco_SCOPE_CRS) // Only course games are notified
Ntf_MarkNotifAsSeen (Ntf_EVENT_SURVEY,
GamCod,Game.Cod,
Gbl.Usrs.Me.UsrDat.UsrCod);
if (ShowOnlyThisGameComplete)
{
/***** End table *****/
/***** End table *****/
if (ShowOnlyThisGame)
Tbl_EndTable ();
else
Gbl.RowEvenOdd = 1 - Gbl.RowEvenOdd;
/***** End box *****/
/***** Put big button to start playing *****/
if (PutButtonToStart)
Gam_PutBigButtonToStartGame ();
/***** End box *****/
if (ShowOnlyThisGame)
Box_EndBox ();
}
}
/*****************************************************************************/
@ -837,7 +846,7 @@ static void Gam_PutParams (void)
Gam_PutParamGameCod (Gbl.Games.CurrentGamCod);
Att_PutHiddenParamAttOrder ();
Grp_PutParamWhichGrps ();
Pag_PutHiddenParamPagNum (Pag_SURVEYS,Gbl.Games.CurrentPage);
Pag_PutHiddenParamPagNum (Pag_GAMES,Gbl.Games.CurrentPage);
}
/*****************************************************************************/
@ -1415,52 +1424,6 @@ static void Gam_GetGameTxtFromDB (long GamCod,char Txt[Cns_MAX_BYTES_TEXT + 1])
Lay_ShowErrorAndExit ("Error when getting game text.");
}
/*****************************************************************************/
/******************** Get summary and content of a game *******************/
/*****************************************************************************/
// This function may be called inside a web service, so don't report error
void Gam_GetNotifGame (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
char **ContentStr,
long GamCod,bool GetContent)
{
char Query[128];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
size_t Length;
SummaryStr[0] = '\0'; // Return nothing on error
/***** Build query *****/
sprintf (Query,"SELECT Title,Txt FROM games WHERE GamCod=%ld",
GamCod);
if (!mysql_query (&Gbl.mysql,Query))
if ((mysql_res = mysql_store_result (&Gbl.mysql)) != NULL)
{
/***** Result should have a unique row *****/
if (mysql_num_rows (mysql_res) == 1)
{
/***** Get row *****/
row = mysql_fetch_row (mysql_res);
/***** Get summary *****/
Str_Copy (SummaryStr,row[0],
Ntf_MAX_BYTES_SUMMARY);
/***** Get content *****/
if (GetContent)
{
Length = strlen (row[1]);
if ((*ContentStr = (char *) malloc (Length + 1)) == NULL)
Lay_ShowErrorAndExit ("Error allocating memory for notification content.");
Str_Copy (*ContentStr,row[1],
Length);
}
}
mysql_free_result (mysql_res);
}
}
/*****************************************************************************/
/******************* Write parameter with code of game *********************/
/*****************************************************************************/
@ -1493,7 +1456,7 @@ void Gam_AskRemGame (void)
/***** Get parameters *****/
Gam_GetParamGameOrder ();
Grp_GetParamWhichGrps ();
Gbl.Games.CurrentPage = Pag_GetParamPagNum (Pag_SURVEYS);
Gbl.Games.CurrentPage = Pag_GetParamPagNum (Pag_GAMES);
/***** Get game code *****/
if ((Game.GamCod = Gam_GetParamGameCod ()) == -1L)
@ -1554,9 +1517,6 @@ void Gam_RemoveGame (void)
Game.GamCod);
DB_QueryDELETE (Query,"can not remove game");
/***** Mark possible notifications as removed *****/
Ntf_MarkNotifAsRemoved (Ntf_EVENT_SURVEY,Game.GamCod);
/***** Write message to show the change made *****/
sprintf (Gbl.Alert.Txt,Txt_Game_X_removed,
Game.Title);
@ -1578,7 +1538,7 @@ void Gam_AskResetGame (void)
/***** Get parameters *****/
Gam_GetParamGameOrder ();
Grp_GetParamWhichGrps ();
Gbl.Games.CurrentPage = Pag_GetParamPagNum (Pag_SURVEYS);
Gbl.Games.CurrentPage = Pag_GetParamPagNum (Pag_GAMES);
/***** Get game code *****/
if ((Game.GamCod = Gam_GetParamGameCod ()) == -1L)
@ -1764,7 +1724,7 @@ void Gam_RequestCreatOrEditGame (void)
/***** Get parameters *****/
Gam_GetParamGameOrder ();
Grp_GetParamWhichGrps ();
Gbl.Games.CurrentPage = Pag_GetParamPagNum (Pag_SURVEYS);
Gbl.Games.CurrentPage = Pag_GetParamPagNum (Pag_GAMES);
/***** Get the code of the game *****/
ItsANewGame = ((Game.GamCod = Gam_GetParamGameCod ()) == -1L);
@ -2061,7 +2021,6 @@ void Gam_RecFormGame (void)
struct Game NewGame;
bool ItsANewGame;
bool NewGameIsCorrect = true;
unsigned NumUsrsToBeNotifiedByEMail;
char Txt[Cns_MAX_BYTES_TEXT + 1];
/***** Get the code of the game *****/
@ -2183,31 +2142,10 @@ void Gam_RecFormGame (void)
else
Gam_RequestCreatOrEditGame ();
/***** Notify by email about the new game *****/
if (NewGame.Scope == Sco_SCOPE_CRS) // Notify only the games for a course, not for a degree or global
if ((NumUsrsToBeNotifiedByEMail = Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_SURVEY,NewGame.GamCod)))
Gam_UpdateNumUsrsNotifiedByEMailAboutGame (NewGame.GamCod,NumUsrsToBeNotifiedByEMail);
/***** Show games again *****/
Gam_ListAllGames ();
}
/*****************************************************************************/
/************ Update number of users notified in table of games **************/
/*****************************************************************************/
static void Gam_UpdateNumUsrsNotifiedByEMailAboutGame (long GamCod,
unsigned NumUsrsToBeNotifiedByEMail)
{
char Query[256];
/***** Update number of users notified *****/
sprintf (Query,"UPDATE games SET NumNotif=NumNotif+%u"
" WHERE GamCod=%ld",
NumUsrsToBeNotifiedByEMail,GamCod);
DB_QueryUPDATE (Query,"can not update the number of notifications of a game");
}
/*****************************************************************************/
/**************************** Create a new game ******************************/
/*****************************************************************************/
@ -2552,13 +2490,16 @@ void Gam_RequestNewQuestion (void)
/***** Get other parameters *****/
Gam_GetParamGameOrder ();
Grp_GetParamWhichGrps ();
Gbl.Games.CurrentPage = Pag_GetParamPagNum (Pag_SURVEYS);
Gbl.Games.CurrentPage = Pag_GetParamPagNum (Pag_GAMES);
/***** Show form to create a new question in this game *****/
Tst_ShowFormAskSelectTstsForGame (Game.GamCod);
/***** Show current game *****/
Gam_ShowOneGame (Game.GamCod,true);
Gam_ShowOneGame (Game.GamCod,
true, // Show only this game
true, // List game questions
false);
}
/*****************************************************************************/
@ -3083,7 +3024,10 @@ void Gam_AddTstQuestionsToGame (void)
Gam_FreeListsSelectedQuestions ();
/***** Show current game *****/
Gam_ShowOneGame (Game.GamCod,true);
Gam_ShowOneGame (Game.GamCod,
true, // Show only this game
true, // List game questions
false);
}
/*****************************************************************************/
@ -3274,7 +3218,10 @@ void Gam_RequestRemoveQst (void)
Btn_REMOVE_BUTTON,Txt_Remove_question);
/***** Show current game *****/
Gam_ShowOneGame (Game.GamCod,true);
Gam_ShowOneGame (Game.GamCod,
true, // Show only this game
true, // List game questions
false);
}
/*****************************************************************************/
@ -3323,7 +3270,10 @@ void Gam_RemoveQst (void)
Ale_ShowAlert (Ale_SUCCESS,Gbl.Alert.Txt);
/***** Show current game *****/
Gam_ShowOneGame (Game.GamCod,true);
Gam_ShowOneGame (Game.GamCod,
true, // Show only this game
true, // List game questions
false);
}
/*****************************************************************************/
@ -3365,7 +3315,10 @@ void Gam_MoveUpQst (void)
}
/***** Show current game *****/
Gam_ShowOneGame (Game.GamCod,true);
Gam_ShowOneGame (Game.GamCod,
true, // Show only this game
true, // List game questions
false);
}
/*****************************************************************************/
@ -3411,7 +3364,10 @@ void Gam_MoveDownQst (void)
}
/***** Show current game *****/
Gam_ShowOneGame (Game.GamCod,true);
Gam_ShowOneGame (Game.GamCod,
true, // Show only this game
true, // List game questions
false);
}
/*****************************************************************************/
@ -3476,14 +3432,40 @@ void Gam_PlayGame (void)
/***** Get parameters *****/
Gam_GetParamGameOrder ();
Grp_GetParamWhichGrps ();
Gbl.Games.CurrentPage = Pag_GetParamPagNum (Pag_SURVEYS);
Gbl.Games.CurrentPage = Pag_GetParamPagNum (Pag_GAMES);
/***** Get game code *****/
if ((Game.GamCod = Gam_GetParamGameCod ()) == -1L)
Lay_ShowErrorAndExit ("Code of game is missing.");
/***** Show game *****/
Gam_ShowOneGame (Game.GamCod,true);
Gam_ShowOneGame (Game.GamCod,
true, // Show only this game
false,
true); // Put button to start
}
/*****************************************************************************/
/********************* Put a big button to start game ************************/
/*****************************************************************************/
static void Gam_PutBigButtonToStartGame (void)
{
extern const char *Txt_Play;
/***** Start form *****/
Act_FormStart (ActPlyGam);
Gam_PutParams ();
/***** Put icon with link *****/
Act_LinkFormSubmit (Txt_Play,NULL,NULL);
fprintf (Gbl.F.Out,"<img src=\"%s/play64x64.png\" alt=\"%s\" title=\"%s\""
" class=\"CONTEXT_OPT ICO_HIGHLIGHT ICO64x64\" />",
Gbl.Prefs.IconsURL,Txt_Play,Txt_Play);
fprintf (Gbl.F.Out,"</a>");
/***** End form *****/
Act_FormEnd ();
}
/*****************************************************************************/
@ -3514,7 +3496,10 @@ void Gam_ReceiveGameAnswers (void)
}
/***** Show current game *****/
Gam_ShowOneGame (Game.GamCod,true);
Gam_ShowOneGame (Game.GamCod,
true, // Show only this game
true, // List game questions
false);
}
/*****************************************************************************/
@ -3736,7 +3721,7 @@ unsigned Gam_GetNumCoursesWithCrsGames (Sco_Scope_t Scope)
// Returns the number of games for courses
// in this location (all the platform, current degree or current course)
unsigned Gam_GetNumCrsGames (Sco_Scope_t Scope,unsigned *NumNotif)
unsigned Gam_GetNumCrsGames (Sco_Scope_t Scope)
{
extern const char *Sco_ScopeDB[Sco_NUM_SCOPES];
char Query[1024];
@ -3748,13 +3733,13 @@ unsigned Gam_GetNumCrsGames (Sco_Scope_t Scope,unsigned *NumNotif)
switch (Scope)
{
case Sco_SCOPE_SYS:
sprintf (Query,"SELECT COUNT(*),SUM(NumNotif)"
sprintf (Query,"SELECT COUNT(*)"
" FROM games"
" WHERE Scope='%s'",
Sco_ScopeDB[Sco_SCOPE_CRS]);
break;
case Sco_SCOPE_CTY:
sprintf (Query,"SELECT COUNT(*),SUM(games.NumNotif)"
sprintf (Query,"SELECT COUNT(*)"
" FROM institutions,centres,degrees,courses,games"
" WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
@ -3766,7 +3751,7 @@ unsigned Gam_GetNumCrsGames (Sco_Scope_t Scope,unsigned *NumNotif)
Sco_ScopeDB[Sco_SCOPE_CRS]);
break;
case Sco_SCOPE_INS:
sprintf (Query,"SELECT COUNT(*),SUM(games.NumNotif)"
sprintf (Query,"SELECT COUNT(*)"
" FROM centres,degrees,courses,games"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
@ -3777,7 +3762,7 @@ unsigned Gam_GetNumCrsGames (Sco_Scope_t Scope,unsigned *NumNotif)
Sco_ScopeDB[Sco_SCOPE_CRS]);
break;
case Sco_SCOPE_CTR:
sprintf (Query,"SELECT COUNT(*),SUM(games.NumNotif)"
sprintf (Query,"SELECT COUNT(*)"
" FROM degrees,courses,games"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
@ -3787,7 +3772,7 @@ unsigned Gam_GetNumCrsGames (Sco_Scope_t Scope,unsigned *NumNotif)
Sco_ScopeDB[Sco_SCOPE_CRS]);
break;
case Sco_SCOPE_DEG:
sprintf (Query,"SELECT COUNT(*),SUM(games.NumNotif)"
sprintf (Query,"SELECT COUNT(*)"
" FROM courses,games"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=games.Cod"
@ -3796,7 +3781,7 @@ unsigned Gam_GetNumCrsGames (Sco_Scope_t Scope,unsigned *NumNotif)
Sco_ScopeDB[Sco_SCOPE_CRS]);
break;
case Sco_SCOPE_CRS:
sprintf (Query,"SELECT COUNT(*),SUM(NumNotif)"
sprintf (Query,"SELECT COUNT(*)"
" FROM games"
" WHERE games.Scope='%s'"
" AND CrsCod=%ld",
@ -3814,15 +3799,6 @@ unsigned Gam_GetNumCrsGames (Sco_Scope_t Scope,unsigned *NumNotif)
if (sscanf (row[0],"%u",&NumGames) != 1)
Lay_ShowErrorAndExit ("Error when getting number of games.");
/***** Get number of notifications by email *****/
if (row[1])
{
if (sscanf (row[1],"%u",NumNotif) != 1)
Lay_ShowErrorAndExit ("Error when getting number of notifications of games.");
}
else
*NumNotif = 0;
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);

View File

@ -27,7 +27,6 @@
/********************************* Headers ***********************************/
/*****************************************************************************/
#include "swad_notification.h"
#include "swad_scope.h"
/*****************************************************************************/
@ -96,9 +95,7 @@ void Gam_GetListGames (void);
void Gam_GetDataOfGameByCod (struct Game *Gam);
void Gam_GetDataOfGameByFolder (struct Game *Gam);
void Gam_FreeListGames (void);
void Gam_GetNotifGame (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
char **ContentStr,
long GamCod,bool GetContent);
void Gam_PutParamGameCod (long GamCod);
long Gam_GetParamGameCod (void);
void Gam_AskRemGame (void);
@ -130,7 +127,7 @@ void Gam_PlayGame (void);
void Gam_ReceiveGameAnswers (void);
unsigned Gam_GetNumCoursesWithCrsGames (Sco_Scope_t Scope);
unsigned Gam_GetNumCrsGames (Sco_Scope_t Scope,unsigned *NumNotif);
unsigned Gam_GetNumCrsGames (Sco_Scope_t Scope);
float Gam_GetNumQstsPerCrsGame (Sco_Scope_t Scope);
#endif

View File

@ -48,6 +48,7 @@ extern const Act_Action_t For_ActionsSeePstFor[For_NUM_TYPES_FORUM];
static const char *Pag_ParamNumPag[Pag_NUM_WHAT_PAGINATE] =
{
"NumPagAsg", // Pag_ASSIGNMENTS
"NumPagGam", // Pag_GAMES
"NumPagSvy", // Pag_SURVEYS
"NumPagAtt", // Pag_ATT_EVENTS
"NumPagThr", // Pag_THREADS_FORUM
@ -159,6 +160,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Asg_PutHiddenParamAsgOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,1);
Asg_PutHiddenParamAsgOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_SURVEYS:
Act_FormStartAnchor (ActSeeAllSvy,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,1);
@ -254,6 +261,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Asg_PutHiddenParamAsgOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,1);
Asg_PutHiddenParamAsgOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_SURVEYS:
Act_FormStartAnchor (ActSeeAllSvy,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,1);
@ -335,6 +348,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Asg_PutHiddenParamAsgOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->LeftPage);
Asg_PutHiddenParamAsgOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_SURVEYS:
Act_FormStartAnchor (ActSeeAllSvy,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->LeftPage);
@ -427,6 +446,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Asg_PutHiddenParamAsgOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,NumPage);
Asg_PutHiddenParamAsgOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_SURVEYS:
Act_FormStartAnchor (ActSeeAllSvy,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,NumPage);
@ -507,6 +532,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Asg_PutHiddenParamAsgOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->RightPage);
Asg_PutHiddenParamAsgOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_SURVEYS:
Act_FormStartAnchor (ActSeeAllSvy,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->RightPage);
@ -586,6 +617,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Asg_PutHiddenParamAsgOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->NumPags);
Asg_PutHiddenParamAsgOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_SURVEYS:
Act_FormStartAnchor (ActSeeAllSvy,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->NumPags);

View File

@ -37,18 +37,19 @@
/******************************** Public types *******************************/
/*****************************************************************************/
#define Pag_NUM_WHAT_PAGINATE 9
#define Pag_NUM_WHAT_PAGINATE 10
typedef enum
{
Pag_ASSIGNMENTS = 0,
Pag_SURVEYS = 1,
Pag_ATT_EVENTS = 2,
Pag_THREADS_FORUM = 3,
Pag_POSTS_FORUM = 4,
Pag_MESSAGES_RECEIVED = 5,
Pag_MESSAGES_SENT = 6,
Pag_MY_AGENDA = 7,
Pag_ANOTHER_AGENDA = 8,
Pag_GAMES = 1,
Pag_SURVEYS = 2,
Pag_ATT_EVENTS = 3,
Pag_THREADS_FORUM = 4,
Pag_POSTS_FORUM = 5,
Pag_MESSAGES_RECEIVED = 6,
Pag_MESSAGES_SENT = 7,
Pag_MY_AGENDA = 8,
Pag_ANOTHER_AGENDA = 9,
} Pag_WhatPaginate_t;
struct Pagination // Used for threads and messages pagination