swad-core/swad_global.c

496 lines
18 KiB
C
Raw Normal View History

2014-12-01 23:55:08 +01:00
// swad_global.c: global variables
/*
SWAD (Shared Workspace At a Distance),
is a web platform developed at the University of Granada (Spain),
and used to support university teaching.
This file is part of SWAD core.
2017-01-13 01:51:23 +01:00
Copyright (C) 1999-2017 Antonio Ca<EFBFBD>as Vargas
2014-12-01 23:55:08 +01:00
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*****************************************************************************/
/********************************* Headers ***********************************/
/*****************************************************************************/
#include <linux/stddef.h> // For NULL
2016-06-04 14:21:01 +02:00
#include <locale.h> // For setlocale
2014-12-01 23:55:08 +01:00
#include <stdlib.h> // For exit, system, malloc, calloc, free, etc
#include <string.h> // For string functions
#include <sys/time.h> // For gettimeofday
#include <sys/types.h> // For getpid
#include <unistd.h> // For getpid
#include "swad_action.h"
2015-11-21 20:23:28 +01:00
#include "swad_calendar.h"
2014-12-01 23:55:08 +01:00
#include "swad_config.h"
#include "swad_constant.h"
#include "swad_exam.h"
#include "swad_global.h"
#include "swad_icon.h"
2016-03-30 10:50:31 +02:00
#include "swad_parameter.h"
2014-12-01 23:55:08 +01:00
#include "swad_preference.h"
#include "swad_theme.h"
#include "swad_web_service.h"
/*****************************************************************************/
/****************************** Public variables *****************************/
/*****************************************************************************/
struct Globals Gbl; // All the global parameters and variables must be in this structure
/*****************************************************************************/
/************** External global variables from others modules ****************/
/*****************************************************************************/
/*****************************************************************************/
/***************************** Private constants *****************************/
/*****************************************************************************/
/*****************************************************************************/
/******************************* Private types *******************************/
/*****************************************************************************/
/*****************************************************************************/
/***************************** Private variables *****************************/
/*****************************************************************************/
/*****************************************************************************/
/***************************** Private prototypes ****************************/
/*****************************************************************************/
/*****************************************************************************/
/************* Intialize globals variables when starting program *************/
/*****************************************************************************/
void Gbl_InitializeGlobals (void)
{
extern const char *The_ThemeId[The_NUM_THEMES];
extern const char *Ico_IconSetId[Ico_NUM_ICON_SETS];
extern const unsigned Txt_Current_CGI_SWAD_Language;
2016-06-23 13:51:37 +02:00
Rol_Role_t Role;
2014-12-01 23:55:08 +01:00
Txt_Language_t Lan;
2016-06-04 14:21:01 +02:00
Gbl.Layout.WritingHTMLStart =
Gbl.Layout.HTMLStartWritten =
Gbl.Layout.DivsEndWritten =
Gbl.Layout.HTMLEndWritten = false;
if (!setlocale (LC_ALL,"es_ES.utf8")) // TODO: this should be internationalized!!!!!!!
2016-06-04 13:25:14 +02:00
exit (1);
2014-12-01 23:55:08 +01:00
gettimeofday (&Gbl.tvStart, &Gbl.tz);
2015-10-27 19:00:21 +01:00
Dat_GetStartExecutionTimeUTC ();
2014-12-01 23:55:08 +01:00
Dat_GetAndConvertCurrentDateTime ();
Gbl.Config.DatabasePassword[0] = '\0';
Gbl.Config.SMTPPassword[0] = '\0';
Gbl.TimeGenerationInMicroseconds = Gbl.TimeSendInMicroseconds = 0L;
Gbl.PID = getpid ();
Sta_GetRemoteAddr ();
2016-04-04 14:48:12 +02:00
Cry_CreateUniqueNameEncrypted (Gbl.UniqueNameEncrypted);
2014-12-01 23:55:08 +01:00
2015-10-27 19:00:21 +01:00
srand ((unsigned int) Gbl.StartExecutionTimeUTC); // Initialize seed for rand()
2014-12-01 23:55:08 +01:00
Gbl.WebService.IsWebService = false;
2016-03-30 14:25:04 +02:00
Gbl.Params.ContentLength = 0;
Gbl.Params.QueryString = NULL;
Gbl.Params.List = NULL;
Gbl.Params.GetMethod = false;
2016-03-30 10:50:31 +02:00
2014-12-01 23:55:08 +01:00
Gbl.F.Out = stdout;
Gbl.F.Tmp = NULL;
Gbl.F.XML = NULL;
2016-10-03 14:12:01 +02:00
Gbl.F.Rep = NULL; // Report
2014-12-01 23:55:08 +01:00
2017-05-09 11:39:08 +02:00
Gbl.Form.Num = -1; // Number of form. It's increased by 1 at the begin of each form
Gbl.Form.Inside = false; // Set to true inside a form to avoid nested forms
2014-12-01 23:55:08 +01:00
2017-05-09 11:39:08 +02:00
Gbl.AlertType = Lay_NONE; // Used to show alert in a posteriori function
2014-12-01 23:55:08 +01:00
Gbl.DB.DatabaseIsOpen = false;
Gbl.DB.LockedTables = false;
Gbl.HiddenParamsInsertedIntoDB = false;
2017-05-04 11:03:44 +02:00
Gbl.Prefs.Language = Txt_Current_CGI_SWAD_Language;
2015-11-21 20:23:28 +01:00
Gbl.Prefs.FirstDayOfWeek = Cal_FIRST_DAY_OF_WEEK_DEFAULT; // Default first day of week
2017-05-04 11:03:44 +02:00
Gbl.Prefs.DateFormat = Dat_FORMAT_DEFAULT; // Default date format
Gbl.Prefs.Menu = Mnu_MENU_DEFAULT; // Default menu
Gbl.Prefs.Theme = The_THEME_DEFAULT; // Default theme
Gbl.Prefs.IconSet = Ico_ICON_SET_DEFAULT; // Default icon set
2014-12-01 23:55:08 +01:00
sprintf (Gbl.Prefs.IconsURL,"%s/%s",
2016-07-08 12:43:48 +02:00
Cfg_URL_SWAD_PUBLIC,Cfg_FOLDER_PUBLIC_ICON);
2014-12-01 23:55:08 +01:00
sprintf (Gbl.Prefs.PathTheme,"%s/%s/%s",
Gbl.Prefs.IconsURL,
Cfg_ICON_FOLDER_THEMES,
The_ThemeId[Gbl.Prefs.Theme]);
sprintf (Gbl.Prefs.PathIconSet,"%s/%s/%s",
Gbl.Prefs.IconsURL,Cfg_ICON_FOLDER_ICON_SETS,
Ico_IconSetId[Gbl.Prefs.IconSet]);
Gbl.Session.NumSessions = 0;
Gbl.Session.IsOpen = false;
Gbl.Session.HasBeenDisconnected = false;
Gbl.Usrs.Me.UsrIdLogin[0] = '\0';
Gbl.Usrs.Me.LoginPlainPassword[0] = '\0';
Gbl.Usrs.Me.UsrDat.UsrCod = -1L;
Gbl.Usrs.Me.UsrDat.UsrIDNickOrEmail[0] = '\0';
Usr_UsrDataConstructor (&Gbl.Usrs.Me.UsrDat);
Usr_ResetMyLastData ();
Gbl.Session.Id[0] = '\0';
Gbl.Usrs.Me.Logged = false;
Gbl.Usrs.Me.AvailableRoles = 0;
Gbl.Usrs.Me.RoleFromSession =
Gbl.Usrs.Me.LoggedRole =
Gbl.Usrs.Me.LoggedRoleBeforeCloseSession =
2015-04-07 21:44:24 +02:00
Gbl.Usrs.Me.MaxRole = Rol_UNKNOWN;
2016-11-13 12:35:01 +01:00
Gbl.Usrs.Me.RoleHasChanged = false;
2015-01-20 20:03:38 +01:00
Gbl.Usrs.Me.IBelongToCurrentIns = false;
Gbl.Usrs.Me.IBelongToCurrentCtr = false;
Gbl.Usrs.Me.IBelongToCurrentDeg = false;
2014-12-01 23:55:08 +01:00
Gbl.Usrs.Me.IBelongToCurrentCrs = false;
Gbl.Usrs.Me.MyPhotoExists = false;
Gbl.Usrs.Me.NumAccWithoutPhoto = 0;
Gbl.Usrs.Me.TimeLastAccToThisFileBrowser = LONG_MAX; // Initialized to a big value, so by default files are not shown as recent or new
2016-10-28 10:03:37 +02:00
Gbl.Usrs.Me.MyInss.Filled = false;
Gbl.Usrs.Me.MyCtrs.Filled = false;
Gbl.Usrs.Me.MyDegs.Filled = false;
Gbl.Usrs.Me.MyCrss.Filled = false;
Gbl.Usrs.Me.MyCrss.Num = 0;
2016-11-16 23:19:52 +01:00
Gbl.Usrs.Me.ConfirmEmailJustSent = false; // An email to confirm my email address has not just been sent
2014-12-01 23:55:08 +01:00
Gbl.Usrs.Other.UsrDat.UsrCod = -1L;
Gbl.Usrs.Other.UsrDat.UsrIDNickOrEmail[0] = '\0';
Usr_UsrDataConstructor (&Gbl.Usrs.Other.UsrDat);
2016-01-17 15:10:54 +01:00
Gbl.Action.Act = ActUnk;
Gbl.Action.UsesAJAX = false;
2017-02-05 22:23:41 +01:00
Gbl.Action.IsAJAXAutoRefresh = false;
2016-01-17 15:10:54 +01:00
Gbl.Action.Tab = TabUnk;
2014-12-01 23:55:08 +01:00
2016-06-23 13:51:37 +02:00
for (Role = (Rol_Role_t) 0;
Role < Rol_NUM_ROLES;
Role++)
{
Gbl.Usrs.LstUsrs[Role].Lst = NULL;
Gbl.Usrs.LstUsrs[Role].NumUsrs = 0;
}
2014-12-01 23:55:08 +01:00
2017-01-15 18:02:52 +01:00
Gbl.ExamAnns.NumExaAnns = 0;
Gbl.ExamAnns.Lst = NULL;
Gbl.ExamAnns.HighlightExaCod = -1L;
Gbl.ExamAnns.HighlightDate[0] = '\0'; // No exam announcements highlighted
2014-12-01 23:55:08 +01:00
2015-03-03 19:21:59 +01:00
Gbl.Usrs.Select.All =
Gbl.Usrs.Select.Std =
Gbl.Usrs.Select.Tch =
Gbl.Usrs.ListOtherRecipients = NULL;
2014-12-01 23:55:08 +01:00
Gbl.Msg.Subject[0] = '\0';
Gbl.Msg.ShowOnlyUnreadMsgs = false;
Gbl.Msg.ExpandedMsgCod = -1L;
Gbl.CurrentCty.Cty.CtyCod = -1L;
Gbl.CurrentIns.Ins.InsCod = -1L; // Unknown institution
2016-10-28 10:03:37 +02:00
Gbl.CurrentIns.Ins.ShrtName[0] = '\0';
2014-12-01 23:55:08 +01:00
Gbl.CurrentIns.Ins.FullName[0] = '\0';
Gbl.CurrentIns.Ins.WWW[0] = '\0';
Gbl.CurrentIns.Ins.NumCtrs = Gbl.CurrentIns.Ins.NumDpts = Gbl.CurrentIns.Ins.NumDegs = 0;
2015-12-14 12:13:41 +01:00
Gbl.CurrentIns.Ins.NumUsrs = 0;
2014-12-01 23:55:08 +01:00
Gbl.CurrentCtr.Ctr.CtrCod = -1L;
Gbl.CurrentCtr.Ctr.InsCod = -1L;
Gbl.CurrentCtr.Ctr.PlcCod = -1L;
2016-10-28 10:03:37 +02:00
Gbl.CurrentCtr.Ctr.ShrtName[0] = '\0';
2014-12-01 23:55:08 +01:00
Gbl.CurrentCtr.Ctr.FullName[0] = '\0';
2016-10-20 00:57:00 +02:00
Gbl.CurrentCtr.Ctr.Degs.Num = 0;
Gbl.CurrentCtr.Ctr.Degs.Lst = NULL;
2014-12-01 23:55:08 +01:00
Gbl.CurrentDegTyp.DegTyp.DegTypCod = -1L;
Gbl.CurrentDegTyp.DegTyp.DegTypName[0] = '\0';
Gbl.CurrentDeg.Deg.DegCod = -1L;
2016-10-28 10:03:37 +02:00
Gbl.CurrentDeg.Deg.ShrtName[0] = Gbl.CurrentDeg.Deg.FullName[0] = '\0';
2014-12-01 23:55:08 +01:00
Gbl.CurrentCrs.Crs.CrsCod = -1L;
2016-10-28 10:03:37 +02:00
Gbl.CurrentCrs.Crs.ShrtName[0] = Gbl.CurrentCrs.Crs.FullName[0] = '\0';
2014-12-01 23:55:08 +01:00
Gbl.CurrentCrs.Info.ShowMsgMustBeRead = 0;
Gbl.CurrentCrs.Notices.HighlightNotCod = -1L; // No notice highlighted
Gbl.Inss.Num = 0;
Gbl.Inss.Lst = NULL;
2017-01-29 12:42:19 +01:00
Gbl.Inss.SelectedOrder = Ins_ORDER_DEFAULT;
2014-12-01 23:55:08 +01:00
Gbl.Inss.EditingIns.InsCod = -1L;
Gbl.Inss.EditingIns.CtyCod = -1L;
2016-10-28 10:03:37 +02:00
Gbl.Inss.EditingIns.ShrtName[0] = '\0';
2014-12-01 23:55:08 +01:00
Gbl.Inss.EditingIns.FullName[0] = '\0';
Gbl.Inss.EditingIns.WWW[0] = '\0';
Gbl.Inss.EditingIns.NumCtrs = Gbl.Inss.EditingIns.NumDpts = Gbl.Inss.EditingIns.NumDegs = 0;
2015-12-14 12:13:41 +01:00
Gbl.Inss.EditingIns.NumUsrs = 0;
2014-12-01 23:55:08 +01:00
Gbl.Ctys.Num = 0;
Gbl.Ctys.Lst = NULL;
2017-01-29 12:42:19 +01:00
Gbl.Ctys.SelectedOrder = Cty_ORDER_DEFAULT;
2014-12-01 23:55:08 +01:00
Gbl.Ctys.EditingCty.CtyCod = -1L;
2015-12-07 23:13:08 +01:00
for (Lan = (Txt_Language_t) 1;
Lan <= Txt_NUM_LANGUAGES;
2014-12-01 23:55:08 +01:00
Lan++)
Gbl.Ctys.EditingCty.Name[Lan][0] = '\0';
Gbl.Ctrs.Num = 0;
Gbl.Ctrs.Lst = NULL;
2017-01-29 12:42:19 +01:00
Gbl.Ctrs.SelectedOrder = Ctr_ORDER_DEFAULT;
2014-12-01 23:55:08 +01:00
Gbl.Ctrs.EditingCtr.CtrCod = -1L;
Gbl.Ctrs.EditingCtr.InsCod = -1L;
Gbl.Ctrs.EditingCtr.CtrCod = -1L;
2016-10-28 10:03:37 +02:00
Gbl.Ctrs.EditingCtr.ShrtName[0] = '\0';
2014-12-01 23:55:08 +01:00
Gbl.Ctrs.EditingCtr.FullName[0] = '\0';
Gbl.Ctrs.EditingCtr.WWW[0] = '\0';
Gbl.Dpts.Num = 0;
Gbl.Dpts.Lst = NULL;
2017-01-29 12:42:19 +01:00
Gbl.Dpts.SelectedOrder = Dpt_ORDER_DEFAULT;
2014-12-01 23:55:08 +01:00
Gbl.Dpts.EditingDpt.DptCod = -1L;
2016-10-28 10:03:37 +02:00
Gbl.Dpts.EditingDpt.ShrtName[0] = '\0';
2014-12-01 23:55:08 +01:00
Gbl.Dpts.EditingDpt.FullName[0] = '\0';
Gbl.Dpts.EditingDpt.WWW[0] = '\0';
Gbl.Plcs.Num = 0;
Gbl.Plcs.Lst = NULL;
2017-01-29 12:42:19 +01:00
Gbl.Plcs.SelectedOrder = Plc_ORDER_DEFAULT;
2014-12-01 23:55:08 +01:00
Gbl.Plcs.EditingPlc.PlcCod = -1L;
2016-10-28 10:03:37 +02:00
Gbl.Plcs.EditingPlc.ShrtName[0] = '\0';
2014-12-01 23:55:08 +01:00
Gbl.Plcs.EditingPlc.FullName[0] = '\0';
Gbl.Hlds.LstIsRead = false; // List is not read
Gbl.Hlds.Num = 0;
Gbl.Hlds.Lst = NULL;
2017-01-29 12:42:19 +01:00
Gbl.Hlds.SelectedOrder = Hld_DEFAULT_ORDER_TYPE;
2014-12-01 23:55:08 +01:00
Gbl.Hlds.EditingHld.HldCod = -1L;
Gbl.Hlds.EditingHld.PlcCod = -1L;
Gbl.Hlds.EditingHld.HldTyp = Hld_HOLIDAY;
Gbl.Hlds.EditingHld.StartDate.Year = Gbl.Hlds.EditingHld.EndDate.Year = Gbl.Now.Date.Year;
Gbl.Hlds.EditingHld.StartDate.Month = Gbl.Hlds.EditingHld.EndDate.Month = Gbl.Now.Date.Month;
Gbl.Hlds.EditingHld.StartDate.Day = Gbl.Hlds.EditingHld.EndDate.Day = Gbl.Now.Date.Day;
Gbl.Hlds.EditingHld.Name[0] = '\0';
Gbl.Degs.DegTypes.Num = 0;
Gbl.Degs.DegTypes.Lst = NULL;
2016-03-03 01:10:54 +01:00
Gbl.Degs.EditingDegTyp.DegTypCod = -1L;
Gbl.Degs.EditingDegTyp.DegTypName[0] = '\0';
2014-12-01 23:55:08 +01:00
2015-12-06 01:02:47 +01:00
Gbl.Degs.EditingDeg.DegCod = -1L;
2016-10-28 10:03:37 +02:00
Gbl.Degs.EditingDeg.ShrtName[0] = '\0';
2015-12-06 01:02:47 +01:00
Gbl.Degs.EditingDeg.FullName[0] = '\0';
Gbl.Degs.EditingDeg.WWW[0] = '\0';
Gbl.Degs.EditingDeg.LstCrss = NULL;
Gbl.Degs.EditingCrs.CrsCod = -1L;
Gbl.Degs.EditingCrs.DegCod = -1L;
Gbl.Degs.EditingCrs.Year = 0;
2016-10-28 10:03:37 +02:00
Gbl.Degs.EditingCrs.ShrtName[0] = '\0';
2015-12-06 01:02:47 +01:00
Gbl.Degs.EditingCrs.FullName[0] = '\0';
2014-12-01 23:55:08 +01:00
Gbl.CurrentCrs.Grps.NumGrps = 0;
2017-01-29 12:42:19 +01:00
Gbl.CurrentCrs.Grps.WhichGrps = Grp_WHICH_GROUPS_DEFAULT;
2014-12-01 23:55:08 +01:00
Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes = NULL;
Gbl.CurrentCrs.Grps.GrpTypes.Num = 0;
Gbl.CurrentCrs.Grps.GrpTypes.NestedCalls = 0;
Gbl.CurrentCrs.Grps.GrpTyp.GrpTypName[0] = '\0';
2017-03-30 11:20:06 +02:00
Gbl.CurrentCrs.Grps.GrpTyp.MandatoryEnrolment = true;
Gbl.CurrentCrs.Grps.GrpTyp.MultipleEnrolment = false;
2014-12-01 23:55:08 +01:00
Gbl.CurrentCrs.Grps.GrpTyp.MustBeOpened = false;
2015-10-26 20:02:07 +01:00
Gbl.CurrentCrs.Grps.GrpTyp.OpenTimeUTC = (time_t) 0;
2014-12-01 23:55:08 +01:00
Gbl.CurrentCrs.Grps.GrpCod = -1L; // -1L stands for the whole course
Gbl.CurrentCrs.Grps.GrpName[0] = '\0';
2017-01-29 12:42:19 +01:00
Gbl.CurrentCrs.Grps.MaxStudents = Grp_NUM_STUDENTS_NOT_LIMITED;
2014-12-01 23:55:08 +01:00
Gbl.CurrentCrs.Grps.Open = false;
2017-01-19 20:55:31 +01:00
Gbl.CurrentCrs.Grps.LstGrpsSel.GrpCods = NULL;
2014-12-01 23:55:08 +01:00
Gbl.CurrentCrs.Grps.LstGrpsSel.NumGrps = 0;
Gbl.CurrentCrs.Grps.LstGrpsSel.NestedCalls = 0;
Gbl.Usrs.ClassPhoto.AllGroups = true;
Gbl.CurrentCrs.Records.Field.Name[0] = '\0';
Gbl.CurrentCrs.Records.Field.NumLines = Rec_MIN_LINES_IN_EDITION_FIELD;
Gbl.CurrentCrs.Records.Field.Visibility = Rec_HIDDEN_FIELD;
Gbl.CurrentCrs.Records.LstFields.Lst = NULL;
Gbl.CurrentCrs.Records.LstFields.Num = 0;
Gbl.CurrentCrs.Records.LstFields.NestedCalls = 0;
2016-05-30 15:25:21 +02:00
Gbl.Syllabus.EditionIsActive = false;
Gbl.Syllabus.WhichSyllabus = Syl_DEFAULT_WHICH_SYLLABUS;
2014-12-01 23:55:08 +01:00
2017-01-29 12:42:19 +01:00
Gbl.Search.WhatToSearch = Sch_WHAT_TO_SEARCH_DEFAULT;
2014-12-01 23:55:08 +01:00
Gbl.Search.Str[0] = '\0';
2017-02-27 01:41:46 +01:00
Gbl.Search.LogSearch = false;
2014-12-01 23:55:08 +01:00
Gbl.Asgs.LstIsRead = false; // List is not read
Gbl.Asgs.Num = 0;
Gbl.Asgs.LstAsgCods = NULL;
2017-01-29 12:42:19 +01:00
Gbl.Asgs.SelectedOrder = Asg_ORDER_DEFAULT;
2014-12-01 23:55:08 +01:00
Gbl.AttEvents.LstIsRead = false; // List is not read
Gbl.AttEvents.Num = 0;
Gbl.AttEvents.Lst = NULL;
2017-01-29 12:42:19 +01:00
Gbl.AttEvents.SelectedOrder = Att_ORDER_DEFAULT;
2014-12-01 23:55:08 +01:00
Gbl.AttEvents.AttCod = -1L;
Gbl.Mails.Num = 0;
Gbl.Mails.Lst = NULL;
2017-01-29 12:42:19 +01:00
Gbl.Mails.SelectedOrder = Mai_ORDER_DEFAULT;
2014-12-01 23:55:08 +01:00
Gbl.Banners.Num = 0;
Gbl.Banners.Lst = NULL;
Gbl.Banners.EditingBan.BanCod = -1L;
2016-10-28 10:03:37 +02:00
Gbl.Banners.EditingBan.ShrtName[0] = '\0';
2014-12-01 23:55:08 +01:00
Gbl.Banners.EditingBan.FullName[0] = '\0';
Gbl.Banners.EditingBan.WWW[0] = '\0';
Gbl.Banners.BanCodClicked = 0L;
Gbl.Links.Num = 0;
Gbl.Links.Lst = NULL;
Gbl.Links.EditingLnk.LnkCod = -1L;
2016-10-28 10:03:37 +02:00
Gbl.Links.EditingLnk.ShrtName[0] = '\0';
2014-12-01 23:55:08 +01:00
Gbl.Links.EditingLnk.FullName[0] = '\0';
Gbl.Links.EditingLnk.WWW[0] = '\0';
Gbl.Usrs.Listing.RecsUsrs = Rec_RECORD_USERS_UNKNOWN;
2017-01-29 12:42:19 +01:00
Gbl.Usrs.Listing.RecsPerPag = Rec_DEF_RECORDS_PER_PAGE;
2014-12-01 23:55:08 +01:00
Gbl.Usrs.Listing.WithPhotos = true;
Gbl.Usrs.ClassPhoto.Cols = Usr_CLASS_PHOTO_COLS_DEF;
2016-04-06 22:27:33 +02:00
/* Statistics */
2017-01-29 21:41:08 +01:00
Gbl.Stat.ClicksGroupedBy = Sta_CLICKS_GROUPED_BY_DEFAULT;
Gbl.Stat.CountType = Sta_COUNT_TYPE_DEFAULT;
Gbl.Stat.Role = Sta_ROLE_DEFAULT;
Gbl.Stat.NumAction = Sta_NUM_ACTION_DEFAULT;
Gbl.Stat.RowsPerPage = Sta_DEF_ROWS_PER_PAGE;
Gbl.Stat.FigureType = Sta_FIGURE_TYPE_DEF;
2014-12-01 23:55:08 +01:00
2015-02-01 20:17:24 +01:00
Gbl.Scope.Current = Sco_SCOPE_CRS;
2014-12-01 23:55:08 +01:00
Gbl.Usrs.Connected.TimeToRefreshInMs = Con_MAX_TIME_TO_REFRESH_CONNECTED_IN_MS;
2016-04-06 22:27:33 +02:00
/* Tests */
2014-12-01 23:55:08 +01:00
Gbl.Test.Config.Pluggable = Tst_PLUGGABLE_UNKNOWN;
Gbl.Test.NumQsts = Tst_CONFIG_DEFAULT_DEF_QUESTIONS;
2016-11-21 13:15:08 +01:00
Gbl.Test.AllowTeachers = false; // Must the test result be saved?
2016-04-06 22:27:33 +02:00
Gbl.Test.AllAnsTypes = false;
2014-12-01 23:55:08 +01:00
Gbl.Test.ListAnsTypes[0] = '\0';
2016-04-06 22:27:33 +02:00
Gbl.Test.Tags.Num = 0;
Gbl.Test.Tags.All = false;
Gbl.Test.Tags.List = NULL;
2017-02-24 03:38:18 +01:00
/* Public activity */
Gbl.Social.WhichUsrs = Soc_DEFAULT_WHICH_USRS;
2016-04-06 22:27:33 +02:00
/* Forums */
2017-04-17 19:03:21 +02:00
Gbl.Forum.ForumSet = For_DEFAULT_FORUM_SET;
2017-04-18 19:55:56 +02:00
Gbl.Forum.ForumSelected.Type = For_FORUM_UNKNOWN;
2017-04-18 01:25:44 +02:00
Gbl.Forum.ForumSelected.Location = -1L;
Gbl.Forum.ForumSelected.ThrCod = -1L;
2017-04-18 09:55:25 +02:00
Gbl.Forum.ForumSelected.PstCod = -1L;
2017-04-18 13:17:40 +02:00
Gbl.Forum.ThreadsOrder = For_DEFAULT_ORDER;
2014-12-01 23:55:08 +01:00
Gbl.Forum.ThreadToMove = -1L;
2016-04-06 22:27:33 +02:00
/* User nickname */
2014-12-01 23:55:08 +01:00
Gbl.Usrs.Me.UsrDat.Nickname[0] = '\0';
/* File browser */
2015-10-03 00:38:01 +02:00
Gbl.FileBrowser.Id = 0;
2015-01-26 12:39:48 +01:00
Gbl.FileBrowser.Type = Brw_UNKNOWN;
2014-12-01 23:55:08 +01:00
Gbl.FileBrowser.FileType = Brw_IS_UNKNOWN;
Gbl.FileBrowser.UploadingWithDropzone = false;
2017-03-21 00:57:11 +01:00
/* Agenda */
2017-03-21 14:36:22 +01:00
Gbl.Agenda.Past__FutureEvents = Agd_DEFAULT_PAST___EVENTS |
Agd_DEFAULT_FUTURE_EVENTS;
Gbl.Agenda.PrivatPublicEvents = Agd_DEFAULT_PRIVAT_EVENTS |
Agd_DEFAULT_PUBLIC_EVENTS;
Gbl.Agenda.HiddenVisiblEvents = Agd_DEFAULT_HIDDEN_EVENTS |
Agd_DEFAULT_VISIBL_EVENTS;
2017-03-21 00:57:11 +01:00
Gbl.Agenda.SelectedOrder = Agd_ORDER_DEFAULT;
2017-03-21 14:36:22 +01:00
Gbl.Agenda.AgdCodToEdit = -1L;
2017-03-21 00:57:11 +01:00
2014-12-01 23:55:08 +01:00
/* To alternate colors where listing rows */
Gbl.RowEvenOdd = 0;
2015-09-04 17:43:18 +02:00
Gbl.ColorRows[0] = "COLOR0"; // Darker
Gbl.ColorRows[1] = "COLOR1"; // Lighter
2014-12-01 23:55:08 +01:00
Gbl.WebService.Function = Svc_unknown;
2016-11-23 23:58:46 +01:00
Gbl.Layout.FrameNested = 0;
2014-12-01 23:55:08 +01:00
}
/*****************************************************************************/
/************* Free memory, close files, remove lock file, etc. **************/
/*****************************************************************************/
void Gbl_Cleanup (void)
{
2016-04-23 23:39:07 +02:00
extern struct Act_Actions Act_Actions[Act_NUM_ACTIONS];
2016-01-17 15:10:54 +01:00
if (!Gbl.Action.UsesAJAX &&
2014-12-01 23:55:08 +01:00
!Gbl.WebService.IsWebService &&
2017-02-05 22:23:41 +01:00
Act_Actions[Gbl.Action.Act].BrowserWindow == Act_THIS_WINDOW)
2014-12-01 23:55:08 +01:00
Ses_RemoveHiddenParFromThisSession ();
2016-09-22 01:28:31 +02:00
Usr_FreeMyCourses ();
2016-10-28 10:03:37 +02:00
Usr_FreeMyDegrees ();
Usr_FreeMyCentres ();
Usr_FreeMyInstits ();
Usr_FreeMyCountrs ();
2014-12-01 23:55:08 +01:00
Usr_UsrDataDestructor (&Gbl.Usrs.Me.UsrDat);
Usr_UsrDataDestructor (&Gbl.Usrs.Other.UsrDat);
Rec_FreeListFields ();
Grp_FreeListGrpTypesAndGrps ();
Grp_FreeListCodSelectedGrps ();
Crs_FreeListCoursesInDegree (&Gbl.Degs.EditingDeg);
2016-10-20 00:57:00 +02:00
Deg_FreeListDegs (&Gbl.CurrentCtr.Ctr.Degs);
2016-03-20 22:31:57 +01:00
DT_FreeListDegreeTypes ();
2014-12-01 23:55:08 +01:00
Ins_FreeListInstitutions ();
Ctr_FreeListCentres ();
Cty_FreeListCountries ();
Dpt_FreeListDepartments ();
Plc_FreeListPlaces ();
Hld_FreeListHolidays ();
Lnk_FreeListLinks ();
Plg_FreeListPlugins ();
2016-06-23 13:10:43 +02:00
Usr_FreeUsrsList (Rol__GUEST_);
Usr_FreeUsrsList (Rol_STUDENT);
Usr_FreeUsrsList (Rol_TEACHER);
Usr_FreeUsrsList (Rol_DEG_ADM);
2014-12-01 23:55:08 +01:00
Usr_FreeListOtherRecipients ();
2016-07-04 14:03:04 +02:00
Usr_FreeListsSelectedUsrsCods ();
2014-12-01 23:55:08 +01:00
Syl_FreeListItemsSyllabus ();
Tst_FreeTagsList ();
Exa_FreeMemExamAnnouncement ();
Exa_FreeListExamAnnouncements ();
if (Gbl.F.Tmp)
fclose (Gbl.F.Tmp);
Fil_CloseXMLFile ();
2016-10-03 14:12:01 +02:00
Fil_CloseReportFile ();
2016-03-30 16:33:08 +02:00
Par_FreeParams ();
2014-12-01 23:55:08 +01:00
}