",LayoutMainZone[Gbl.Prefs.Menu]);
/* Menu */
Mnu_WriteMenuThisTab ();
/* Start canvas: main zone for actions output */
fprintf (Gbl.F.Out,"
");
/* If it is mandatory to read any information about course */
if (Gbl.Crs.Info.ShowMsgMustBeRead)
Inf_WriteMsgYouMustReadInfo ();
/* Write title of the current action */
if (Gbl.Prefs.Menu == Mnu_MENU_VERTICAL &&
Act_GetIndexInMenu (Gbl.Action.Act) >= 0)
Lay_WriteTitleAction ();
Gbl.Layout.WritingHTMLStart = false;
Gbl.Layout.HTMLStartWritten = true;
/* Write message indicating number of clicks allowed before sending my photo */
Usr_InformAboutNumClicksBeforePhoto ();
}
/*****************************************************************************/
/*********************** Write status 204 No Content *************************/
/*****************************************************************************/
void Lay_WriteHTTPStatus204NoContent (void)
{
/***** The HTTP response is a code status *****/
/* Don't write HTML at all */
Gbl.Layout.HTMLStartWritten =
Gbl.Layout.DivsEndWritten =
Gbl.Layout.HTMLEndWritten = true;
/* Start HTTP response */
fprintf (stdout,"Content-type: text/plain; charset=windows-1252\n");
/* Return HTTP status code 204 No Content:
The server has successfully fulfilled the request
and there is no additional content to send
in the response payload body. */
fprintf (stdout,"Status: 204\r\n\r\n");
}
/*****************************************************************************/
/************************ Write the end of the page **************************/
/*****************************************************************************/
static void Lay_WriteEndOfPage (void)
{
if (!Gbl.Layout.DivsEndWritten)
{
/***** End of central part of main zone *****/
HTM_DIV_End (); // Canvas (main zone to output content of the current action)
HTM_DIV_End (); // Layout with horizontal or vertical menu
HTM_DIV_End (); // main_zone_central_container
/***** Write page footer *****/
if (Act_GetBrowserTab (Gbl.Action.Act) == Act_BRW_1ST_TAB)
Lay_WriteFootFromHTMLFile ();
/***** End of main zone and page *****/
HTM_DIV_End (); // main_zone_central
HTM_DIV_End (); // main_zone
HTM_DIV_End (); // whole_page_* (box that contains the whole page except the foot)
Gbl.Layout.DivsEndWritten = true;
}
}
/*****************************************************************************/
/************************* Write the title of the page ***********************/
/*****************************************************************************/
static void Lay_WritePageTitle (void)
{
extern const char *Txt_TAGLINE;
fprintf (Gbl.F.Out,"
");
if (Gbl.Params.GetMethod && Gbl.Hierarchy.Deg.DegCod > 0)
{
fprintf (Gbl.F.Out,"%s > %s",
Cfg_PLATFORM_SHORT_NAME,
Gbl.Hierarchy.Deg.ShrtName);
if (Gbl.Hierarchy.Level == Hie_CRS)
fprintf (Gbl.F.Out," > %s",
Gbl.Hierarchy.Crs.ShrtName);
}
else
fprintf (Gbl.F.Out,"%s: %s",
Cfg_PLATFORM_SHORT_NAME,Txt_TAGLINE);
fprintf (Gbl.F.Out,"\n");
}
/*****************************************************************************/
/************* Write script and meta to redirect to my language **************/
/*****************************************************************************/
static void Lay_WriteRedirToMyLangOnLogIn (void)
{
extern const char *Lan_STR_LANG_ID[1 + Lan_NUM_LANGUAGES];
fprintf (Gbl.F.Out,"
",
Cfg_URL_SWAD_CGI,
Lan_STR_LANG_ID[Gbl.Usrs.Me.UsrDat.Prefs.Language],
Act_GetActCod (ActLogInLan),
Gbl.Session.Id);
}
static void Lay_WriteRedirToMyLangOnViewUsrAgd (void)
{
extern const char *Lan_STR_LANG_ID[1 + Lan_NUM_LANGUAGES];
fprintf (Gbl.F.Out,"
",
Cfg_URL_SWAD_CGI,
Lan_STR_LANG_ID[Gbl.Usrs.Me.UsrDat.Prefs.Language],
Act_GetActCod (ActLogInUsrAgdLan),
Gbl.Session.Id,
Gbl.Usrs.Other.UsrDat.Nickname);
}
/*****************************************************************************/
/************ Write some scripts depending on the current action *************/
/*****************************************************************************/
static void Lay_WriteScripts (void)
{
extern const char *Txt_DAYS_CAPS[7];
extern const char *Txt_DAYS_SMALL[7];
extern const char *Txt_Exam_of_X;
unsigned DayOfWeek; /* 0, 1, 2, 3, 4, 5, 6 */
unsigned NumHld;
unsigned NumExamAnnouncement; // Number of exam announcement
/***** General scripts for swad *****/
fprintf (Gbl.F.Out,"\n",
Cfg_URL_SWAD_PUBLIC,JS_FILE);
/***** Script for MathJax *****/
Lay_WriteScriptMathJax ();
/***** Write script with init function executed after loading page *****/
Lay_WriteScriptInit ();
/***** Write script to set parameters needed by AJAX *****/
Lay_WriteScriptParamsAJAX ();
/***** Prepare script to draw months *****/
if ((Gbl.Prefs.SideCols & Lay_SHOW_LEFT_COLUMN) || // Left column visible
(Gbl.Hierarchy.Ins.InsCod > 0 && // Institution selected
(Gbl.Action.Act == ActSeeCal || // Viewing calendar
Gbl.Action.Act == ActPrnCal || // Printing calendar
Gbl.Action.Act == ActChgCal1stDay))) // Changing first day
{
/***** Get list of holidays *****/
if (!Gbl.Hlds.LstIsRead)
{
Gbl.Hlds.SelectedOrder = Hld_ORDER_BY_START_DATE;
Hld_GetListHolidays ();
}
/***** Create list of calls for examination *****/
Exa_CreateListDatesOfExamAnnouncements ();
/***** Write script to initialize variables used to draw months *****/
fprintf (Gbl.F.Out,"\n");
/***** Free list of dates of exam announcements *****/
Exa_FreeListExamAnnouncements ();
}
/***** Scripts depending on action *****/
switch (Gbl.Action.Act)
{
/***** Script to print world map *****/
case ActSeeCty:
Cty_WriteScriptGoogleGeochart ();
break;
/***** Script for uploading files using Dropzone.js (http://www.dropzonejs.com/) *****/
// The public directory dropzone must hold:
// dropzone.js
// css/dropzone.css
// images/spritemap@2x.png
// images/spritemap.png
case ActFrmCreDocIns: // Brw_ADMI_DOC_INS
case ActFrmCreShaIns: // Brw_ADMI_SHR_INS
case ActFrmCreDocCtr: // Brw_ADMI_DOC_CTR
case ActFrmCreShaCtr: // Brw_ADMI_SHR_CTR
case ActFrmCreDocDeg: // Brw_ADMI_DOC_DEG
case ActFrmCreShaDeg: // Brw_ADMI_SHR_DEG
case ActFrmCreDocCrs: // Brw_ADMI_DOC_CRS
case ActFrmCreDocGrp: // Brw_ADMI_DOC_GRP
case ActFrmCreTchCrs: // Brw_ADMI_TCH_CRS
case ActFrmCreTchGrp: // Brw_ADMI_TCH_GRP
case ActFrmCreShaCrs: // Brw_ADMI_SHR_CRS
case ActFrmCreShaGrp: // Brw_ADMI_SHR_GRP
case ActFrmCreAsgUsr: // Brw_ADMI_ASG_USR
case ActFrmCreAsgCrs: // Brw_ADMI_ASG_CRS
case ActFrmCreWrkUsr: // Brw_ADMI_WRK_USR
case ActFrmCreWrkCrs: // Brw_ADMI_WRK_CRS
case ActFrmCreDocPrj: // Brw_ADMI_DOC_PRJ
case ActFrmCreAssPrj: // Brw_ADMI_ASS_PRJ
case ActFrmCreMrkCrs: // Brw_ADMI_MRK_CRS
case ActFrmCreMrkGrp: // Brw_ADMI_MRK_GRP
case ActFrmCreBrf: // Brw_ADMI_BRF_USR
// Use charset="windows-1252" to force error messages in windows-1252 (default is UTF-8)
fprintf (Gbl.F.Out,"\n",
Cfg_URL_SWAD_PUBLIC);
Lay_WriteScriptCustomDropzone ();
break;
case ActReqAccGbl:
case ActSeeAccGbl:
case ActReqAccCrs:
case ActSeeAccCrs:
case ActSeeAllStaCrs:
fprintf (Gbl.F.Out,"\n",
Cfg_URL_SWAD_PUBLIC);
break;
default:
break;
}
/***** Script for Google Analytics *****/
fprintf (Gbl.F.Out,"%s",Cfg_GOOGLE_ANALYTICS);
}
// Change page title
//function changeTitle(title) {
// document.title = title;
//}
/*****************************************************************************/
/************ Write some scripts depending on the current action *************/
/*****************************************************************************/
static void Lay_WriteScriptMathJax (void)
{
// MathJax configuration
/*
fprintf (Gbl.F.Out,"");
*/
#ifdef Cfg_MATHJAX_LOCAL
// Use the local copy of MathJax
fprintf (Gbl.F.Out,"\n",
Cfg_URL_SWAD_PUBLIC);
#else
// Use the MathJax Content Delivery Network (CDN)
fprintf (Gbl.F.Out,"\n");
#endif
}
/*****************************************************************************/
/******* Write script with init function executed after loading page *********/
/*****************************************************************************/
static void Lay_WriteScriptInit (void)
{
extern const char *Lan_STR_LANG_ID[1 + Lan_NUM_LANGUAGES];
bool RefreshConnected;
bool RefreshNewTimeline = false;
bool RefreshMatchStd = false;
bool RefreshMatchTch = false;
bool RefreshLastClicks = false;
RefreshConnected = Act_GetBrowserTab (Gbl.Action.Act) == Act_BRW_1ST_TAB &&
(Gbl.Prefs.SideCols & Lay_SHOW_RIGHT_COLUMN); // Right column visible
switch (Gbl.Action.Act)
{
case ActSeeSocTmlGbl:
case ActRcvSocPstGbl:
case ActRcvSocComGbl:
case ActReqRemSocPubGbl:
case ActRemSocPubGbl:
case ActReqRemSocComGbl:
case ActRemSocComGbl:
RefreshNewTimeline = true;
break;
case ActJoiMch:
case ActAnsMchQstStd:
RefreshMatchStd = true;
break;
case ActNewMch:
case ActResMch:
case ActBckMch:
case ActPlyPauMch:
case ActFwdMch:
case ActChgNumColMch:
case ActChgVisResMchQst:
RefreshMatchTch = true;
break;
case ActLstClk:
RefreshLastClicks = true;
break;
default:
break;
}
fprintf (Gbl.F.Out,"\n");
}
/*****************************************************************************/
/************** Write script to set parameters needed by AJAX ****************/
/*****************************************************************************/
static void Lay_WriteScriptParamsAJAX (void)
{
/***** Start script *****/
fprintf (Gbl.F.Out,"\n");
}
/*****************************************************************************/
/******* Write script to customize upload of files using Dropzone.js *********/
/*****************************************************************************/
// More info: http://www.dropzonejs.com/
static void Lay_WriteScriptCustomDropzone (void)
{
// "myAwesomeDropzone" is the camelized version of the HTML element's ID
// Add a line "forceFallback: true,\n" to test classic upload
fprintf (Gbl.F.Out,"\n",
(unsigned long) (Fil_MAX_FILE_SIZE / (1024ULL * 1024ULL) - 1));
}
/*****************************************************************************/
/************************ Write top heading of the page **********************/
/*****************************************************************************/
static void Lay_WritePageTopHeading (void)
{
extern const char *The_ClassTagline[The_NUM_THEMES];
extern const char *Txt_System;
extern const char *Txt_TAGLINE;
extern const char *Txt_TAGLINE_BR;
const char *ClassHeadRow1[The_NUM_THEMES] =
{
"HEAD_ROW_1_WHITE", // The_THEME_WHITE
"HEAD_ROW_1_GREY", // The_THEME_GREY
"HEAD_ROW_1_PURPLE", // The_THEME_PURPLE
"HEAD_ROW_1_BLUE", // The_THEME_BLUE
"HEAD_ROW_1_YELLOW", // The_THEME_YELLOW
"HEAD_ROW_1_PINK", // The_THEME_PINK
};
const char *ClassHeadRow2[The_NUM_THEMES] =
{
"HEAD_ROW_2_WHITE", // The_THEME_WHITE
"HEAD_ROW_2_GREY", // The_THEME_GREY
"HEAD_ROW_2_PURPLE", // The_THEME_PURPLE
"HEAD_ROW_2_BLUE", // The_THEME_BLUE
"HEAD_ROW_2_YELLOW", // The_THEME_YELLOW
"HEAD_ROW_2_PINK", // The_THEME_PINK
};
/***** Start header *****/
fprintf (Gbl.F.Out,"